Skip to content
This repository was archived by the owner on Aug 31, 2019. It is now read-only.
/ arduino-hid Public archive

Project using Arduino as a HID device

kammradt/arduino-hid

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

46 Commits
 
 
 
 
 
 

Repository files navigation

ArduinoDucky

Sumário

  • Introdução
  • Desenvolvimento
  • Resultado
  • Conclusão
  • Payloads

Introdução

O que é um Rubber Ducky?

   O projeto foi completamente baseado em um outro pré-existente, originário da equipe de Podcasting Hak5. Rubber Ducky foi o nome dado a ferramenta capaz de emular as funções de um teclado, e assim executando os mais diversos comandos e ações, encaixando-o na categoria de dispositivos HID.

   Por HID - Human Interface Device -, compreende-se como um dispositivo aceito pelo sistema como responsável sendo por entrada de dados, exatamente igual a um teclado USB para computador, por exemplo. O que, finalmente, transformou a ferramente amada por diversos Pentesters, devido a sua facilidade de uso e de aplicação.


Figura 1 - Rubber Ducky internamente

Fonte: HakShop (2018)


   As instruções são escritas previamente e salvas no dispositivo. A linguagem possui sintaxe simples, direta e é chamadas de "Payloads". Segue um exemplo de Script que tem como função abrir o 'notepad' do Windows e escrever: "ArduinoDucky"

DELAY 3000
GUI r
DELAY 500
STRING notepad
DELAY 500
ENTER
DELAY 750
STRING ArduinoDucky
ENTER

   Todavia, devido a dificuldade de compra, tanto devido ao valor alto e a exportação problemática brasileira, outras soluções chegam para suprir a necessidade. Então, visando um valor mais baixo e fácil disponibilidade para testes dos "pentesters", o Arduino Ducky cumpre uma função parecida, custando cerca de 1/10 do valor original.


Figura 2 - Arduino Uno (Modelo Popular)

Fonte: Arduino CC (2018)


   O Arduino é uma plataforma de prototipagem muito famosa. Devido a vasta gama de modelos, diversos sensores, módulos, e baixo custo de acessórios, é a escolha ideal para este caso.


Desenvolvimento

   Para que o objetivo de recriar o Rubber Ducky seja alcançado, algumas características principais precisam ser consideradas durante o processo.

    O desejável:

  • Executar comandos via HID;
  • Fácil/level/discreto para testes;
  • Aparência semelhante a de um Pendrive USB;
  • Possuir armazenamento suficiente para diversos scripts/payloads/arquivos em geral;
  • Linguagem com sintaxe simples;
  • Custo reduzido;
  • Fácil acesso de compra ao dispositivo.

   Tendo em vista tais objetivos, verificando-se aos objetivos primordiais, que seriam, manter intuitivo, barato e de fácil acesso comercial, foram utilizados:

  • 01 Arduino Pro Micro - (ATMEGA32U4);
  • 01 Adaptador USB Male/Female para Micro USB;
  • 01 OTG - USB Female para Micro USB;
  • 01 Cabo USB Male para Micro USB (Cabo para carregar celular);
  • 01 Case para o Arduino (Opcional);
  • 01 Computador com acesso a IDE Arduino.

   As imagens de cada item, respectivamente, são encontradas abaixo, previamente juntas de uma breve descrição de suas funções.

   O Arduino Pro Micro foi selecionado para esse caso, devido a uma série de razões: tamanho compacto; entrada Micro USB; bibliotecas compatíveis; baxo valor; fácil importação; dentre outros.

Figura 3 - Arduino Pro Micro(Modelo Utilizado)

Fonte: Arduino Board (2018)


   O Adaptador pode ser usado em diversas ocasiões, já que ele converte a entrada Micro USB presente no Arduino Pro Micro, tanto para um USB Male, habilitando o memso ser usado como um pendrive regular no computador. Ou serve de USB Female, para ser conectado ao adaptador OTG, e or sua vez, ser conectado em algum outro dispositivo via Micro USB, atuando como Micro USB - Micro USB.

Figura 4 -Adaptador USB Male/Female para Micro USB

Fonte: O Autor (2018)


   Os adaptadore OTG já são amplamente utilizados em conjunto com celulares Android e outros dispositivos USB. Uma grande variedade de combinações podem ser utilizadas, como por exemplo, utilizar um mouse ou um teclado no celular.

   Nesse caso, ele foi usado em conjunto com o adaptador citado acima, para que a entrada Female Micro USB do Arduino Pro Micro se tornasse um Male Micro USB. Dessa maneira, utilizando o Arduino Pro Micro diretamente em um dispositivo com conexão Micro USB, como um celular, por exemplo.

Figura 5 - OTG - USB Female para Micro USB

Fonte: O Autor (2018)


   O cabo tem exatamente a mesma função do adaptador OTG. Todavia, ele acaba garantindo uma extensão caso necessário.

Figura 6 - Cabo USB Male para Micro USB

Fonte: O Autor (2018)


   Para fins estéticos, e de proteção, é interessante o uso de um case. Podendo ser de um Pendrive antigo, ou até mesmo impresso com uso de impressoras 3D.

Figura 7 - Case para o Arduino

Fonte: Michal Monday (2018)


   Para fazer todo o carregamento do script/payload no Arduino Pro Micro, independente da conexão e/ou adaptador, a IDE disponibilizada pelo próprio Arduino é essencial.

Figura 8 - Computador com acesso a IDE Arduino

Fonte: Arduino CC (2018)


   Em relação, especificamente aos scripts/payloads e sua sintaxe/linguagem, no tópico final será explicado de maneira detalhada seu funcionamento.

Resultado

   Os resultados, buscando uma explicação didática e sequencial, foram divididos em: Código e Sintaxe; Exemplo; Conclusão baseado nas expectativas.


   Código e Sintaxe:

   Para o funcionamento e execução dos comandos via HID, o ArduinoDucky precisa ser programado previamente. O Rubber Ducky, orignalmente, utiliza uma sintaxe simples, que é chamado propriamente de RubberScript, porém, os processadores do deste, e do ArduinoDucky são diferentes, logo, algumas modificações precisam ser feitas, para que o nosso projeto consiga executar os mesmos comandos.

   Nesse caso, a IDE do próprio arduino será nosso começo. Não será possível utilizar exatamente a mesma sintaxe RubberScript. Em contrapartida, é extremamente simples efetuar a conversão do RubberScript original para o aceito via Arduino, utilizando ferramentas para tal, ou já escrevendo o código via linguagem do Arduino nativamente.

   Existem alguns sites que efetuam tal conversão, como os citados abaixo:

  • seytonic.com/ducky
  • roothaxor.gitlab.io/ducky2arduino
  • Dentre outros sites conversores de script/payload

   Exemplo:

   Para que fique claro o funcionamento, será mostrado a seguir um exemplo de código originalmente escrito em RubberScript, e outro já convertido para o funcionamento pleno em uma plataforma Arduino.

   Nota-se, claramente, que a escrita fica maior e com maior memória. Todavia, a conversão já é efetuada por ferramentas prontas, o que facilita muito o usuário. A questão da memória será comentada posteriormente.

   Seguem os exemplos abaixo.

   RubberScript:

GUI r
DELAY 500
STRING notepad
DELAY 500
ENTER
DELAY 750
STRING Escrita em notepad via RubberScript
ENTER

   ArduinoDucky (com conversão):

#include "Keyboard.h"

void typeKey(int key)
{
  Keyboard.press(key);
  delay(50);
  Keyboard.release(key);
}

void setup()
{
  Keyboard.begin();
  delay(500);

  Keyboard.press(KEY_LEFT_GUI);
  Keyboard.press('r');
  Keyboard.releaseAll();

  delay(500);
  Keyboard.print("notepad");

  delay(500);
  typeKey(KEY_RETURN);

  delay(750);
  Keyboard.print("Escrita em notepad via ArduinoDucky");
  typeKey(KEY_RETURN);

  Keyboard.end();
}

void loop() {}

   Além das ferramentas disponibilizadas para a conversão do código Rubber Ducky para ArduinoDucky, já existem muitos e muitos payloads prontos para o próprio Rubber Ducky. Sendo que tais, podem ser convertidos facilmente para o uso no ArduinoDucky, ou servirem de exemplos para a criação de payloads próprios e novos.

   Seguem abaixo, alguns sites que contam com repositórios de payloads prontos. Grande parte deles são desenvolvidos pela própria comunidade e divulgados na internet, outros foram desenvolvidos inicialmente para demonstrar o funcionamento no Rubber Ducky.

   Links:

  • github.com/hak5darren/USB-Rubber-Ducky/wiki/Payloads
  • ducktoolkit.com/
  • thehacktoday.com/60-best-rubber-ducky-usb-payloads/

   Conclusão baseado nas expectativas:

   Chegando ao fim do projeto, é o momento de analisar quais foram as expectativas e objetivos alcançados durante a sua execução. Foram listadas, anteriormente, alguns tópicos contendo as características julgadas ideais para o funcionamento pleno da alternativa ao Rubber Ducky.

   Nesse contexto, os resultados obtidos foram:

  • [✔] Executar comandos via HID;

   O projeto foi perfeitamente capaz de executar os comandos via HID.

  • [✔] Fácil/level/discreto para testes;

   O projeto tem é de fácil manejo, leve, e discreto para uso.

  • [✔] Aparência semelhante a de um Pendrive USB;

   O projeto, quando revestido por algum plástico ou case, se passa por um Pendrive USB facilmente.

  • [✖] Possuir armazenamento suficiente para diversos scripts/payloads/arquivos em geral;

   Utilizando os recursos disponíveis, e tendo em foco a facilidade e praticidade, o Arduino escolhido não possui tanta memória quanto o Rubber Ducky, já que este conta com espaço para cartão Micro SD. Existem opções para acoplar um adaptador no Arduino Pro Micro, assim, expandindo sua memória, mas não foi o caso neste projeto.

  • [✔✖] Linguagem com sintaxe simples;

   A linguagem para uso próprio no ArduinoDucky é mais complexa que a utilizada orginalmente no Rubber Ducky. Todavia, existem vários payloads prontos e conversores para facilitar a vida do usuário.

  • [✔] Custo reduzido;

   O custo total não ultrapassa os 5 dólares. O Rubber Ducky é vendido na loja oficial da Hak5 por 44.99 dólares. O custo é muito mais acessível, além de todos os itens poderem ser adquiridos via importações da china, ou em território brasileiro, diferente do caso de efetuar a compra do Rubber Ducky.

  • [✔] Fácil acesso de compra ao dispositivo.

   O dispositivo e os itens necessários podem ser todos comprados online, em lojas da china, ou também em território brasileiro.

Conclusão

   Como o esperado, o Rubber Ducky é uma ferramenta mais completa, isso devido a seu armazenamento Micro USB. Porém, acaba se tornando praticamente inviável a compra do dispositivo no Brasil, devido a seu elevado preço e diversas dificuldades enfrentadas em determinados tipos de exportações de eletrônicos.

   Concluí-se que, dentro das necessidades apresentadas, o ArduinoDucky consegue atender muito bem os requisitos apresentados, sendo uma ferramenta extremamente útil para realização de testes rápidos e automatização de tarefas longas, tudo isso via payloads pré-construidos.

Payloads

   Além dos payloads que foram citados e disponibilizados no decorrer do texto, deixo aqui alguns que foram criados e convertidos por mim usando algumas da ferramentas citadas.

   Todos os arquivos (.ino) para o ArduinoDucky podem ser encontrados no repositório. Abaixo, uma lista de referências e uma explicação de sua função.

   FloodEnumerado:

   O payload tem a função de enviar via HID uma série de mensagens continuas, que são seguidas de um número que representa em qual mensagem o programa já chegou. Segue exemplo de resultado da conexão do ArduinoDucky em um dispositivo que aceite HID:

Mensagem - 1
Mensagem - 2
Mensagem - 3
Mensagem - 4
Mensagem - 5
Mensagem - 6
Mensagem - 7
Mensagem - 8
Mensagem - 9
Mensagem - 10

   EnviarTweet:

   O payload tem a função de enviar via HID uma série de mensagens no Twitter, que são seguidas de um número que representa em qual mensagem o programa já chegou. A mensagem contém duas linhas de valores fixos, e ao fim da segundo linha, um valor que represente a quantidade de mensagens enviadas.

   Para que funcione, a página inicial do Twitter precisa estar aberta em algum navegador ou app. Utilizando dos próprios atalhos, as mensagens serão enviadas no intervalo de tempo definido.

   Um exemplo de execução segue:

'n'
Minha primeira linha 'ENTER'
Minha segunda linha, quantidade de mensagens > ? 'CTRL ENTER'

[Pressionar 'n' no teclado irá abrir uma janela "Novo Tweet"]

[Irá escrever o texto na janela e dar ENTER para pular linha"]

[Irá escrever o texto na próxima linha]

[? será substituído pela variável contadora de mensagens]

[Após a mensar ser escritar, será pressionar CTRL ENTER, que é o atalho respectivo para enviar um novo Tweet]

About

Project using Arduino as a HID device

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages