
Test USB reso facile

b. Configurazione minima agfs in the middle
c. Configurazione completa agfs in the middle con supporto debug
a. Linux
AutoGadgetFS è un framework open source che consente agli utenti di valutare dispositivi USB e i relativi host/driver/software senza una conoscenza approfondita del protocollo USB. Lo strumento è scritto in Python3 e utilizza RabbitMQ e accesso WiFi per permettere ai ricercatori di condurre valutazioni remote della sicurezza USB da qualsiasi parte del mondo. Sfruttando ConfigFS, AutoGadgetFS consente agli utenti di clonare ed emulare dispositivi rapidamente, eliminando la necessità di approfondire i dettagli di ogni implementazione. Il framework permette inoltre agli utenti di creare i propri fuzzer basati su di esso.
<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"/>
### Supporto per classi di dispositivi USB:
[✔️] Dispositivi USB HID completamente supportati (Man in the middle)
[⚠️] Test solo dispositivo .. Tutti i dispositivi USB (NO Man in the middle)
[⏳] Versioni future... Tutti i dispositivi USB (Man in the middle)
---
<a name="Caps"/>
### Funzionalità:
1. Trova, seleziona e collega a un dispositivo USB con facilità.
1. Emula qualsiasi dispositivo USB HID .
1. Esegue lo sniffing AGFS in the middle per dispositivi HID ( salva la comunicazione su disco ).
1. Sniffing del dispositivo ( Qualsiasi dispositivo ).
1. Fuzzer multipli consentono di Fuzz un dispositivo o un host.
1. Fuzzer casuali ( con pacchetti di lunghezza fissa o casuale ).
1. Fuzzer intelligenti che apprendono dalle comunicazioni USB precedenti.
1. Describe Fuzzer per dire al Fuzzer quali byte Fuzz lasciando il resto del pacchetto invariato.
1. Gadget Fuzzer.
1. Fuzzer sequenziale.
1. Enumeratore di trasferimenti di controllo.
1. Riproduzione di pacchetti da un file.
1. Riproduzione di pacchetti da una cattura USBLyzer salvata.
1. Modo visivo di presentare i pacchetti per facilitare il reverse engineering della comunicazione.
1. Avvisi per dispositivo in modalità DFU, o se il dispositivo perde informazioni.
1. Il dispositivo USB e l'host possono essere ovunque su Internet.
1. Monitora cambiamenti improvvisi dell'interfaccia.
---
<a name="Road"/>
### RoadMap:
1. Sniffa le richieste di trasferimento di controllo verso un dispositivo e rispondi ad esse.
1. MITM ed emula tutti i tipi di dispositivi.
1. Interfaccia basata su console/QT.
1. Più supporto per interfacce/endpoint su RPI zero W.
1. Supporto per più schede come la greatfet.
1. Passare a una scheda personalizzata.
1. Lavorare per far sì che raspberry pi abbia pieno supporto per l'emulazione di dispositivi usb con tutte le interfacce.
1. correlare i pacchetti inviati e ricevuti tramite numeri di sequenza.
---
<a name="Installation"/>
### Installazione:
<a name="Linux"/>
### Macchina Linux:
* Nota: WSL/WSL2 non è supportato a causa di problemi con il pass-through USB.
* Installa Python3, ipython3 ,git, pip e rabbitMQ server
```bash
sudo apt install python3 ipython3 git python3-pip rabbitmq-server dfu-util
sudo service rabbitmq-server start
```
* Clona il repository
```bash
git clone https://github.com/ehabhussein/AutoGadgetFS
cd AutoGadgetFS
```
* Installa i requisiti
```bash
sudo -H pip3 install -r requirements.txt
```
* Downgrade prompt toolkit per una migliore esperienza ipython:
```bash
sudo python3 -m pip install prompt-toolkit~=2.0
```
* Abilita l'interfaccia web per rabbitMQ
```bash
sudo rabbitmq-plugins enable rabbitmq_management
http://localhost:15672/ to reach the web interface
```
* accedi all'interfaccia web con le credenziali *guest:guest*
* NOTA: se non stai installando rabbitMQ su `localhost` aggiungi il seguente utente e accedi con esso:
```bash
sudo rabbitmqctl add_user autogfs usb4ever
sudo rabbitmqctl set_user_tags autogfs administrator
```
* Carica il file di configurazione di rabbitMQ
* Nella scheda overview scorri fino in fondo per importare definizioni
* Carica il file che si trova in: *rabbitMQbrokerconfig/rabbitmq-Config.json*
```bash
sudo service rabbitmq-server restart
```
* Testa l'installazione
```bash
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")
```
* If you prefer to use `patch` apply the following patch to the file: `AutoGadgetFS/pyusb_patches/pyusb_langid.patch`
---
<a name="Rasp"/>
### Raspberry Pi Zero W: