
Umap2 is the second revision of NCC Group's python based USB host security assessment tool.
Umap2 est la deuxième révision de l'outil d'évaluation de la sécurité des hôtes USB basé sur Python de NCC Group.
Cette révision comportera toutes les fonctionnalités prises en charge dans la première révision :
Dans cette révision, quelques fonctionnalités supplémentaires seront ajoutées :
Umap2 est développé par NCC Group et l'équipe Cisco SAS.
Avertissement : umap2 est encore un outil expérimental, au stade alpha. Les API, les noms des exécutables, etc. sont susceptibles de changer dans un avenir proche. À utiliser à vos propres risques.
#umap2 on Freenode <https://webchat.freenode.net/?channels=umap2>_
InstallationComme il s'agit d'une version très précoce, Umap2 n'est pas encore disponible sur pypi. Utilisez plutôt pip pour l'installer directement depuis github :
::
$ pip install git+https://github.com/nccgroup/umap2.git#egg=umap2
Umap2 est compatible python2/3 pour la plupart des parties. Cependant, le script de fuzzing (umap2kitty) ne fonctionne qu'avec python2.
Les dépendances d'Umap2 sont listées dans setup.py et seront installées avec umap2. Cependant, il y a deux ou trois choses que vous pourriez vouloir faire pour ajouter la prise en charge de certains périphériques :
Mass Storage
1. Nécessite une image disque appelée **stick.img** dans le répertoire de travail
MTP
~~~
1. Nécessite un dossier/fichier appelé **mtp_fs** dans le répertoire courant.
2. Nécessite le paquet python pymtpdevice. Ce paquet n'est pas sur pypi
pour le moment, mais peut être téléchargé et installé depuis ici :
https://github.com/BinyaminSharet/Mtp
Hardware
--------
- `Facedancer <http://goodfet.sourceforge.net/hardware/facedancer21/>`_
est le matériel recommandé pour Umap2.
Umap2 a été développé sur cette base, et c'est avec lui que vous obtiendrez le plus de support.
- `Raspdancer <http://wiki.yobi.be/wiki/Raspdancer>` est pris en charge sur RPi
- **GadgetFS** est partiellement pris en charge.
Cette prise en charge est très expérimentale (encore plus que le reste d'Umap2)
et limitée.
- BeagleboneBlack à partir du noyau Linux 4.4.9 avec un pilote gadgetfs patché
- RaspberryPi Zero W à partir du noyau Linux 4.12.0-rc3+ qui ne nécessite
aucun patch
- Puisque 4.12.0-rc3+ ne nécessite aucun patch, il se peut qu'il y ait d'autres périphériques
qui puissent être pris en charge. Si vous connaissez un tel périphérique ou si vous avez effectué des modifications
pour le faire fonctionner sur d'autres périphériques, n'hésitez pas à nous en faire part.
Si vous êtes intéressé, lisez **gadget/README.rst** pour plus d'informations.
Usage
-----
Device Emulation
La fonctionnalité de base d'Umap2 est l'émulation d'un périphérique USB. Vous pouvez émuler l'un des périphériques existants (utilisez umap2list pour voir les périphériques disponibles) :
::
$ umap2emulate -P fd:/dev/ttyUSB0 -C mass_storage
ou émuler votre propre périphérique :
::
$ umap2emulate -P fd:/dev/ttyUSB0 -C ~/my_mass_storage.py
Un guide détaillé pour ajouter votre périphérique sera bientôt disponible. En attendant, vous pouvez jeter un œil aux périphériques umap2 dans umap2/dev/
Device Support Scanning
Umap2 peut tenter de détecter quels types de périphériques USB
sont pris en charge par l'hôte.
Pour ce faire, il émule chaque périphérique implémenté dans Umap2
pendant une courte période,
puis vérifie si un message spécifique au périphérique a été envoyé.
::
$ umap2scan -P fd:/dev/ttyUSB0
Vendor Specific Device Support Scanning
En plus de l'analyse de la prise en charge de diverses classes de périphériques, Umap2 peut analyser l'hôte pour détecter la prise en charge de périphériques spécifiques au fabricant.
L'analyse spécifique au fabricant aide à identifier les pilotes spécifiques au fabricant disponibles sur l'hôte.
Cela peut être fait en utilisant la base de données VID-PID actuelle d'Umap2 (encore en cours de développement), ou un autre fichier au même format :
::
$ umap2vsscan -P fd:/dev/ttyUSB0 -d $UMAP2_DIR/data/vid_pid_db.py
Ou en analysant une plage vid-pid spécifique — dans cet exemple — analyse de chaque combinaison de VID de 0x1001 à 0x1004 et de PID de 0x0000 à 0xffff :
::
$ umap2vsscan -P fd:/dev/ttyUSB0 -s 1001-1004:0000-ffff
Tous les patchs/ajouts au fichier vid_pid_db.py sont les bienvenus !
Fuzzing
Un guide détaillé pour le fuzzing avec Umap2 peut être trouvé dans
`docs/fuzzing.rst <https://github.com/nccgroup/umap2/blob/master/docs/fuzzing.rst>`_
Le fuzzing avec Umap2 se compose de trois étapes,
qui pourraient être unifiées en un seul script à l'avenir.
1. Découvrez l'ordre des messages
pour l'hôte que vous voulez fuzzer et le
périphérique USB que vous émulez :
::
$ umap2stages -P fd:/dev/ttyUSB0 -C keyboard -s keyboard.stages
2. Démarrez le fuzzer kitty dans un shell séparé,
et fournissez-lui les étapes générées à l'étape 1.
::
$ umap2kitty -s keyboard.stages
3. Démarrez l'émulation du clavier umap2 en mode fuzz
::
$ umap2fuzz -P fd:/dev/ttyUSB0 -C keyboard
Après l'étape 3, la session de fuzzing commencera.
Note About MTP fuzzing
++++++++++++++++++++++
Bien que umap2 puisse être utilisé pour émuler et découvrir des périphériques MTP
(voir la section « Soft dependencies » de ce README),
il ne fuzze pas la couche MTP pour le moment.
Afin de fuzzer la couche MTP,
vous pouvez utiliser le fuzzer intégré à la bibliothèque MTP.
Nous prévoyons de prendre en charge le fuzzing MTP directement depuis umap2 dans les prochaines versions.
Host OS Detection
TBD
Si vous rencontrez des problèmes avec Umap2, essayez la
section de dépannage <https://github.com/nccgroup/umap2/blob/master/docs/troubleshooting.rst>_
Vous avez besoin de SPI-Py https://github.com/lthiery/SPI-Py et des bibliothèques Python GPIO.
Utilisez phy rd