Pull to refresh

CleanTalk, запуск WordPress Security

CleanTalk Anti-SpamWordPress
Занимаясь развитием 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 и вторичных сайтов по причине не совместимости.

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

Сам плагин можно найти в каталоге.
Tags:securitywordpresswordpress securitywordpress plugins
Hubs: CleanTalk Anti-Spam WordPress
Total votes 12: ↑12 and ↓0 +12
Views2K

Top of the last 24 hours

Information

Founded
Location
Россия
Website
cleantalk.org
Employees
2–10 employees
Registered