PowerShell: Command and Scripting Interpreter PowerShell (T1059.001)

PowerShell rappresenta uno dei vettori di esecuzione più abusati nell'intero panorama delle minacce Windows. Si tratta di una shell interattiva e di un ambiente di scripting profondamente integrato nel sistema operativo, con accesso diretto a .NET Framework, WMI, COM e alle API native. Questa potenza, unita alla firma legittima Microsoft dei binari coinvolti, la rende ideale per operazioni living-off-the-land.

La tecnica è mappata alla tattica TA0002 (Execution) e compare trasversalmente nelle fasi post-exploitation, dal caricamento in memoria di payload fino al lateral movement via WinRM. Gli avversari sfruttano cmdlet come Start-Process, Invoke-Command e Invoke-Expression, oppure aggirano il binario powershell.exe invocando direttamente l'assembly System.Management.Automation.dll tramite runner .NET custom.

I numeri raccontano la centralità della tecnica: 83 gruppi APT documentati, 124 famiglie malware, 16 campagne tra cui SolarWinds Compromise, Operation Dream Job e i due attacchi al settore energetico ucraino. Framework offensivi come Empire, PowerSploit, PoshC2 e Cobalt Strike hanno costruito intere kill chain attorno a PowerShell, spesso ricorrendo a esecuzione fileless, offuscamento Base64 e caricamento riflessivo di assembly per eludere AV ed EDR tradizionali.

L'abuso di PowerShell in un ingaggio red team parte dalla ricognizione della postura difensiva. Il primo controllo riguarda la versione installata e l'execution policy: $PSVersionTable.PSVersion rivela se il target monta ancora PowerShell 2.0 (privo di ScriptBlock Logging), condizione ideale per il downgrade attack con powershell -Version 2. Segue la verifica del Language Mode tramite $ExecutionContext.SessionState.LanguageMode: se restituisce ConstrainedLanguage, molte primitive .NET risultano bloccate.

Per l'esecuzione fileless, il pattern classico rimane il download cradle:

powershell -nop -w hidden -enc

dove il payload decodificato invoca (New-Object Net.WebClient).DownloadString() seguito da IEX. Varianti più moderne usano Invoke-RestMethod o BitsTransfer per confondersi con traffico legittimo. Il caricamento riflessivo di assembly via [System.Reflection.Assembly]::Load([Convert]::FromBase64String($b)) permette di eseguire binari .NET interamente in memoria, tecnica adottata da POWERTRASH di FIN7.

Sul fronte framework, gli strumenti da laboratorio più maturi sono:

  • PowerSploit (open source, non più mantenuto ma ancora funzionale) per moduli come Invoke-Mimikatz e Invoke-DllInjection
  • PowerSharpPack (open source), collezione di tool C# eseguibili via PowerShell
  • Nishang (open source) per script post-exploitation
  • Covenant (open source) e Sliver (open source) come C2 moderni con launcher PowerShell
  • Cobalt Strike (a pagamento) per operazioni professionali con powerpick che evita powershell.exe

Per bypassare AMSI durante un assessment autorizzato, le tecniche documentate includono il patching in memoria di AmsiScanBuffer nella DLL amsi.dll del processo corrente, oppure il downgrade a runspace privi di hook. Su ambienti con Constrained Language Mode attivo, i bypass storici sfruttano InstallUtil.exe o runspace custom via C#.

Per il lateral movement, Invoke-Command -ComputerName -ScriptBlock {...} richiede WinRM abilitato e credenziali amministrative; in alternativa WMIC o Invoke-WmiMethod permettono esecuzione remota senza toccare porte 5985/5986. La catena tipica osservata nelle campagne reali (documentata in Frankenstein e C0018) parte da un maldoc Office che tramite macro lancia powershell.exe con argomenti codificati, stager che scarica il secondo stadio ed esegue in memoria, evitando qualunque scrittura su disco.

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.