Повільна атака Лоріса за допомогою JavaScript на PHP-сервері [та запобігання цьому]

Забудьте про хвилину на пост, давайте почнемо з того, про що йдеться в цій назві! Це стаття, заснована на веб-безпеці, яка вникне в основи роботи HTTP. Ми також розглянемо просту атаку, яка використовує роботу протоколу HTTP.

Що таке HTTP?

HTTP, HyperText Transfer Protocol - це протокол, що використовується Інтернетом для спілкування. Коли ви використовуєте браузер, ваш пристрій використовує цей протокол для надсилання запитів на віддалені сервери для запиту даних із них.

По суті, це як ти кажеш своїй мамі: "Гей, мамо, мені потрібно з’їсти цей предмет у холодильнику, який знаходиться на полиці 2, ти не можеш дати мені його?"

А ваша мама каже: "Звичайно, ось і ви" і надсилає вам цей предмет. Тепер HTTP - це спосіб, яким ви змогли передати цю інформацію своїй мамі, більше як мова, якою ви користувались для спілкування.

Як працює HTTP

Ось відео TL; DR, якщо ви людина, яка займається відео. В іншому випадку перейдіть до статті:

HTTP (рівень 7) побудований на вершині протоколу TCP (рівень 4). Ми можемо використовувати ncутиліту (netcat) для відкриття вихідного сокета TCP для будь-якого веб-сайту, що працює на HTTP (зазвичай порт 80). Дивіться наступний приклад того, як ми підключаємось до порту HTTP 80 для google.com за допомогою netcat:

Перегляньте дані, які ми надіслали:

GET / HTTP/1.1 Host: google.com X-header-1: somemoredata X-header-2: somemoredata 

Ігноруйте зайві X-header-*заголовки, це просто випадкові заголовки, які ви можете надіслати з вашим запитом. Важливим заголовком, який слід включити в специфікацію HTTP / 1.1, є Hostзаголовок.

І відповідь, яку ми отримали:

HTTP/1.1 301 Moved Permanently Location: //www.google.com/ Content-Type: text/html; charset=UTF-8 Date: Tue, 01 Oct 2019 23:24:13 GMT Expires: Thu, 31 Oct 2019 23:24:13 GMT Cache-Control: public, max-age=2592000 Server: gws Content-Length: 219 X-XSS-Protection: 0 X-Frame-Options: SAMEORIGIN Accept-Ranges: none Via: HTTP/1.1 forward.http.proxy:3128 Connection: keep-alive  301 Moved 

301 Moved

The document has moved here.

Таким чином, HTTP - це протокол відкритого тексту, що складається з інформації про запит, надісланої клієнтом, та відповіді, як показано вище.

Повільна атака Лоріса

Повільна атака Лоріса використовує той факт, що я міг зробити HTTP-запит дуже повільно. Іншими словами, я можу ініціювати HTTP-запит на сервер і продовжувати надсилати дані на сервер дуже повільно, щоб зберегти це зв’язок. І в той же час він ніколи не закінчує це з'єднання і відкриває кілька таких з'єднань, щоб вичерпати пул з'єднань сервера.

Застереження - Тестування на проникнення будь-якої онлайн-/ офлайн-служби, яка не належить вам без попереднього письмового дозволу, є незаконним, і я не несу відповідальності за заподіяну шкоду. Використовуйте цей вміст лише в навчальних цілях.

Повільна демонстрація Лоріса:

Це означає, що я можу продовжувати надсилати додаткові дані на сервер у вигляді заголовків. Тепер я почну простий сервер розробки PHP на своїй машині:

І я використовую простий сценарій Node, щоб виконати те, що ми обговорювали вище, на моєму локальному сервері:

Тут ви можете знайти сценарій Node.

Через деякий час ви побачите, що наш сервер PHP насправді виходить з ладу!

Це тому, що відкритих з'єднань занадто багато, і PHP не може більше обробляти відкритих з'єднань (через обмеження пам'яті / обладнання).

Зараз, звичайно, це працює бездоганно на локальному сервері розробки. Але якщо вам вдається знайти сервер, який не реалізує захист від повільних атак лорі, це для них велика проблема.

Захист від повільної атаки Лоріса

  • Використовуйте такі рішення, як Cloudflare, перед своїми серверами, щоб запобігти DoS / DDoS

    Цитування з сайту Cloudflare:

Cloudflare буферизує вхідні запити перед початком надсилання будь-чого на вихідний сервер. Як результат, "низький і повільний" трафік атаки, такий як атаки Slowloris, ніколи не досягають передбачуваної мети. Дізнайтеся більше про те, як захист DDoS від Cloudflare зупиняє атаки slowloris.
  • Оцініть обмежену кількість одночасних з'єднань, відкритих певною IP-адресою, до невеликої кількості. Цього можна досягти за допомогою простих інтерфейсних зворотних проксі-серверів, таких як nginx, за допомогою реалізації їх негерметичного сегмента. Як це працює, це щось на інший день!
  • Збільшення пропускної здатності сервера - тепер це може пом'якшити невеликі атаки, але, чесно кажучи, зловмисник може та може масштабувати / посилювати початкову атаку досить легко через меншу пропускну здатність, необхідну для здійснення такої атаки.

Висновок

Багато серверів (нові версії nginx / apache2) за замовчуванням мають повільний захист від атак loris. Але для багатьох внутрішніх служб сервери можуть бути вразливими до цієї простої атаки.

Можливо, ви захочете перевірити свої послуги та застосувати виправлення. Веб-безпека є захоплюючою сферою, і я планую зробити про неї веб-серію на codedamn. Ви також можете зв’язатися зі мною у твіттері, щоб отримати оновлення. До цього часу будь у безпеці!