
Implemente seu próprio dispositivo USB em Python, com suporte de um periférico de hardware como Cynthion ou GreatFET
Este repositório abriga a próxima geração do software Facedancer. Descendente do Facedancer original baseado no GoodFET, este repositório fornece um módulo Python que oferece suporte expandido ao Facedancer -- incluindo suporte para múltiplas placas e alguns novos recursos bastante significativos.
A documentação do Facedancer está disponível em Read the Docs. As fontes brutas da documentação estão na pasta docs/.
Instale este pacote com o seguinte comando:
pip install facedancer
Depois disso, você pode importar o pacote facedancer normalmente:
$ python
>>> import facedancer
O Facedancer 3.0 é uma reescrita completa do núcleo de emulação original e não oferece suporte a scripts legados.
Se você estiver usando scripts ou materiais de treinamento que dependem de recursos
ou APIs obsoletos no v3.0.x, você pode instalar a versão mais recente v2.9.x
do Facedancer com:
pip install "facedancer<=3"
Applets e exemplos legados podem ser encontrados na branch v2.9.x.
As placas Facedancer são dispositivos de hardware simples que atuam como controladores USB "controlados remotamente". Com o software adequado, você pode usar essas placas para emular dispositivos USB de forma rápida e fácil -- e para fazer fuzzing em controladores USB host!
Este repositório de software específico atualmente permite que você crie facilmente emulações de dispositivos USB em Python. O controle é refinado o suficiente para que você possa causar todos os tipos de comportamentos incorretos de USB. :)
Para mais informações, consulte:
Um grande novo recurso da base de código mais recente do Facedancer é a capacidade de fazer MITM (Meddler-In-The-Middle) em conexões USB -- substituindo um dos projetos originais USBProxy de um dos autores. Isso abre todo um novo leque de aplicações -- incluindo análise de protocolo e manipulação ao vivo de pacotes USB -- e é especialmente útil quando você não controla o software em execução no dispositivo alvo (por exemplo, em sistemas embarcados ou consoles de videogame).
+-----------------------------------------------------------------------+
+------------+ | +--------------------------------+ +---------------------------+ | +--------------+
| | | | | | | | | |
| PROXIED | | | HOST COMPUTER | | FACEDANCER DEVICE | | | TARGET USB |
| DEVICE <------> running Facedancer software <---> acts as USB-Controlled <------> HOST |
| | | | | | USB Controller | | | |
| | | | | | | | | |
+------------+ | +--------------------------------+ +---------------------------+ | +--------------+
| |
| MITM Setup (HOST + FACEDANCER) |
+-----------------------------------------------------------------------+
Este recurso está completo, mas poderia usar mais documentação. Pull requests são bem-vindos. :)
Primeiro, você provavelmente vai querer definir a variável de ambiente BACKEND, que permite
que o software saiba qual tipo de placa Facedancer você deseja usar. Se essa variável
não estiver definida, o software tentará adivinhar com base no que está conectado. Ele nem
sempre faz as melhores suposições, então provavelmente é melhor você mesmo defini-la.
Em seguida, você provavelmente vai querer conferir um dos exemplos, ou um dos scripts prontos.
Os exemplos na nova sintaxe estão localizados em examples. Os scripts principais do Facedancer na
sintaxe "antiga" estão localizados em legacy-applets.
Por exemplo:
export BACKEND=greatfet
./examples/rubber-ducky.py
BACKEND=cynthion)BACKEND=greatfet)BACKEND=greatfet)BACKEND=greatfet)BACKEND=goodfet)BACKEND=raspdancer)BACKEND=hydradancer)Observe que restrições de hardware impedem que as placas MAX3420/MAX3421 emulem dispositivos mais complexos -- há limitação no número/tipo de endpoints que podem ser configurados. As placas LPC4330 -- como a GreatFET -- têm menos limitações.
Por um motivo semelhante, as placas MAX3420/MAX3421 (BACKEND=goodfet ou BACKEND=raspdancer)
atualmente não podem ser usadas como dispositivos MITM USBProxy-nv. Todas as placas modernas (BACKEND=greatfet, BACKEND=hydradancer)
devem ser totalmente funcionais.
Observe que as placas HydraDancer e HydraUSB3 (BACKEND=hydradancer) atualmente não suportam modo host.
Observe que o FaceDancer 3.0 atual não funciona no Windows (alguns problemas no pyusb...) e apenas no GNU/Linux
O roadmap está em desenvolvimento, mas além do suporte a múltiplas placas, este repositório eventualmente abrigará alguns novos recursos interessantes, incluindo:
Há muitas pessoas a quem culpar pela incribilidade que é este repositório, incluindo:
... são sempre bem-vindas. Mande um PR pra gente!