"Изнанка" взлома: что скрывается внутри взломанного сайта

или «препарируем» среднестатистический взломанный сайт на Joomla

Обратная сторона взлома

Взлом сайта не всегда можно распознать по внешним признакам  (мобильный редирект, спам-ссылки на страницах, чужие баннеры, дефейс и пр). При компрометации сайта этих внешних признаков может и не быть. Ресурс может работать в штатном режиме, без перебоев, ошибок и попадания в “черные” списки антивирусов. Но это отнюдь не означает, что сайт в безопасности. Проблема в том, что заметить факт взлома и загрузки хакерских скриптов без проведения аудита – сложно, а сами веб-шеллы, бэкдоры и другие инструменты хакера могут достаточно долго находиться на хостинге и не использоваться по назначению. Но однажды наступает момент, и они начинают сурово эксплуатироваться злоумышленником, в результате чего у владельца сайта возникают проблемы. За спам, размещение фишинговых страниц сайт блокируют на хостинге (или отключают часть функционала), а появление редиректов или вирусов на страницах чревато баном со стороны антивирусов и санкциями со стороны поисковых систем. В подобном случае необходимо в срочном порядке “лечить” сайт, а затем ставить защиту от взлома, чтобы сюжет не повторялся.

К сожалению, хакерские скрипты по внешним признакам или внешними сканерами не обнаруживаются. Поэтому ни антивирусы поисковых систем, ни антивирусное ПО, установленное у веб-мастера на компьютере, не сообщит о проблемах безопасности сайта. Если скрипты размещены где-нибудь в системных каталогах сайта (не в корневом и не в images) или инжектированы в существующие скрипты, случайно заметить их также не удастся.

Узнать о взломе в подобных случаях можно только от технической поддержки хостинга (который время от времени проверяет файлы на вирусы) или самостоятельно, проверив сайт специализированными сканерами вредоносных и хакерских скриптов (AI-BOLIT, ClamAv, Maldet,…).

Как гласит античная мудрость: “предупрежден - значит вооружен“. Для того чтобы представлять себе “масштаб бедствия” при взломе, предлагаем познакомиться со среднестатистическим сайтом на Joomla, который был взломан в результате проведения нецелевой атаки, посмотреть, что именно хакеры загрузили на сайт и какую угрозу загруженные скрипты несут сайту, его владельцу и хостингу.

Пример, который разбирается в статье - реальный, а сам инцидент произошел летом 2015 года.   

Итак, сайт работает на Joomla версии 2.5.28. Причина обращения – блокировка сайта со стороны хостинга за спам-рассылку. Кроме анализа логов почтового и веб-сервера, сайт был просканирован тремя популярными решениями для обнаружения вредоносного кода на хостинге: AI-BOLIT, Maldet и ClamAv.

 Результат AI-BOLIT’а: 206 вредоносных скриптов.

взлом сайта на Joomla

 

Результат Maldet: 84 вредоносных файла

взлом сайта на Joomla

 

Результат ClamAv: 67 вредоносных файлов

взлом сайта на Joomla

 

Мы также запросили исходный вариант сайта у разработчиков и сравнили файлы с помощью системы контроля версий git. По результатам сравнения и проверки обнаруженных файлов выяснилось, что AI-BOLIT немного перестарался, то есть обнаружил все вредоносы + около 15% было “false positive” (ложных срабатываний). Clamav и Maldet обнаружили только половину всех вредоносов,  поэтому можно сделать вывод, что данные антивирусы подходят только для экспресс-проверки на заражение, но не подходят для “лечения” сайта. При “лечении” должны быть обнаружены и удалены все вредоносные и хакерские скрипты. Если останется хотя бы один бэкдор или веб-шелл, сайт взломают повторно. 

После проведенного анализа мы разобрали функционал обнаруженных “вредоносов” и классифицировали их. Результат в таблице:

взлом сайта на Joomla

При нецелевом взломе хорошо прослеживаются паттерны заражения, то есть наличие однотипных вредоносных и хакерских скриптов, случайно разбросанных по каталогам сайта или внедренных в файлы .php. Число скриптов каждого вида, их код может немного отличаться от заражения к заражению за счет обфускации и шифрования, но функционал каждого вида сохраняется. Кстати, время от времени в паттерн добавляется новый вид бэкдоров. Еще год назад не было №2 и №5.

Данный паттерн заражения характерен для CMS Joomla, Wordpress, и некоторых коммерческих CMS.

Давайте рассмотрим каждый скрипт из данного набора.

Номер 1 – бэкдор, который инжектируется (внедряется) в начало случайного файла .php. Код при просмотре не сразу можно заметить, так как он намеренно “отбит” пробельными символами вправо за пределы видимой части экрана (поэтому у нас всегда включен режим “переноса строк” в редакторе).

взлом сайта на Joomla

Данная незамысловатая запись представляет собой вызов:

evаl(bаse64_decоde($_POST[‘n746521’])

То есть будет выполнен произвольный PHP код, который закодирован в base64 и передан в переменную n746521 методом POST.

Насколько опасно для сайта, если данный фрагмент останется в файле? Очень опасно, так как по сути он предоставляет злоумышленнику полный контроль над аккаунтом хостинга: через него можно выполнить любой разрешенный код PHP, создать или загрузить файлы на хостинг, разослать спам, выполнить запросы к базе данных, и многое другое. А еще данный инжект удобен для хакера тем, что не является отдельным скриптом, который можно обнаружить по логам. Запросы с вредоносной нагрузкой могут отсылаться на index.php или любой URL сайта.

Поэтому данный фрагмент нужно вычистить из всех .php файлов (зараженных файлов будет от 5 до 20). У фрагмента меняется имя переменной в апострофах, остальные фрагменты - фиксированы.

Номер 2 – бэкдор-загрузчик. 

взлом сайта на Joomla

Выполняет аутентификацию по передаваемому параметру, далее делает одно из двух

  1. исполняет код, переданный в параметре через @evаl(bаse64_decоde($_POST[“FFSW3525KKSfj”]))
  2. создает файл с именем Ffhwu22313_fff555ffsd.php, сохраняет содержимое в файл и подключает его в бэкдор через @include_once, после чего удаляет. Таким образом обходит ограничение вызова eval, если он, например, заблокирован на хостинге.
     

Если скрипт просто открыть в браузере, то отдается статус 404 Страница не найдена. Таким образом бэкдор практически невозможно обнаружить снаружи.

Также как и №1, бэкдор позволяет получить полный контроль над аккаунтом хостинга, а в последствии, возможно, и всем сервером. Но №2 более функционален за счет обхода eval.

Хорошая новость для владельцев сайта в том, что бэкдор размещается в отдельном php скрипте, то есть его можно заметить невооруженным глазом, а также можно найти, используя find … –mtime … и find … -ctime … . Имена файлов – случайные последовательности, которые не встречаются в оригинальной версии CMS, так что при просмотре каталогов пропустить файлы будет сложно.

взлом сайта на Joomla

Номер 3 – это бэкдор-“младший брат” вредоноса №2.

взлом сайта на Joomla

Делает то же самое, но не умеет обходить запрещенный eval, то есть выполняет переданный код только через @evаl(bаse64_decоde($_POST[‘FFSW3525KKSfj’])

Номер 4 – классический WSO веб-шелл.

взлом сайта на Joomla

Веб-шелл – это “кухонный комбайн”, который делает работу хакера удобной на хостинге.

С помощью WSO шелла можно

  1. смотреть конфигурацию хостинга
  2. работать с файлами через удобный файловый менеджер (создавать, удалять, редактировать, скачивать и т.п.)
  3. работать с базой данных (изменять, удалять данные в таблицах и отправлять любые SQL запросы)
  4. выполнять различные строковые преобразования (кодировать, декодировать строковые значения)
  5. подбирать пароли (брутфорс)
  6. выполнять команды в режиме командной строки
  7. выполнять произвольный код PHP
  8. управлять сайтом (например, вставлять вирусный код в базу или файлы javascript) удаленно и автоматизированно

взлом сайта на Joomla

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

Номер 5 – дорвей, загружающий контент с удаленного сервера

взлом сайта на Joomla

Если его немного расшифровать, можно увидеть, с какого IP грузится контент и каким User Agent он “прикидывается”:

взлом сайта на Joomla

Дорвей генерирует тысячи страницы из разряда “черного SEO”. Страницы попадают в поисковый индекс и пагубно влияют на поисковую выдачу сайта, оригинальные страницы которого пессимизируются. Сайт может попасть под фильтр или полностью вылететь из поисковой выдачи.

Номер 6 – бэкдор, который принимает команды в виде зашифрованного серилизованного массива PHP.

взлом сайта на Joomla

Управляющие команды могут передаваться через POST переменные или COOKIE.

Бэкдор поддерживает команды:

  1. “i” – выдать версию PHP и версию бэкдора
  2. “e” – выполнить eval($data[“d”]) для кода, который передан в запросе

Фрагмент расшифрованного варианта данного бэкдора перечислен ниже.

взлом сайта на Joomla

Номер 7 – еще один бэкдор, который может размещаться как в отдельном файле размером до 400 байтов, так и инжектироваться в скрипты php. Является упрощенным вариантом №1  с теми же пагубными последствиями.

взлом сайта на Joomla

Номер 8 – дроппер руткита Mayhem. Это, пожалуй, самая опасная “нагрузка” в данном заражении.

взлом сайта на Joomla

Руткит Mayhem - серьезный вредонос для веб-серверов на ОС *nix, который превращает сервер в боевую единицу ботнета, но может работать в условиях ограниченных привилегий.

Задача данного файла сгенерировать руткит и загрузить его через LD_PRELOAD. Подробный разбор дроппера можно посмотреть по ссылке и в отчете Яндекса.

Номер 9 – мощный спам-рассыльщик.

взлом сайта на Joomla

Богатый функционал позволяет рассылать спам как через стандартную функцию mail(), так и с помощью SMTP протокола через сокеты. Поддерживаются различные шаблоны писем, рассылка по списку и пр. Исходный код хорошенько обфусцирован. Фрагмент третьего шага деобфускации выглядит так:

взлом сайта на Joomla

Номер 10 – дроппер, задача которого загрузить с удаленного сервера исполняемый шелл-файл, запустить его и по завершении удалить. С этого скрипта обычно начинается взлом сайта.

взлом сайта на Joomla

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

Итак, мы рассказали про все хакерские скрипты из данного паттерна заражения, среди которых оказались

  1. несколько видов бэкдоров
  2. спам-рассыльщик
  3. дорвей
  4. веб-шелл
  5. дроппер руткита

Как можно заметить, здесь нет ни одного вируса или редиректа, то есть сайт после взлома не начал распространять вредоносный код, перенаправлять посетителей, показывать баннеры, не появилось фишиновых страниц и т.п. и «снаружи» заметить взлом можно было только спустя пару месяцев, когда в поисковый индекс попадут дорвей-страницы.

Такой сайт бесполезно сканировать внешними антивирусами и антивирусными сервисами, они не покажут факт взлома, поскольку для детектирования хакерских скриптов нужно иметь доступ к файлам сайта. Поэтому первым, кто сможет сообщить владельцу сайта о факте взлома, скорее всего будет хостер. Сигналом администратору хостинг-компании для проверки сайта на взлом послужит рассылка спама с сервера (в нашей практике чаще всего встречается именно этот вариант). После сканирования аккаунта антивирус на хостинге обнаружит половину из перечисленных выше «вредоносов» (пару типов бэкдоров, руткит и спам-рассыльщик) и если владелец сайта удалит только перечисленные в антивирусном отчете скрипты, то взлом повторится и сайт снова заблокируют.  Поэтому в подобных случаях следует пользоваться механизмом проверки целостности файлов аккаунта (если, конечно, веб-мастер позаботился об этом заранее), выполнять полное сканирование, и удалять все вредоносные скрипты, а затем ставить защиту от взлома средствами операционной системы и веб-сервера. 

В качестве рекомендации по безопасности сайта рекомендуем

  1. использовать механизм integrity check (контроля целостности) или хотя бы сделать эталонный “снимок” файловой системы (список файлов, атрибутов и метаданных)
  2. регулярно проверять сайты сканерами вредоносного кода, чтобы обнаруживать проблему до того, как ее обнаружит хостер.

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

Хорошая новость в том, что теперь вы знаете, с чем придется иметь дело. Как гласит мудрость  - “предупрежден - значит вооружен“.