Безопасность Apache: сокрытие версии.
Метки: Apache | limit
Вторник, 28 июля 2009 г.
Просмотров: 6774
Подписаться на комментарии по RSS
Если клиент отправит Web-серверу Apache запрос HEAD, то в ответ он получит заголовок ответа сервера, который содержит информацию об окружении, в котором он запущен. Проверить это довольно просто: можно запустить telnet и подключиться к Web-серверу на порт 80, затем надо ввести запрос HEAD / НТТР/1.0 и нажать Enter дважды:
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_MAJORVERSION "2"
#define AP_SERVER_MINORVERSION "0"
#define AP_SERVER_PATCHLEVEL "47"
Нужно изменить эти значения по своему усмотрению и затем пересобрать сервер.
В Apache версии 1.3.12 и более новых версиях есть директива ServerTokens, которая управляет выводимой информацией. Посмотрим, как изменяется выводимая информация в зависимости от значений данной директивы:
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 Кб).