
USB-Testen leicht gemacht

b. Minimales agfs-in-der-Mitte-Setup
c. Vollständiges agfs-in-der-Mitte-Setup mit Debugging-Unterstützung
a. Linux
AutoGadgetFS ist ein Open-Source-Framework, das es Benutzern ermöglicht, USB-Geräte und deren zugehörige Hosts/Treiber/Software ohne tiefgehende Kenntnisse des USB-Protokolls zu bewerten. Das Tool ist in Python3 geschrieben und nutzt RabbitMQ und WLAN-Zugriff, um Forschern die Durchführung von fernen USB-Sicherheitsbewertungen von überall auf der Welt zu ermöglichen. Durch die Nutzung von ConfigFS erlaubt AutoGadgetFS Benutzern, Geräte schnell zu klonen und zu emulieren, wodurch die Notwendigkeit entfällt, sich tief in die Details jeder Implementierung einzuarbeiten. Das Framework ermöglicht es Benutzern auch, eigene Fuzzer darauf aufbauend zu erstellen.
<div style="text-align:center"><img src="https://raw.githubusercontent.com/ehabhussein/AutoGadgetFS/master/screenshots/devtest.jpeg" width="450" height="187" /></div>
<a name="MMITM"/>```bash
Minimal agfs in the middle setup:

```bash Complete agfs in the middle setup with debugging support:
<div style="text-align:center"><img src="https://raw.githubusercontent.com/ehabhussein/AutoGadgetFS/master/screenshots/scenario2.jpeg"/></div>
---
<a name="Usbdev"/>
### Unterstützung der USB-Geräteklasse:
[✔️] USB-HID-Geräte vollständig unterstützt (Man-in-the-Middle)
[⚠️] Nur Gerätetests .. Alle USB-Geräte (kein Man-in-the-Middle)
[⏳] Zukünftige Versionen... Alle USB-Geräte (Man-in-the-Middle)
---
<a name="Caps"/>
### Fähigkeiten:
1. Ein USB-Gerät einfach finden, auswählen und daran anschließen.
1. Jedes USB-HID-Gerät emulieren.
1. AGFS-Man-in-the-Middle-Sniffing für HID-Geräte durchführen (Kommunikation auf Festplatte speichern).
1. Geräte-Sniffing (jedes Gerät).
1. Mehrere Fuzzer ermöglichen das Fuzzing eines Geräts oder eines Hosts.
1. Zufällige Fuzzer (mit Paketen fester oder zufälliger Länge).
1. Intelligente Fuzzer, die aus früheren USB-Kommunikationen lernen.
1. Describe-Fuzzer, um dem Fuzzer mitzuteilen, welche Bytes gefuzzt werden sollen, während der Rest des Pakets gleich bleibt.
1. Gadget-Fuzzer.
1. Sequenzieller Fuzzer.
1. Control-Transfer-Enumerator.
1. Wiedergabe von Paketen aus einer Datei.
1. Wiedergabe von Paketen aus einem gespeicherten USBLyzer-Mitschnitt.
1. Visuelle Darstellung von Paketen zur einfachen Reverse-Engineering der Kommunikation.
1. Warnungen für Geräte im DFU-Modus oder wenn das Gerät Informationen preisgibt.
1. USB-Gerät und Host können sich überall im Internet befinden.
1. Überwachung plötzlicher Schnittstellenänderungen.
---
<a name="Road"/>
### Fahrplan:
1. Sniffen von Control-Transfer-Anfragen an ein Gerät und Antworten darauf.
1. MITM und Emulation aller Gerätetypen.
1. Konsolen-/QT-basierte Oberfläche.
1. Mehr Schnittstellen-/Endpunktunterstützung auf dem RPI Zero W.
1. Unterstützung weiterer Boards wie dem GreatFET.
1. Umstellung auf ein benutzerdefiniertes Board.
1. Arbeiten daran, dass der Raspberry Pi volle Unterstützung für USB-Geräteemulation mit allen Schnittstellen bietet.
1. Korrelation von gesendeten und empfangenen Paketen über Sequenznummern.
---
<a name="Installation"/>
### Installation:
<a name="Linux"/>
### Linux-Rechner:
* Hinweis: WSL/WSL2 wird aufgrund von Problemen mit USB-Durchleitung nicht unterstützt.
* Installieren Sie Python3, ipython3, git, pip und rabbitMQ-Server
```bash
sudo apt install python3 ipython3 git python3-pip rabbitmq-server dfu-util
sudo service rabbitmq-server start
```
* Klonen Sie das Repository
```bash
git clone https://github.com/ehabhussein/AutoGadgetFS
cd AutoGadgetFS
```
* Installieren Sie die Abhängigkeiten
```bash
sudo -H pip3 install -r requirements.txt
```
* Downgrade von prompt-toolkit für eine bessere ipython-Erfahrung:
```bash
sudo python3 -m pip install prompt-toolkit~=2.0
```
* Aktivieren Sie die Weboberfläche für rabbitMQ
```bash
sudo rabbitmq-plugins enable rabbitmq_management
http://localhost:15672/ um zur Weboberfläche zu gelangen
```
* Melden Sie sich mit den Anmeldedaten *guest:guest* an der Weboberfläche an.
* HINWEIS: Wenn Sie rabbitMQ nicht auf `localhost` installieren, fügen Sie den folgenden Benutzer hinzu und melden Sie sich damit an:
```bash
sudo rabbitmqctl add_user autogfs usb4ever
sudo rabbitmqctl set_user_tags autogfs administrator
```
* Laden Sie die rabbitMQ-Konfigurationsdatei hoch
* Scrollen Sie im Reiter "Overview" nach unten, um Definitionen zu importieren
* Laden Sie die Datei hoch, die sich in: *rabbitMQbrokerconfig/rabbitmq-Config.json* befindet
```bash
sudo service rabbitmq-server restart
```
* Testen Sie die Installation
```python
sudo ipython3
Python 3.7.7 (default, Apr 1 2020, 13:48:52)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.9.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: import libagfs
In [2]: x = libagfs.agfs()
***************************************
AutoGadgetFS: USB testing made easy
***************************************
Enter IP address of the rabbitmq server: 127.0.0.1
In [3]: exit
sudo `python3` agfsconsole.py
***************************************
AutoGadgetFS: USB testing made easy
***************************************
Enter IP address of the rabbitmq server: 127.0.0.1
Give your project a name?!:
``` ```
* Patch Pyusb langID ( Not needed unless you get pyusb errors for langID ):
* Edit the file `/usr/local/lib/python3/dist-packages/usb/util.py`
* make changes to the `def get_string` method to look like below:
```python
if 0 == len(langids):
return "Error Reading langID"
#raise ValueError("The device has no langid")
if langid is None:
langid = langids[0]
elif langid not in langids:
return "Error Reading langID"
#raise ValueError("The device does not support the specified langid")
```