====== Notizen zum pwnagotchi auf Raspberry Pi 3B+ ======
Leider habe ich bisher weder ein unterstütztes eInk-Display noch einen Pi-Zero, daher hier meine Notizen zu Experimenten auf dem Raspberry Pi 3B+.
Ziel ist nicht mit der onboard-Karte zu arbeiten sondern mit einem Alfa-USB-Stick, das hat vor allem mit den Instabilitäten des nexmon Patches zu tun.
===== Der Anfang mit Pi3B+ onboard WLAN NIC =====
Genau prüfen mit **diskutil list** welche Disk denn nun die richtige ist! Die Disk vor dem **dd**-Kommando mit **sudo diskutil umountdisk /dev/diskX** aushängen!
mbp:pwnagotchi BennyE$ sudo dd if=pwnagotchi-raspbian-lite-v1.3.0.img of=/dev/rdisk3 bs=1024k
5168+0 records in
5168+0 records out
5419040768 bytes transferred in 194.591458 secs (27848297 bytes/sec)
Das MBP hängt die Disk danach wieder ein und man kann auf /boot zugreifen um dort eine **config.yml** zu erstellen. Ich fange mit folgendem Inhalt an:
main:
name: 'moppel'
whitelist:
- 'eigene SSID'
plugins:
grid:
enabled: false
report: false
exclude:
- 'eigene SSID'
ui:
display:
enabled: false
type: 'waveshare_2'
color: 'black'
Wir lassen "moppel" nun erst einmal (in meinem Fall mit angeschlossenen LAN-Kabel) booten, damit die Keys erzeugt werden und das System sich einrichtet.
An der Konsole von "moppel" geben wir eine Route für unser Client-Netz manuell mit:
Eine kleine Herausforderung ist vielleicht die englische Tastatur, mir ist es bisher nicht gelungen diese zu ändern (via SSH hat man dieses Problem dann aber auch nicht).
"Shift-ö" => ":",
"ß" => "-",
"-" => "/"
sudo ip route add 192.168.11.0/24 via 192.168.2.10
Im Browser kann man nun auf "moppel" auf (in meinem Fall) http://192.168.2.178:8080 zugreifen.
Solange "moppel" in MANU Modus läuft, tut es nichts. Ein Klick auf "Restart in AUTO mode", startet nur den Dienst neu - also nicht den kompletten Pi.
Um die Route für den nächsten Start "bootfest" zu machen, habe ich folgende Änderung vorgenommen:
**sudo cat /etc/network/interfaces.d/eth0-cfg**
allow-hotplug eth0
iface eth0 inet dhcp
post-up ip route add 192.168.11.0/24 via 192.168.2.10
Leider ist der nexmon Patch, der es erlaubt mit der onboard-WLAN-Karte des Raspberry Pi in den "Monitor Mode" zu wechseln, nicht allzu stabil. Dies äußert sich dadurch dass man in der Ausgabe von dmesg nach kurzer Zeit folgendes sieht:
[ 2067.191895] brcmfmac: brcmf_cfg80211_nexmon_set_channel: Set Channel failed: chspec=53360, -110
[ 2070.231937] brcmfmac: brcmf_cfg80211_nexmon_set_channel: Set Channel failed: chspec=53364, -110
[ 2073.271945] brcmfmac: brcmf_cfg80211_nexmon_set_channel: Set Channel failed: chspec=53368, -110
[ 2076.311937] brcmfmac: brcmf_cfg80211_nexmon_set_channel: Set Channel failed: chspec=53372, -110
[ 2079.351936] brcmfmac: brcmf_cfg80211_nexmon_set_channel: Set Channel failed: chspec=53376, -110
[ 2082.391939] brcmfmac: brcmf_cfg80211_nexmon_set_channel: Set Channel failed: chspec=53380, -110
[ 2085.431935] brcmfmac: brcmf_cfg80211_nexmon_set_channel: Set Channel failed: chspec=53384, -110
[ 2088.471945] brcmfmac: brcmf_cfg80211_nexmon_set_channel: Set Channel failed: chspec=53388, -110
[ 2091.031937] brcmfmac: brcmf_proto_bcdc_query_dcmd: brcmf_proto_bcdc_msg failed w/status -110
[ 2091.031951] brcmfmac: brcmf_cfg80211_get_channel: chanspec failed (-110)
[ 2093.591944] brcmfmac: brcmf_cfg80211_nexmon_set_channel: Set Channel failed: chspec=53392, -110
[ 2096.151976] brcmfmac: brcmf_cfg80211_nexmon_set_channel: Set Channel failed: chspec=4097, -110
[ 2099.191955] brcmfmac: brcmf_cfg80211_nexmon_set_channel: Set Channel failed: chspec=4098, -110
[ 2102.231913] brcmfmac: brcmf_cfg80211_nexmon_set_channel: Set Channel failed: chspec=4099, -110
[ 2105.271939] brcmfmac: brcmf_cfg80211_nexmon_set_channel: Set Channel failed: chspec=4100, -110
[ 2108.311892] brcmfmac: brcmf_cfg80211_nexmon_set_channel: Set Channel failed: chspec=4101, -110
[ 2111.351933] brcmfmac: brcmf_cfg80211_nexmon_set_channel: Set Channel failed: chspec=4102, -110
[ 2114.391952] brcmfmac: brcmf_cfg80211_nexmon_set_channel: Set Channel failed: chspec=4103, -110
[ 2117.431978] brcmfmac: brcmf_cfg80211_nexmon_set_channel: Set Channel failed: chspec=4104, -110
[ 2120.471943] brcmfmac: brcmf_cfg80211_nexmon_set_channel: Set Channel failed: chspec=4105, -110
[ 2123.511934] brcmfmac: brcmf_cfg80211_nexmon_set_channel: Set Channel failed: chspec=4106, -110
[ 2126.551937] brcmfmac: brcmf_cfg80211_nexmon_set_channel: Set Channel failed: chspec=4107, -110
Dieser Zustand lässt sich nur durch einen (regelmäßigen) Reboot beheben. (Aus diesem Grund wollte ich auch die Route bootfest machen.)
===== Betrieb des pwnagotchi mit externen WLAN-USB-Adapter =====
Da ich leider nicht das erste Mal erlebe dass die NEXMON Patches auf dem Pi3B+ nicht sauber funktionieren, werden wir dann in einem folgenden Schritt die onboard-Wireless-Karte deaktivieren und den Alfa-Stick einbinden.
Dafür sind einige Änderungen notwendig, die der Author des pwnagotchi (@evilsocket) vermutlich ablehnen würde, daher sehe ich das hier mal als privaten Workaround an.
Ich arbeite gerne mit dem [[https://www.amazon.de/Alfa-AWUS036ACH-Dual-Adapter-AC1200/dp/B00VEEBOPG/|Alfa AWUS036ACH Dual Band USB Adapter AC1200]] und im pwnagotchi Image ist bereits der modifizierte Treiber mit Unterstützung für den "Monitor Mode" enthalten.
Notwendige Änderungen:
- Deaktivieren der Raspberry onboard-WLAN-Schnittstelle
- Erstellung einer udev Regel um unseren Adapter beim Einhängen in "mon0" umzubenennen
- Modifizierung der /usr/bin/pwnlib-Datei um unsere Änderung zu verwenden
**pi@moppel:~ $ sudo vi /boot/config.txt**
[all]
#dtoverlay=vc4-fkms-v3d
dtoverlay=dwc2
dtoverlay=spi1-3cs
dtparam=spi=on
dtparam=i2c_arm=on
dtparam=i2c1=on
gpu_mem=16
dtoverlay=pi3-disable-wifi
**pi@moppel:~ $ sudo vi /etc/udev/rules.d/10-wlan.rules**
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:c0:ca:a5:AA:BB", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="wlan*", NAME="mon0"
**pi@moppel:~ $ sudo vi /usr/bin/pwnlib**
# starts mon0
start_monitor_interface() {
# iw phy phy0 interface add mon0 type monitor && ifconfig mon0 up
iw mon0 set type monitor && ip link mon0 up
}
Die obigen Änderungen sind notwendig, da der Alfa-Stick mit dem vom pwnagotchi vorgesehen Weg den Monitor Mode zu aktivieren nicht klarkommt und das pwnagotchi keine Daten sieht (keine SSIDs, keine Clients, nichts).
Bitte berücksichtigt dass dies wirklich nur ein Workaround ist, da die Datei beim nächsten Update seitens des Projekts überschrieben werden dürfte (und die manuelle Änderung der Datei /usr/bin/pwnlib damit wieder notwendig wird).
====== Verwendung von bettercap via CLI ======
Vorausgesetzt man beendet das pwnagotchi und bettercap, kann man sich in der Umgebung auf die Suche nach interessanten Netzen/Geräten machen.
sudo systemctl stop pwnagotchi
sudo systemctl stop bettercap
===== Bettercap für Wi-Fi =====
==== Bettercap starten ====
sudo bettercap -iface mon0
==== Wi-Fi Modul starten ====
wifi.recon on
==== Wi-Fi Liste anzeigen ====
wifi.show
==== Wi-Fi Netze in der Nähe assoziieren und PMKID auslesen ====
Dies ist eine bekannte Schwachstelle die eigentlich alle Hersteller geschlossen haben sollten.
Leider ist das häufig nicht der Fall .. :(
wifi.assoc all
==== Wi-Fi Modul beenden ====
wifi.recon off
===== Bettercap für BLE =====
==== BLE Modul starten ====
ble.recon on
==== BLE Übersicht aller Geräte anzeigen ====
ble.show
==== BLE Detailansicht zu einem bestimmten Gerät ====
ble.enum
==== BLE Modul beenden ====
ble.recon off