
Umap2 è la seconda revisione dello strumento di valutazione della sicurezza degli host USB basato su Python di NCC Group.
Umap2 è la seconda revisione dello strumento di valutazione della sicurezza degli host USB basato su Python di NCC Group.
Questa revisione avrà tutte le funzionalità supportate nella prima revisione:
In questa revisione ci saranno alcune funzionalità aggiuntive:
Umap2 è sviluppato da NCC Group e dal team Cisco SAS.
Attenzione: umap2 è ancora uno strumento sperimentale, in fase alpha. È probabile che le API, i nomi degli eseguibili, ecc. vengano modificati nel prossimo futuro. Usalo a tuo rischio.
#umap2 su Freenode <https://webchat.freenode.net/?channels=umap2>_
InstallazionePoiché questa è una versione molto precoce, Umap2 non è ancora disponibile su pypi, usa invece pip per installarlo direttamente da github:
::
$ pip install git+https://github.com/nccgroup/umap2.git#egg=umap2
Umap2 è compatibile con python2/3 per la maggior parte. Tuttavia, lo script di fuzzing (umap2kitty) funziona solo su python2.
Le dipendenze di Umap2 sono elencate in setup.py e verranno installate con umap2, comunque, ci sono un paio di cose che potresti voler fare per aggiungere il supporto per alcuni dispositivi:
Mass Storage
1. Richiede un'immagine disco chiamata **stick.img** nella directory di esecuzione
MTP
~~~
1. Richiede una cartella/file chiamato **mtp_fs** nella directory corrente.
2. Richiede il pacchetto Python pymtpdevice. Questo pacchetto non è su pypi
al momento, ma può essere scaricato e installato da qui:
https://github.com/BinyaminSharet/Mtp
Hardware
--------
- `Facedancer <http://goodfet.sourceforge.net/hardware/facedancer21/>`_
è l'hardware consigliato per Umap2.
Umap2 è stato sviluppato basandosi su di esso, e riceverai il massimo supporto con esso.
- `Raspdancer <http://wiki.yobi.be/wiki/Raspdancer>` è supportato su RPi
- **GadgetFS** è parzialmente supportato.
Questo supporto è molto sperimentale (ancora più del resto di Umap2)
e limitato.
- BeagleboneBlack a partire dal kernel Linux 4.4.9 con driver gadgetfs
patchato
- RaspberryPi Zero W a partire dal kernel Linux 4.12.0-rc3+ che non richiede
patch
- Poiché 4.12.0-rc3+ non richiede patch, potrebbero esserci altri dispositivi
che possono essere supportati; se conosci un dispositivo del genere o hai apportato modifiche
per farlo funzionare su altri dispositivi, inviaci una parola.
Se sei interessato, leggi **gadget/README.rst** per maggiori informazioni.
Utilizzo
--------
Emulazione di dispositivi
La funzionalità di base di Umap2 è l'emulazione di un dispositivo USB. Puoi emulare uno dei dispositivi esistenti (usa umap2list per vedere i dispositivi disponibili):
::
$ umap2emulate -P fd:/dev/ttyUSB0 -C mass_storage
oppure emulare il tuo dispositivo:
::
$ umap2emulate -P fd:/dev/ttyUSB0 -C ~/my_mass_storage.py
Una guida dettagliata per aggiungere il tuo dispositivo sarà aggiunta presto, nel frattempo, puoi dare un'occhiata ai dispositivi umap2 in umap2/dev/
Scansione del supporto dei dispositivi
Umap2 può tentare di rilevare quali tipi di dispositivi USB
sono supportati dall'host.
Ciò viene fatto emulando ogni dispositivo implementato in Umap2
per un breve periodo di tempo
e verificando se un messaggio specifico del dispositivo è stato inviato.
::
$ umap2scan -P fd:/dev/ttyUSB0
Scansione del supporto di dispositivi specifici del vendor
Oltre alla scansione del supporto per varie classi di dispositivi, Umap2 può scansionare l'host per il supporto di dispositivi specifici del vendor.
La scansione specifica del vendor aiuta a identificare i driver specifici del vendor disponibili sull'host.
Questo può essere fatto usando il database VID-PID corrente di Umap2 (ci sto ancora lavorando), o un altro file nello stesso formato:
::
$ umap2vsscan -P fd:/dev/ttyUSB0 -d $UMAP2_DIR/data/vid_pid_db.py
Oppure scansionando un intervallo vid-pid specifico - in questo esempio - scansiona ogni combinazione di VID da 0x1001 a 0x1004 e PID da 0x0000 a 0xffff:
::
$ umap2vsscan -P fd:/dev/ttyUSB0 -s 1001-1004:0000-ffff
Qualsiasi patch/aggiunta al file vid_pid_db.py è molto gradita!
Fuzzing
Una guida dettagliata per il fuzzing con Umap2 può essere trovata in
`docs/fuzzing.rst <https://github.com/nccgroup/umap2/blob/master/docs/fuzzing.rst>`_
Il fuzzing con Umap2 è composto da tre passaggi,
che potrebbero essere unificati in un singolo script in futuro.
1. Scopri qual è l'ordine dei messaggi
per l'host che vuoi sottoporre a fuzzing e il
dispositivo USB che emuli:
::
$ umap2stages -P fd:/dev/ttyUSB0 -C keyboard -s keyboard.stages
2. Avvia il fuzzer kitty in una shell separata
e fornisci gli stage generati nel passaggio 1.
::
$ umap2kitty -s keyboard.stages
3. Avvia l'emulazione della tastiera umap2 in modalità fuzz
::
$ umap2fuzz -P fd:/dev/ttyUSB0 -C keyboard
Dopo il passaggio 3, la sessione di fuzzing avrà inizio.
Nota sul fuzzing MTP
++++++++++++++++++++++
Sebbene umap2 possa essere usato per emulare e scoprire dispositivi MTP
(vedi sezione "Dipendenze soft" di questo README),
non esegue il fuzzing del layer MTP in questo momento.
Per eseguire il fuzzing del layer MTP,
puoi usare il fuzzer integrato nella libreria MTP.
Prevediamo di supportare il fuzzing MTP direttamente da umap2 nelle versioni future.
Rilevamento del sistema operativo host
TBD
Se hai problemi con Umap2, prova la
sezione di risoluzione dei problemi <https://github.com/nccgroup/umap2/blob/master/docs/troubleshooting.rst>_
Ti servono SPI-Py https://github.com/lthiery/SPI-Py e le librerie Python GPIO.
Usa phy rd