BanMoron — инструмент активной защиты WEB-сервера от взлома



Небось снова про блокчейн, только в профиль?

— А вот и не угадали! На этот раз – ничего ни про блокчейн, ни про Emercoin! В конце концов, имеем же мы право делать что-либо помимо основного проекта!


А сделали мы на этот раз утилиту для защиты веб-сервера от вездесущих кульхацкеров, которые постоянно пытаются залить эксплойт в веб-сайт и получить неавторизованный доступ к серверу, чтобы потом прямо на Вашей площадке заниматься всякими непотребствами. Вот об этой утилите под названием BanMoron и пойдёт речь ниже.

BanMoron – это маленькая программа (исходник меньше текста этой статьи), написанная на языке C, и предназначенная для эффективного противодействия попыткам взломать WEB-сервер путём использования стандартных уязвимостей WEB-систем типа Wordpress, PhpMyAdmin и им подобных.


Алгоритм работы программы прост:

  1. Программа ставится под WEB-сервер в качестве обработчика ошибки 404 (страница не найдена). То есть попытка хакера получить доступ к несуществующей странице или скрипту приведёт к запуску этой программы.

  2. После запуска программа анализирует строку-запрос клиента (REQUEST_URI), и ищет в ней подстроки-шаблоны, соответствующие попыткам получить доступ к тем или иным ресурсам для взлома системы (таким как setup.php).

  3. В случае нахождения какой-либо подстроки-шаблона, программа применяет тот или иной модуль противодействия, ассоциированный с данным шаблоном. Если же ни один шаблон не найден, программа просто выводит стандартную страницу, содержащую текст ошибки 404.

В настоящее время реализованы следующие модули противодействия:


  1. ban_moron_pf – добавляет IP-адрес клиента в таблицу блокировки файрвола pf. В результате, IP хакера попадает в чёрный список, и все запросы с этого IP игнорируются. Во избежание переполнения списка из него ежесуточно удаляются IPs, с которых в течение 3х последних суток не было более попыток соединиться с сервером. Удаление делается командой из crontab, пример таковой для pf приведёт в файле pf.crontab.

  2. zip_bomb – в ответ на запрос отправить ZIP-бомбу – бесконечный файл-поток, выглядящий как сильно закомпресованный html-файл с бесконечной вложенностью таблиц. Предназначен для исчерпания ресурса атакующей машины и вывода из строя атакующего скрипта. К сожалению, в настоящее время эта штука обладает низкой эффективностью, так как, если смотреть исходники зловредов, то видно, что там вовсю используется CURL, который zip-поток просто не распаковывает. Но для любителей вручную скачать биткоин-кошелёк браузером, эта штука всё ещё годится.

  3. zip_ban – комбинация первых двух. Сначала отправляет zip-бомбу, а потом – банит IP.

При проектировании программы использовался модульный подход, что позволяет легко добавлять в неё как новые правила шаблоны, так и модули противодействия.


Сама программа легковесная, бинарник занимает всего 6 килобайт (наверное, все уже и забыли про такие размеры программ), и требует только одной разделяемой библиотеки libc. Таким образом, при её использовании снижения производительности WEB-сервера не наблюдается по сравнению с HTML-страницей 404.


Для повышения производительности, при сравнении строки REQUEST_URI с шаблонами правил, применён алгоритм Рабина-Карпа, позволяющий сравнить строку с множеством шаблонов за один проход, O(N). Универсальное хеширование делает практически невозможным создание специально подобранной строки REQUEST_URI, снижающей эффективность хеш-функции.


Ниже – ответы на типичные вопросы:


Почему такое название программы – BanMoron?
— Потому что, как видно из названия, основное назначение программы – держать всяких придурков подальше от работающих серверов, чтоб не дай бог ничего не сломали.


А почему вы хакеров называете придурками?
— Потому что эти «хакеры» придурки и есть. Берут готовый скрипт, который кто-то когда-то написал, и даже не удосуживаются его хоть как-то разнообразить, ума на такое уже не хватает. И по структуре запросов видно, что за скрипт используется. Напрашивается прямая аналогия с уличными “активистами”, которые где-то находят арматурину, и потом бьют стёкла на первых этажах. Интеллектуальный уровень обоих занятий примерно одинаков.

И чем ваша программа лучше fail2ban?
— Fail2ban использует другой подход. У него постоянно запущен процесс (демон), который мониторит логи, и по ним находит шаблон активности, после чего и банит соответствующий IP. Для реакции fail2ban должен обнаружить активность, то есть обработать множество запросов.

Учитывая, что Apache буферизует запись в лог, и чтение из лога далеко не мгновенно, fail2ban имеет задержку реагирования в несколько секунд. Кроме того, должно пройти несколько событий 404, чтобы fail2ban смог обнаружить активность и среагировать. В настоящее время, разработчики эксплойтов тоже не сидят сложа руки, и уже появляются версии, которые делают множество параллельных запросов к жертве – наверное, как раз для того, чтобы успеть внедрить эксплойт до того, как fail2ban среагирует. Кроме того, fail2ban – скрипт на интерпретируемом языке, то есть постоянно держит в памяти интерпретатор Питона, что тоже не добавляет ему ни скорости, ни экономии ресурсов. BanMoron запускается только в тот момент, когда надо что-то сделать, и не отбирает на себя системных ресурсов постоянно. И банит хакера по первому же его запросу. Оперативность на высоте!

Почему Ваша программа написана на языке С?
— Тому есть ряд причин:

  1. Поднятие приоритета посредством S-бита можно сделать только для бинарной программы. При использовании интерпретатора S-бит игнорируется. А он нужен, чтоб поднять привилегии от www до root для внесения IP в бан-таблицу morons.
  2. Скомпилированная бинарная программа – наиболее легка для запуска, и не тянет за собою запуск интерпретатора, который сам тянет за собою кучу разделяемых библиотек.
  3. Язык C – классический язык во всех OC, и везде точно есть.

Почему правила забиты непосредственно в код программы? Может, их надо бы вынести в конфиг-файл?
— А как потом программе указывать, где брать этот самый конфиг? WEB-сервер не позволяет передать программе конфигурационный параметр “от себя”. Можно конечно прикрутить к делу mod_rewrite, и параметр пробрасывать через QUERY_STRING, или сделать что-нибудь подобное. Но нам такое решение кажется и «развесистым» в плане администрирования, и неэффективным в процессе работы. Это ж надо читать .htaccess, запускать mod_rewrite, править строку, потом программа по этой строке должна открыть файл и его читать… В общем, ситуация напоминает реакцию адмирала из фильма «Горячие Головы»: Разверните авианосец, у меня фуражка за борт улетела, надо подобрать. Нам кажется, не стоит оно того.

А почему в качестве файрвола использован какой-то pf?
— Потому, что программа разрабатывалась на FreeBSD, а там дефолтным файрволом является именно pf, который нас полностью устраивает. Если Вы желаете, чтобы программа работала с iptables или другим Вашим файрволом – напишите соответствующие модули (обработчик, и примеры конфигов), сделайте pull request на Github, и мы примем Ваш вклад в общее дело. Человечество Вам будет благодарно.


Где и на каких условиях я могу получить программу BanMoron?
— Вы можете скачать её из GitHub репозитория Emercoin и использовать совершенно бесплатно, так как эта программа OpenSource и распространяется под лицензией BSD.

Emercoin
0.00
Решения на блокчейне для бизнеса и не только
Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 13

    0
    > А как потом программе указывать, где брать этот самый конфиг?

    Переменная среды? Легко настроить индивидуально для каждого VirtualHost (или аналога для других Web-серверов).
      +2
      Отлично же! Берем невинного юзверя, даем ему ссылку на сайт, находящийся под заSHITой этой системы, юзер получает вышедший из строя браузер, пытающийся распаковать ZIP-бомбу. После ребута, юзер уже не может пользоваться сайтом, поскольку его еще и по IP забанили. И поменять пароль он через сайт уже не может. Заблокировать аккаунт — не может, и так далее. Чего «придуркам» и надо — можно использовать юзверьский аккаунт!
        +2
        Делаем на популярном сайте и баним всех пользователей)

        А если серьёзно, то серьёзную опасность представляют далеко не те, кто загрустит после такого бана и забудет о сайте.
          +1
          Куда большую опасность представляют сайтостроители, решившие сделать наколеночное решение… :-/
        –1
        То есть, даже fail2ban использовать нельзя? Он ведь тоже может забанить невиновного юзера по «не такой»
        активности? Единственная разница между BanMoron и fail2ban, что fail2ban — постоянно запущенный процесс, и реагирует c задержкой в несколько секунд. Да, и в нём нет возможности отправить зип-бомбу, это правда. Он просто банит, и всё. Но и в BanMoron бомба — один из возможных инструментов. Применять его или нет, и если применять то когда — это на усмотрение админа.
        И мне всё-таки кажется, что «неуиновный Рафик» таки не должен даже по полученной ссылке пытаться скачивать wallet.dat.
          0
          Лига безопасного интернета, к примеру, с вами не согласна: http://www.ligainternet.ru/%62%69%74%72%69%78/%72%65%64%69%72%65%63%74%2e%70%68%70?%67%6f%74%6f=%68%74%74%70%3a%2f%2f%6e%61%74%72%69%62%75%2e%6f%72%67
            –1
            Отличный аргумент от вирусного аналитика Dr.Web, ничего не скажешь.
              0
              Вы, верно, не очень умны. Приведенный аргумент демонстрирует как можно осуществить заманивание пользователя на ваш MoronBan. Ваш коллега умудрился спороть чушь вида «не должен даже по полученной ссылке пытаться скачивать wallet.dat.», а вы как раз и перешли и попытались скачать.
                0
                Вот Вы поднимаете вопрос возможной проблемы в случае, если злоумышленник созадёт ссылку, которая приводит невиновного клиента на сайт под BanMoron-ом. Что это плохо для клиента. Начнём с того, что не так уж и плохо. Тест ZIP-бомбы на mozilla привёл к краху таба браузера, и не более. Даже мозилла продолжила работать, не говоря уже о перезагрузке системы. Аналогично ведёт себя и Хром. Так что страшный ребут юзера — из области фантастики. В целом же, было сказано, что зип-бомба — малоэффективный инструмент в современном мире.
                Теперь собственно про ссылку, пример которой продемонстрирован выше. С тем же успехом аналогичная ссылка может быть создана и на сайт, принадлежащий злоумышленнику (или им взломанный). И там он вообще может разместить всё что угодно, включая эксплойты браузеров.
                Даже арендовать сервер в облаке стоит сейчас реально копеек. Так что кто хочет — и так может такие ссылки создавать без всяких проблем. BanMoron тут ситуацию не меняет.
                А вот что BanMoron меняет — так это снижает вероятность взлома сайтов, и как следствие — сужает ресурсную базу злоумышленников. А это — плюс.
                  +1
                  Если ваш софт специально(!) роняет клиенту браузер — софт вредоносный со всеми вытекающими. Вы можете его хвалить и так далее, мое дело показать вам ваши проблемы. Если такая хрень примет массовый характер и нормальные ИБ-конторы начнут получать по ним заявки — вам будет очень печально, как и всем, кто эту хрень ставит. Как работник АВ вам это говорю.
                    +1
                    Да, это довод. Соглашусь. Переделал тулз, во всех правилах поставил действие «только банить».
                    Если кто-то захочет вернуть «активное противодействие» — то это будет уже действие соответствующего программиста, а не моё.
                    По сути, программа превратилась в аналог fail2ban.
                    Изменения уже в репозитории.
          0
          Жаль у вас не было такой утилиты, когда онлайн кошелек Emercoin вломили так, что вы аж возможность перевода выключили. Только на ребят из полибиуса и надежда, что вытянут вас хоть как то.
            0
            Да, жаль. Хотя онлайн-кошельком мы (разработчики) и не владеем, но с его админом и хозяином дружим, и нам было неприятно узнать о том, что какие-то акаунты в том онлайн-кошельке взломали. Кстати, взломали, насколько мы поняли, отдельные учётные записи, а не всю систему.
            Честно говоря, именно тот взлом и стал побудительным мотивом к созданию этой вот программы.

          Only users with full accounts can post comments. Log in, please.