Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
toothpicker — Coverage-gesteuerter In-Process-Fuzzer für den iOS Bluetooth-Daemon (bluetoothd) unter Verwendung von FRIDA, mit Over-the-Air-Fuzzing für das MagicPairing-Protokoll und Crash-Replay-Funktionen. | Kitploit
Tools/GitHubGitHub/seemoo-lab/toothpicker
Bluetooth-SicherheitDynamische Analyse (Sandboxing)iOS-SicherheitFuzzingDrahtlose SicherheitMobile SicherheitTop in Bluetooth-Sicherheit Nr.9
GitHubseemoo-lab/toothpicker

toothpicker

Coverage-gesteuerter In-Process-Fuzzer für den iOS Bluetooth-Daemon (bluetoothd) unter Verwendung von FRIDA, mit Over-the-Air-Fuzzing für das MagicPairing-Protokoll und Crash-Replay-Funktionen.

245369vor 4 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
Repository anzeigen

ToothPicker Logo

ToothPicker

ToothPicker ist ein In-Prozess-, abdeckungsgesteuerter Fuzzer für iOS. Er wurde entwickelt, um gezielt den Bluetooth-Daemon bluetoothd von iOS anzugreifen und verschiedene Bluetooth-Protokolle auf iOS zu analysieren. Da er mit FRIDA erstellt wurde, kann er an jede Plattform angepasst werden, die FRIDA unterstützt.

Dieses Repository enthält außerdem einen Over-the-Air-Fuzzer mit einer beispielhaften Implementierung zum Fuzzing des Apple MagicPairing-Protokolls mittels InternalBlue. Zusätzlich enthält es das Skript ReplayCrashFile.py, mit dem Abstürze verifiziert werden können, die der In-Prozess-Fuzzer gefunden hat.

Neu: Inplace-Fuzzer (ToothFlipper)

Dies ist ein sehr einfacher Fuzzer, der nur Bits und Bytes in aktiven Verbindungen umdreht. Keine Abdeckungssteuerung, keine Injektion, aber nett als Demo und zustandsbehaftet. Läuft nur mit Python+Frida, keine Module oder Installation erforderlich. Getestet auf iOS 13.5-14.3. Siehe inplace-fuzzer.

In-Prozess-Fuzzer

Der In-Prozess-Fuzzer funktioniert sofort auf verschiedenen iOS-Versionen (13.3-13.7 getestet), aber Symbole müssen angegeben werden. Andere iOS-Versionen erfordern Anpassungen an den Funktionsadressen. Zudem scheint FRIDAs Stalker einige Probleme mit dem iPhone 8 zu haben. Auf neueren iPhones, die PAC unterstützen, leidet die Leistung erheblich unter dem Signieren von Zeigern. Daher wird empfohlen, dies auf einem iPhone 7 auszuführen.

ToothPicker basiert auf der Codebasis von frizzer. Es wurde jedoch für diese spezielle Anwendung angepasst und ist daher nicht mehr mit der Originalversion kompatibel. Es gibt Pläne, dies in Zukunft durch eine speziellere Komponente zu ersetzen.

Voraussetzungen:

Auf dem iPhone:

  • https://frida.re/docs/ios/

Auf Linux:

  • usbmuxd
  • libimobiledevice
  • Optional, aber empfohlen: virtualenv
  • radamsa (wird von frizzer benötigt)

Für Arch-basiertes Linux:

root@kitploit:~
# usbmuxd kommt normalerweise mit libimobiledevice
# aber um sicherzugehen, installieren wir es manuell
sudo pacman -S usbmuxd libimobiledevice python-virtualenv radamsa

# Verbinde das iPhone mit dem Computer
# Entsperre es.
# Falls ein Pairing-Popup erscheint, klicke auf "Trust"
# Falls kein Pairing-Popup erscheint:
idevicepair pair
# Jetzt sollte das Popup erscheinen, akzeptiere es und dann nochmal:
idevicepair pair

# Bei Verbindungsfehlern:
sudo systemctl restart usbmuxd
# oder iPhone und Computer erneut paaren


# Andere nützliche Befehle

# Für SSH auf das iPhone:
# Checkra1n hat einen SSH-Server auf Port 44
# Proxye den SSH-Port des Telefons auf lokalen Port 4444:
iproxy 4444 44
# Verbinden:
ssh root@localhost -p 4444
# Standardpasswort: alpine

# Zum Abrufen von Geräteinformationen des iPhones:
ideviceinfo

Für Debian Linux:

Fast das Gleiche wie oben. Ausnahmen:

  • radamsa muss aus dem Git-Repository installiert werden, da es nicht paketiert ist.
  • Der Befehl iproxy benötigt das zusätzliche Paket libusbmuxd-tools.

Für macOS:

Etwas andere Befehle im Vergleich zum Arch-Linux-Setup...

root@kitploit:~
brew install libimobiledevice usbmuxd radamsa npm
idevicepair pair
npm install frida-compile
pip3 install frida-tools

Auf macOS kann PacketLogger, das Teil der Additional Tools for Xcode ist, verschiedene Pakete decodieren, sobald das Bluetooth Debug Profile installiert ist. Wenn man außerdem iOS-Crashlogs mit Xcode öffnet, werden einige Symbole hinzugefügt.

Einrichtung und Fuzzing

Einrichtung:

  • Es wird empfohlen, eine virtuelle Python-Umgebung für frizzer einzurichten.
  • Installiere die erforderlichen Pakete, indem du im Verzeichnis frizzer ausführst.
  • Das Verzeichnis projects enthält ein Beispielprojekt zum Fuzzing des MagicPairing-Protokolls.
  • Um die Harness zu erstellen, kompiliere die allgemeine Harness und die spezialisierte MagicPairing-Harness in eine Datei.
  • Wechsle in das Verzeichnis harness und installiere frida-compile. Beachte, dass dies in diesem Ordner ausgeführt werden muss und direkt als Benutzer durch npm install frida-compile installiert werden kann.
  • Führe nun frida-compile ../projects/YOUR_PROJECT/YOUR_SPECIALIZED_HARNESS.JS -o ../projects/YOUR_PROJECT/harness.js aus. Da dies im npm-Kontext installiert wurde, muss möglicherweise stattdessen npx frida-compile ausgeführt werden. Jedes Mal, wenn sich die Harness ändert, muss frida-compile erneut ausgeführt werden.

Fuzzing:

  • Verbinde ein iOS-Gerät mit deinem Computer.
  • Es ist ratsam, das Telefon in den Flugmodus zu versetzen und die Funktion "Bitte nicht stören" zu aktivieren, um andere Aktivitäten auf dem Telefon einzuschränken.
  • Führe killall -9 bluetoothd aus, um bluetoothd frisch zu starten.
  • Stelle sicher, dass sich das Telefon nicht mit anderen Bluetooth-Geräten verbindet.
  • Wechsle nun zurück in das Verzeichnis deines Projekts, erstelle das Crashlog-Verzeichnis (mkdir crashes) und führe ../../frizzer/fuzzer.py fuzz -p . aus.
  • Juhu! Jetzt sammle Zero-Days und kassiere große Geldsummen von Apple! (Oder sammle eine riesige Liste nutzloser NULL-Pointer-Dereferenzen...)

Kurz gesagt, um ein neues Projekt zu starten, führe aus:

root@kitploit:~
cd harness
npx frida-compile ../projects/YOUR_PROJECT/YOUR_SPECIALIZED_HARNESS.JS -o ../projects/YOUR_PROJECT/harness.js
cd ../projects/YOUR_PROJECT/
mkdir crashes
../../frizzer/fuzzer.py fuzz -p .

Du kannst mit einem anderen Seed beginnen, indem du frizzer/fuzzer.py fuzz --seed 1234 -p . verwendest.

Hinzufügen neuer iOS-Versionen:

Derzeit sind verschiedene iOS-Versionen in bluetoothd.js definiert. Diese findest du mit dem Ghidra-Versionierungstool, wenn du eine initiale Version hast, die alle erforderlichen Symbole enthält. Beachte, dass einige von ihnen nicht im ursprünglichen iOS-Binary benannt sind, also beginne idealerweise mit einer, die bereits annotiert wurde. Jedes Mal, wenn bluetoothd.js geändert wird, musst du frida-compile erneut ausführen.

Erhöhen der bluetoothd-Kapazitäten:

iOS-Crashlogs werden unter Einstellungen -> Datenschutz -> Analyse & Verbesserungen -> Analysedaten gespeichert. Wenn sie bluetoothd-Abstürze des Musters bluetoothd.cpu_resource-*.ips enthalten, deutet dies darauf hin, dass der Absturz durch Überschreiten von Ressourcen verursacht wurde. Diese können wie folgt erhöht werden.

Auf einem iPhone 7 führe aus:

root@kitploit:~
cd /System/Library/LaunchDaemons/
plistutil -i com.apple.jetsamproperties.D10.plist -o com.apple.jetsamproperties.D10.plist.txt
plistutil -i com.apple.jetsamproperties.D101.plist -o com.apple.jetsamproperties.D101.plist.txt

Auf dem iPhone SE2 befinden sich diese in com.apple.jetsamproperties.D79.plist:

root@kitploit:~
cd /System/Library/LaunchDaemons/
plistutil -i com.apple.jetsamproperties.D79.plist -o com.apple.jetsamproperties.D79.plist.txt

Suche nach bluetoothd, aktualisiere die Priorität auf 19 (höchste gültige Priorität) und setze das Speicherlimit auf einen sehr hohen Wert. Wende dieselben Änderungen auf beide Dateien an.

root@kitploit:~
<dict>
       <key>ActiveSoftMemoryLimit</key>
       <integer>24000</integer>
       <key>InactiveHardMemoryLimit</key>
       <integer>24000</integer>
       <key>EnablePressuredExit</key>
       <false/>
       <key>JetsamPriority</key>
       <integer>19</integer>
</dict>

Schreibe die Änderungen zurück und starte bluetoothd neu.

root@kitploit:~
plistutil -i com.apple.jetsamproperties.D10.plist.txt -o com.apple.jetsamproperties.D10.plist
plistutil -i com.apple.jetsamproperties.D101.plist.txt -o com.apple.jetsamproperties.D101.plist
killall -9 bluetoothd

Entsprechend auf dem iPhone SE2:

root@kitploit:~
plistutil -i com.apple.jetsamproperties.D79.plist.txt -o com.apple.jetsamproperties.D79.plist
killall -9 bluetoothd

Löschen alter Logs:

iOS hört auf, Crashlogs für ein Programm zu speichern, nachdem das Limit von 25 erreicht ist. Wenn ein Crashlog mit Xcode (über Simulatoren & Geräte) geladen wird, werden einige Symbole zum Stacktrace hinzugefügt. Sobald das Limit erreicht ist, können die Logs entweder über Xcode oder direkt auf dem iOS-Gerät gelöscht werden, indem sie im Ordner /var/mobile/Library/Logs/CrashReporter/ gelöscht werden.

A12+:

Ab dem iPhone XR/Xs wurde PAC eingeführt. Dies erfordert den Aufruf von sign() auf NativeFunction in FRIDA. Während dies auf früheren CPUs ein No-Op ist, reduziert es die Geschwindigkeit auf neueren Geräten enorm, ist aber erforderlich, damit sie überhaupt funktionieren. Wir haben beobachtet, dass ToothPicker bei Verwendung eines iPhone SE2 anstelle eines iPhone 7 mit halber Geschwindigkeit arbeitet.

Over-the-Air-Fuzzer und Crash-Wiederholung

Die MagicPairing-Implementierung des Over-the-Air-Fuzzers erfordert, dass InternalBlue installiert ist und kann durch Ausführen von python MagicPairingFuzzer.py TARGET_BD_ADDR gestartet werden.

Wenn du Abstürze reproduzieren möchtest, verwende das Skript ReplayCrashFile.py, das eine Crash-Datei übernehmen und eine Over-the-Air-Verbindung mit einer auf dem Absturz basierenden Nutzlast initiieren kann.

Tool herunterladen