Сокрытие версии сервера как способ повышения безопасности


Прочитал недавно статью на сайте www.debuntu.org, в которой автор (chantra) описывает способ улучшения безопасности сервера за счет сокрытия информации о версии серверного ПО. Утверждение автора, что данный способ повышает безопасность Apache довольно спорно, но об этом ниже. А пока давайте посмотрим на эксперименты автора по работе с заголовками сервера.
На любой GET или HEAD запрос, отправленный серверу, Apache, помимо запрошенного контента (для GET запроса), возвращает клиенту HTTP-заголовки. Вот типичный список заголовков, полученный от сервера Apache:

Date: Tue, 25 Jul 2006 10:47:13 GMT
Server: Apache/2.0.55 (Ubuntu) PHP/5.1.4-1.dotdeb.2
Last-Modified: Mon, 20 Mar 2006 09:51:25 GMT
ETag: “3057-1f8-1a0f4140?
Accept-Ranges: bytes
Content-Length: 504
Connection: close
Content-Type: text/html; charset=ISO-8859-1
Для получения этого списка автор заметки использовал telnet. C его помощью chantra отправил HEAD запрос на свой локальный сервер. Вот эта сессия telnet:
~$ telnet localhost 80
Trying 127.0.0.1…
Connected to localhost.
Escape character is ‘^]’.

HEAD / HTTP/1.0

Обычно данные заголовки скрыты от пользователей, так как содержат в основном служебную информацию. Однако есть много способов просмотреть этот список. Например, для пользователей браузера Firefox хочу порекомендовать плагин LiveHTTPHeaders.
В этом списке нас интересует заголовок Server. Как видно из его значения [Apache/2.0.55 (Ubuntu) PHP/5.1.4-1.dotdeb.2], у автора установлено следующее ПО: ОС - Ubuntu, сервер - Apache 2.0.55 и PHP 5.1.4-1.dotdeb.2. Так вот, способ повышения безопасности, предложенный автором, состоит в том, чтобы скрыть от получателя (HTTP-клиента) эту информацию.
Делается это с помощью директивы Apache - ServerTokens. Вот значения, которые принимает директива и соответствующие ей значения заголовка Server:
Значение директивы Значение заголовка Server
ServerTokens Prod Server: Apache
ServerTokens Major Server: Apache/2
ServerTokens Minor Server: Apache/2.0
ServerTokens Minimal Server: Apache/2.0.55
ServerTokens Os Server: Apache/2.0.55 (Ubuntu)
ServerTokens Full Server: Apache/2.0.55 (Ubuntu) PHP/5.1.4-1.dotdeb.2 my_mod1/X.Y my_mod2/W.Z
Все очень просто. Одно лишь замечание по поводу значения Full. Если используется это значение, то сервер выдает не только версии ОС и сервера, но и версии модулей, установленных на сервере - PHP/5.1.4-1.dotdeb.2 my_mod1/X.Y my_mod2/W.Z. Причем модуль сам должен добавить свою версию. Делается это с помощью функции ap_add_version_component(server_pool, "my_mod1/X.Y").
По умолчанию в Apache используется значение Full, а автор статьи рекомендует использовать Prod, тем самым сокращая информацию, отправляемую клиенту, до одного названия сервера.
Также некоторыми возможностями в этой области обладает и PHP. В файле php.ini есть переменная expose_php, которая может принимать значения: On и Off. Которые, соответственно, добавляют или удаляют информацию о версии PHP в заголовок Server (а также в X-Powered-By).
Ну и для полноты картины опишем еще одну подобную директиву, про которую автор не упомянул, а именно ServerSignature. Она также выводит данные о версии ПО, но в отличие от ServerTokens делает это не в заголовок Server, а в некоторые HTML страницы, например: листинг каталогов, страницы ошибок и т.п. Вот ее значения и соответствующие результаты:
Значение директивы Результат
ServerSignature On Apache/2.0.59 (Ubuntu) PHP/4.3.10 Server at 127.0.0.2 Port 80
ServerSignature Off
ServerSignature Email Apache/2.0.59 (Ubuntu) PHP/4.3.10 Server at 127.0.0.2 Port 80
Разница On и Email заключается в ссылке mailto на виртуальном хосте.
Теперь поговорим о том, насколько данный способ пригоден для повышения безопасности. Такой способ даже имеет свой термин - Security through obscurity (Безопасность через сокрытие). В практической жизни он применяется довольно часто, потому что только в теории системы безопасности могут обеспечить надежную защиту. А когда дело доходит до практики, то вся надежность улетучивается благодаря пресловутому "человеческому фактору", а точнее - ошибкам в ПО. Поэтому сокрытие всей информации о системе (помимо необходимой пользователю) повышает ее безопасность.
Но, как было справедливо замечено в комментариях к статье, сегодня почти все атаки на веб-сервера производятся ботами, которые не утруждают себя проверкой версий серверного ПО - они берут количеством, а не качеством. Поэтому автор комментария рекомендует сперва использовать более надежные способы защиты, например - mod_security, а потом уж беспокоиться о заголовке Server.
Ну и напоследок, приведу цитату, касающуюся заголовка Server, из спецификации HTTP/1.1 - RFC 2616:
Note: Revealing the specific software version of the server might allow the server machine to become more vulnerable to attacks against software that is known to contain security holes. Server implementors are encouraged to make this field a configurable option.
Как вы видите, и тут есть неявная рекомендация скрывать "лишнюю" информацию о ПО. Но, как в принципе и всегда, окончательное решение остается за вами.
Автор: Сипягин Максим
Источник: ApacheDev.ru

These icons link to social bookmarking sites where readers can share and discover new web pages.
  • News2.ru
  • NewsLand.ru
  • del.icio.us
  • BobrDobr.ru
  • Ma.gnolia
  • Digg
  • Reddit
  • Technorati
  • Slashdot
  • Netscape
  • DZone
  • ThisNext
  • Furl
  • YahooMyWeb
Опубликовано в: Безопасность Август 27, 2006

18 Комментариев »

  1. неточность - директива expose_php off убирает заголовок X-powered
    Раз уж тема затронула сокрытие информации о сервере - можно было бы добавить и дезинформацию - добавление своих заголовков, для дезинформации актакующего.
    + еще можно заменять расширения файлов.

    Комментарий от artem — Август 28, 2006 @ 9:01 pm

  2. 2artem. Спасибо за уточнение. Но expose_php Off убирает как заголовок X-Powered-By, так и в заголовке Server убирает версию PHP.

    Комментарий от Администратор — Август 28, 2006 @ 9:25 pm

  3. соглашусь с artem, хорошо бы узнать как не просто убрать информацию, а заменить на дезу.

    Комментарий от webdriver — Сентябрь 1, 2006 @ 2:38 pm

  4. 2 webdriver
    mod_header или на php:
    функция header();

    Комментарий от artem — Сентябрь 2, 2006 @ 9:02 pm

  5. 2 artem
    плохо если это единственный выход.
    тут и так стараешься от всего лишнего избавиться, а тут лишний модуль подключать.
    да и по поводу header(), есть ведь и статика и прочая требуха.

    Комментарий от webdriver — Сентябрь 3, 2006 @ 7:59 pm

  6. Товарищи, hex никто не отменял.. Лично я заменяю Apache на Primus (просто по буквам подходит), версию - на произвольную - к примеру 6.6.6. А OS (у меня Win32) заменяю на MacOS (тоже по кол-ву символов подходит. Расширения тоже меняю, но для php. Кстати, из-за пасхальных яиц php все равно легко выявить - достаточно подбавить к url ‘?=PHPE9568F36-D428-11d2-A769-00AA001ACF42′ - и мы видем симпотичную картинку.. Тайна присутствия php раскрыта..

    Комментарий от elanc — Сентябрь 19, 2006 @ 3:08 am

  7. Спасибо, elanc, за метод определения PHP.
    Но по “пасхальным яицам” можно вдарить mod_rewrite-ом.

    Комментарий от Администратор — Сентябрь 20, 2006 @ 12:29 am

  8. при установке expose_php в Off, пасхальные яйца не отображаются

    Комментарий от mechanix — Октябрь 17, 2006 @ 3:00 pm

  9. 2Elanc:
    А в каких файлах (можно сразу с адресами) заменять? Я ничего подобного в Apache 2.2.3 win32 не нашел.

    Комментарий от VM — Декабрь 24, 2006 @ 2:25 pm

  10. windows/php.ini

    Комментарий от lol — Май 2, 2007 @ 7:01 pm

  11. Огромное спасибо автору

    Комментарий от Alex — Январь 18, 2008 @ 10:16 pm

  12. как бы убрать эти заголовки с помощью аштиаксеса? ну то есть в том случае, если это сервер хостинга и доступа к директивам пхп нет? хотя врядли это возможно…

    Комментарий от termi — Март 23, 2008 @ 5:14 pm

  13. Спасиба ! сам все просек!!! РЕСПЕКТ!!!
    _____________
    ofis-rabota.ru

    Комментарий от skif — Август 28, 2008 @ 3:59 pm

  14. опаньки, отлично, наконец не будут лазить ко мне с угрозами)

    Комментарий от Thikor — Ноябрь 23, 2008 @ 1:29 pm

  15. Действительно неплохо былобы давать ложную информацию, не подскажете как???

    Комментарий от Александра Петровна — Январь 22, 2009 @ 12:33 pm

  16. соглашусь с artem, хорошо бы узнать как не просто убрать информацию, а заменить на дезу.

    Комментарий от Евгений — Март 9, 2009 @ 10:04 pm

  17. Сегодня почти все атаки на веб-сервера производятся ботами, которые не утруждают себя проверкой версий серверного ПО, поэтому автор рекомендует сперва использовать более надежные способы защиты

    Комментарий от Лука Сергеевич — Апрель 2, 2009 @ 6:12 pm

  18. соглашусь с artem, хорошо бы узнать как не просто убрать информацию, а заменить на дезу.

    Комментарий от Наталия — Апрель 9, 2009 @ 9:12 pm

Оставить комментарий

You must be logged in to post a comment.

Работает на WordPress