
Tests USB simplifiés

a. Test de périphérique uniquement
b. Configuration minimale agfs au milieu
c. Configuration complète agfs au milieu avec support de débogage
a. Linux
AutoGadgetFS est un framework open source qui permet aux utilisateurs d'évaluer les périphériques USB et leurs hôtes/pilotes/logiciels associés sans connaissance approfondie du protocole USB. L'outil est écrit en Python3 et utilise RabbitMQ et l'accès WiFi pour permettre aux chercheurs de réaliser des évaluations de sécurité USB à distance depuis n'importe où dans le monde. En exploitant ConfigFS, AutoGadgetFS permet aux utilisateurs de cloner et d'émuler rapidement des périphériques, éliminant ainsi le besoin de creuser dans les détails de chaque implémentation. Le framework permet également aux utilisateurs de créer leurs propres fuzzers par-dessus.
<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"/>
### Prise en charge des classes de périphériques USB :
[✔️] Périphériques USB HID entièrement pris en charge (Homme du milieu)
[⚠️] Test de périphérique uniquement .. Tous les périphériques USB (PAS d'Homme du milieu)
[⏳] Futures versions... Tous les périphériques USB (Homme du milieu)
---
<a name="Caps"/>
### Capacités :
1. Trouver, sélectionner et se connecter facilement à un périphérique USB.
1. Émuler n'importe quel périphérique USB HID.
1. Effectuer une écoute AGFS en mode intermédiaire pour les périphériques HID (enregistrer la communication sur le disque).
1. Écoute de périphérique (tout périphérique).
1. Plusieurs fuzzers vous permettent de fuzzer un périphérique ou un hôte.
1. Fuzzers aléatoires (avec paquets de longueur fixe ou aléatoire).
1. Fuzzers intelligents qui apprennent des communications USB précédentes.
1. Describe Fuzzer pour indiquer au Fuzzer quels octets fuzzer tout en laissant le reste du paquet identique.
1. Gadget Fuzzer.
1. Sequential Fuzzer.
1. Énumérateur de transfert de contrôle.
1. Rejeu de paquets depuis un fichier.
1. Rejeu de paquets depuis une capture USBLyzer sauvegardée.
1. Présentation visuelle des paquets pour faciliter la rétro-ingénierie de la communication.
1. Alertes pour périphérique en mode DFU, ou si le périphérique fuit des informations.
1. Le périphérique USB et l'hôte peuvent être n'importe où sur Internet.
1. Surveiller les changements soudains d'interface.
---
<a name="Road"/>
### Feuille de route :
1. Écouter les requêtes de transfert de contrôle vers un périphérique et y répondre.
1. MITM et émuler tous les types de périphériques.
1. Interface basée sur console/QT.
1. Plus de support d'interfaces/points de terminaison sur le RPI zero W.
1. Prendre en charge plus de cartes comme le greatfet.
1. Passer à une carte personnalisée.
1. Travailler pour que le raspberry pi ait un support complet pour l'émulation de périphériques USB avec toutes les interfaces.
1. Corréler les paquets envoyés et reçus via les numéros de séquence.
---
<a name="Installation"/>
### Installation :
<a name="Linux"/>
### Machine Linux :
* Remarque : WSL/WSL2 n'est pas pris en charge en raison de problèmes de passage USB.
* Installer Python3, ipython3, git, pip et le serveur rabbitMQ
```bash
sudo apt install python3 ipython3 git python3-pip rabbitmq-server dfu-util
sudo service rabbitmq-server start
```
* Cloner le dépôt
```bash
git clone https://github.com/ehabhussein/AutoGadgetFS
cd AutoGadgetFS
```
* Installer les dépendances
```bash
sudo -H pip3 install -r requirements.txt
```
* Rétrograder prompt toolkit pour une meilleure expérience ipython :
```bash
sudo python3 -m pip install prompt-toolkit~=2.0
```
* Activer l'interface web pour rabbitMQ
```bash
sudo rabbitmq-plugins enable rabbitmq_management
http://localhost:15672/ to reach the web interface
```
* Se connecter à l'interface web avec les identifiants *guest:guest*
* REMARQUE : si vous n'installez pas rabbitMQ sur `localhost`, ajoutez l'utilisateur suivant et connectez-vous avec :
```bash
sudo rabbitmqctl add_user autogfs usb4ever
sudo rabbitmqctl set_user_tags autogfs administrator
```
* Téléverser le fichier de configuration rabbitMQ
* Dans l'onglet overview, faites défiler vers le bas pour importer les définitions
* Téléversez le fichier trouvé dans : *rabbitMQbrokerconfig/rabbitmq-Config.json*
```bash
sudo service rabbitmq-server restart
```
* Tester l'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: