Как я боролся с вирусом Troyan.PHP.Agent на отдельно взятом веб-сервере

virus0Для начала небольшая история

Жил как-то один монах. Все  него было нормально в его монашеской жизни, тихо и скромно молился он в своем монастыре, работал на послушаниях, периодически пил чай, заваривая крупные листья прямо в своей  монашеской чашке. Да и много ли монаху нужно,  и был у него покой и мир в душе. А вот  однажды подарили ему ситечко для чая, чтобы чай заваривать не в чашке, а в ситечке, удобно ведь, чаинки по чашке не плавают, и на зуб не попадают. Все здорово, и ситечко хорошее, красивое и чай теперь заваривать удобно, да вот незадача, за ситечком нужно следить, после каждой заварки мыть его, давать ему просохнуть, где-то хранить между чаепитиями. Вот и появилась у монаха лишняя забота, отвлекающая его от монашеской жизни. Уж лучше без ситечка, спокойствия больше…

К чему это я. А к тому, что есть у меня хостинг на котором крутятся несколько веб-серверов. Все там хорошо, удобно, да вот только следить нужно за ними  внимательно.

Однажды, холодным летом 2017 года, уехал я в отпуск. Сервера работают, все хорошо, так что можно расслабиться недельки две. Связь не очень, интернет сотовый, так что не слишком следил за всем этим хозяйством. Приезжаю, а сервера не работают. Что такое? Заглядываю системные сообщения, а там послание от провайдера. Мол выключили мы ваш сервер, поскольку нарушаете вы такой разэдакий соглашение, занимаетесь культивированием вирусов. Посмотрите внимательно, мол на вот этот список файлов и примите меры. Смотрю я, а там… Мама дорогая, кишат вирусы на всех серверах. Для начала прогнал Касперским, тот сказал, что заразу зовут Troyan.PHP.Agent. Лечить не смог, поудалял половину файлов, это мне не подойдет, значит нужно руками восстанавливать.

Как это выглядит? Во-первых, во всех каталогах, где были файлы
index.html  теперь комплект
index.html.bak.bak
index.php

при этом на index.php стоит атрибут разрешения запуска. Что уже настораживает, обычно это не нужно.
в самом файле ссылки на запуск вируса такого вида

vir

т.е. по алгоритму сначала запускается некий вирусный код, а затем уже старая страница.  Причем этот код вкрапился не только в index.php,  но еще в большое количество случайных файлов с расширением php, и еще добавил свои файлы с определенными именами, к примеру footer.php или rss.php где прячется тело вируса

 

vir5

Вирус даже имена старается давать какие-то осмысленные, типа нужные файлы. Кстати, интересно, лежат зараженные файлы с расширением ico, а не только php

 

vir2

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

 

vir3

А вот только включим перенос строк и вот здесь оказывается еще много чего интересного

 

vir4

Также если посмотреть почтовый протокол, то там множество попыток отослать что-то на различных пользователей домена ispmail.ru. Благо хостер не
дает отслылать почту с сайта на левые адреса, так что протокол пестрит отшибками отправки.

Как лечить зараженный Troyan.PHP.Agent сайт? Если файлов много, то наиболее простой способ восстановиться из копии, если она конечно есть. Если копии нет, то придется лазить ручками по всем файлам и удалять вредоносный код. Благо сами файлы текстовые и это вопрос времени и усидчивости. Правда, если пропустить хоть один файл, то заражение будет повторным.

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

Затем просканировал каталоги по простому и переименовал обратно в html все, что вирус мне напортил, а сам код удалил.

rm index.php
mv index.html.bak.bak index.html
chmod ugo-x index.html

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

find /home/ -name “*.php”  -perm /a=x -print > text1.txt
С каждым придется разбираться отдельно. Возможно, некоторые нужны, но если в них будет вирусный код, его нужно чистить.

Ищем файлы, где меняются глобальные переменные, вирус в первую очередь делает это

grep -r ‘GLOBALS\[‘ /home/ > text2.txt

virus6

 

 

 

Здесь мы видим на фоне вполне читаемых текстов, какой-то подозрительный код в файле work.php. Глобальные переменные и сплошное шифрование, удаляем.

Поищем PHP с шифрованием кода

grep -r ‘php ${“‘ /home/ > test2.txt

И всякие преобразования
grep -r ‘eval/’ /home/ >test.txt

И, к примеру, множество пробелов

grep -r ‘                                        ‘ /home/ > test3.txt

vir6

И еще напоследок разные варианты для поиска

поиск  скриптов, где включаются файлы

grep -r “echo file_get_content” /home > text2.txt

grep -r “@include ” /home/ > text3.txt

поиск кодированной точки с запятой из текущего каталога и ниже, возможен вирус

find . -type f -name ‘*.php’ | xargs grep -il x29
Все, что найдем – чистим код.
Обязательно меняем пароли на админку mySQL и FTP. А еще лучше FTP вообще выключить, оставить только SFTP.
Но почистить – это только половина дела. Нужно максимально исключить возможность заражения в будущем.  Как происходит заражение? Главное для вируса – это запустить свой исполняемый код на сайте. Но для начала его нужно туда положить. Положить можно либо через FTP, либо через админку вашей системы управления контентом, wordpress,joomla или что там у вас установлено. Есть еще возможность замаскировать расширение для CMS с вирусом под что-то важное, чтобы админ сам его положил на сайт. Но это другой вариант. В первом случае идет взлом паролей, либо использование каких либо ошибок в CMS. А пароли начинают взламывать с логина admin.
Вот его и нужно удалить в первую очередь. Взломали пароль, через админку положили исполняемый файл в папочку uploads и запустили, все – готово. Поэтому для исключения используем .htaccess

Запрещаем запуск в каталоге загрузки

RemoveHandler .php .phtml .pl
AddType text/plain .php .phtml .pl .fcgi .fpl .phtml .shtml .php2 .php3 .php4 .php5 .asp .jsp
Options -ExecCGI
php_flag engine 0

В каталоге администрирования запрещаем админку для всех адресов, кроме нашего

Order Deny,Allow
Deny from all
Allow from ваш._.IP

Надеюсь, кому-нибудь поможет эта информация.

 

 

  1. Сергей

    а с помощью чего и как запускать исполнение указанных кодов вы не указали. : ((

  2. Сергей

    Как я понял вы о cmd. Просто скопировал несколько команд, но они неверные. Может нужно в команде указать еще свой путь к папке с сайтом? к примеру: grep -r ‘GLOBALS\[‘ C:\aibolit-for-windows\site> text2.txt или grep -r ‘GLOBALS\[‘ /aibolit-for-windows/site/> text2.txt

  3. нет, это команды Linux, под win все проще. Под windows Касперский находит этот вирус. Можно также поискать простым поиском, только в дополнительных параметрах указать “содержимое файлов”

  4. Сергей

    Вот оно как, теперь понятно что я не там искал )). Спасиб, буду искать по содержимому файлов. !

  5. Влад

    Сделал все по инструкции+посмотрел логи веб-сервера, отфильтровал POST запросы и выявил вредоносный файл /plugins/attachments/lib.php – он был основным для вируса, в нем были собраны названия остальных вредоносных файлов, к которым тоже ходили POST запросы. Все удалил и уже 3 дня имею полное спокойствие, а в логах до сих пор идут попытки сделать POST запросы по уже удаленным файлам.

  6. Светлана

    Спасибо за статью! очень помогла!
    При копировании команд кавычки пришлось менять вручную, т.к. те, что с сайта не воспринимаются консолью.

Ответить на Сергей Отмена ответа

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>