
Тестирование USB стало простым

AutoGadgetFS — это фреймворк с открытым исходным кодом, который позволяет пользователям оценивать USB-устройства и связанные с ними хосты/драйверы/программное обеспечение без глубоких знаний протокола USB. Инструмент написан на Python3 и использует RabbitMQ и Wi-Fi доступ, чтобы исследователи могли проводить удаленные оценки безопасности USB из любой точки мира. Используя ConfigFS, AutoGadgetFS позволяет пользователям быстро клонировать и эмулировать устройства, устраняя необходимость углубляться в детали каждой реализации. Фреймворк также позволяет пользователям создавать собственные фуззеры на его основе.
<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"/>
### Поддержка классов USB-устройств:
[✔️] USB HID-устройства полностью поддерживаются (человек посередине)
[⚠️] Тестирование только устройства.. Все USB-устройства (без человека посередине)
[⏳] Будущие релизы... Все USB-устройства (человек посередине)
---
<a name="Caps"/>
### Возможности:
1. Легко находить, выбирать и подключаться к USB-устройству.
1. Эмулировать любое USB HID-устройство.
1. Выполнять AGFS с перехватом трафика для HID-устройств (сохранять обмен данными на диск).
1. Отслеживание устройств (любых устройств).
1. Несколько фаззеров позволяют фаззить устройство или хост.
1. Случайные фаззеры (с пакетами фиксированной или случайной длины).
1. Умные фаззеры, обучающиеся на предыдущих USB-коммуникациях.
1. Описательный фаззер, указывающий, какие байты фаззить, оставляя остальную часть пакета без изменений.
1. Фаззер гаджетов.
1. Последовательный фаззер.
1. Перечислитель управляющих передач.
1. Воспроизведение пакетов из файла.
1. Воспроизведение пакетов из сохранённого захвата USBLyzer.
1. Визуальное представление пакетов для упрощения обратного проектирования обмена данными.
1. Оповещения о режиме DFU устройства или утечке информации с устройства.
1. USB-устройство и хост могут находиться где угодно в интернете.
1. Мониторинг внезапных изменений интерфейсов.
---
<a name="Road"/>
### Дорожная карта:
1. Перехватывать запросы управляющих передач к устройству и отвечать на них.
1. MITM и эмуляция всех типов устройств.
1. Интерфейс на основе консоли/QT.
1. Поддержка большего количества интерфейсов/конечных точек на RPI zero W.
1. Поддержка большего количества плат, таких как greatfet.
1. Переход на собственную плату.
1. Доведение Raspberry Pi до полной поддержки эмуляции USB-устройств со всеми интерфейсами.
1. Связывание отправленных и полученных пакетов по порядковым номерам.
---
<a name="Installation"/>
### Установка:
<a name="Linux"/>
### На Linux-машине:
* Примечание: WSL/WSL2 не поддерживается из-за проблем с пробросом USB.
* Установите Python3, ipython3, git, pip и сервер rabbitMQ
```bash
sudo apt install python3 ipython3 git python3-pip rabbitmq-server dfu-util
sudo service rabbitmq-server start
```
* Клонируйте репозиторий
```bash
git clone https://github.com/ehabhussein/AutoGadgetFS
cd AutoGadgetFS
```
* Установите зависимости
```bash
sudo -H pip3 install -r requirements.txt
```
* Понизьте версию prompt toolkit для лучшего опыта работы с ipython:
```bash
sudo python3 -m pip install prompt-toolkit~=2.0
```
* Включите веб-интерфейс для rabbitMQ
```bash
sudo rabbitmq-plugins enable rabbitmq_management
http://localhost:15672/ для доступа к веб-интерфейсу
```
* Войдите в веб-интерфейс с учётными данными *guest:guest*
* ПРИМЕЧАНИЕ: если вы устанавливаете rabbitMQ не на `localhost`, добавьте следующего пользователя и входите с ним:
```bash
sudo rabbitmqctl add_user autogfs usb4ever
sudo rabbitmqctl set_user_tags autogfs administrator
```
* Загрузите файл конфигурации rabbitMQ
* На вкладке overview прокрутите вниз до "import definitions"
* Загрузите файл, расположенный в: *rabbitMQbrokerconfig/rabbitmq-Config.json*
```bash
sudo service rabbitmq-server restart
```
* Проверьте установку
```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")
```
* 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: