
Я использую веб-сервер Ubuntu 20.04 LEMP (Linux, Nginx, MariaDb, PHP). Я также провожу некоторые тесты уязвимости nmap с моей клиентской машины MacOS. На MacOS я используюО, Боже!с nmap
включенным плагином. Чтобы провести некоторые тесты уязвимости на моем Ubuntu Server с моей клиентской машины MacOS, я ввел команду:
nmap_check_for_vulns my.server.ip.address
которая является псевдонимом команды
nmap --script=vuln
После ввода команды с IP-адресом моего сервера nmap сообщил следующее:
| http-vuln-cve2011-3192:
| VULNERABLE:
| Apache byterange filter DoS
| State: VULNERABLE
| IDs: CVE:CVE-2011-3192 BID:49303
| The Apache web server is vulnerable to a denial of service attack when numerous
| overlapping byte ranges are requested.
| Disclosure date: 2011-08-19
| References:
| https://www.tenable.com/plugins/nessus/55976
| https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-3192
| https://www.securityfocus.com/bid/49303
|_ https://seclists.org/fulldisclosure/2011/Aug/175
На сервере Ubuntu вывод ss -lnpt
будет следующим:
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 100 0.0.0.0:25 0.0.0.0:*
LISTEN 0 511 0.0.0.0:443 0.0.0.0:*
LISTEN 0 4096 127.0.0.1:8125 0.0.0.0:*
LISTEN 0 100 0.0.0.0:4190 0.0.0.0:*
LISTEN 0 4096 127.0.0.1:19999 0.0.0.0:*
LISTEN 0 100 0.0.0.0:993 0.0.0.0:*
LISTEN 0 4096 127.0.0.1:10023 0.0.0.0:*
LISTEN 0 4096 127.0.0.1:10024 0.0.0.0:*
LISTEN 0 100 127.0.0.1:10025 0.0.0.0:*
LISTEN 0 4096 127.0.0.1:10026 0.0.0.0:*
LISTEN 0 80 127.0.0.1:3306 0.0.0.0:*
LISTEN 0 100 0.0.0.0:587 0.0.0.0:*
LISTEN 0 128 0.0.0.0:43211 0.0.0.0:*
LISTEN 0 511 127.0.0.1:6379 0.0.0.0:*
LISTEN 0 4096 127.0.0.1:783 0.0.0.0:*
LISTEN 0 100 0.0.0.0:143 0.0.0.0:*
LISTEN 0 511 0.0.0.0:80 0.0.0.0:*
LISTEN 0 4096 0.0.0.0:10000 0.0.0.0:*
LISTEN 0 100 0.0.0.0:465 0.0.0.0:*
LISTEN 0 128 0.0.0.0:43219 0.0.0.0:*
LISTEN 0 256 0.0.0.0:53 0.0.0.0:*
Я пытаюсь закрыть эту уязвимость на сервере, однако на сервере НЕ установлен Apache, поэтому я не знаю, почему эта уязвимость появляется!
Мой вопрос: как мне найти уязвимую программу и как закрыть уязвимость на сервере?
решение1
Проверьте ss -lnpt
, какой процесс прослушивает порт 80 или 443, скорее всего, это и есть цель.
решение2
Theдревний проверятьне является специфичным для apache2, он специфичен только для одного конкретного подхода к смягчению такой поверхности DoS на apache2. Nginx не использует его: он выполняет запросы для большого количества отдельных диапазонов по умолчанию, только с учетом ограничений на размер заголовка. Это в теории, он (или что-либо, пересылающее заголовок как есть) может быть уязвимым к чрезмерному использованию ресурсов при нечетных запросах.
max_ranges number; Default: — Context: http, server, location
Данная директива появилась в версии 1.1.2.
Ограничивает максимально допустимое количество диапазонов в запросах байтовых диапазонов. Запросы, превышающие лимит, обрабатываются так, как если бы не было указано ни одного байтового диапазона. По умолчанию количество диапазонов не ограничено. Нулевое значение полностью отключает поддержку байтовых диапазонов.
Это просто не такая большая проблема, как этот конкретный трюк, который можно использовать для перегрузки серверов Apache. Пока ваш nginx не проксирует (или не зависит от обслуживания большинства запросов из кэша вместо проксирования) где-то еще, вам, скорее всего, не придется ничего делать, даже если вы специально не добавляете ограничения с помощью этой настройки.
В наши дни веб-серверы (которые обслуживались после 2011 года) простоигнорироватьзапросы на диапазоны, размер-сумма которых превышает общую длину контента- что-то с небольшим применением в реальном мире, поэтому это даже лучшее смягчение, чем ограничениечислодиапазонов.
В любом случае... вы можете просто вручную создать такой раздражающий запрос из командной строки. Весь эксплойт заключается в отправке запроса с заголовком, содержащим что-то порядка сотен перекрывающихся диапазонов, например Range: bytes=1-1337,1-1338,1-1339
и т. д. Посмотрите, был ли ответ (со статусом 206; если вы видите 200, nginx просто проигнорировал ваш заголовок и вернул все) значительно медленнее, тогда вы будете знать наверняка.