Скрываем информацию про Apache2 и версию PHP

Если ктото из вас читал хоть какую-нибудь книгу или статью о взломе, тот знает, что первым делом злоумышленник пытается собрать максимально возможное количество информации о жертве, и только потом, учитывая эти данные, принимает решение про алгоритмы и инструменты для своего «черного дела».

Главным образом помогает взломщику информация о названии и версии того или иного сервиса в системе жертвы. В данном случае, я решил посмотреть какое же инфо мне готов предоставить о себе мой собственный web server.

Итак, смотрим (на приглашение сервера после успешного конекта надо ввести команду «HEAD / HTTP/1.0» и 2 раза Enter):

black@laptop ~ $ telnet my.web.server.com 80
Trying 123.123.123.123...
Connected to my.web.server.com.
Escape character is '^]'.
HEAD / HTTP/1.0

HTTP/1.1 200 OK
Date: Sun, 28 Feb 2010 09:56:18 GMT
Server: Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny6 with Suhosin-Patch
X-Powered-By: PHP/5.2.6-1+lenny6
Set-Cookie: SESSd41d8cd98f00b204e9800998ecf8427e=ffffebc04d32c2e035055dd5259b2d19; expires=Tue, 23 Mar 2010 13:29:38 GMT; path=/
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Last-Modified: Sun, 28 Feb 2010 09:56:18 GMT
Cache-Control: store, no-cache, must-revalidate
Cache-Control: post-check=0, pre-check=0
Vary: Accept-Encoding
Connection: close
Content-Type: text/html; charset=utf-8

Connection closed by foreign host.
black@laptop ~ $

Как видите, информации даже через чур много, и это настрораживает. Наш собственный web server радостно готов рассказать кому угодно не только о себе но и о названии/версии системы в которой он работает. Короче, предатель еще тот 😀 Ну чтож ….  вразумить его не делать это довольно легко!

Делаем следующее:

  • переходим под root:
black:~$ su -

Enter password:
  • открываем любимым редактором главный конфигурационный файл apache2:
black:~# vim /etc/apache2/apache2.conf

конфиг довольно большой …. листаем в самый конец

  • добавляем пару вот таких опций:
### Hide Version of Apache ###
ServerTokens ProductOnly
ServerSignature Off

названия опций довольно красноречиво рассказывают о себе 🙂

  • перезагружаем apache2 одной из команд (кому что больше нравится):
black:~# apache2ctl restart

или так:

black:~# /etc/init.d/apache2 restart

И снова пробуем спросить заголовки у apache2 с помощью telnet

black@laptop ~ $ telnet my.web.server.com 80
Trying 123.123.123.123...
Connected to my.web.server.com.
Escape character is '^]'.
HEAD / HTTP/1.0

HTTP/1.1 200 OK
Date: Sun, 28 Feb 2010 09:57:57 GMT
Server: Apache
X-Powered-By: PHP/5.2.6-1+lenny6
Set-Cookie: SESSd41d8cd98f00b204e9800998ecf8427e=81a8530d7e6a33847a5542ac544dfa74; expires=Tue, 23 Mar 2010 13:31:17 GMT; path=/
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Last-Modified: Sun, 28 Feb 2010 09:57:57 GMT
Cache-Control: store, no-cache, must-revalidate
Cache-Control: post-check=0, pre-check=0
Vary: Accept-Encoding
Connection: close
Content-Type: text/html; charset=utf-8

Connection closed by foreign host.
black@laptop ~ $

Ну вот …. так то гораздо лучше, web server теперь просто и лаконично говорит что он apache … и все! Лишнее,  правда, еще болтает php. Ну тогда давайте и его уговорим не болтать все подряд про наш супер секюрный сервак 🙂

  • опять же из под root на web сервере открываем конфиг /etc/php5/apache2/php.ini любимым редактором:
black:~# vim /etc/php5/apache2/php.ini
  • ищем опцию:
expose_php = On
  • и присваиваем ей значение Off … тоесть редактируем до такого состояния:
expose_php = Off
  • сохраняем, выходим с редактора
  • перезапускаем apache2
black:~# apache2ctl restart

снова пробуем прочитать заголовки telnet-ом

black@laptop ~ $ telnet my.web.server.com 80
Trying 123.123.123.123...
Connected to my.web.server.com.
Escape character is '^]'.
HEAD / HTTP/1.0

HTTP/1.1 200 OK
Date: Sun, 28 Feb 2010 10:36:40 GMT
Server: Apache
Set-Cookie: SESSd41d8cd98f00b204e9800998ecf8427e=b37412aa627d01ed985f36207276cef2; expires=Tue, 23 Mar 2010 14:10:00 GMT; path=/
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Last-Modified: Sun, 28 Feb 2010 10:36:40 GMT
Cache-Control: store, no-cache, must-revalidate
Cache-Control: post-check=0, pre-check=0
Vary: Accept-Encoding
Connection: close
Content-Type: text/html; charset=utf-8

Connection closed by foreign host.
black@laptop ~ $

Красота! Про php теперь вообще молчок 🙂  Вот то чего я и добивался … ээээх кайф!

На последок скажу, что многие считают подобные меры предосторожности излишними, мол что такого если и подсмотрят … всеравно же софтина очень надежная и секюрность ее проверена годами! Но я всегда руководствуюсь иным принципом — «Безопасности много не бывает!» Поэтому, надеюсь помог тому кто действует по схожим принципам, а тем кто не заморачивается — может задумаются, делов то на минуту 🙂 А какерам досадно 🙂

Засим спешу откланяться! Всем удачи и супер-пупер секюрности!

  1. Комментов пока нет

  1. Трэкбэков пока нет.

Why ask?