Hlavní navigace

Flipper Zero vs. RFID, levný RISC-V a bezpečnost webu: neděle na LinuxDays

17. 10. 2023
Doba čtení: 16 minut

Sdílet

O víkendu 7. a 8. října proběhl v Praze další ročník konference LinuxDays. V neděli se mluvilo o automatické instalaci Ubuntu na server, slabinách v RFID, levném procesoru RISC-V a moderních hlavičkách v HTTP.

Ondřej Caletka: Automatická instalace serverového Ubuntu

Organizace RIPE NCC pořádá školení pro poskytovatele připojení k internetu a provozuje také e-learningové prostředí dostupné všem. Pokud získáte nějaké znalosti, máte možnost projít testem a získat digitální certifikát. V rámci kurzů IPv6 Security a BGP Operations and Security se používá také testovací prostředí, kde je možné si všechny úlohy prakticky vyzkoušet.

K instalaci tohoto prostředí slouží virtualizace. Každá platforma ale poskytuje jiný způsob virtualizace a spravovat to je neštěstí. Jedinou rozumnou multiplatformní virtualizaci nabízí VirtualBox, který je možné provozovat na Windows, macOS i v Linuxu. Spuštění virtuálního stroje z obrazu je ale složité, proto jsem objevil a použil Vagrant. Uživatelé si nainstalují VirtualBox a Vagrant a poté spustí dva příkazy. Vše se jim pak stáhne, nainstaluje a spustí. Oni se pak v prohlížeči připojí na localhost a mohou pracovat.

V tomto režimu vše fungovalo několik let, pak ale přišly počítače od Apple s procesory M1. Tady nastal problém, protože na nich VirtualBox nefunguje. Je k dispozici vývojová alfa verze, která ovšem nefunguje a není použitelná. Navíc VirtualBox podporuje pouze Intel a nedává smysl na armových počítačích pouštět kód pro x86, když je k dispozici Linux pro ARM.

Pro macOS ale existuje nástroj UTM, což je rozhraní pro QEMU, ve kterém je možné spouštět armový kód i obrazy určené pro procesory Intel. Má velmi omezené množství připravených obrazů, ale je možné do něj nainstalovat Ubuntu, což je shodou okolností operační systém, který používáme. Ubuntu je možné už nějakou dobu instalovat pomocí Ubuntu Automated Server Installation, což rozšiřuje funkčnost nástroje cloud-init. Ten se běžně používá v nejrůznějších cloudových prostředích, kde se stará o úvodní konfiguraci. Teď je to rozšířené i pro úvodní instalaci systému.

Konfigurace je velmi jednoduchá, v souboru formátu YAML je potřeba nastavit alespoň hostname, uživatelské jméno a heslo. Všechny ostatní volby mají rozumné výchozí hodnoty, které je možné samozřejmě upravovat. Konfiguraci je pak možné nástroji doručit pomocí HTTPS, přičemž adresu je možné buď předat jako parametr jádra nebo je možné ji natavit jako sériové číslo v SMBIOS. To je možné udělat jednoduše na příkazové řádce QEMU.

Automatická instalace nainstaluje holý operační systém a předkonfiguruje cloud-init. Poté proběhne restart a při prvním startu proběhne celá konfigurace. Pokračuje to pak vlastně stejně jako někde na cloudové VPS. Během této fáze je možné spustit Ansible, který dokončí celou konfiguraci. Když si dáte tu práci, můžete kompletně automaticky nainstalovat a nakonfigurovat celé prostředí.

Při instalaci z ISO obrazu je potřeba při restartu zajistit odpojení, jinak se instalace nastartuje znovu. Při běhu Ansible také nejsou vidět žádné informace a k logům se dostaneme až při selhání. Proti klasickému Vagrantu není možné se dostat dovnitř hostitele, tady máte obyčejné Ubuntu ve virtuálním stroji, takže si musíte poradit sami. K instalaci je možné použít libovolný hypervizor včetně VirtualBoxu, Hyper-V, VMware a dalších.

Jan Tomášek: Automatická tvorba Virtual Appliance

Standardním instalačním řešením v Debianu je instalace pomocí konfiguračního souboru preseed.cfg, instalaci je možné udělat například do virtualizace. Na VirtualBoxu je fajn, že je možné ho ovládat na řádce a všechno si vytvořit. Preseed je nutné přidat do instalačního ISO obrazu. Konfigurační soubor pro instalaci obsahuje řadu různých voleb pro Debian Installer, ale nástroj je to velmi mocný a je pomocí něj například také nainstalovat balíčky z vlastního repozitáře. Takto upravená instalace se nainstaluje plně automaticky bez jediného zásahu.

Lidštější variantou je instalace pomocí utility  debootstrap, což je velmi starý nástroj umožňující instalaci Debianu z běžícího prostředí. Základem je vytvořit prázdný obraz disku, ten někam připojit a spustit debootstrap. Pak se tam zkopírují důležité soubory a pomocí Ansible se dokončí vše podstatné. Vše je možné spustit také na GitHub Actions, kde sestavení proběhne do patnácti minut. Doma se dostanu pod deset minut, ale tam mě limituje rychlost připojení k internetu. Existují další cesty, například Vagrant nebo Packer, které ale závisejí na VT-x.

Adam Hořčica: Flipper Zero: Hackujeme RFID

Flipper Zero začal jako kickstarterová kampaň, během které se podařilo vybrat několikanásobně více peněz. Proto se podařilo dovnitř dostat spoustu dalších věcí, které ani tvůrci původně nechtěli řešit. Pak bohužel trvalo dva roky, než se první kousky doopravdy dostaly k uživatelům.

Uvnitř je rádio, infračervený port, bluetooth, USB a elektronika řešící funkcionalitu RFID a NFC. Není to žádné revoluční zařízení, i když to tak některá média podávají. Flipper spojuje řadu různých projektů, které byly původně zaměřeny na jednu konkrétní věc. Dali to všechno dohromady, vytvořili pěkný design a celé to zpopularizovali. Díky tomu se Flipper stal populárním i mezi běžnými uživateli.

Objevily se různé varovné zprávy o nebezpečnosti takového zařízení a možnosti zneužití ze strany teroristů. I v české kotlině je možné najít třeba videa o tom, jak je možné Flipper zneužít. Na Amazonu ho třeba nekoupíte, ten ho zakázal. U nás ho ale koupíte v Kauflandu. Nejde ale o kouzelnou krabičku, používá běžně používané a známé technologie.

Přednáška se pak zaměřila na použití RFID technologií v přístupových systémech na 125 kHz (LF) a 13,56 MHz (HF). Na začátku je možné přiložit Flipper ke čtečce a on zobrazí informaci o tom, které karty čtečka umí číst. Můžou se vám objevit klidně obě varianty.

U nás jsou velmi populární karty od EM Microelectronic, které se objevily už v 90. letech. Není to výdobytek moderní kryptografie, protože tam není vůbec žádná. Čtečka vytváří pomocí antény elektromagnetické pole, které karta přijímá a začne jej různě zatěžovat. Čtečka pak zpětně signál přijímá a sleduje modulaci na něm. Z toho plyne, že jde o jednosměrnou komunikaci. Nejčastěji karta vysílá dokolečka své pětibajtové číslo. Celou věc je možné implementovat softwarově s minimalistickým rádiem.

Flipper má možnost si data s karty uložit nebo kartu emulovat. Tím jste vlastně kartu zkopírovali. Podobných karet existuje celá řada, liší se podle modulace, počítání parity a podobně. Flipper umí emulovat celou řadu těchto karet, včetně řešení od Jablotronu. Tato technologie je velmi stará a není tedy nijak chráněná. Navrhováno to bylo především jako velmi pohodlné řešení pro uživatele, ale bezpečnost se neřešila.

Vylepšené jsou pak karty využívající vyšší frekvenční pásmo HF, nejtypičtěji je to MIFARE Classic podle normy ISO14443A. Ta vám definuje, jak s kartou komunikovat: jak rychle, jakou modulací a podobně. Norma ale neřeší zabezpečení komunikace, která se musí řešit o úroveň výše. Komunikace probíhá způsobem dotaz-odpověď, kdy se čtečka na něco zeptá a karta odpoví. Jedna z prvních vysílaných informací je unikátní ID karty, které se pak používá v další komunikaci jako třeba MAC adresa u ethernetu.

Flipper dokáže tuto informaci přečíst a použít ji k emulaci. Pokud máte přístupový systém závislý na ID karet, můžete ho rovnou použít. Tento způsob komunikace je rychlejší, obousměrný, ale také nemá žádné zabezpečení proti kopírování. Je to komunikace připomínající HTTP, požádáte o informaci a dostanete ji. Žádné šifrování tam není.

Existuje také varianta MIFARE Ultralight, která cílí na nízkou cenu řešení. Hodí se to například pro lístky na koncert, jízdenky do MHD a podobně. Používá se to ale i jinde, občas jsou tyhle karty vidět i v hotelích. Na kartu je možné uložit až 164 bajtů dat, která mohou být chráněná 32bitovým heslem. To musíte kartě poslat, jinak vám nedovolí čtení ani zápis. Počet pokusů o hádání hesla může být omezen na 16 pokusů, pak karta přestane fungovat. Podobných karet je více, například STM ST25TA02KB. Žádná kryptografie tam není, ale je to alespoň chráněno heslem.

Praktický útok je těžko realizovatelný tak, aby o tom uživatel nevěděl. Zároveň není možné neomezeně heslo hádat, jinak se karta zablokuje. Flipper dokáže předstírat, že je karta a počkat, až mu čtečka heslo pošle. Pak můžete Flipper použít jako kartu a data vysílat jako předtím. Hesla ale bývají vytvářená podle ID karty, takže je potřeba nejprve načíst kartu, její identifikaci předat čtečce a zjistit pro kartu heslo a pak z ní přečíst data. Heslo se stále přenáší v čistém textu, je to zhruba jako HTTP Basic Authentication.

MIFARE Classic má jeden nebo čtyři kilobajty paměti, která je rozdělena do bloků. Ty mohou být chráněny dvěma hesly a komunikaci je možné šifrovat. Používá se ale šifrovací algoritmus Crypto 1, který byl dlouho tajen a je děravý jak cedník. Od roku 2008 je tato kryptografie prolomena a neměla by se používat. Ale je to levné, takže se to používá dál.

Classic nemá omezený počet pokusů pro hádání hesla, takže pokud máme dost času, můžeme hádat dlouho. Flipper má v sobě asi 1500 známých klíčů, které může zkusit. V průběhu let se objevila spousta zranitelností a je možné například zjistit ostatní klíče, pokud známe alespoň jeden. Existuje také druhá revize MFC EV1, která opravuje některé chyby, ale kvůli zpětné kompatibilitě používá stejně slabý algoritmus.

Kromě slovníkového útoku jste schopni provést také útok přímo na algoritmus Crypto 1, který má fatální chybu umožňující spočítat klíče na základě deseti předem zachycených komunikací s kartou. Flipper sám to neupočítá, ale má bluetooth a může úlohu poslat na telefon, který má výkonnější procesor.

Řešením tohoto typu chyb je vyhnout se proprietárním řešením a použít standardní nástroje. Existuje tedy MIFARE DESFire, která je dnes ve čtvrté generaci EV3 a používá AES-128. Karta je zpětně kompatibilní, ale u klíče má uloženou informaci o použité šifře, kvůli čemuž není možné použít downgrade útok. Bohužel plný popis funkce je dostupný pod NDA. Podle mě by měly být tajné jen klíče a ne datasheet.

Při komunikaci se posílají zašifrovaná náhodná data, čímž se protistrany ověří a zároveň si předají klíče pro následující komunikaci. Tímto stylem fungují všechny modernější karty. S tím neumí Flipper nic udělat, pokud je vše provedeno správně. Pořád je to ale symetrická kryptografie.

Norma FIDO umožňuje použít asymetrickou kryptografii pomocí tokenu připojeného přes USB nebo NFC, což implementuje například známý YubiKey. Ten se ověřuje tak, že čtečka vygeneruje výzvu, kterou token podepíše a pošle zpět. Protože jen daný token zná privátní klíč, mohl jen on správně podepsat odeslaná data. Veřejný klíč tokenu je známý a je možné jím podpis ověřit.

Flipper není magická hůlka, která otevírá všechny dveře. Je ale snadno použitelný na staré nebo dávno děravé technologie. Umí toho daleko víc, ale už to není tak jednoduché jako kliknout v menu na jednu položku. Cena útoku ale postupně klesá. Pokud na tom záleží, používejte aktuální technologie.

Adam Hořčica: RISC-V za 10¢

Během přípravy přednášky vytvořil Adam Hořčica malou desku, která funguje jako jmenovka na LinuxDays a zároveň jako hra Simon říká. Na desce je použit procesor CH32V003, který stojí deset centů. Existují i levnější procesory, ale tenhle má výhodu ve standardním jádře, takže nepotřebujete žádný proprietární software a stačí vám GCC. Pochází od výrobce polovodičů Nanjing Qinheng Microelectronicso z Číny.

Procesor má jádro RISC-V běžící na 48 MHz, které používá instrukční sadu RV32I a má 16 kB paměti flash a 2 kB SRAM. Je to řekněme ekvivalent Arduino Uno, ale procesor běží výrazně rychleji. K dispozici jsou pokročilé časovače, které jsou sice jen dva, ale mají čtyři kanály PWM. K dispozici jsou také běžná rozhraní jako UART, I2C a SPI a také osm 10bitových A/D převodníků. Procesor umí několik úrovní spánku, kdy jste schopni se dostat až na 10 uA, což je docela slušné.

Programování probíhá přes jediný drát s rozhraním SWIO (Single Wire Input Output), přičemž celý postup je popsán v datasheetu. Dokumentace je volně k dispozici a na čínskou firmu je velmi dobrá. Budete ale potřebovat programátor, který stojí asi stokorunu. Existují i další implementace programovacího protokolu na různé desky jako ESP32 a třeba také Flipper Zero.

Výrobce má vlastní SDK postavené nad Eclipse, takže jde o docela těžkotonážní záležitost. Já jsem ho ani neměl spuštěné, používám neoficiální CH32V003fun, což je absolutní minimum pro programování toho procesoru. Je to vlastně jeden hlavičkový soubor, GCC, Make a LD script. Je to velmi rychlé a celý cyklus úpravy programu a nahrání do procesoru trvá pod dvě vteřiny.

Procesory je možné koupit na Aliexpressu, kde je prodává přímo sám výrobce. Nikde jinde to moc koupit nejde, téměř nikdo je nemá v nabídce. Pokud chcete procesor začít používat, můžete začít wiki na GitHubu, kde jsou dostupné nástroje i spousta příkladů. Mně je ten procesor velmi sympatický a pokud by se zlepšila dostupnost, je to na domácí bastlení dobrá alternativa.

Michal Špaček: Moderní problémy vyžadují moderní řešení

Michal Špaček řešil problém s firemní aplikací na tvorbu jednotných firemních vizitek. Co když ale tuhle aplikaci zneužije nějaký útočník a vytvoří si svou vizitku, kterou někomu pošle? Bylo by možné aplikaci schovat za jméno a heslo nebo SSO, ale to by bylo příliš složité na tak jednoduchou aplikaci. Bylo by taky možné vložit aplikaci do iframe v jiném webu, který už uživatele přihlašuje. Jenže to nebrání ve zkopírování adresy a otevření stránky samostatně. Co s tím? Server vlastně odesílá stránku klientovi, ale vůbec netuší, co s obsahem dál bude.

Moderní prohlížeče posílají s požadavkem hlavičky Sec-Fetch-, kterými informují server o tom, co hodlají s dokumentem provádět. Hlavičky jsou celkem čtyři: Dest informuje o použití stránky, Mode informuje o způsobu navigace na URL, Site informuje o stahování objektu ze stejné domény a User informuje o tom, zda akci vyvolal uživatel. Tím bychom mohli jednoduše zkontrolovat, zda se stránka bude otevírat v iframe a ne jako obrázek nebo něco jiného. Naprogramovat takovou kontrolu je velmi jednoduché, server umí neoprávněný požadavek zamítnout a vrátit chybovou stránku.

Tohle je možné zkombinovat s hlavičkou Content-Security-Policy, kterou naopak posílá server a informuje prohlížeč o tom, jak se může k obsahu zachovat. Jedna z podporovaných voleb je frame-ancestors a umožňuje říkat, kam se obsah může načítat. Můžeme tak říct, že se stránka může načítat jen na jedné stránce. Útočník tak nemůže vytvořit vlastní stránku s iframem.

Dobrá zpráva je, že všechny tyto hlavičky jsou podporované ve všech moderních prohlížečích. Pokud by přišel starý prohlížeč, stránka se zobrazí normálně. To je ale přijatelné riziko, protože by útočník musel navádět oběť k instalaci Safari 16.3. Důležitá informace také je, že tyto hlavičky se z prohlížeče posílají pouze po HTTPS.

V hlavičce Sec-Fetch-Dec je možné uvádět jednu zhruba z dvaceti voleb, z nichž nejzajímavější jsou: document, iframe, image nebo script. Také Sec-Fetch-Mode má také několik variant: cors, navigate, no-cors, same-origin a websocket. Nejjednodušší hlavičkou je Sec-Fetch-User, který může obsahovat jen hodnotu ?1 zapnutou v případě uživatelské akce.

Poslední hlavička Sec-Fetch-Site, který může mít obsah cross-site, same-origin, same-site nebo none. Same-origin znamená, že je použit stejný protokol, doména a port. Proti tomu same-site je benevolentnější, protože se zjistilo, že některé weby běží na různých doménách a pořád jde o jednu stránku. Je tedy potřeba, aby tento vztah byl znám. Same-site platí, pokud se shoduje protokol a takzvaná efektivní TLD – veřejná domén a její poddoména. Seznam těchto veřejných domén je možné stáhnout na PublicSuffix.org. Pokud se změní doména vyššího řádu, stále platí same-site.

Výše zmíněné hlavičky není možné přepsat pomocí JavaScriptu, protože to prohlížeč nedovolí. Prohlížeč vždycky pošle to, co by poslat měl a ignoruje zápisy pomocí zákeřných skriptů. Takových hlaviček je celá řada a je možné jim do jisté míry důvěřovat.

Další zajímavou hlavičkou je Sec-Ch-Ua, která dává serveru informaci o tom, co je prohlížeč zač. Prohlížeče tu posílají svůj název a verzi prohlížeče. Je tu jen major verze, aby se nedali uživatelé tak snadno sledovat a dalo to víc práce. Podobně redukované jsou označení verze i v hlavičce User-Agent. Server si ale může plnou hodnotu verze objednat pomocí hlavičky Accept-Ch následovaný názvem hlavičky, kterou si přeje dostat. Pokud to bude Sec-Ch-Ua-Full-Version, bude prohlížeč v dalších požadavcích tuto hlavičku posílat včetně obsahu s verzí. Prohlížeče nijak nedávají uživateli vědět, že někdo taková data požaduje. Zatím je to experiment a časem se tento problém budou pravděpodobně vývojáři snažit řešit.

Na webu se dnes setkáváme také s velmi sofistikovanými útoky, mezi které patří Magecart. Když zadáváte číslo karty do nějakého formuláře, určitě tam běží JavaScript. Pokud by se podařilo útočníkovi tyto skripty změnit, mohl by si posílat data z formulářů do vlastní databáze. Skutečně se to děje, buď je možné hacknout přímo stránku nebo modifikovat knihovnu, která je na stránce používaná.

Aby se tyto problémy minimalizovaly, vytvořila organizace Payment Card Industry specifikaci nazvanou Data Security Standard (DSS). Ta mimo jiné říká, že všechny platební stránky pro vkládání čísel platebních karet musejí splňovat celou řadu požadavků. Skripty musejí být autorizované, mít zajištěnou integritu a mít odůvodnění nezbytnosti. Když mám ve stránce nějaký skript, musí existovat důvod, proč ho tam mám. Tato pravidla budou až do března 2025 považovány za doporučení, poté budou povinné. Pokud je platební stránka nebude používat, může web ztratit možnost přijímat platební karty.

Specifikace přímo neříká, jaké technologie se má používat. Pro všechny tyto funkce už je možné použít stávající technologie. Pomocí CSP můžu autorizovat načítání skriptů a integritu je možné zajistit pomocí hodnoty hašů v SRI. Zároveň je potřeba vést seznam skriptů, ale na to je dobrý třeba Excel. Pravděpodobně se s těmito hlavičkami budeme setkávat čím dál častěji.

Ondřej Šika: Keycloak – Open Source Single Sign On (SSO) pro každého

Můžeme mít spoustu citlivých služeb, které potřebujeme schovat za heslo. Můžeme mít centrální databázi hesel, ale lepším řešením je použít SSO, přihlásit se jednou a držet relaci celou dobu. Použít se k tomu dá nástroj Keycloak, který je otevřený a poskytuje SSO pomocí OIDC a SAML. Dá se to použít i v enterprise světě, ale je to open-source a můžeme to použít i u sebe.

OIDC je autentizační protokol postavený na standardu OAuth 2.0, který umožňuje ověřovat uživatele a z Keycloaku získat základní informace z uživatelského profilu. Je možné to silně upravovat, u spousty aplikací byste ani neřekli, že používá Keycloak. Kód je napsaný v Javě, využívá moderní framework Quarkus a data se ukládají do PostgreSQL. Keycloak je připraven na provoz v Kubernetes a existuje i provider pro Terraform. Ten není od původních autorů, ale je velmi propracovaný a vyvíjí se.

Tomáš Tichý: Informační systémy vozidel nejen Pražské Integrované Dopravy

Veřejnou dopravu v Praze rozjel v roce 1848 belgický podnikatel a politik Édouard Outlet. Ještě před ním se o to pokoušel hrabě Kinský, který sice získal licenci, ale nikdy nic reálně nepostavil. Prvním veřejným dopravním prostředkem byla koňka, což byla jednokolejná trať, po které jezdily vozy tažené koňmi.

Další významnou osobností v pražské dopravě byl František Křižík, díky kterému se v roce 1891 mohli Pražané svézt tramvají. Vozy byly otevřené a šlo spíše o sezónní záležitost. V témž roce začala jezdit také lanovka na Petřín, která k pohonu využívala vodní převahu. Do horní kabinky se načerpala voda a ta ji stáhla dolů.

V roce 1908 se v Praze objevily autobusy, které jezdily dnešní Nerudovou ulicí. V prudkém stoupání ale selhávaly brzdy, takže docházelo k nehodám. Proto byly autobusy o rok později zrušeny. V roce 1936 vyjely v Praze trolejbusy, které nakonec jezdily po třinácti linkách. Provoz trolejbusů byl ukončen v roce 1972.

O výstavbě metra se v Praze mluvilo prakticky od konce devatenáctého století, ale žádný z projektů se nerealizoval. Nakonec byla výstavba započata až v roce 1966. Jako první byla postavena testovací trať s depem a poté první část linky C z Kačerova na Florenc. Naposledy bylo metro rozšířeno v roce 2015, nyní probíhá výstavba prvních dvou stanic metra D.

Zajímavá je také historie vývoje informování cestujících. Při spuštění první koňky byl lid negramotný, takže byl vymyšlen systém barevných terčíků. Teprve v roce 1908 byla zavedena čísla linek. Za mnoho let tak vznikla celá řada různých informačních cedulek, které byly byly během druhé světové války samozřejmě dvojjazyčné.

CS24_early

V roce 1985 se objevila v tramvajích novinka v podobě kazetových magnetofonů PaMI, které byly používány pro přehrávání hlášení o zastávkách. Postupně byly informační systémy modernizovány díky počítačovým systémům a s plně barevnými displeji. Přednáška skončila velkou praktickou demonstrační ukázkou různých informačních systémů z pražských autobusů.

(Autorem fotografií je Petr Krčmář.)

Byl pro vás článek přínosný?

Autor článku

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Studoval počítače a média, takže je rozpolcen mezi dva obory. Snaží se dělat obojí, jak nejlépe umí.