
Expose USB activity on the fly

[!NOTE] USBvalve Version 1.0.0
Die Anwendung wurde vollständig neu geschrieben:
- Der Code wurde von der Arduino-IDE-Umgebung auf das Pi Pico SDK umgestellt
- Die Abhängigkeiten von externen Bibliotheken wurden erheblich reduziert
- Der USB-Host-Support für Low-Speed-Geräte ist jetzt robuster (ATTiny85, EvilCrow, usw.)
- Hardware und Funktionalitäten sind nahezu unverändert, siehe die Hinweise unten für Details
Ich bin sicher, dass auch Sie – wie ich – schon einmal gebeten wurden, Ihren USB-Stick in ein unbekanntes Gerät zu stecken ... und dann der Zweifel:
Was ist hinter den Kulissen mit meinem armen Stick passiert? Werden meine Dateien gestohlen? Werden sie verschlüsselt? Oder wird nur eine Malware installiert? Mit USBvalve können Sie das in Sekundenschnelle herausfinden: Basierend auf supergünstiger Standard-Hardware können Sie jede USB-Dateisystemaktivität schnell testen und verstehen, was vor sich geht, bevor es zu spät ist!
Mit USBvalve erhalten Sie sofortiges Feedback darüber, was mit dem Laufwerk passiert; das Display zeigt Ihnen, ob auf das auf dem Gerät aufgebaute fake-Dateisystem zugegriffen, daraus gelesen oder hineingeschrieben wird:
Und ab Version 0.8.0 können Sie es auch als USB-Host verwenden, um BADUSB-Geräte zu erkennen:
Dies ist ein Beispiel des BADUSB-Debuggers, der über die serielle Schnittstelle verfügbar ist:
Wenn Sie Videos bevorzugen, können Sie sich auch meine Insomni'hack-Präsentation ansehen.
Ab Version 0.15.0 wird eine neue Pi Pico Watch-Version unterstützt. Um die neue Version zu kompilieren, müssen Sie die Zeile #define PIWATCH am Anfang des Codes auskommentieren. Die Hardware ist ein RP2040-basiertes 1,28-Zoll-TFT-Display- und Watch-Board. Weitere Informationen finden Sie hier.
Dies ist außerdem vollständig kompatibel mit dem Waveshare RP2040-LCD-1.28.
docs: Dokumentation über das Projekt, mit einer Präsentation, in der Sie sich alle Funktionen ansehen können
firmware: vorgefertigte Firmwares für den Raspberry Pi Pico. Sie können diese einfach verwenden und auf das Board flashen. Wir haben mehrere verschiedene Versionen, für OLEDs mit 32 oder 64 Zeilen, für Pico 1 oder Pico2, für Pi Pico Watch, usw.
PCB: Gerber-Dateien, falls Sie die individuelle Leiterplatte drucken möchten. Das ist nicht zwingend erforderlich; Sie können eine eigene verwenden oder sie auf einem Breadboard aufbauen
src und data: Quellcode, falls Sie die Firmware selbst modifizieren und bauen möchten
utils: einige Hilfsprogramme, die Sie zum Erstellen eines eigenen Dateisystems (FS) verwenden können
pictures: Bilder und Ressourcen, die in diesem Dokument verwendet werden
STL: STL-Dateien für das Gehäuse. In den Ordnern 1.1 und 1.2 befinden sich vollständige Gehäuse (Dank an WhistleMaster). In den Ordnern 1.2_64 und 1.2_64_simple gibt es Gehäuse für den 128x64-Bildschirm (Dank an rtmq0227). Wenn Sie etwas Leichteres zum Schutz des LCDs möchten, können Sie USBvalve_sliding_cover.stl verwenden.
Wenn Sie Ihr eigenes Gerät bauen möchten, benötigen Sie:
In den 0.x.x-Versionen wurde BOOTSEL verwendet, um das Gerät zurückzusetzen oder die Anzahl der HID-Ereignisse auszugeben (Taste > 2s drücken).
Das Polling von BOOTSEL verursachte einige Probleme bei der BADUSB-Erkennung, daher wurde dies ab Version 1.0.0 entfernt und durch die folgenden zwei Optionen ersetzt:
GP0 und GND (Pads 1 und 3, siehe Bild unten für ein Beispiel), um dieselben Funktionen zu erhaltenr (Reset) und h (HID-Ereignisse) über den seriellen Monitor
In PCB finden Sie auch eine Version 1.3 der Leiterplatte, mit Löchern auf den Pads 1 und 3, um die Montage des Tasters zu erleichtern. Wie Sie sehen, können Sie aber auch Ihre alte Version verwenden.
Wenn Sie die BADUSB-Funktionen nicht verwenden oder es vorziehen, eine geringere Erkennungsabdeckung in Kauf zu nehmen, aber die BOOTSEL-Nutzung beibehalten möchten, stelle ich auch eine Firmware bereit, die mit aktiviertem bootsel erstellt wurde (siehe Ordner und Releases).
Dank an Tz1rf haben wir auch zwei großartige Videos: eines erklärt den Bau-Prozess Schritt für Schritt, ein anderes zeigt, wie man Firmware hochlädt und das Tool verwendet.
Fast die gesamte Arbeit wird direkt auf dem Board von der Software erledigt; Sie müssen also nur die Verbindung zum OLED für die Ausgabe herstellen.
Ab Firmware-Version 0.8.0 kann USBvalve HID-Geräte erkennen (zur Erkennung von BADUSB). Dafür ist ein zusätzlicher USB-Port erforderlich, der als Host fungiert. Wenn Sie daran nicht interessiert sind, können Sie die alte Anleitung im docs-Ordner verwenden und die PCB-Version 1.1 nutzen. Andernfalls fahren Sie mit der PCB-Version 1.2 fort (wir haben Versionen für USB-A oder USB-B, siehe Ordner).
USBH. Dies gilt für Version A, es gibt aber auch eine Version für USB Micro-B, falls Sie diese bevorzugenBei einigen OLEDs sind die GND- und VCC-PINs vertauscht. Ich habe die Leiterplatte daher so gebaut, dass sie mit beiden Versionen kompatibel ist:
Wenn Ihr OLED zum Beispiel GND auf PIN1 und VCC auf PIN2 hat, wie hier:
Sie müssen einen Lotpunkt auf diesen beiden Pads auf der Rückseite der Leiterplatte platzieren:
Andernfalls müssen Sie das Gegenteil tun und den Lot auf die anderen PADs aufbringen:
Wenn Sie ein Breadboard oder nur Kabelverbindungen verwenden, müssen Sie nur sicherstellen, dass die richtigen PINs am OLED-Bildschirm und am USB-Host-Port angeschlossen sind.
Die Zuordnung ist wie folgt:
Wenn Sie die DEBUG-Funktionen verwenden möchten, können Sie auch eine Stiftleiste auf den 3 SWD-PINs am unteren Rand des Boards platzieren.
[!CAUTION] Diese Leiterplatte ist für erfahrene Elektronik-Bastler gedacht NICHT BENUTZEN, WENN SIE NICHT SICHER SIND, DASS SIE DAMIT UMGEHEN KÖNNEN!
[!NOTE] R7 und R8 sind eigentlich mit nichts verbunden. Sie wurden zu Debugging-Zwecken der Schaltung hinzugefügt. Daher erscheinen sie nicht in der Stückliste (BOM)
USBpipe ist eine eigens für dieses Projekt entwickelte Leiterplatte.
Sie finden alles, was Sie benötigen, im Ordner ./PCB/USBpipe/.
Um die Firmware zu flashen, gehen Sie wie folgt vor:
RPI-RP2 (unter Linux müssen Sie es möglicherweise manuell mounten)uf2) in den Ordner, abhängig davon, welches OLED Sie verwendet habenFertig!
Ich weiß nicht, ob das jemals der Fall sein wird, aber Sie möchten die Firmware möglicherweise anpassen, um eine Erkennung durch USBvalve-bewusste Malware zu vermeiden :-)
Ich habe die meisten Variablen, die Sie möglicherweise ändern möchten, in diesem Abschnitt von usb_config.h zusammengefasst (siehe Dockerfile unten zum Neubauen)
// USB anti-detection settings
//
// Set USB IDs strings and numbers, to avoid possible detections.
// Remember that you can cusotmize FAKE_DISK_BLOCK_NUM as well
// for the same reason. Also DISK_LABEL in ramdisk.h can be changed.
//
// You can see here for inspiration: https://the-sz.com/products/usbid/
//
// Example:
// 0x0951 0x16D5 VENDORID_STR: Kingston PRODUCTID_STR: DataTraveler
//
#define USB_VENDORID 0x0951
#define USB_PRODUCTID 0x16D5
#define USB_DESCRIPTOR "DataTraveler"
#define USB_MANUF "Kingston"
#define USB_SERIAL "123456789A"
#define USB_VENDORID_STR "Kingston" // Up to 8 chars
#define USB_PRODUCTID_STR "DataTraveler" // Up to 16 chars
#define USB_VERSION_STR "1.0" // Up to 4 chars
Natürlich können Sie auch Ihre eigene Firmware bauen. Zum Bauen benötigen Sie das Raspberry Pi Pico SDK und dieses Repository.
Grundlegende Anweisungen zum Neu-Kompilieren:
export PICO_SDK_PATH=</path/to/pico-sdk>
git clone --recursive https://github.com/cecio/USBvalve.git
cd USBvalve
mkdir build && cd build
cmake -DPICO_BOARD=pico .. # or pico2 for standard build
make -j$(nproc)
# Output: build/src/USBvalve.uf2
Wenn Sie ein neues Fake-Dateisystem erstellen möchten, sollten Sie einen Blick in den Ordner utils werfen, in dem ich einige Hilfsprogramme zum Erstellen eines neuen abgelegt habe.
Wenn Sie Ihre eigene Firmware bauen möchten, stelle ich Ihnen, nachdem Sie sie angepasst haben, ein Dockerfile bereit, das eine vollständige Build-Umgebung aufbaut und die Firmware kompiliert.
Geben Sie die folgenden Befehle im Hauptordner USBvalve ein, um zu bauen:
# To Build:
# docker build -t usbvalve-sdk -f Dockerfile.sdk .
#
# To Run (default: pico, SSD1306 OLED 128x32):
# docker run --rm -v $PWD:/mnt usbvalve-sdk
#
# Options (via environment variables):
# BOARD=pico|pico2 Board target (default: pico)
# OLED_HEIGHT=32|64 OLED display height (default: 32)
# PIWATCH=1 Use GC9A01 round TFT instead of SSD1306
# USE_BOOTSEL=1 Enable BOOTSEL button (disrupts Low Speed USB)
#
# Examples:
# docker run --rm -e BOARD=pico2 -v $PWD:/mnt usbvalve-sdk
# docker run --rm -e PIWATCH=1 -v $PWD:/mnt usbvalve-sdk
# docker run --rm -e BOARD=pico2 -e OLED_HEIGHT=64 -v $PWD:/mnt usbvalve-sdk
Die Firmware wird mit der Erweiterung uf2 im Ordner USBvalve_out abgelegt.
Wenn Ihnen Ideen oder Verbesserungen vorschweben, ermutige ich Sie, ein Issue zu eröffnen, damit wir das Projekt gemeinsam verbessern können! Danke!
Wenn Sie Fragen haben oder Unterstützung benötigen, können Sie hier ein Issue eröffnen oder mich auf Twitter/X @red5heep kontaktieren.
Die Community hat einige Forks erstellt, die Unterstützung für andere Boards oder andere Modifikationen implementieren. Danke an alle, die zur Entwicklung von USBvalve beigetragen haben. Hier unten ist eine inoffizielle/unvollständige/nicht unterstützte Liste:
[!WARNING] Ich habe viele Fragen zu USBvalve und USB-Killer-Geräten erhalten. USBvalve ist nicht dafür gebaut, diese Geräte zu testen; es verfügt über keinerlei Isolierung oder Schutz. Wenn Sie also den Verdacht haben, dass Sie es mit einem dieser Geräte zu tun haben, testen Sie es mit etwas anderem, NICHT mit USBvalve, da Sie sonst das Gerät, sich selbst oder Gegenstände in Ihrer Nähe beschädigen könnten.