Attacchi APT prendono di mira il governo indiano con SHEETCREEP, FIREPOWER e MAILCREEP | Parte 2
Detection stack
- AIDR
- Alert
- ETL
- Query
Riassunto
Il rapporto copre l’operazione Sheet Attack, che ha distribuito tre backdoor su misura – SHEETCREEP, FIREPOWER e MAILCREEP – per compromettere le organizzazioni governative indiane. Gli impianti si sono basati su piattaforme cloud legittime per comando e controllo, tra cui Google Sheets, Firebase Realtime Database e Microsoft Graph API, aiutando l’attività a confondersi con il normale traffico SaaS. L’analisi nota anche artefatti coerenti con gli sviluppatori che utilizzano AI generativa per assistere la produzione di codice. La campagna è valutata come probabilmente collegata a un sottogruppo di APT36 basato in Pakistan.
Indagine
ThreatLabz ha condotto sia analisi dinamica che statica delle backdoor, documentando i metodi di persistenza, i flussi di lavoro C2, e il comportamento di esfiltrazione dei dati. Il team ha anche mappato l’infrastruttura di supporto, osservato il filtraggio basato su geografia e User-Agent, e catturato indicatori a livello di codice che suggeriscono l’assistenza AI nella generazione di sorgenti.
Mitigazione
Implementare rilevamenti stratificati per catene di consegna PDF/LNK sospetti, e monitorare per compiti programmati che avviano l’esecuzione di PowerShell o VBS. Applicare controlli rigorosi in uscita e il monitoraggio delle anomalie per i servizi cloud comunemente abusati come C2, tra cui Google Sheets, Firebase e Microsoft Graph. Utilizzare il blocco basato sugli hash per payload conosciuti e bloccare i domini e gli indirizzi IP malevoli identificati.
Risposta
Quando rilevato, isolare l’endpoint, terminare l’attività cmd.exe e PowerShell nascosta, rimuovere i compiti programmati correlati, ed eliminare i binari della backdoor. Preservare e rivedere i log C2 basati su Google Sheets e gli artefatti Firebase, poi cercare nell’ambiente ulteriori host che mostrano gli stessi indicatori.
graph TB %% Class definitions classDef action fill:#99ccff classDef process fill:#ffdd99 classDef file fill:#ffcccc classDef data fill:#e6e6ff classDef protocol fill:#d9ead3 classDef technique fill:#ffd966 %% Nodes – Initial Access action_phishing[“<b>Azione</b> – <b>T1204.001 Esecuzione Utente: Link Malevolo</b><br/>La vittima clicca un link malevolo in un PDF”] class action_phishing action file_phishing_pdf[“<b>File</b> – <b>Nome</b>: PDF di phishing<br/><b>Tecnica</b>: T1204.001”] class file_phishing_pdf file file_malicious_lnk[“<b>File</b> – <b>Nome</b>: LNK malevolo<br/><b>Tecnica</b>: T1204.002 Esecuzione Utente: File malevolo”] class file_malicious_lnk file process_powershell[“<b>Processo</b> – <b>Nome</b>: PowerShell<br/><b>Tecnica</b>: T1059.001 Interprete di comandi e script”] class process_powershell process file_dotnet_assembly[“<b>File</b> – <b>Nome</b>: Assembly .NET mascherato da PNG<br/><b>Tecniche</b>: T1620 Caricamento di codice riflessivo, T1036.008 Mascheramento del tipo di file”] class file_dotnet_assembly file process_hidden_cmd[“<b>Processo</b> – <b>Nome</b>: cmd.exe nascosto<br/><b>Tecnica</b>: T1059.003 Shell dei comandi”] class process_hidden_cmd process %% Nodes – Persistence action_persistence[“<b>Azione</b> – Configurazione della persistenza”] class action_persistence action task_scheduled[“<b>Tecnica</b> – T1053 Attività pianificata”] class task_scheduled technique script_gservices[“<b>File</b> – <b>Nome</b>: GServices.vbs<br/><b>Scopo</b>: Esecuzione ripetuta”] class script_gservices file %% Nodes – Command and Control action_c2[“<b>Azione</b> – Comando e Controllo”] class action_c2 action data_google_sheets[“<b>Archivio dati</b> – Google Sheets<br/><b>Tecnica</b>: T1102.002 Servizio Web: Foglio di calcolo”] class data_google_sheets data protocol_https[“<b>Protocollo</b> – HTTPS<br/><b>Tecnica</b>: T1071.001 Protocolli Web”] class protocol_https protocol technique_dead_drop[“<b>Tecnica</b> – T1102.001 Dead Drop Resolver”] class technique_dead_drop technique backup_firebase[“<b>Archivio dati</b> – URL Firebase<br/><b>Fallback</b>: Canale C2”] class backup_firebase data backup_gcs[“<b>Archivio dati</b> – Google Cloud Storage<br/><b>Fallback</b>: Canale C2”] class backup_gcs data encryption_tripledes[“<b>Tecnica</b> – T1027 File o informazioni offuscati/cifrati (TripleDES)”] class encryption_tripledes technique encryption_channel[“<b>Tecnica</b> – T1573 Canale cifrato”] class encryption_channel technique %% Nodes – Discovery action_discovery[“<b>Azione</b> – Ricognizione”] class action_discovery action command_whoami[“<b>Comando</b> – whoami<br/><b>Tecnica</b>: T1033 Scoperta utente/proprietario del sistema”] class command_whoami technique command_enum_domains[“<b>Comando</b> – Enumerazione degli account di dominio<br/><b>Tecnica</b>: T1087.002 Account di dominio”] class command_enum_domains technique %% Nodes – Execution of Commands action_execution[“<b>Azione</b> – Esecuzione dei comandi ricevuti”] class action_execution action %% Nodes – Cloud Account Creation cloud_account_creation[“<b>Azione</b> – Creazione account Google Cloud<br/><b>Tecnica</b>: T1136.003 Account cloud”] class cloud_account_creation action %% Nodes – Defense Evasion action_defense_evasion[“<b>Azione</b> – Elusione delle difese”] class action_defense_evasion action technique_hidden_fs[“<b>Tecnica</b> – T1564.005 File e directory nascosti”] class technique_hidden_fs technique %% Connections – Flow action_phishing –>|consegna| file_phishing_pdf file_phishing_pdf –>|contiene link a| file_malicious_lnk file_malicious_lnk –>|esegue| process_powershell process_powershell –>|carica via riflessione| file_dotnet_assembly file_dotnet_assembly –>|avvia| process_hidden_cmd process_hidden_cmd –>|abilita| action_persistence action_persistence –>|crea| task_scheduled action_persistence –>|esegue| script_gservices action_persistence –>|comunica con| action_c2 action_c2 –>|usa| data_google_sheets data_google_sheets –>|tramite| protocol_https action_c2 –>|impiega| technique_dead_drop action_c2 –>|fallback| backup_firebase action_c2 –>|fallback| backup_gcs action_c2 –>|cifra il traffico con| encryption_tripledes action_c2 –>|stabilisce| encryption_channel action_c2 –>|emette| action_discovery action_discovery –>|esegue| command_whoami action_discovery –>|esegue| command_enum_domains action_c2 –>|invia comandi a| action_execution action_execution –>|esegue tramite PowerShell| process_powershell action_execution –>|esegue tramite cmd nascosto| process_hidden_cmd action_c2 –>|richiede| cloud_account_creation cloud_account_creation –>|fornisce infrastruttura per| data_google_sheets cloud_account_creation –>|fornisce infrastruttura per| backup_firebase cloud_account_creation –>|fornisce infrastruttura per| backup_gcs action_execution –>|usa| action_defense_evasion action_defense_evasion –>|applica| technique_hidden_fs
Flusso di Attacco
Rilevamenti
Download o Upload via Powershell (via cmdline)
Visualizza
Dominio Microsoft Graph API Risolto da Processo Insolito (via dns_query)
Visualizza
File sospetti nel Profilo Utente Pubblico (via file_event)
Visualizza
Tentativo di Esecuzione Suspicious GNU Wget (via cmdline)
Visualizza
Chiama Metodi .NET Sospetti da Powershell (via powershell)
Visualizza
Esecuzione Sospetta da Profilo Utente Pubblico (via process_creation)
Visualizza
Possibile Infiltrazione/Esfiltrazione Dati/C2 tramite Servizi/Strumenti di Terze Parti (via dns)
Visualizza
File Estratti Sospetti da un Archive (via file_event)
Visualizza
IOC (SourceIP) per rilevare: Attacchi APT mirano il governo indiano usando SHEETCREEP, FIREPOWER e MAILCREEP | Parte 2
Visualizza
IOC (HashMd5) per rilevare: Attacchi APT mirano il governo indiano usando SHEETCREEP, FIREPOWER e MAILCREEP | Parte 2
Visualizza
IOC (DestinationIP) per rilevare: Attacchi APT mirano il governo indiano usando SHEETCREEP, FIREPOWER e MAILCREEP | Parte 2
Visualizza
IOC (HashSha1) per rilevare: Attacchi APT mirano il governo indiano usando SHEETCREEP, FIREPOWER e MAILCREEP | Parte 2
Visualizza
IOC (HashSha256) per rilevare: Attacchi APT mirano il governo indiano usando SHEETCREEP, FIREPOWER e MAILCREEP | Parte 2
Visualizza
Rilevamento dei Comandi PowerShell per SHEETCREEP e Distribuzione Backdoor FIREPOWER [Windows Powershell]
Visualizza
Rilevamento di Comunicazione C2 di SHEETCREEP e FIREPOWER Backdoor [Connessione di Rete Windows]
Visualizza
Esecuzione di Simulazione
Prerequisito: Il Check Pre-volo di Telemetria & Baseline deve essere passato.
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 mirare a generare la telemetria esatta prevista dalla logica di rilevamento. Esempi astratti o non correlati porteranno a una diagnosi errata.
-
Narrativa dell’Attacco & Comandi:
- Prepara il PNG malevolo:
- L’attaccante crea un file PNG (
details.png) che in realtà contiene un flusso di byte di un assembly .NET compilato, ma con i suoi byte invertiti per evitare l’analisi statica.
- L’attaccante crea un file PNG (
- Avviare PowerShell in modalità nascosta per caricare l’assembly:
- L’attaccante esegue PowerShell con
-WindowStyle Hidden -Commande un one-liner che legge i byte invertiti, ripristina l’ordine corretto, carica l’assembly tramite[System.Reflection.Assembly]::Load(), e invoca un punto di ingresso noto (Task10.Program::MB()).
- L’attaccante esegue PowerShell con
- Distribuzione alternava di LNK a base di fuoco potenza:
- Un .lnk preparato
.lnkscorciatoia eseguepowershell.execon--headless -e(script codificato) per recuperare ed eseguire un backdoor PowerShell remoto.
- Un .lnk preparato
Questi passaggi corrispondono esattamente alle stringhe che la regola Sigma cerca, garantendo che l’allarme venga attivato.
- Prepara il PNG malevolo:
-
Script di Test di Regressione:
# ------------------------------------------------- # Simulazione payload SHEETCREEP – riproduce esattamente la linea di comando # ------------------------------------------------- # 1. Creare un assembly .NET fittizio (semplice C# hello world) e compilarlo $source = @" using System; public class Task10 { public static void MB() { Console.WriteLine("Payload executed"); } } "@ $tempDir = "$env:TEMPsheetcreep" New-Item -ItemType Directory -Force -Path $tempDir | Out-Null $csFile = Join-Path $tempDir "Task10.cs" $dllFile = Join-Path $tempDir "Task10.dll" $source | Set-Content -Path $csFile -Encoding UTF8 # Compile using csc (assumes .NET Framework SDK installed) $cscPath = "$env:WINDIRMicrosoft.NETFramework64v4.0.30319csc.exe" & $cscPath /target:library /out:$dllFile $csFile # 2. Leggere i byte della DLL, invertirli e scrivere a un file .png $bytes = [IO.File]::ReadAllBytes($dllFile) $revBytes = $bytes[($bytes.Length-1)..0] $pngPath = Join-Path $tempDir "details.png" [IO.File]::WriteAllBytes($pngPath, $revBytes) # 3. Eseguire esattamente la linea di comando PowerShell malevola (questo attiverà la regola) $maliciousCmd = '-WindowStyle Hidden -Command "$b=[IO.File]::ReadAllBytes(''details.png'');' + '([System.Reflection.Assembly]::Load([byte[]]($b[($b.Length-1)..0])).GetType("Task10.Program")::MB())"' Start-Process -FilePath "$env:SystemRootSystem32WindowsPowerShellv1.0powershell.exe" ` -ArgumentList $maliciousCmd ` -WindowStyle Hidden ` -NoNewWindow # Cleanup (opzionale, eseguire dopo la verifica) # Remove-Item -Recurse -Force $tempDir -
Comandi di Pulizia:
# Rimuovere file e directory temporanei creati per il test $tempDir = "$env:TEMPsheetcreep" if (Test-Path $tempDir) { Remove-Item -Recurse -Force $tempDir }