
Exponha a atividade USB em tempo real

[!NOTE] USBvalve Versão 1.0.0
Uma reescrita completa da aplicação foi feita:
- abandonado o ambiente Arduino IDE, agora o código é escrito para o Pi Pico SDK
- as dependências de bibliotecas externas foram bastante reduzidas
- o suporte a USB host para dispositivos Low Speed é agora mais robusto (ATTiny85, EvilCrow, etc)
- o hardware e as funcionalidades estão quase inalterados, veja as notas abaixo para detalhes
Tenho certeza que, como eu, você já foi solicitado a colocar seu pendrive USB em um dispositivo desconhecido...e então a dúvida:
o que aconteceu com meu pobre dongle, nos bastidores? Roubando meus arquivos? Criptografando-os? Ou apenas instalando um malware? Com o USBvalve você pode descobrir isso em segundos: construído com hardware super barato de prateleira, você pode testar rapidamente qualquer atividade de sistema de arquivos USB e entender o que está acontecendo antes que seja tarde demais!
Com o USBvalve você pode ter um feedback imediato sobre o que acontece com o drive; a tela mostrará se o sistema de arquivos falso construído no dispositivo é acessado, lido ou escrito:
e a partir da versão 0.8.0 você também pode usá-lo como USB Host para detectar dispositivos BADUSB:
Este é um exemplo do depurador BADUSB disponível na porta serial:
Se você prefere vídeos, também pode dar uma olhada na minha Apresentação no Insomni'hack
A partir da versão 0.15.0 uma nova versão Pi Pico Watch é suportada. Para compilar a nova versão você deve descomentar a linha #define PIWATCH no início do código. O hardware é uma placa de relógio com display TFT de 1,28 polegadas baseada em RP2040. Você pode encontrar mais informações aqui.
Isto também é totalmente compatível com o Waveshare RP2040-LCD-1.28.
docs: documentação sobre o projeto, com uma apresentação onde você pode ver todas as funcionalidades
firmware: firmwares pré-compilados para o Raspberry Pi Pico. Você pode simplesmente usá-los e gravá-los na placa. Temos várias versões diferentes, para OLEDs de 32 ou 64 linhas, para Pico 1 ou Pico2, Pi Pico Watch, etc
PCB: arquivo Gerber se você quiser imprimir a PCB personalizada. Não é obrigatório, você pode usar a sua própria ou montar em uma protoboard
src e data: códigos-fonte, se você quiser modificar e compilar o firmware por conta própria
utils: alguns utilitários que você pode usar para construir um FS personalizado
pictures: imagens e recursos usados neste documento
STL: arquivos STL para a carcaça. Nas pastas 1.1 e 1.2 há carcaças completas (graças a WhistleMaster). Nas pastas 1.2_64 e 1.2_64_simple há carcaças para a tela 128x64 (graças a rtmq0227). Se você quiser algo mais leve para proteger o LCD, você pode usar o USBvalve_sliding_cover.stl.
Se você quiser construir o seu próprio, você precisa de:
Nas versões 0.x.x, o BOOTSEL era usado para reiniciar o dispositivo ou imprimir o número de eventos HID (pressione > 2s).
A leitura do BOOTSEL estava criando alguns problemas para a detecção de BADUSB, então isso foi removido a partir da versão 1.0.0 e substituído pelas duas opções a seguir:
GP0 e GND (pads 1 e 3, veja a imagem abaixo para um exemplo) para ter as mesmas funçõesr (reset) e h (eventos HID) do monitor serial
Em PCB você também encontrará uma versão 1.3 da placa, com alguns furos nos pads 1 e 3 para facilitar a montagem do botão. Mas como você pode ver, você também pode usar sua versão antiga.
Se você não está usando as funções BADUSB ou se prefere ter menos cobertura na detecção mas manter o uso do BOOTSEL, também estou fornecendo um firmware criado com o bootsel habilitado (veja a pasta e as releases).
Graças a Tz1rf também temos dois ótimos vídeos: um explicando o processo de construção passo a passo, e outro mostrando como enviar o firmware e usar a ferramenta.
Quase todo o trabalho é feito diretamente na placa pelo software, então você só precisa organizar a conexão com o OLED para a saída.
A partir da versão 0.8.0 do firmware, o USBvalve pode detectar dispositivos HID (usado para detectar BADUSB). Isso requer uma porta USB adicional atuando como Host. Se você não está interessado nisso, você pode usar as instruções antigas na pasta docs e usar a versão 1.1 da PCB. Caso contrário, prossiga com a versão 1.2 da PCB (temos versão para USB-A ou USB-B, veja a pasta).
USBH. Esta é para a versão A, mas há uma versão para USB Micro-B também se você preferirAlguns dos OLEDs têm os PINs GND e VCC trocados, então eu construí a PCB para ser compatível com ambas as versões:
Por exemplo, se o seu OLED tem GND no PIN1 e VCC no PIN2 assim:
Você deve colocar uma gota de solda nestes dois pads na parte de trás da PCB:
Caso contrário, você deve fazer o oposto e colocar a solda nos outros PADs:
Se você está usando uma protoboard ou apenas fiação, tudo o que você precisa fazer é garantir a conexão dos PINs corretos na tela OLED e na porta USB Host.
O mapeamento é o seguinte:
Se você quiser usar as funções DEBUG, você também pode colocar um header nos 3 PINs SWD na parte inferior da placa.
[!CAUTION] Esta PCB é para makers de eletrônica experientes NÃO A USE SE VOCÊ NÃO TIVER CERTEZA DE QUE CONSEGUE LIDAR COM ELA!
[!NOTE] R7 e R8 não estão realmente conectados a nada. Eles são adicionados para fins de depuração do circuito. Portanto, eles não aparecem na BOM
USBpipe é uma PCB dedicada para este projeto.
Você pode encontrar tudo o que precisa na pasta ./PCB/USBpipe/.
Para gravar o firmware, siga estes passos:
RPI-RP2 (em ambientes Linux você pode ter que montá-la manualmente)uf2) na pasta, dependendo do OLED que você usouPronto!
Não sei se algum dia será o caso, mas você pode querer personalizar o firmware para evitar a detecção feita por malware ciente do USBvalve :-)
Agrupei a maioria das variáveis que você pode querer modificar nesta seção do usb_config.h (veja o Dockerfile abaixo para recompilar)
// USB anti-detection settings
//
// Set USB IDs strings and numbers, to avoid possible detections.
// Remember that you can cusotmize FAKE_DISK_BLOCK_NUM as well
// for the same reason. Also DISK_LABEL in ramdisk.h can be changed.
//
// You can see here for inspiration: https://the-sz.com/products/usbid/
//
#define USB_VENDORID 0xCAFE
#define USB_PRODUCTID 0x1337
#define USB_DESCRIPTOR "DataStore"
#define USB_MANUF "USB Acme"
#define USB_SERIAL "123456789A"
#define USB_VENDORID_STR "Acme" // Up to 8 chars
#define USB_PRODUCTID_STR "DataStore" // Up to 16 chars
#define USB_VERSION_STR "1.0" // Up to 4 chars
Obviamente você também pode compilar seu próprio firmware. Para compilar você precisa do Raspberry Pi Pico SDK e deste repositório.
Instruções básicas de recompilação:
export PICO_SDK_PATH=</path/to/pico-sdk>
git clone --recursive https://github.com/cecio/USBvalve.git
cd USBvalve
mkdir build && cd build
cmake -DPICO_BOARD=pico .. # or pico2 for standard build
make -j$(nproc)
# Output: build/src/USBvalve.uf2
Se você quiser recriar um novo sistema de arquivos falso, você pode querer dar uma olhada na pasta utils, onde coloquei alguns utilitários para construir um novo.
Se você quiser compilar seu próprio firmware, depois de personalizá-lo, eu forneço um Dockerfile que constrói um ambiente de compilação completo e compila o firmware.
Digite os seguintes comandos na pasta principal USBvalve para compilar:
# To Build:
# docker build -t usbvalve-sdk -f Dockerfile.sdk .
#
# To Run (default: pico, SSD1306 OLED 128x32):
# docker run --rm -v $PWD:/mnt usbvalve-sdk
#
# Options (via environment variables):
# BOARD=pico|pico2 Board target (default: pico)
# OLED_HEIGHT=32|64 OLED display height (default: 32)
# PIWATCH=1 Use GC9A01 round TFT instead of SSD1306
# USE_BOOTSEL=1 Enable BOOTSEL button (disrupts Low Speed USB)
#
# Examples:
# docker run --rm -e BOARD=pico2 -v $PWD:/mnt usbvalve-sdk
# docker run --rm -e PIWATCH=1 -v $PWD:/mnt usbvalve-sdk
# docker run --rm -e BOARD=pico2 -e OLED_HEIGHT=64 -v $PWD:/mnt usbvalve-sdk
O firmware será colocado com extensão uf2 na pasta USBvalve_out.
Se você tem ideias ou melhorias em mente, eu encorajo você a abrir uma issue para que possamos melhorar o projeto juntos! Obrigado!
Se você tem dúvidas ou precisa de suporte, você pode abrir uma Issue aqui ou me contatar no Twitter/X @red5heep
A comunidade criou alguns forks implementando suporte para outras placas, ou outras modificações. Obrigado a todos que contribuíram para o desenvolvimento do USBvalve. Abaixo uma lista não oficial/incompleta/não suportada:
[!WARNING] Recebi muitas perguntas sobre o USBvalve e dispositivos USB killer. O USBvalve não foi construído para testar esses dispositivos, ele não possui nenhum tipo de isolamento ou proteção, então se você suspeita que está lidando com um desses dispositivos, teste-o com outra coisa, NÃO com o USBvalve ou você pode danificar o dispositivo, a si mesmo ou objetos próximos a você.