§ 1.1
Introduzione a PowerShell
PowerShell è una shell a riga di comando e un linguaggio di scripting sviluppato da Microsoft, costruito sul framework .NET. A differenza del tradizionale CMD, PowerShell lavora con oggetti .NET piuttosto che con stringhe di testo, il che lo rende estremamente potente per l'automazione di sistema e, nel contesto offensivo, per l'accesso diretto alle API Windows.
Dal punto di vista del penetration tester, PowerShell offre vantaggi unici: è preinstallato su tutti i sistemi Windows moderni (da Windows 7 in poi), può eseguire codice direttamente in memoria senza toccare il disco, ha accesso nativo a WMI, COM, .NET e Win32 API, e supporta l'esecuzione remota tramite WinRM/PSRemoting.
Le versioni principali rilevanti per il pentest sono PowerShell 2.0 (legacy, assenza di logging), PowerShell 5.1 (Windows integrato, logging AMSI) e PowerShell 7+ (cross-platform, .NET Core).
Windows 10/11 e Server 2019+ abilitano per default Script Block Logging (Event ID 4104), Module Logging (4103) e Transcription. L'AMSI (Antimalware Scan Interface) intercetta il contenuto degli script prima dell'esecuzione. Il downgrade a PS 2.0 può aggirare questi controlli.
§ 1.2
Script Shell e Automazione
L'automazione in PowerShell si basa su tre concetti fondamentali: cmdlet (comandi nativi nella forma Verbo-Sostantivo), pipeline (concatenazione di oggetti) e moduli (librerie riutilizzabili). Nel contesto offensivo, l'automazione permette di enumerare sistemi, raccogliere credenziali e spostarsi lateralmente in modo rapido e silenzioso.
Gli script PowerShell usati in pentest tipicamente seguono il pattern di living off the land: utilizzano funzionalità native del sistema per evitare il rilevamento, minimizzando la scrittura su disco e sfruttando processi legittimi (powershell.exe, wscript.exe, mshta.exe) come wrapper.
§ 1.3
CMD Shell: Comandi Fondamentali
Il Command Prompt (cmd.exe) rimane rilevante nel pentest perché è disponibile in tutti gli ambienti Windows, è meno monitorato di PowerShell in molte configurazioni legacy, e spesso è l'unico interprete disponibile in sessioni RDP limitate o shell web.
I comandi CMD più utili nel contesto offensivo includono strumenti di enumerazione di rete, gestione utenti e gruppi, interrogazione del registro di sistema e manipolazione di servizi e processi.
§ 1.4
Framework e Collezioni di Script Offensivi
L'ecosistema PowerShell offensivo si è evoluto in una serie di framework e librerie che aggregano centinaia di tecniche testate. Questi strumenti sono ampiamente usati in red team engagement professionali e ben documentati per scopi difensivi.
§ 1.5
Ricognizione, Enumerazione e Scanning con PS
La fase di enumerazione con PowerShell è particolarmente efficace in ambienti Active Directory perché le query LDAP native possono raccogliere enormi quantità di informazioni senza attivare alert di sicurezza (il traffico è indistinguibile da quello legittimo degli admin).
§ 1.6
Privilege Escalation e Credential Dumping
Il privilege escalation su Windows sfrutta misconfigurazioni di servizi, permessi errati su file e registry, token impersonation e vulnerabilità del kernel. PowerShell permette di automatizzare l'intero processo di discovery e exploitation.
Il credential dumping è un'attività illegale se condotta senza autorizzazione scritta. Queste tecniche devono essere applicate esclusivamente in ambienti di lab, CTF o durante engagement di penetration test con contratto firmato.
§ 1.7
Movimento Laterale e Bypass della Sicurezza
Il movimento laterale in ambienti Windows sfrutta protocolli di gestione remota come WinRM, WMI, DCOM e SMB. PowerShell è il vettore ideale perché integra nativamente tutti questi protocolli tramite Invoke-Command, New-PSSession e WMI calls.
Il bypass di AMSI (Antimalware Scan Interface) e ETW (Event Tracing for Windows) è una fase critica per l'esecuzione silenziosa in ambienti monitorati. Esistono diverse tecniche che sfruttano la natura riflessa di PowerShell e la possibilità di patchare in-memory le funzioni di scansione.
Le organizzazioni possono mitigare queste tecniche con: Constrained Language Mode (CLM), JEA (Just Enough Administration), Windows Defender Credential Guard, Protected Users Security Group e abilitando tutte le forme di logging PowerShell.