Сокрытие информации о хосте
Самый простой способ узнать информацию о хосте, это определить его ip адрес. Для определения NETBIOS-имени устройства по его ip-адресу можно воспользоваться командой tracert ip-адрес (для Windows) или traceroute ip-адрес (для Unix-систем, например, Linux). Поэтому одним из способов скрытия информации о хосте является скрытие его ip адреса. Для этого можно использовать практически любой способ сокрытия ip адреса из раздела “Сокрытие ip адреса” или воспользоваться способом, описанным ниже. На любой 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:
Все очень просто. Одно лишь замечание по поводу значения 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"). Также некоторыми возможностями в этой области обладает и PHP. В файле php.ini есть переменная expose_php, которая может принимать значения: On и Off. Которые, соответственно, добавляют или удаляют информацию о версии PHP в заголовок Server (а также в X-Powered-By). Ну и для полноты картины опишем еще одну подобную директиву, про которую автор не упомянул, а именно ServerSignature. Она также выводит данные о версии ПО, но в отличие от ServerTokens делает это не в заголовок Server, а в некоторые HTML страницы, например: листинг каталогов, страницы ошибок и т.п. Вот ее значения и соответствующие результаты:
Теперь поговорим о том, насколько данный способ пригоден для повышения безопасности. Такой способ даже имеет свой термин - Security through obscurity (Безопасность через сокрытие). В практической жизни он применяется довольно часто, потому что только в теории системы безопасности могут обеспечить надежную защиту. А когда дело доходит до практики, то вся надежность улетучивается благодаря пресловутому "человеческому фактору", а точнее - ошибкам в ПО. Поэтому сокрытие всей информации о системе (помимо необходимой пользователю) повышает ее безопасность.
|