
Umap2 is the second revision of NCC Group's python based USB host security assessment tool.
Umap2 é a segunda revisão da ferramenta de avaliação de segurança de host USB baseada em Python do NCC Group.
Esta revisão terá todas as funcionalidades que eram suportadas na primeira revisão:
Nesta revisão, haverá algumas funcionalidades adicionais:
O Umap2 é desenvolvido pelo NCC Group e pela equipe Cisco SAS.
Aviso: o umap2 ainda é uma ferramenta experimental, em estágio alfa. As APIs, nomes de executáveis, etc. provavelmente serão alterados em um futuro próximo. Use por sua conta e risco.
#umap2 on Freenode <https://webchat.freenode.net/?channels=umap2>_Como esta é uma versão muito inicial, o Umap2 ainda não está disponível no pypi; em vez disso, use o pip para instalá-lo diretamente do github:
::
$ pip install git+https://github.com/nccgroup/umap2.git#egg=umap2
O Umap2 é compatível com python2/3 na maior parte. No entanto, o script de fuzzing (umap2kitty) roda apenas em python2.
As dependências do Umap2 estão listadas no setup.py e serão instaladas com o umap2; no entanto, há algumas coisas que você pode querer fazer para adicionar suporte a alguns dispositivos:
Armazenamento em Massa
1. Requer uma imagem de disco chamada **stick.img** no diretório atual
MTP
~~~
1. Requer uma pasta/arquivo chamado **mtp_fs** no diretório atual.
2. Requer o pacote python pymtpdevice. Este pacote não está no pypi
no momento, mas pode ser baixado e instalado a partir daqui:
https://github.com/BinyaminSharet/Mtp
Hardware
--------
- `Facedancer <http://goodfet.sourceforge.net/hardware/facedancer21/>`_
é o hardware recomendado para o Umap2.
O Umap2 foi desenvolvido com base nele, e você terá o melhor suporte com ele.
- `Raspdancer <http://wiki.yobi.be/wiki/Raspdancer>` é suportado em RPi
- **GadgetFS** é parcialmente suportado.
Esse suporte é muito experimental (ainda mais que o resto do Umap2)
e limitado.
- BeagleboneBlack a partir do kernel Linux 4.4.9 com driver gadgetfs corrigido
- RaspberryPi Zero W a partir do kernel Linux 4.12.0-rc3+, que não requer patches
- Como o 4.12.0-rc3+ não requer patches, pode haver outros dispositivos que
possam ser suportados; se você conhecer algum dispositivo assim ou tiver feito alterações
para fazê-lo funcionar em outros dispositivos, por favor, nos avise.
Se tiver interesse, leia o **gadget/README.rst** para mais informações.
Uso
-----
Emulação de Dispositivo
A funcionalidade básica do Umap2 é emular um dispositivo USB. Você pode emular um dos dispositivos existentes (use umap2list para ver os dispositivos disponíveis):
::
$ umap2emulate -P fd:/dev/ttyUSB0 -C mass_storage
ou emular seu próprio dispositivo:
::
$ umap2emulate -P fd:/dev/ttyUSB0 -C ~/my_mass_storage.py
Um guia detalhado para adicionar seu dispositivo será adicionado em breve; enquanto isso, você pode dar uma olhada nos dispositivos do umap2 em umap2/dev/
Varredura de Suporte a Dispositivos
O Umap2 pode tentar detectar quais tipos de dispositivos USB
são suportados pelo host.
Isso é feito emulando cada dispositivo implementado no Umap2
por um curto período de tempo
e verificando se uma mensagem específica do dispositivo foi enviada.
::
$ umap2scan -P fd:/dev/ttyUSB0
Varredura de Suporte a Dispositivos Específicos do Fabricante
Além de verificar o suporte a várias classes de dispositivos, o Umap2 pode examinar o host em busca de suporte a dispositivos específicos do fabricante.
A varredura específica do fabricante ajuda a identificar os drivers específicos do fabricante disponíveis no host.
Isso pode ser feito usando o banco de dados VID-PID atual do Umap2 (ainda em desenvolvimento), ou outro arquivo no mesmo formato:
::
$ umap2vsscan -P fd:/dev/ttyUSB0 -d $UMAP2_DIR/data/vid_pid_db.py
Ou varrendo um intervalo específico de vid-pid - neste exemplo - procurando cada combinação de VID de 0x1001 a 0x1004 e PID de 0x0000 a 0xffff:
::
$ umap2vsscan -P fd:/dev/ttyUSB0 -s 1001-1004:0000-ffff
Quaisquer patches/adições ao arquivo vid_pid_db.py são muito bem-vindos!
Fuzzing
Um guia detalhado para fuzzing com o Umap2 pode ser encontrado em
`docs/fuzzing.rst <https://github.com/nccgroup/umap2/blob/master/docs/fuzzing.rst>`_
O fuzzing com o Umap2 é composto por três etapas,
que podem ser unificadas em um único script no futuro.
1. Descubra qual é a ordem das mensagens
para o host em que você deseja aplicar fuzzing e o
dispositivo USB que você emula:
::
$ umap2stages -P fd:/dev/ttyUSB0 -C keyboard -s keyboard.stages
2. Inicie o fuzzer kitty em um shell separado
e forneça a ele os estágios gerados na etapa 1.
::
$ umap2kitty -s keyboard.stages
3. Inicie a emulação de teclado do umap2 em modo de fuzzing
::
$ umap2fuzz -P fd:/dev/ttyUSB0 -C keyboard
Após a etapa 3 ser realizada, a sessão de fuzzing começará.
Nota Sobre Fuzzing de MTP
+++++++++++++++++++++++++
Embora o umap2 possa ser usado para emular e descobrir dispositivos MTP
(veja a seção "Dependências Soft" deste README),
ele não aplica fuzzing na camada MTP neste momento.
Para aplicar fuzzing na camada MTP,
você pode usar o fuzzer embutido na biblioteca MTP.
Planejamos suportar fuzzing de MTP diretamente pelo umap2 em versões futuras.
Detecção de SO do Host
TBD
Se você tiver problemas com o Umap2, tente a
seção de solução de problemas <https://github.com/nccgroup/umap2/blob/master/docs/troubleshooting.rst>_
Você precisa das bibliotecas python SPI-Py https://github.com/lthiery/SPI-Py e GPIO.
Use phy rd