CleanTalk, запуск WordPress Security

    Занимаясь развитием Anti-Spam сервиса, мы достаточно часто сталкиваемся и с другими вопросами касающимися безопасности веб сайтов. Самыми распространенными были вопросы насчет брутфорс атак. Кроме проблем с подбором паролей к аккаунту администратора, зачастую брутфорс атаки вызывают высокую нагрузку на сервер, и пользователи получают уведомление от хостинга о превышении допустимых значений нагрузки на процессор.

    Мы подумали, если к нам поступают такие запросы, то почему бы нам их не решить? Так как задачи относятся к функциям безопасности, то решение о запуске отдельного сервиса security было очевидно.

    На данный момент, сервис Security разработан только под WordPress, причин этому несколько: наибольший спрос, большое количество веб сайтов использует именно эту CMS, сложность разработки сразу под несколько CMS.

    Несмотря на то, что антиспам защита является частью безопасности, мы приняли решение разделить эти два сервиса. Причин этому несколько:

    1. Усложнение плагина, что ведет к увеличению ошибок, проблем совместимости с другими плагинами/темами
    2. Продвижение по поисковым запросам
    3. Проще разработка и независимый выпуск обновлений
    4. Интерфейс плагина не усложняется кучей доп. опций, которые не нужны, если пользователь использует только одну функцию
    5. Отдельный интерфейс управления и логирования в панели управления CleanTalk

    Мы решили начать с реализации защиты от брутфорс атак и в дальнейшем постепенно расширять функционал.

    Защита от брутфорс атак — реализована методом добавления задержек между неправильными попытками авторизации. На первые попытки выставляется задержка в 3 секунды, для последующих в 10 секунд. Если в течении часа было 10 неудачных попыток авторизации, то IP адрес будет добавлен в базу FireWall на 24 часа. Для защиты от хакеров, пытающихся подобрать пароль к вашему аккаунту, этого достаточно, так как у них значительно увеличивается период времени между попытками, а их могут быть десятки и сотни тысяч. Все логи попыток доступа доступны в еженедельном отчете и в панели управления сервисом, что позволяет быстро добавлять IP адреса в черный список FireWall’а. Защита от брутфорс атак распространяется только на пользователей с правами администратора.

    Контроль трафика — позволяет просматривать информацию о посетителях, такую как:

    • IP
    • Страна
    • Дата/время последнего запроса
    • Количество разрешенных/заблокированных HTTP запросов
    • Статус — запрещен или разрешен
    • URL страницы посещения
    • User Agent

    Еще одна опция в Контроль трафика — “Блокировать посетителя, если число запросов больше, чем” — блокирует доступ к сайту для любого IP, у которого превышено количество HTTP запросов в час. Количество запросов можно задать в настройках, по умолчанию равно 1000. При превышении IP будет добавлен на 24 часа в Черный список FireWall’а.

    Это поможет решить проблему DoS атак на сайт, когда на сайт отправляется большое количество HTTP запросов, из-за которых он перестает отвечать или начинает работать очень медленно. Такая ситуация возможна и из-за массированной брутфорс атаки.

    Журнал аудита — позволяет контролировать действия пользователей в админке WordPress, ведет лог посещений страниц с указанием даты/времени и длительности пребывания. Позволяет контролировать действия администраторов и несанкционированного доступа и в случае проблем понять где, кем и какие изменения были сделаны.

    Malware Scanner — сканирует файлы WordPress, плагинов и тем на наличие вредоносного кода и внесенных изменений. Если изменения в файлах были сделаны несанкционированно, то позволяет восстановить исходные файлы.

    Сканирование в автоматическом режиме происходит раз в 24 часа, также можно запустить и вручную.

    Security FireWall — блокирует доступ к сайту для POST/GET запросов по IP адресам. База IP адресов для FireWall, формируется из общей базы Черных списков CleanTalk. В нее попадают IP адреса, которые имеют высокую спам активность или были замечены в попытках брутфорс атак. Есть возможность использовать свои собственные черные списки, как по отдельным IP адресам/подсетям, так и по странам. За счет этого можно снизить нагрузку на сайт или блокировать DOS атаки.

    Готовятся к выпуску:

    • сканер исходящих ссылок
    • проверка ссылок по базе данных доменов, которые продвигаются спамом
    • защита от XSS и SQL инъекций

    Заметки по разработке


    Все писалось с нуля, не подглядывая к другим решениям. Сделано это было специально, чтобы не нахапать чужих ошибок и чтобы разработать собственное видение на приложение.

    Дальнейшая разработка под другие CMS планируется, поэтому было принято решение разработать модульную конструкцию. Использовать объектно ориентированный подход и все в таком духе. Конечно, в процессе пришлось решать различные проблемы, которые не сильно вписывались в эту концепцию и без “костылей” не обошлось.

    В итоге получилось несколько классов, которые без существенных доработок можно будет использовать на других CMS (в том числе самописных), используя пару оберток, например для базы данных.

    Был написан собственный класс Cron не зависящий от Cron Wordpress. Все-таки приложение для безопасности и не должно опираться на функционал, который может работать, а может не работать, или в работу которого могут вмешаться сторонние разработчики.

    Для реализации эвристического анализа кода был написан собственный парсер минимизатор кода, который будет и дальше развиваться. С его помощью можно будет отслеживать опасные переменные, функции, конструкции. Не уверен используют ли другие плагины/антивирусы/приложения подобные решения (скорее всего нет), но в этом плюсы и минусы независимой разработки, наш подход возможно получился уникальным.

    Пример работы “минимизатора”:

    Исходный код:

    <?php
    	//$some = 'n'.'o'.'t'
    	$some = 's'.'o'.'m'.'e'; // String concatenation
    	$stuff = 'stuff';
    	
    	$first = 'first';
    	$func = 'func';
    	
    	$first_func = $some."$first$func"; // Variable replacement
    ?>
    $some = 'n'.'o'.'t';
    <?php
    	// Variable replacement
    	$i = 'i';
    	$c = 'c';
    	$o = 'o';
    	$co = $c.
    	// some obfuscating comment
    	$o;
    	$ico = $i/* some obfuscating comment */.$co;
    	
    	require($some.'_'.$stuff.'.'.$ico);
    	require($some.'_'.$stuff.'.php');
    	require($some.'_'.$stuff.'.p'.$ico);
    
    	$first_func();
    ?>
    

    Результат:

    <?php $some='some';$stuff='stuff';$first='first';$func='func';$first_func='somefirstfunc';$i='i';$c='c';$o='o';$co='co';$ico='ico';require'some_stuff.ico';require'some_stuff.php';require'some_stuff.pico';somefirstfunc();?>
    

    Если привести в более понятный вид:

    <?php 
    	$some='some';
    	$stuff='stuff';
    	$first='first';
    	$func='func';
    	$first_func='somefirstfunc';
    	$i='i';$c='c';$o='o';
    	$co='co';
    	$ico='ico';
    	require'some_stuff.ico';
    	require'some_stuff.php';
    	require'some_stuff.pico';
    	somefirstfunc();
    ?>
    

    Некоторые вещи которые он умеет: делать конкатенацию, подставлять переменные, отслеживать происхождение переменных (допустим если в них использовались ненадежные $_POST и $_GET), отслеживать и проверять подключения файлов (include, require) по различным параметрам и много другого. Можно сказать что это основа, на которую будет добавляться функционал.

    Особенно не понравилось поддерживать WPMS, так как для каждого функционала пришлось делать исключения с учетом того, главный ли это сайт, наследует ли пользователь вторичного сайта ключ от главного или вводит собственный ключ доступа, разрешили ли вторичному сайту активировать плагины и тому подобное. К сожалению, пришлось убрать часть функционала для WPMS и вторичных сайтов по причине не совместимости.

    В целом получилось местами красивое приложение с точки зрения кода, которое будем развивать в дальнейшем.

    Сам плагин можно найти в каталоге.
    CleanTalk Anti-Spam
    Компания
    Реклама
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее

    Комментарии 8

      0
      А что ваш плагин умеет делать такого, чего не умеет делать Wordfence?
        0
        Во первых наш плагин работает быстрее, во вторых он гораздо дешевле. В третьих все события логируются и хранятся 45 дней.

          0
          1. Скорость сканирования на тысячу файлов выше в 3-4 раза, зависит от хостинга.
          2. Нет избыточного сканирования (картинки, стили и т.д.).
          3. Есть сканирование по расписанию.
          4. Есть облачное управление FireWall (распространение правил по группе сайтов через одну Панель управления).
          5. Есть автоматическая защита от DoS.
          6. Хранение журналов в облаке (о чем выше отписал AleksandrRazoR).
          0
          Если в течении часа было 10 неудачных попыток авторизации, то IP адрес будет добавлен в базу FireWall на 24 часа. Для защиты от хакеров, пытающихся подобрать пароль к вашему аккаунту, этого достаточно

          Вот всегда хотелось спросить у таких людей, которые делают такую защиту — вы серьёзно?

          Для человека, пытающегося вспомнить пароль к своему аккаунту, этого достаточно также чтобы потерять доступ к сервису на 24 часа по причине того, чтобы просто забыл, какой из своих паролей он использовал.

          Люди имеют разные пароли, разной сложности и с разными необходимыми символами\буквами\разным регистром, которые они придумывают для подобных любителей также поизвращаться над пользователями. И какой из них именно использовался — сложно вспомнить с 10 попыток, если человек, к примеру, регистрировался полгода назад.
            0
            Защита от брутфорса — только для пользователей с правами администратора.

            Вы можете забыть пароль от админки сайта? И действительно пытаться раз за разом его вводить неправильно 10 раз?

            Мера очень действенна при DoS атаках, когда даже сайт перестает открываться.
              0
              Ну и если уж случилась такая печальная ситуация и вы забыли пароль и через 10 попыток были заблокированы, то решить вопрос с блокировкой можно за 1 минуту. Достаточно внести свой IP в персональный белый список. А далее продолжить попытки.
                0
                В статье подправил и указал что защита от брутфорса только для пользователей администраторов.

                Спасибо!
                0
                В Wordfence или iThemes Security имеется бесплатный базовый функционал. Ваш плагин, как я понял, полностью платный?

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                Самое читаемое