Защита на Apache от Slowloris
Slowloris атаката, за която съм споменавал, успяваше да спре всички версии на популярният web сървър Apache. Единствената защита беше да използва друг сървър ( напр. nginx ) или да се спретне по-сложна схема с прокси пред сървъра. Е, от известно време има разширение на mod_security, което може да спре Slowloris атака.
По своята същност Slowloris е атака срещу 7-ми слой на мрежовата инфраструктура или по-точно срещу самият web сървър. Тя не запълва канала с трафик, т.е. не е DoS атака, макар, че ефекта е подобен. Проблемът идва в начина по който Apache oбработва заявките и по-точно при отваряне на конекция, дори и да няма изпратен нито един байт, Apache чака да изтече таймаут, преди да затвори конекцията. Също така в зависимост от версията записва информация в лог-файловете. Проблемът идва от това, че опашката на конекциите е ограничен ресурс, който относително лесно може да бъде препълнен. Например ето така изглежда заявка съгласно HTTP RFC:
1: Request = Request-Line ; Section 5.1
2: *(( general-header ; Section 4.5
3: | request-header ; Section 5.3
4: | entity-header ) CRLF) ; Section 7.1
5: CRLF
6: [ message-body ] ; Section 4.3
Ако атакуващият не изпрати CRLF-а, който отбелязва края на заявката, Apache ще продължи да чака до изтичане на таймаут.
За защита от подобни атаки от версия ModSecurity 2.5.13 вече има включена директива SecReadStateLimit, която ограничава броя на конекциите в състояние SERVER_BUSY_STATE от даден IP адрес. При надхвърляне на този лимит сървъра ще върне грешка 400 Bad Request status code. Също така с цел защита от други разновидности на атаката е добавени директивата RequestReadTimeout.



