Последние два дня наш веб-сервер Tomcat 5.5 на базе Linux был сломан за считанные минуты, начав тысячи загрузок и остановив их. Некоторые пути запросов в журнале доступа заканчиваются частью, похожей на "? Jfkdsjkfsdk". Есть ли известные уязвимости систем Tomcat для таких атак?
Обновить: В настоящее время мы используем чистый Tomcat, а не Apache.
Судя по ответам 206, ваш сервер Tomcat подвергается атаке с использованием атаки перекрывающегося диапазона, как описано для Apache в CVE-2011-3192.
Когда в прошлом месяце это была горячая тема, мне казалось, что сервлет Tomcat по умолчанию выглядит уязвимым - см. Вот.
Лучший способ остановить это - запретить обслуживание этих статических файлов сервлетом по умолчанию или удалить Range:
Заголовок входящих запросов.
Тысячи подключений - это известная «уязвимость» любого сервера с параметром maxconnections (или который использует много ресурсов для каждого подключения). Как DDOS, скорее всего, они не «останавливают» загрузку, они просто прерывают соединение без RST-пакета, чтобы соединение зависало до тех пор, пока не истечет время ожидания, или используя что-то вроде trickle
чтобы подтверждать только несколько байтов за раз, чтобы соединение не истекло.
Все, что вы сделаете для смягчения этого, будет зависеть от всей вашей настройки. Предполагая, что вы в настоящее время используете apache + mod_jk + tomcat, то в дополнение к fail2ban Барта я бы посмотрел на mod_security для обнаружения потенциально злонамеренных запросов и отклонения их. Другая идея заключается в том, что если вы действительно используете tomcat для отправки статических данных, перемещение статических данных для обслуживания непосредственно с apache (или легкого сервера, такого как lighttpd или nginix), используя static.example.com
домен. Или, если вам нужно, чтобы ваш код определял, какой файл отправлять, рассмотрите возможность использования mod_xsendfile в apache для обслуживания статических файлов, "на которые указывает" ваше приложение, что позволит tomcat завершить запрос и продолжить работу, пока apache обрабатывает файл (вместо того, чтобы держать как apache, так и tomcat занятыми отправкой файла).
Вы проксируете Tomcat из Apache? В противном случае вы можете быть довольно легко уязвимы для таких атак, как Slowloris. Публично раскрывать Tomcat - плохая идея.
Даже если вы проксируете через Apache, вам нужно быть осторожным, чтобы защитить от атак в стиле Slowloris с помощью mod_antiloris, а еще лучше использовать nginx
для вашего внешнего прокси - сервера, который оказался неуязвимым для атаки Slowloris.
Шейн Мэдден есть лучший ответ, сначала прислушайтесь к его совету.
Я не знаю ни одного, но это не значит, что его нет. Используйте что-то вроде fail2ban для поиска в журналах этих запросов и автоматической блокировки IP-адресов.
Вы также можете работать над установлением ограничений ресурсов / квот для ограничения запросов на загрузку, прокси / кеширования для уменьшения нагрузки и предупреждений, чтобы уведомить вас о том, когда это происходит. Наряду с ограничением наших исходящих запросов, потому что даже если вы не подвергались DDoS-атакам, вы не хотите, чтобы законные запросы превышали доступную пропускную способность.
Большинство уязвимостей будет «владеть» вашим сервером; сбой / ddos'ing это контрпродуктивно в этом отношении. Единственная причина убить сервер, на самом деле, - это если у кого-то есть топор против вашей компании.