Недавно прошла статья, которая поможет исследовать поведение (а, возможно, и причины возникновения) javascript зловреда: Идентификация javascript зловреда.
После обнаружения зараженных файлов, возникает вопрос как их почистить.
Под катом я расскажу как избавиться от вирусов в тысячах файлов за 10 минут.
Введение
Посерфив, я обнаружил наиболее встречающийся совет — открыть файл, удалить код, сохранить файл.
А когда этих файлов тысячи?
Нашел более продвинутый совет — скачать контент на локальный диск, средствами ОС найти файлы с подозрительным содержимым, средствами текстового редактора удалить зараженный код во всех файлах массовой автозаменой, закачать файлы на сервер.
С ужасом вспоминаю, как решил опробовать этот способ на gprs-интернете.
Решение
Если же Ваш сайт
Для его реализации я немножко поизучал 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