Digispark BadUSB

Pokud jste někdy zabrousili na web HAK5, tak jste si nemohli nevšimnout produktu USB Rubber Ducky. Šikovné zařízení ve tvaru „Flešky“, které se po připojení do počítač hlásí jako klávesnice. Následně pak spouští program, který se píše v DuckyScriptu. Tento skript provede předepsanou sekvenci příkazů, jakoby jste ovládali počítač pomocí klávesnice. Jako první co vás napadne je samozřejmě možnost hackování. Víceméně to samo vybízí. Vytvoříte jednoduchý skript, který zavede do systému reverzní shell a rázem můžete vzdáleně šmejdit v počítači oběti. Na internetech se povaluje hromada připravených skriptů pro různé situace. Kromě hackingu se tím dají samozřejmě automatizovat úlohy typu, kdy chodíte mezi počítačovými stanicemi a zadáváte pořád to samé.

Tento článek slouží čistě ke studijním účelům. Dle českého trestního zákoníku § 230 se trestá "Neoprávněný přístup k počítačovému systému a nosiči informací" odnětím svobody až na dvě léta.

Zařízení je to skvělé, vložíte microsd kartu s programem a jdete konat. Pokud by jste se chtěli inspirovat scénou ze seriálu Mr. Robot, zjistíte zásadní vadu Rubber Ducky. (Scéna, kdy rozházeli „flešky“ na parkovišti s vidinou toho, že to nic netušící oběť sebere a dá do počítače.) Je to cena. Na stránkách HAK5 stojí Rubber Ducky 45.99 USD. K tomu si započítejte poštovné, DPH, CLO a taková zábava může přijít docela draho. V případě inkriminované scény se seriálu Mr. Robot obrovsky draho.

Existuje i levněší řešení. Pokud se nebojíte Arduino IDE a programování mikrokontrolérů, můžete dosáhnout téměř stejného výsledku jako s Rubber Ducky, ale výrazně levněji. Existuje vývojová deska Digispark, která obsahuje mikrokontrolér Attiny85. Na stránkách digistump.com je cena 7.95 USD a na Aliexpressu se dá sehnat za 1.18 USD. Nejlevnější verze z Aliexpressu má jednu vadu na kráse. Nese označení jako revize 3 a z diskuze na digistump.com vyplývá, že revize 3 nebyla nikdy uveřejněna a jedná se s největší pravděpodobností o levnější klon. Nicméně revize 3 funguje, takže nízká cena je příjemný bonus. Autoři nebudou asi nadšení, ale z oficiálního obchodu to momentálně objednat nejde a dle jejich vyjádření to v nejbližší době řešit nebudou, protože pracují na jiném projektu.

Digispark [rev 3]

Tento klon je docela šikovná deska, která nabízí mnoho na celkem malé ploše. Ze schema je vidět, že se jedná o jednoduché zapojení a o veškerou logiku se stará mikrokontroler.

Největší součástkou na desce není mikrokontroler Attiny85 ale regulátor napětí 78m05, který se stará o napájení externím zdrojem. Pak už se tam nachází jen ochranné diody, pullup rezistory, dvě ledky a vstupy/výstupy. Mnohem zajímavější je co vše deska nabízí.

Attiny85 zvládne obstarat ADC, PWM, SPI, I2C. Využít můžete šest pinů. Attiny85 má 8KB flash paměť, reálně můžete použít tak 6KB. Zhruba 1.5KB zabírá bootloader Micronucleus. Micronucleus umožňuje nahrávání nového firmwaru přes USB. Po připojení do počítače počká pět sekund jestli s ním začne někdo komunikovat (programování), pokud ne, spustí nahraný firmware.

Konfigurace Arduino IDE

Pro nahrání nového firmwaru použijeme Arduino IDE. První co je potřeba udělat je doinstalovat podporu pro Digispark zařízení. Běžte do File → Preferences a tam do pole Additional Boards Manager URLs přidejte následující URL:

http://digistump.com/package_digistump_index.json

Poté Tools → Board → Boards Manager, do vyhledávacího pole napište „digi“ a nainstalujte Digistump AVR Boards. Po tomto máte doinstalovanou podporu pro Digispark, stačí jen nastavit správnou desku Digispark (Default – 16.5 mhz).

Nahrání programu

Pro vyzkoušení funkčnosti použijme ukázkový příklad přímo od Digisparku. V menu File → Examples vyberte DigisparkKeyboard ukázkový kód a lehce jej upravte.

#include "DigiKeyboard.h"

void setup() {
  // don't need to set anything up to use DigiKeyboard
}

void loop() {
  // this is generally not necessary but with some older systems it seems to
  // prevent missing the first character after a delay:
  DigiKeyboard.sendKeyStroke(0);
  DigiKeyboard.delay(1000);

  // Type out this string letter by letter on the computer (assumes US-style
  // keyboard)
  DigiKeyboard.println("CraftPunkTeam");

  // It's better to use DigiKeyboard.delay() over the regular Arduino delay()
  // if doing keyboard stuff because it keeps talking to the computer to make
  // sure the computer knows the keyboard is alive and connected
  DigiKeyboard.delay(1000);
}

Připravte si Digispark a spusťte kompilaci a nahrání kódu. (tlačítko s šipkou doprava, vlevo nahoře, hned vedle tlačítka s fajfkou) Kód se zkompiluje a ArduinoIDE vás vyzve, abyste vložili Digispark desku pro upload kódu do zařízení.

Running Digispark Uploader...
Plug in device now... (will timeout in 60 seconds)

Následuje nahrání kódu do zařízení.

> Please plug in the device ... 
> Press CTRL+C to terminate the program.
> Device is found!
connecting: 16% complete
connecting: 22% complete
connecting: 28% complete
connecting: 33% complete
> Device has firmware version 1.6
> Available space for user applications: 6012 bytes
> Suggested sleep time between sending pages: 8ms
> Whole page count: 94  page size: 64
> Erase function sleep duration: 752ms
parsing: 50% complete
> Erasing the memory ...
erasing: 55% complete
erasing: 60% complete
erasing: 65% complete
> Starting to upload ...
writing: 70% complete
writing: 75% complete
writing: 80% complete
> Starting the user app ...
running: 100% complete
>> Micronucleus done. Thank you!

Po té je potřeba Digispark desku vytáhnout jinak se kód do pěti sekund spustí a začne vám text vpisovat do ArduinoIDE.

Pro otestování otevřete textový editor a vložte Digispark do počítače. Za šest sekund se začne do textového editoru vpisovat text, který je zadán ve zdrojovém kódu programu.

Ubuntu 18.04

Pokud používáte Ubuntu distribuci, tak se s největší pravděpodobností setkáte s následujícími problémy.

Při kompilaci kódu se objeví chybová hláška arduino ide error while loading shared libraries: libusb-0.1.so.4. Distribuce neobsahuje požadovanou knihovnu. Tento problém má přímočaré řešení, nainstalujte chybějící knihovnu:

sudo apt install libusb-0.1-4

S další chybou se kterou se můžete potkat je micronucleus: library/micronucleus_lib.c:66: micronucleus_connect: Assertion res >= 4′ failed. Nemáte právo zapisovat na USB zařízení. Řešení je popsáno na stránkách digistump.com. Je potřeba vytvořit soubor /etc/udev/rules.d/49-micronucleus.rules a vložit do něj nová pravidla:

# UDEV Rules for Micronucleus boards including the Digispark.
# This file must be placed at:
#
# /etc/udev/rules.d/49-micronucleus.rules    (preferred location)
#   or
# /lib/udev/rules.d/49-micronucleus.rules    (req'd on some broken systems)
#
# After this file is copied, physically unplug and reconnect the board.
#
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16d0", ATTRS{idProduct}=="0753", MODE:="0666"
KERNEL=="ttyACM*", ATTRS{idVendor}=="16d0", ATTRS{idProduct}=="0753", MODE:="0666", ENV{ID_MM_DEVICE_IGNORE}="1"
#
# If you share your linux system with other users, or just don't like the
# idea of write permission for everybody, you can replace MODE:="0666" with
# OWNER:="yourusername" to create the device owned by you, or with
# GROUP:="somegroupname" and mange access using standard unix groups.

Následně pak nová pravidla aplikovat:

sudo udevadm control --reload-rules

Windows

Pro systém Windows je potřeba doinstalovat USB ovladač. Ovladač se nachází na https://github.com/digistump/DigistumpArduino/releases kde stáhněte Digistump.Drivers.zip. Rozbalte a nainstalujte ovladač pomocí DPinst64.exe.

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *