Per sei mesi, tra ottobre 2025 e aprile 2026, un gruppo di aggressori ancora privo di attribuzione ha violato server Linux appartenenti a enti governativi e a infrastrutture ad essi collegate. Dietro di sé ha lasciato un indizio insolito per questo tipo di operazioni: commenti nel codice sorgente che sembrano usciti direttamente dalla risposta di un chatbot, passo dopo passo, come se l’operatore avesse semplicemente copiato l’output di un modello linguistico dentro lo script e lo avesse lanciato. Unit 42 di Palo Alto Networks ha ricostruito l’intera campagna, tracciata come cluster CL-UNK-1211, svelando un arsenale che mescola un RAT multipiattaforma scritto in Go, web shell camuffate da componenti Plesk e tecniche di furto credenziali al confine tra ingegneria sociale e sabotaggio della shell.
Un cluster senza nome, ma con moltissime impronte
Unit 42 non ha attribuito CL-UNK-1211 a un gruppo nazionale o a una crew cybercriminale nota: non ci sono sovrapposizioni di infrastruttura, malware o modus operandi sufficienti a collegare la campagna ad attori già catalogati. Quello che i ricercatori Roey Porat e Tom Fakterman hanno potuto ricostruire, grazie alla telemetria raccolta su più ambienti compromessi, è però un quadro operativo molto dettagliato: l’obiettivo dichiarato era la raccolta di intelligence contro entità governative e organizzazioni affiliate a Stati, con un focus quasi ossessivo su server Linux e database interni.
L’accesso iniziale passava quasi sempre da una web shell PHP caricata su sistemi già esposti o compromessi in precedenza. Da lì, gli aggressori modificavano la direttiva auto_prepend_file nella configurazione PHP globale (in /etc/php/ e /opt/plesk/php/), così da far eseguire il proprio codice malevolo a ogni singola richiesta gestita dal server, indipendentemente dall’applicazione web effettivamente in esecuzione. La web shell principale, salvata come /usr/lib/php/plesk_sys_driver.php, si mimetizzava deliberatamente tra i file legittimi del pannello di hosting Plesk.
SysGoRAT: la backdoor che parla WebSocket
Il componente più sofisticato della campagna è un trojan di accesso remoto inedito, che Unit 42 ha battezzato SysGoRAT: scritto in Go, compila per Linux e Windows e comunica con l’infrastruttura di comando e controllo tramite WebSocket cifrato (wss://<indirizzo>/ws). Sul disco si nasconde sotto nomi plausibili come sys-control-client, pip2.7 o ea_install, e per la persistenza crea un servizio systemd dedicato, un cron job o, su Windows, una voce di avvio mascherata da componente OneDrive.
Il protocollo supporta sette tipologie di comando — tra cui esecuzione shell interattiva, trasferimento file, screenshot e, particolarmente interessante, l’uso della macchina infetta come proxy SOCKS interno per raggiungere segmenti di rete altrimenti irraggiungibili dall’esterno. È lo stesso schema che gli aggressori hanno riutilizzato più volte per muoversi lateralmente una volta dentro il perimetro.
Il furto di password passa da un finto prompt di sudo
Una delle tecniche più curiose documentate nel report riguarda il furto delle credenziali di amministrazione. Gli aggressori modificavano il file .bashrc dell’utente in modo che, al momento di digitare sudo, comparisse una richiesta di password identica in tutto e per tutto a quella originale: l’input veniva silenziosamente salvato in un file camuffato da log legittimo (Solarwinds.StatusLog.txt — un nome scelto apposta per confondersi con l’infrastruttura di monitoraggio, non perché SolarWinds risulti realmente compromessa), dopodiché il vero comando sudo veniva eseguito normalmente, senza che la vittima notasse nulla. Un trucco identico, con la stessa logica di intercettazione silenziosa, era stato inserito anche nella pagina di login dei pannelli di amministrazione web compromessi.
Per l’escalation dei privilegi locali, il toolkit include LinPEAS per l’enumerazione automatica delle debolezze di sistema e un exploit per PwnKit (CVE-2021-4034), oltre a binari SUID rinominati come .libpython-helper e .libsystemd-helper — rispettivamente un interprete Python con os.setuid(0) forzato e una shell SUID root custom — e persino una copia di /bin/bash con bit SUID impostato, salvata come .tourch.
L’indizio dell’intelligenza artificiale
Ciò che distingue CL-UNK-1211 da una campagna di spionaggio Linux “qualunque” è lo stile del codice. Gli script PHP, Bash, Python e JavaScript usati nelle varie fasi dell’attacco contengono commenti insolitamente estesi e discorsivi, con spiegazioni passo-passo del tipo che un modello linguistico produce quando gli si chiede di scrivere ed esplicitare uno script, intestazioni di sezione pensate più per essere lette da un sistema automatico che da un umano, e un uso pervasivo della codifica Base64 per offuscare comandi altrimenti banali. Gli operatori passano con disinvoltura tra quattro linguaggi diversi nella stessa catena d’attacco, un comportamento compatibile sia con la copia diretta di output generato da IA, sia con l’uso di un agente automatizzato per produrre ed eseguire il codice.
Unit 42 è cauta nel trarre conclusioni definitive — non ci sono prove di un’esecuzione realmente autonoma, “agentica”, dell’intera catena — ma un dettaglio rafforza l’ipotesi: lo script pensato per comprimere intere caselle di posta elettronica in archivi ZIP contiene un errore di sintassi che ne impedisce l’esecuzione, un tipo di errore plausibile quando il codice viene generato o adattato rapidamente senza una verifica accurata, e poi lanciato così com’è.
Alla ricerca degli account social dei dipendenti governativi
Tra gli strumenti più particolari del kit figura uno script, search_social.php, progettato per analizzare le intestazioni delle caselle di posta elettronica di servizio alla ricerca di riferimenti a Facebook, Instagram, TikTok e altre piattaforme social, nel tentativo di collegare indirizzi email istituzionali ad account personali dei dipendenti. Una volta ottenuto l’accesso root — in diversi casi documentato nel report — gli aggressori lasciavano proprie chiavi SSH in authorized_keys per garantirsi un rientro futuro, e si muovevano verso server SQL con un doppio salto tramite sshpass e, dove disponibile, xp_cmdshell su MSSQL.
Cancellare le tracce, quasi come un pentest legittimo
Nella fase finale, gli attaccanti cancellavano log e alteravano i timestamp dei file con tecniche di timestomping (MITRE ATT&CK T1070.006), lasciando indizi — come le password di comodo RedTeamOps2025 e pentest123 trovate nell’ambiente — che ricordano da vicino l’attività di un red team legittimo. In almeno un caso lo script ha tentato di terminare i processi di Cortex XDR installato sull’host, ma la protezione ha bloccato l’azione, permettendo a Unit 42 di osservare e documentare la catena prima che venisse ripulita.
Due righe per i difensori
- Applicare regole restrittive sul traffico in uscita per limitare reverse shell e connessioni verso servizi di file-sharing anonimi (transfer.sh, bashupload.com, filebin.net, l’API di catbox.moe).
- Monitorare con EDR l’uso anomalo di netcat, bash e python per aprire shell interattive o named pipe.
- Verificare periodicamente la direttiva
auto_prepend_filenelle configurazioni PHP e cercare file PHP estranei nelle directory di sistema, non solo in quelle delle applicazioni web. - Controllare
.bashrc,authorized_keyse le unità systemd/cron per persistenza non autorizzata, inclusi nomi plausibili ma non riconosciuti (es. varianti di “sys-“, “libsystemd-“, “libpython-“). - Non fidarsi del solo stato dei log: la cancellazione delle tracce è parte integrante del TTP di questo cluster.
- Dare priorità alla patch di CVE-2021-4034 (PwnKit) sui sistemi Linux non ancora aggiornati.
Il caso CL-UNK-1211 si inserisce in una tendenza che Unit 42 e altri vendor stanno osservando sempre più spesso nel 2026: l’IA generativa non sta (ancora) creando exploit del tutto nuovi, ma sta riducendo drasticamente il tempo necessario a un operatore umano per scrivere, adattare e distribuire strumenti di post-exploitation efficaci su più piattaforme. Per i difensori, questo significa prepararsi a campagne più rapide da assemblare, più eterogenee nel linguaggio di sviluppo usato e, paradossalmente, più facili da individuare proprio per lo stile di commento innaturale che il codice generato da LLM porta spesso con sé.
Indicatori di compromissione
IP C2 / infrastruttura:
45.88.188[.]140 198.23.185[.]234 138.68.244[.]146
185.21.136[.]6 72.61.89[.]179 104.194.158[.]65 (default SysGoRAT C2)
109.224.53[.]140 162.243.175[.]162 154.93.37[.]228
141.164.58[.]87 88.80.150[.]232 88.119.167[.]57
173.212.247[.]23 104.248.131[.]53 147.182.224[.]216
93.93.112[.]57 192.210.183[.]17
Domini:
magento[.]ink
solidmonpe[.]com
wibu-bau-bawang[.]online
beraskencur[.]site
Percorsi/artefatti su host compromessi:
/usr/lib/php/plesk_sys_driver.php (web shell camuffata da componente Plesk)
.libpython-helper, .libsystemd-helper (SUID helper per privilege escalation)
.tourch (copia SUID di /bin/bash)
Solarwinds.StatusLog.txt (log del credential-logger su .bashrc)
/dev/shm/.gs-10085/ (GSocket mascherato da kcached / gs-dbus)
sys-control-client, pip2.7, ea_install (nomi su disco di SysGoRAT)
C2 SysGoRAT (WebSocket):
wss://<host>/ws
MITRE ATT&CK:
T1070.006 - Indicator Removal: Timestomping
T1068 - Exploitation for Privilege Escalation (PwnKit / CVE-2021-4034)
T1505.003 - Web Shell
T1556 - Modify Authentication Process (hijack sudo via .bashrc)
Fonte primaria: Unit 42, Palo Alto Networks -
unit42.paloaltonetworks.com/ai-campaign-targets-linux-infrastructure/
Lascia un commento
Devi essere connesso per inviare un commento.