Личный блог Suvan`a.

Работая и играя с Linux... И что из этого иногда получается.

Безопасность Apache: сокрытие версии.

Рубрика: Безопасность -> Защита сервисов
Метки: |
Вторник, 28 июля 2009 г.
Просмотров: 5998
Подписаться на комментарии по RSS

     Если клиент отправит Web-серверу Apache запрос HEAD, то в ответ он получит заголовок ответа сервера, который содержит информацию об окружении, в котором он запущен. Проверить это довольно просто: можно запустить telnet и подключиться к Web-серверу на порт 80, затем надо ввести запрос HEAD / НТТР/1.0 и нажать Enter дважды:


$ telnet localhost 80 Trying 127.0.0.1. . . Connected to localhost. Escape character is ,A]'. HEAD / HTTP/1.0

HTTP/1.1 200 OK

Date: Wed, 24 Nov 2004 14:38:20 GMT

Server: Apache/1.3.27 (Unix) (Red-Hat/Linux) PHP/4.3.2

Last-Modified: Thu, 18 rJov 2004 00:38:10 GMT

ETag: "c44fb0-1003-419beef2"

Accept-Ranges: bytes

Content-Length: 4099

Connection: close

Content-Type: text/html

Connection closed by foreign host.

     Если на сервере нет пользовательских страниц с сообщением об ошибке, данная информация будет выведена при формировании страницы с сообщением об ошибке (когда браузер запрашивает несуществующий URL).

     Как видно, выводится не только версия Apache, но и название дистрибутива Linux и версия РНР. Данную информацию надо скрыть, потому что она представляется крайне полезной для хакера. В Apache 2 файл include/ap_release.h, находящийся в каталоге с исходным кодом Apache (нужен исходный код Apache!), содержит следующие переменные:

#define AP_SERVER_BASEPRODUCT "Apache"

#define AP_SERVER_MAJORVERSION "2"

#define AP_SERVER_MINORVERSION "0"

#define AP_SERVER_PATCHLEVEL "47"

     Нужно изменить эти значения по своему усмотрению и затем пересобрать сервер.

     В Apache версии 1.3.12 и более новых версиях есть директива ServerTokens, которая управляет выводимой информацией. Посмотрим, как изменяется выводимая информация в зависимости от значений данной директивы:

ServerTokens ProductOnly: Server:Apache

ServerTokens Minimal: Server:Apache/l.3.27

ServerTokens OS: Server: Apache/1.3.27 (Unix)

ServerTokens Full: Server: Apache/1.3.27 (Unix) (Red-Hat/Linux) PHP/4.3.2

     Если эта директива не установлена, то по умолчанию применяется значение Full. Настоятельно рекомендуется установить значение ProductOnly или Minimal - чем меньше информации получит крекер, тем лучше.

     Ограничение ресурсов.

     Следующие опции могут употребляться для ограничения возможности DoS-атак против Web-сервера:

  • MaxClients <число> - задает максимальное число клиентов, которые могут работать с сервером вместе. Иногда запросов настолько много, что у компьютера не хватает памяти для загрузки дополнительных копий Web-сервера для обслуживания запросов клиентов. Эта директива дает возможность ограничить максимальное число клиентов. Значение по умолчанию 150, тоже рекомендуется применять или это значение, или значение из диапазона 100-200. Если ограничение будет превышено, новые клиенты получат сообщение Connection Refused.
  • RLimitCPU <мягкий> [жесткий] - устанавливает лимит на употребление процессорного времени. Значения лимита задаются в секундах. Разрешается применение значения max, что означает максимальную загрузку процессора.
  • RLimitMEM <мягкий> [жесткий] - устанавливает лимит на применение сервером памяти, в байтах.
  • RLimitNPROC <мягкий> [жесткий] - задает ограничение на количество порожденных сервером процессов.
  • LimitRequestBody <n байтов> - задает максимально допустимый размер HTTP-запроса. Надо применять любое значение: от 0 (неограниченный) до 2.147.483.647 (2. Гб). Если это значение превышено, клиенту будет возвращено сообщение об ошибке. Нужно помнить, что если используются CGI-скрипты для загрузки файлов на сервер, то размер запроса может достигать несколько мегабайтов.
  • LimitRequestFields <n> - максимальное число полей заголовка HTTP-запроса. Допустимыми являются значения от 0 (не ограничено) до 32767.
  • LimitRequestFieldSize <n байтов> - максимальный размер поля заголовка запроса, в байтах. Допустимыми являются значения от 0 (не ограничено) до 8190 (около 8 Кб).
  • LimitRequestLine <n> - максимальный размер строки HTTP-запроса. Не надо устанавливать слишком маленькое значение, так как тогда перестанут работать многие CGI-скрипты, использующие метод GET. Допустимыми являются значения от 0 (не ограничено) до 8190 (около 8 Кб).

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

Не регистрировать/аноним

Используйте нормальные имена.

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email.
(При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д.)



(обязательно)