Слабые пароли: наш SOC отразил массовую атаку на более чем 100 сайтов
Попытка массового взлома сайтов на самом популярном в мире движке WordPress и известной платформе для электронной коммерции OpenCart была зафиксирована нашим центром кибербезопасности. Расследование показало, что слабые логин и пароль могут нанести ущерб десяткам сайтов всего за несколько минут. Проблема устранена для клиентов hoster.by, но описанные ниже индикаторы могут помочь защитить и другие сайты.
Все началось с блокировки системой безопасности hoster Guard подозрительных запросов на 2 сайта, разработанных на OpenCart. Получив оповещение, наши аналитики сразу начали изучать ситуацию и обнаружили, что к административным панелям этих ресурсов был получен несанкционированный доступ.
Мы проанализировали лог-файлы и собрали перечень индикаторов компрометации – характерных признаков атаки. По этим признакам быстро выявили еще больше сотни пострадавших клиентов, которые не использовали при этом WAF hoster Guard и другие инструменты защиты. Ход проведения атак был однотипным, лишь немного отличались некоторые индикаторы компрометации.
Каждый раз вход в CMS происходил под учетными данными пользователей. И в каждом случае это были слабые логины и пароли вида admin:admin или test:test123.
Все входы были сделаны с первой попытки и в короткий промежуток времени в 12 минут: с 10:55 до 11:07. Первые обращения были зафиксированы в 10:55. Активная фаза атаки длилась 3 минуты с 11:04 до 11:07. С 10:55 до 11:04 проводилась разведка путем обращения к главной странице ресурсов. Это говорит о том, что у злоумышленников заранее были все логины и пароли от веб-ресурсов.
Примечательно, что атака производилась с IPv6. За текущий год это всего второй подобный случай в “истории наблюдений” нашего SOC, как правило во время киберинцидентов используется IPv4.
IP-адрес злоумышленника: 2002:6dac:5ba2::6dac:5ba2
Пример POST-запроса входа:
Во всех случаях вход производился под учетными данными с привилегированными правами, которые позволяют загружать файлы на ресурсы. В данном примере — с правами администратора.
Ход атаки на примере сайтов на OpenCart
После получения доступа к ресурсу злоумышленник загружал вредоносный файл через отправку запроса. Для этого использовалась уязвимость в модификации OpCarts. При обращении к /admin/index.php?route=extension/installer/upload появляется возможность загрузки файлов, однако с явным ограничением "Требуются файлы модификаций .ocmod.zip или .ocmod.xml".
Для обхода ограничения был создан файл 02x24.ocmod.xml . В данном случае место, откуда злоумышленник загрузил файл, видно из логов:
Путь: C:\Users\Administrator\Desktop\oc_upl2/modules20/02x24.ocmod.xml
Содержание файла 02x24.ocmod.xml :
<?xml version="1.0" encoding="utf-8"?>
<modification>
<name><![CDATA[OpCarts]]></name>
<code>OpCarts</code>
<version>1.0 </version>
<author>teknohiz.com>/author>
<link>teknohiz.com</link>
<file path="catalog/controller/common/header.php">
<operation>
<search> <![CDATA[public function index() {]]>
<add position="after" trim="true"><![CDATA[
<$datasss = base64_decode('ВРЕДОНОСНЫЙ КОД');
$fp = fopen($_SERVER['DOCUMENT_ROOT'].'/image.php', 'w');
fwrite($fp, $datasss.PHP_EOL);
fclose($fp);
$fp = fopen($_SERVER['DOCUMENT_ROOT'].'/admin/image.php', 'w');
fwrite($fp, $datasss.PHP_EOL);
fclose($fp);
]]></add>
</operation>
</file>
</modification>
Структура XML
Код внутри элемента <add>
Код, который будет добавлен, включает:
- Декодирование строки:
- Строка закодирована в base64 и декодируется с помощью функции base64_decode().
- Запись в файл:
- fopen($_SERVER['DOCUMENT_ROOT'].'/image.php', 'w'): Открывает (или создает) файл image.php в корневом каталоге веб-сервера для записи ('w').
- fwrite($fp, $datasss.PHP_EOL): Записывает в файл содержимое переменной $datasss, добавляя символ новой строки (конец строки) после него.
- fclose($fp): Закрывает файл после завершения записи.
Создание файла admin/image.php:
- fopen($_SERVER['DOCUMENT_ROOT'].'/admin/image.php', 'w'): Открывает (или создает) файл image.php в подкаталоге admin для записи.
- Запись и закрытие выполняются аналогично первому файлу.
По итогу выполнения POST запроса:
В файл header.php добавляется код:
$datasss = base64_decode('ВРЕДОНОСНЫЙ КОД')
$fp = fopen($_SERVER['DOCUMENT_ROOT'].'/image.php', 'w');
fwrite($fp, $datasss.PHP_EOL);
fclose($fp);
$fp = fopen($_SERVER['DOCUMENT_ROOT'].'/admin/image.php', 'w');
fwrite($fp, $datasss.PHP_EOL);
fclose($fp);
В свою очередь эти функции, выполняясь из файла header.php, создают файлы:
/image.php
/admin/image.php
Содержанием которых является вредоносный код задекодированный из строки base64.
Сам вредоносный код довольно большой. Скриншот с выгрузкой запроса красноречиво показывает его длину.
Параллельно с анализом лог-файлов мы изучили полезную нагрузку запроса. Сам запрос объемный, но довольно простой, поэтому аналитикам не составило труда быстро разобраться, что он делает и как именно. Код предназначен для создания и использования редиректов, для сбора информации о пользователях, а также для создания файлов на ресурсе. Это может быть необходимо для подготовки злоумышленником инфраструктуры с целью проведения других кибератак.
О вредоносном коде
Мы предоставим только часть функционала, чтобы исключить возможность дальнейшего использования кода.
В код добавлены функции генерации случайных строк для усложнения анализа его работы. Также написаны строки, устанавливающие бесконечное время выполнения, чтобы избежать прерываний:
Основной вредоносный функционал находится в функции get_file. Там же есть $file с зашифрованным кодом. При расшифровке base64 и анализе видно, что он используется для сбора данных о пользователях: с какого URL он пришел на сайт, информация об устройстве, браузере, операционной системе, cookie. Редиректы на вредоносные сайты происходит через HTTP-заголовок с добавлением JavaScript для выполнения редиректов в браузере.
Перенаправления осуществляются через HTTP-заголовки:
Или с использованием JavaScript:
Сам скрипт сканирует файловую систему, начиная с корневой директории веб-сервера (DOCUMENT_ROOT). Затем ищет файл index.php и исключает из поиска определенные директории (admin, wp-content) и файл (wp-config.php).
Потом генерируется код, который вставляется в начало найденных файлов
Пример кода, который генерируется в начале файла:
Затем происходит перенаправление пользователей на внешние сайты из массивов $fulldom и $fulldoms
И далее перенаправляет на другие сайты, например, онлайн-казино.
Сайты, на которые выполняется редирект:
http://pitmalohit[.]online/
http://purinagun[.]space/
http://purinagun[.]online/
http://partagun[.]online/
http://jikolahit[.]online/
http://jikolahit[.]fun/
http://pitmalohit[.]website/help/
После внедрения кода права на файлы изменяются на 0444 (только чтение).
Как уже говорилось, функционал скрипта довольно обширный. Он позволяет создавать файлы и взаимодействовать с ними, что открывает много возможностей для злоумышленников. Хочется верить, что целью данной серии атак был заработок через перенаправление трафика и сбора информации, а не подготовка инфраструктуры для проведения еще более масштабных киберпреступлений.
«Мы ежедневно фиксируем попытки разного типа атак на ресурсы клиентов и оперативно устраняем их последствия. Но в случае массовых взломов важно показать признаки, по которым все желающие смогут проверить свои сайты, которые находятся в зоне риска. Для этого мы подробно описываем результаты расследования», — комментирует генеральный директор hoster.by Сергей Повалишев.
«Эта массовая атака ярко показывает, как часто владельцы сайтов используют слабые пароли, по сути оставляя “открытые двери” для киберпреступников. Нет рекомендации более банальной и в то же время важной — убедитесь, что административная панель вашего сайта защищена стойким паролем. Вторая рекомендация — используйте инструменты защиты веб-приложений и осуществляйте мониторинг ваших ресурсов. Именно благодаря тому, что ряд клиентов использовали hoster Guard, наши аналитики быстро получили уведомления о подозрительной активности на этих сайтах и моментально пресекли попытку взлома», — комментирует руководитель центра кибербезопасности hoster.by Антон Тростянко.
Индикаторы компрометации:
IP-адреса:
2002:6dac:5ba2::6dac:5ba2
95.181.161.115
Время взлома:
10:55 - 11:07 16.12.2024
Инструменты и файлы используемые злоумышленником:
02x24.ocmod.xml
md5: 2dcdca14fc57398aa71a8f99c75b8744
sha1: a5b352a87faa7523c13a5e9ddc16b65161827329
sha256: 6af20907ec33cd814a5ceb7d640b3ac2ec02d70399180da754378afa3675ae36
Fullpath: C:\Users\Administrator\Desktop\oc_upl2/modules20/02x24.ocmod.xml
Модифицированные файлы:
header.php
Index.php
Не предоставляем контрольные суммы, так как вредоносный код внедряется в легитимные файлы, не перезаписывая их, что делает каждый файл уникальным для каждого ресурса.
Созданные файлы:
image.php
md5: 1125a896ea650eba5fe8e362d11c471d
sha1: de74b40a3db83d155ae4e809c824ce47be6b438b
sha256: f9a7569a4ff11c6e11d570448a057913b39b0458adc6d4bcb34130cec95b3096
Admin/image.php
md5: 1125a896ea650eba5fe8e362d11c471d
sha1: de74b40a3db83d155ae4e809c824ce47be6b438b
sha256: f9a7569a4ff11c6e11d570448a057913b39b0458adc6d4bcb34130cec95b3096
Взаимодействия с ресурсами:
http://pitmalohit[.]online/
http://purinagun[.]space/
http://purinagun[.]online/
http://partagun[.]online/
http://jikolahit[.]online/
http://jikolahit[.]fun/
http://pitmalohit[.]website/help/