
Umap2 is the second revision of NCC Group's python based USB host security assessment tool.
Umap2 ist die zweite Überarbeitung des auf Python basierenden USB-Host-Sicherheitsbewertungstools von NCC Group.
Diese Überarbeitung wird alle Funktionen enthalten, die in der ersten Überarbeitung unterstützt wurden:
In dieser Überarbeitung werden einige zusätzliche Funktionen enthalten sein:
Umap2 wird von NCC Group und dem Cisco-SAS-Team entwickelt.
Warnung: umap2 ist immer noch ein experimentelles Werkzeug im Alpha-Stadium. Die APIs, ausführbaren Namen usw. werden sich in naher Zukunft wahrscheinlich ändern. Benutzung auf eigene Gefahr.
#umap2 auf Freenode <https://webchat.freenode.net/?channels=umap2>_
InstallationDa dies eine sehr frühe Version ist, ist Umap2 noch nicht über PyPI verfügbar. Verwenden Sie stattdessen pip, um es direkt von GitHub zu installieren:
::
$ pip install git+https://github.com/nccgroup/umap2.git#egg=umap2
Umap2 ist größtenteils mit Python 2/3 kompatibel. Das Fuzzer-Skript (umap2kitty) läuft jedoch nur unter Python 2.
Die Abhängigkeiten von Umap2 sind in setup.py aufgelistet und werden zusammen mit Umap2 installiert. Es gibt jedoch ein paar Dinge, die Sie tun möchten, um Unterstützung für einige Geräte hinzuzufügen:
Mass Storage
1. Erfordert ein Festplatten-Image namens **stick.img** im aktuellen Verzeichnis
MTP
~~~
1. Erfordert einen Ordner/eine Datei namens **mtp_fs** im aktuellen Verzeichnis.
2. Erfordert das Python-Paket pymtpdevice. Dieses Paket ist derzeit nicht auf PyPI,
kann aber von hier heruntergeladen und installiert werden:
https://github.com/BinyaminSharet/Mtp
Hardware
--------
- `Facedancer <http://goodfet.sourceforge.net/hardware/facedancer21/>`_
ist die empfohlene Hardware für Umap2.
Umap2 wurde auf Basis dieser Hardware entwickelt, und Sie erhalten damit den besten Support.
- `Raspdancer <http://wiki.yobi.be/wiki/Raspdancer>` wird auf dem RPi unterstützt
- **GadgetFS** wird teilweise unterstützt.
Diese Unterstützung ist sehr experimentell (noch mehr als der Rest von Umap2)
und eingeschränkt.
- BeagleboneBlack ab Linux-Kernel 4.4.9 mit einem gepatchten GadgetFS-Treiber
- RaspberryPi Zero W ab Linux-Kernel 4.12.0-rc3+, der keine Patches erfordert
- Da 4.12.0-rc3+ keine Patches erfordert, gibt es möglicherweise andere Geräte,
die unterstützt werden können. Wenn Sie ein solches Gerät kennen oder Änderungen vorgenommen haben,
um es auf anderen Geräten zum Laufen zu bringen, lassen Sie es uns bitte wissen.
Wenn Sie interessiert sind, lesen Sie **gadget/README.rst** für weitere Informationen.
Verwendung
-----
Geräteemulation
Die grundlegende Funktionalität von Umap2 ist die Emulation eines USB-Geräts. Sie können eines der vorhandenen Geräte emulieren (verwenden Sie umap2list, um die verfügbaren Geräte zu sehen):
::
$ umap2emulate -P fd:/dev/ttyUSB0 -C mass_storage
oder emulieren Sie Ihr eigenes Gerät:
::
$ umap2emulate -P fd:/dev/ttyUSB0 -C ~/my_mass_storage.py
Eine ausführliche Anleitung zum Hinzufügen Ihres Geräts wird bald hinzugefügt. In der Zwischenzeit können Sie sich die Umap2-Geräte unter umap2/dev/ ansehen.
Scannen der Geräteunterstützung
Umap2 kann versuchen zu erkennen, welche Arten von USB-Geräten
vom Host unterstützt werden.
Dies geschieht, indem jedes in Umap2 implementierte Gerät
für kurze Zeit emuliert und geprüft wird,
ob eine gerätespezifische Nachricht gesendet wurde.
::
$ umap2scan -P fd:/dev/ttyUSB0
Scannen der Unterstützung herstellerspezifischer Geräte
Zusätzlich zum Scannen der Unterstützung verschiedener Geräteklassen kann Umap2 den Host auf Unterstützung herstellerspezifischer Geräte scannen.
Herstellerspezifisches Scannen hilft, die auf dem Host verfügbaren herstellerspezifischen Treiber zu identifizieren.
Dies kann mithilfe der aktuellen Umap2-VID-PID-Datenbank (noch in Arbeit) oder einer anderen Datei im gleichen Format erfolgen:
::
$ umap2vsscan -P fd:/dev/ttyUSB0 -d $UMAP2_DIR/data/vid_pid_db.py
Oder durch Scannen eines bestimmten VID-PID-Bereichs – in diesem Beispiel – für jede Kombination von VID von 0x1001 bis 0x1004 und PID von 0x0000 bis 0xffff:
::
$ umap2vsscan -P fd:/dev/ttyUSB0 -s 1001-1004:0000-ffff
Patches/Ergänzungen an der Datei vid_pid_db.py sind sehr willkommen!
Fuzzing
Eine ausführliche Anleitung zum Fuzzing mit Umap2 finden Sie in
`docs/fuzzing.rst <https://github.com/nccgroup/umap2/blob/master/docs/fuzzing.rst>`_
Das Fuzzing mit Umap2 besteht aus drei Schritten,
die in Zukunft möglicherweise zu einem einzigen Skript zusammengefasst werden.
1. Finden Sie heraus, wie die Reihenfolge der Nachrichten
für den Host, den Sie fuzzen möchten, und das
USB-Gerät, das Sie emulieren, aussieht:
::
$ umap2stages -P fd:/dev/ttyUSB0 -C keyboard -s keyboard.stages
2. Starten Sie den Kitty-Fuzzer in einer separaten Shell
und geben Sie ihm die in Schritt 1 erzeugten Stages.
::
$ umap2kitty -s keyboard.stages
3. Starten Sie die Umap2-Tastaturemulation im Fuzz-Modus
::
$ umap2fuzz -P fd:/dev/ttyUSB0 -C keyboard
Nachdem Schritt 3 ausgeführt wurde, beginnt die Fuzzing-Sitzung.
Hinweis zum MTP-Fuzzing
++++++++++++++++++++++
Obwohl umap2 verwendet werden kann, um MTP-Geräte zu emulieren und zu erkennen
(siehe Abschnitt „Weiche Abhängigkeiten“ dieser README),
fuzzt es derzeit nicht die MTP-Ebene.
Um die MTP-Ebene zu fuzzen,
können Sie den in der MTP-Bibliothek eingebetteten Fuzzer verwenden.
Wir planen, MTP-Fuzzing in zukünftigen Versionen direkt aus umap2 zu unterstützen.
Host-Betriebssystemerkennung
TBD
Wenn Sie Probleme mit Umap2 haben, versuchen Sie den
Abschnitt zur Fehlerbehebung <https://github.com/nccgroup/umap2/blob/master/docs/troubleshooting.rst>_
Sie benötigen SPI-Py https://github.com/lthiery/SPI-Py und GPIO-Python-Bibliotheken.
Verwenden Sie phy rd