
USB-Aktivität spontan offenlegen

[!NOTE] USBvalve Version 1.0.0
Eine komplette Neuimplementierung der Anwendung wurde durchgeführt:
- weg von der Arduino IDE-Umgebung, der Code ist jetzt für das Pi Pico SDK geschrieben
- die Abhängigkeiten von externen Bibliotheken wurden stark reduziert
- die USB-Host-Unterstützung für Low-Speed-Geräte ist jetzt robuster (ATTiny85, EvilCrow, etc.)
- Hardware und Funktionalitäten sind nahezu unverändert, siehe die Hinweise unten für Details
Ich bin sicher, dass auch Sie, wie ich, gebeten wurden, Ihren USB-Stick in ein unbekanntes Gerät zu stecken... und dann der Zweifel:
Was ist hinter den Kulissen mit meinem armen Dongle passiert? Stiehlt er meine Dateien? Verschlüsselt er sie? Oder installiert er nur Malware? Mit USBvalve können Sie das in Sekunden herausfinden: gebaut auf supergünstiger Standard-Hardware können Sie schnell jede USB-Dateisystemaktivität 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; der Bildschirm zeigt Ihnen, ob auf das gefälschte Dateisystem, das auf dem Gerät aufgebaut wurde, zugegriffen, gelesen oder geschrieben 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 für den BADUSB-Debugger, der auf dem seriellen Port 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 Uhr-Board. Weitere Informationen finden Sie hier.
Dies ist auch vollständig kompatibel mit dem Waveshare RP2040-LCD-1.28.
docs: Dokumentation über das Projekt, mit einer Präsentation, in der Sie alle Funktionen einsehen 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 32 oder 64 Zeilen OLEDs, für Pico 1 oder Pico2, Pi Pico Watch, etc.
PCB: Gerber-Datei, wenn Sie die benutzerdefinierte Platine drucken möchten. Sie ist nicht zwingend erforderlich, Sie können Ihre eigene verwenden oder sie auf einem Breadboard aufbauen
src und data: Quellcode, wenn Sie die Firmware selbst ändern und bauen möchten
utils: einige Dienstprogramme, die Sie zum Erstellen eines benutzerdefinierten Dateisystems 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 befinden sich 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 bauen möchten, benötigen Sie:
In den Versionen 0.x.x wurde BOOTSEL verwendet, um das Gerät zurückzusetzen oder die Anzahl der HID-Ereignisse auszugeben (drücken > 2s).
Das Abfragen 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 die gleichen Funktionen zu erhaltenr (Reset) und h (HID-Ereignisse) vom seriellen Monitor
In PCB finden Sie auch eine Version 1.3 der Platine, mit einigen Löchern an den Pads 1 und 3, um die Montage des Tasters zu erleichtern. Aber wie Sie sehen können, können Sie auch Ihre alte Version verwenden.
Wenn Sie die BADUSB-Funktionen nicht verwenden oder wenn Sie eine geringere Erkennungsabdeckung bevorzugen, 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, das den Bauprozess Schritt für Schritt erklärt, und ein weiteres, das zeigt, wie man Firmware hochlädt und das Tool verwendet.
Fast die gesamte Arbeit wird direkt auf dem Board von der Software erledigt, sodass Sie nur die Verbindung mit dem OLED für die Ausgabe herstellen müssen.
Ab Version 0.8.0 der Firmware kann USBvalve HID-Geräte erkennen (verwendet zur Erkennung von BADUSB). Dies erfordert einen zusätzlichen USB-Anschluss, der als Host fungiert. Wenn Sie daran nicht interessiert sind, können Sie die alten Anweisungen im docs-Ordner verwenden und PCB-Version 1.1 nutzen. Andernfalls fahren Sie mit PCB-Version 1.2 fort (wir haben Versionen für USB-A oder USB-B, siehe Ordner).
USBH. Dies ist für Version A, aber es gibt auch eine Version für USB Micro-B, wenn Sie das bevorzugenEinige der OLEDs haben die GND- und VCC-PINs vertauscht, daher habe ich die Platine so gebaut, dass sie mit beiden Versionen kompatibel ist:
Wenn Ihr OLED beispielsweise GND auf PIN1 und VCC auf PIN2 hat, wie hier:
Müssen Sie einen Lötklecks auf diese beiden Pads auf der Rückseite der Platine setzen:
Andernfalls sollten Sie das Gegenteil tun und das Lot auf die anderen PADs setzen:
Wenn Sie ein Breadboard oder nur eine Verkabelung verwenden, müssen Sie lediglich sicherstellen, dass Sie die richtigen PINs am OLED-Bildschirm und am Host-USB-Anschluss verbinden.
Die Zuordnung ist die folgende:
Wenn Sie die DEBUG-Funktionen nutzen möchten, können Sie auch einen Header auf die 3 SWD-PINs an der Unterseite des Boards setzen.
[!CAUTION] Diese Platine ist für erfahrene Elektronikbastler VERWENDEN SIE SIE NICHT, WENN SIE NICHT SICHER SIND, DASS SIE DAMIT UMGEHEN KÖNNEN!
[!NOTE] R7 und R8 sind tatsächlich mit nichts verbunden. Sie wurden zu Debugging-Zwecken der Schaltung hinzugefügt. Daher erscheinen sie nicht in der Stückliste
USBpipe ist eine dedizierte Platine für dieses Projekt.
Alles, was Sie benötigen, finden Sie im Ordner ./PCB/USBpipe/.
Um die Firmware zu flashen, befolgen Sie diese Schritte:
RPI-RP2 (in Linux-Umgebungen müssen Sie es möglicherweise manuell einbinden)uf2) in den Ordner, je nachdem, welches OLED Sie verwendet habenFertig!
Ich weiß nicht, ob es jemals der Fall sein wird, aber Sie möchten möglicherweise die Firmware anpassen, um eine Erkennung durch USBvalve-aware-Malware zu vermeiden :-)
Ich habe die meisten Variablen, die Sie möglicherweise ändern möchten, in diesem Abschnitt von usb_config.h gruppiert (siehe Dockerfile unten zum Neuerstellen)
// 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/
//
#define USB_VENDORID 0xCAFE
#define USB_PRODUCTID 0x1337
#define USB_DESCRIPTOR "DataStore"
#define USB_MANUF "USB Acme"
#define USB_SERIAL "123456789A"
#define USB_VENDORID_STR "Acme" // Up to 8 chars
#define USB_PRODUCTID_STR "DataStore" // 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 Neukompilierungsanweisungen:
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 gefälschtes Dateisystem erstellen möchten, sollten Sie einen Blick in den Ordner utils werfen, in dem ich einige Dienstprogramme zum Erstellen eines neuen abgelegt habe.
Wenn Sie Ihre eigene Firmware bauen möchten, nachdem Sie sie angepasst haben, stelle ich ein Dockerfile bereit, das eine vollständige Build-Umgebung erstellt 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 Sie Ideen oder Verbesserungen im Kopf haben, 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 erreichen.
Die Community hat einige Forks erstellt, die Unterstützung für andere Boards oder andere Modifikationen implementieren. Vielen Dank an alle, die zur Entwicklung von USBvalve beigetragen haben. Hier unten 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 hat keinerlei Isolierung oder Schutz. Wenn Sie den Verdacht haben, dass Sie es mit einem dieser Geräte zu tun haben, testen Sie es mit etwas anderem, NICHT mit USBvalve, sonst könnten Sie das Gerät, sich selbst oder Gegenstände in Ihrer Nähe beschädigen.