Вирусы (и антивирусы) / Удаление зловредов на сервере

в 10:39, , рубрики: Новости, метки:

Недавно прошла статья, которая поможет исследовать поведение (а, возможно, и причины возникновения) javascript зловреда: Идентификация javascript зловреда.

После обнаружения зараженных файлов, возникает вопрос как их почистить.
Под катом я расскажу как избавиться от вирусов в тысячах файлов за 10 минут.

Введение

Посерфив, я обнаружил наиболее встречающийся совет — открыть файл, удалить код, сохранить файл.
А когда этих файлов тысячи?

Нашел более продвинутый совет — скачать контент на локальный диск, средствами ОС найти файлы с подозрительным содержимым, средствами текстового редактора удалить зараженный код во всех файлах массовой автозаменой, закачать файлы на сервер.
С ужасом вспоминаю, как решил опробовать этот способ на gprs-интернете.

Решение

Если же Ваш сайт хостится на unix-системе (а это почти наверняка так), есть способ гораздо проще.
Для его реализации я немножко поизучал bash — на истину не претендую, надеюсь, меня поправятдополнят, если что не так.

Итак, вот способ очистки заразы на Вашем сервере за 10 минут:

  • 1) найти хотя бы один зараженный файл (антивирусы, или вот удобный сервис: http://sitecheck.sucuri.net/scanner/)
  • 2) вычленить зараженный кусок кода (как правило, одна строка)
  • 3) зайти в командную строку сервера через любой ssh-клиент
  • 4) выбрать кусок кода, который с одной стороны содержится во всех зараженных строках, а с другой стороны не содержится ни в одной незараженной строке. В этом поможет команда поиска файлов по содержимому:
    find dir/ -name *.ext | xargs grep "var1"
  • 5) Удалитьзаменить зараженный код:

    — удаляет зараженную строку — в случае, когда зловред был добавлен отдельной строкой:
    sed -i.ext -e '/var1/d' `find dir/ -name *.ext`

    — заменяет зараженную строку на исходный код — в случае, когда зловред был дописан к строке:
    sed -i.ext -e 's/var1/var2/g' `find dir/ -name *.ext`

    — удаляет бэкапы измененных файлов:
    rm -f `find dir/ -name *.ext.ext`

    где dir — название каталога, в котором искать файлы, *.ext — расширение искомых файлов, var1 — регулярное выражение с подозрительным кодом из п.2, var2 — замещающее выражение. В качестве var1 обязательно используем регулярное выражение, однозначно идентифицирующее зловредный код.

Примеры

1) В js файл была добавлена строка, начинающаяся подозрительным кодом «var _0x4470».

— ищем файлы, которые содержат данный код
find webapps/ -name *.js | xargs grep "var _0x4470"
find webapps/ -name *.js | xargs grep "var _0"

экспериментальным путём я обнаружил, что сочетание var _0 встречается во всех зараженных строках, но не встречается ни в одной незараженной.

— удаляем строку:
sed -i.js -e '/^var _0/d' `find dir/ -name *.js`

— удаляем бэкапы измененных файлов:
rm `find dir/ -name *.js.js`

2) В первую строку php файла ("<?php") был дописан подозрительный код, содержащий «GetMama».

— убеждаемся, что данное сочетание характерно только для зараженных строк:
find webapps/ -name *.php | xargs grep "GetMama"

— заменяем строку на исходную:
sed -i.php -e 's/.*<?php.*.GetMama.*/<?php/g' `find dir/ -name *.php`

— удаляем бэкапы измененных файлов:
rm `find dir/ -name *.php.php`

Автор: SageScs

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js