ESET Research GopherWhisper: Una tana piena di malware
Detection stack
- AIDR
- Alert
- ETL
- Query
Riepilogo
ESET ha identificato un gruppo APT allineato alla Cina, precedentemente sconosciuto, tracciato come GopherWhisper, che prende di mira un’organizzazione governativa in Mongolia. L’attore della minaccia opera un ecosistema di malware personalizzato basato su backdoor, loader e injector Go e C++, abusando pesantemente di piattaforme cloud legittime per attività di comando e controllo. Il suo set di strumenti, tra cui LaxGopher, RatGopher e BoxOfFriends, comunica tramite servizi come Discord, Slack, Microsoft Outlook e file.io. I ricercatori hanno osservato per la prima volta la campagna nel gennaio 2025.
Indagine
L’analisi di ESET ha scoperto la più ampia gamma di strumenti del gruppo, documentando i suoi metodi di iniezione e identificando i token API di Slack e Discord usati nell’operazione. I ricercatori hanno anche estratto migliaia di messaggi di comando e controllo e bozze di email di Outlook legate alla campagna. La loro indagine ha mappato l’infrastruttura di supporto e ha mostrato come gli aggressori si siano affidati a servizi online fidati per nascondere le comunicazioni ed esfiltrare i dati.
Mitigazione
I difensori dovrebbero monitorare l’attività non autorizzata delle API di Slack, Discord e Outlook, bloccare i caricamenti sospetti su file.io, ed applicare controlli rigorosi sul comportamento di caricamento delle DLL. I team di sicurezza dovrebbero anche rilevare attività di iniezione anomale di svchost.exe e indagare su binari sconosciuti basati su Go in esecuzione nell’ambiente.
Risposta
Se viene rilevata attività di GopherWhisper, isola immediatamente il sistema interessato, termina i processi malevoli, rimuovi le DLL iniettate, reimposta gli account di servizio compromessi e revoca eventuali token API esposti. Dovrebbe seguire un’indagine forense completa, insieme alla caccia alla minaccia in tutta la rete per individuare artefatti correlati o ulteriori host compromessi.
"graph TB %% Class definitions classDef malware fill:#ffcccc classDef process fill:#c2f0c2 classDef file fill:#ffd9b3 classDef technique fill:#e6e6ff classDef service fill:#ffffcc classDef network fill:#d9d9d9 %% Nodes node_initial_loader["<b>Malware</b> – <b>JabGopher Loader</b><br/><b>Azione</b>: Crea svchost.exe e inietta la backdoor LaxGopher"] class node_initial_loader malware node_svc_host["<b>Processo</b> – svchost.exe"] class node_svc_host process node_laxgopher["<b>Malware</b> – <b>LaxGopher</b> backdoor (DLL)"] class node_laxgopher malware node_whisper_dll["<b>File</b> – whisper.dll (mascheramento)"] class node_whisper_dll file node_process_injection["<b>Tecnica</b> – T1055 Iniezione di Processo<br/><b>Descrizione</b>: Inietta codice malevolo in un processo in esecuzione"] class node_process_injection technique node_reflective_loading["<b>Tecnica</b> – T1620 Caricamento di Codice Riflettivo<br/><b>Descrizione</b>: Carica codice in memoria senza utilizzare il caricatore standard del OS"] class node_reflective_loading technique node_masquerading["<b>Tecnica</b> – T1036 Mascheramento<br/><b>Descrizione</b>: Rinominare file per sembrare legittimi"] class node_masquerading technique node_frienddelivery["<b>Malware</b> – <b>FriendDelivery DLL</b>"] class node_frienddelivery malware node_boxoffriends["<b>Malware</b> – <b>BoxOfFriends</b> backdoor"] class node_boxoffriends malware node_go_backdoor["<b>Malware</b> – Backdoor basate su Go (RatGopher, LaxGopher)"] class node_go_backdoor malware node_c2_slack["<b>Servizio</b> – Slack (Servizio Web)"] class node_c2_slack service node_c2_discord["<b>Servizio</b> – Discord (Servizio Web)"] class node_c2_discord service node_c2_outlook["<b>Servizio</b> – Microsoft 365 Outlook Mail REST API"] class node_c2_outlook service node_tech_c2_web["<b>Tecnica</b> – T1102.002 Comunicazione Bidirezionale del Servizio Web<br/><b>Descrizione</b>: Usa servizi web legittimi per C2"] class node_tech_c2_web technique node_tech_mail["<b>Tecnica</b> – T1071.003 Protocolli di Posta<br/><b>Descrizione</b>: Usa protocolli di posta per C2"] class node_tech_mail technique node_remote_access["<b>Tecnica</b> – T1219 Strumenti di Accesso Remoto<br/><b>Descrizione</b>: Fornisce esecuzione di comandi remoti"] class node_remote_access technique node_compactgopher["<b>Malware</b> – CompactGopher"] class node_compactgopher malware node_archive["<b>Tecnica</b> – T1560.001 Archiviazione dei dati raccolti tramite utilità<br/><b>Descrizione</b>: Comprimi i dati prima dell’esfiltrazione"] class node_archive technique node_data_limit["<b>Tecnica</b> – T1030 Limiti di dimensione del trasferimento dati<br/><b>Descrizione</b>: Gestisci i limiti di dimensione comprimendo o dividendo i dati"] class node_data_limit technique node_exfil_fileio["<b>Servizio</b> – file.io cloud storage"] class node_exfil_fileio service node_exfil_tech["<b>Tecnica</b> – T1567.002 Esfiltrazione tramite Servizio Web su Cloud Storage<br/><b>Descrizione</b>: Utilizza storage cloud come canale di esfiltrazione"] class node_exfil_tech technique node_transfer_to_cloud["<b>Tecnica</b> – T1537 Trasferimento Dati su Account Cloud<br/><b>Descrizione</b>: Sposta dati su un account cloud controllato dall’attaccante"] class node_transfer_to_cloud technique node_sslordoor["<b>Malware</b> – SSLORDoor"] class node_sslordoor malware node_raw_socket["<b>Tecnica</b> – Comunicazione su Socket Grezzi"] class node_raw_socket technique node_port_443["<b>Rete</b> – Porta 443"] class node_port_443 network %% Connections node_initial_loader –>|crea| node_svc_host node_initial_loader –>|inietta| node_laxgopher node_laxgopher –>|usa| node_process_injection node_laxgopher –>|usa| node_reflective_loading node_laxgopher –>|nome file| node_whisper_dll node_whisper_dll –>|si maschera come| node_masquerading node_frienddelivery –>|carica| node_boxoffriends node_boxoffriends –>|usa| node_process_injection node_boxoffriends –>|usa| node_reflective_loading node_laxgopher –>|C2 via| node_c2_slack node_go_backdoor –>|C2 via| node_c2_discord node_go_backdoor –>|C2 via| node_c2_slack node_c2_slack –>|usa tecnica| node_tech_c2_web node_c2_discord –>|usa tecnica| node_tech_c2_web node_boxoffriends –>|crea bozze via| node_c2_outlook node_c2_outlook –>|usa tecnica| node_tech_mail node_go_backdoor –>|fornisce| node_remote_access node_sslordoor –>|fornisce| node_remote_access node_compactgopher –>|comprimi dati con| node_archive node_compactgopher –>|gestisce limiti di dimensione via| node_data_limit node_archive –>|caricato su| node_exfil_fileio node_exfil_fileio –>|usa tecnica| node_exfil_tech node_exfil_fileio –>|usa tecnica| node_transfer_to_cloud node_sslordoor –>|usa socket grezzi su| node_port_443 node_sslordoor –>|usa| node_raw_socket "
Flusso di attacco
Rilevamenti
Nome file breve (via cmdline)
Visualizza
Disabilita il monitoraggio in tempo reale di Windows Defender e altre modifiche alle preferenze (via cmdline)
Visualizza
Possibile uso di WebBrowserPassView (via cmdline)
Visualizza
Possibile infiltrazione/esfiltrazione di dati/Comando e Controllo tramite servizi/strumenti di terze parti (via proxy)
Visualizza
Rilevamento del C&C di GopherWhisper tramite Slack, Discord e Microsoft Graph API [Connessione di rete Windows]
Visualizza
Iniezione di processo sospetta da parte di GopherWhisper [Creazione processo Windows]
Visualizza
Esecuzione della simulazione
Prerequisito: Il Controllo Pre-volo di Telemetria e Baseline deve essere superato.
Motivazione: Questa sezione dettaglia l’esecuzione precisa della tecnica dell’avversario (TTP) progettata per attivare la regola di rilevamento. I comandi e la narrativa DEVONO riflettere direttamente i TTP identificati e mirare a generare la telemetria esatta prevista dalla logica di rilevamento.
-
Narrativa e comandi di attacco:
L’attaccante genera prima un nuovosvchost.exeprocesso (l’host scelto per l’iniezione). Usando un injectore di DLL riflettivo, il codice malevoloLaxGopher.dllviene caricato nella memoria di quel processo, ottenendo Iniezione di Libreria a Collegamento Dinamico (T1055.001). Una volta che la backdoor è residente, apre uncmd.exenascosto per eseguire comandi ricevuti dal suo server C2, soddisfacendo Windows Command Shell (T1059.003). Questa catena rispecchia il comportamento descritto nella ricerca di GopherWhisper e genera i due eventi di creazione processo che la regola Sigma cerca. -
Script di test di regressione:
# ------------------------------------------------------------- # Simulazione di iniezione di processo in stile GopherWhisper # ------------------------------------------------------------- $svcHost = "$env:SystemRootSystem32svchost.exe" $dllPath = "C:TempLaxGopher.dll" # Supponiamo che qui esista una DLL di test benigno $cmdPath = "$env:SystemRootSystem32cmd.exe" # 1. Avvia una nuova istanza di svchost.exe (sospesa) per essere il target dell'iniezione $svchost = Start-Process -FilePath $svcHost -ArgumentList "-k", "netsvcs" ` -PassThru -WindowStyle Hidden # 2. Esegui un'iniezione riflessiva semplicistica (segnaposto) # In un test reale chiameresti un vero injectore; qui registriamo solo l'intento. Write-Host "[*] Iniettando $dllPath nel PID $($svchost.Id) (simulato)" # Comando di iniezione simulato: # .Invoke-ReflectiveDLLInjection.ps1 -Pid $svchost.Id -Path $dllPath # 3. Avvia cmd.exe dal contesto del processo iniettato (simulato) Write-Host "[*] Avviando cmd.exe da svchost iniettato (simulato)" Start-Process -FilePath $cmdPath -ArgumentList "/c echo Compromesso > C:Temppwned.txt" ` -WindowStyle Hidden # 4. Pausa breve per consentire a Sysmon di registrare gli eventi Start-Sleep -Seconds 5 -
Comandi di pulizia:
# Termina i processi simulati svchost.exe e cmd.exe Get-Process -Name svchost -ErrorAction SilentlyContinue | Stop-Process -Force Get-Process -Name cmd -ErrorAction SilentlyContinue | Stop-Process -Force # Rimuovi la DLL di test (opzionale) Remove-Item -Path "C:TempLaxGopher.dll" -Force -ErrorAction SilentlyContinue