Uživatelé služby Citi Bike, půjčovny kol v New Yorku, občas zaplatí za svezení, ale kvůli specifickému typu útoku založenému na modifikaci QR kódů se jim kolo neodemkne a oni na něm tedy neodjedou. Podobný mechanismus lze použít i pro řadu českých služeb. Podíváme se tedy na to, jak takový útok funguje a jaké jsou možnosti obrany proti němu.

Začít musíme pohledem na to, jak QR kódy vlastně fungují. Charakteristické čtverce plné kombinace bílých a černých obrazců někdy působí jako všespásné řešení, jindy vypadají jako znamení Ďáblovo a bezpečnostní hrozba. Již tradičně je to celé trochu jinak.

Čárové kódy, mezi něž QR kódy patří, jsou prostě způsob, jak zapsat nějakou informaci tak, aby byla jednoduše čitelná pro počítač s pomocí speciálního hardwaru nebo softwaru, ať už jde o speciální čtečky čárových kódů nebo aplikaci pro rozpoznání obrazu z fotoaparátu nebo webkamery.

Nedávno jste již předplatné aktivoval

Je nám líto, ale nabídku na váš účet v tomto případě nemůžete uplatnit.

Pokračovat na článek

Tento článek pro vás někdo odemknul

Obvykle jsou naše články jen pro předplatitele. Dejte nám na sebe e-mail a staňte se na den zdarma předplatitelem HN i vy!

Navíc pro vás chystáme pravidelný výběr nejlepších článků a pohled do backstage Hospodářských novin.

Zdá se, že už se známe

Pod vámi uvedenou e-mailovou adresou již evidujeme uživatelský účet.

Děkujeme, teď už si užijte váš článek zdarma

Na váš e-mail jsme odeslali bližší informace o vašem předplatném.

Od tohoto okamžiku můžete číst neomezeně HN na den zdarma. Začít můžete s článkem, který pro vás někdo odemknul.

Na váš e-mail jsme odeslali informace k registraci.

V e-mailu máte odkaz k nastavení hesla a dokončení registrace. Je to jen pár kliků, po kterých můžete číst neomezeně HN na den zdarma. Ale to klidně počká, zatím si můžete přečíst článek, který pro vás někdo odemknul.

Pokračovat na článek

Klasické 1D (jednodimenzionální) čárové kódy pracují se sekvencí různě širokých čar a mezer, pomocí kterých je zakódováno malé množství informace, typicky několik desítek znaků. S rozvojem digitálních kamer a algoritmů pro zpracování obrazu se nicméně začaly rozmáhat 2D (dvojdimenzionální) kódy, kde je informace zakódována do matice řádků a sloupců černých a bílých čtverečků. Těm se začalo říkat QR kódy. Jde o zkratku z hesla „Quick Response“ (rychlá odezva), která byla původně míněna pro specifický typ kódovací normy (pro 1D i 2D jich je celá řada), ale nakonec se z ní stalo obecné označení, pod kterým jsou veřejnosti známy všechny 2D kódy.

2D nebo QR kódy mají oproti těm jednorozměrným tu výhodu, že dokážou uchovat a předat mnohem větší objem dat. Řádově stovky až tisíce bajtů. Navíc jsou navrženy tak, aby byly velice robustní a odolné vůči chybám, používají různé varianty samoopravného kódování. Proto je dokáže čtečka přečíst i v případě, že část kódu chybí. Třeba protože ji grafik vymazal a doprostředka umístil firemní logo, což je momentálně docela populární.

1D kódy – klasické čárové – zpravidla obsahují pouze identifikátor; jednoduchou sekvenci písmen a číslic, která sama o sobě nedává smysl. Ten jí dává použití v nějakém konkrétním kontextu. Například data „8594002392574“ sama o sobě nic neřeknou. Odborník může podle délky a prefixu 859 odhadnout, že se nejspíš bude jednat o EAN-13místní kód používaný pro identifikaci zboží v maloobchodě. Ale teprve po dotazu do databáze konkrétního obchodu bude jasné, že se jedná o veterinární chladivý gel na koňské nohy. Čárový kód v sobě neobsahuje informaci o ceně a vlastně ani ne o výrobku – je to jenom odkaz do databáze.

2D kódy – QR matice – mohou obsahovat více dat. Principiálně to mohou být jakákoliv data, ale obvykle se jedná o webovou adresu, URL. Tu lze použít v prohlížeči nebo ke spuštění speciální aplikace.

Jak funguje půjčovna? 

Představme si, že chceme po stránce IT zajistit třeba půjčovnu koní. Praktické a byznysové aspekty realizace tohoto inovativního nápadu necháme na jiných a budeme se zabývat aplikací, která umožní registrovanému uživateli aplikace koně odvázat na místě nasednutí a po dojezdu do cíle zase bezpečně přivázat tak, aby jenom oprávněný uživatel mohl se zapůjčeným koněm manipulovat. A také aby bylo možné mu zápůjčku vyúčtovat podle ujeté vzdálenosti nebo času a tak podobně. Na tomtéž principu fungují půjčovny kol, koloběžek a dalších krátkodobě půjčovaných věcí.

Začněme tím, že každému koni přidělíme unikátní identifikační znak. Může to být prosté číslo „od 1 do hodně“ nebo nějaká komplikovanější konstrukce, na tom nezáleží. Tento identifikační znak musí být na koni uveden tak, aby ho naše aplikace dokázala snadno přečíst. Samozřejmě tam může být uveden v lidsky čitelné podobě (a zákazník ho pak musí ručně opsat, stejně jako by opisoval například SPZ automobilu). Ale uživatelsky přívětivější je použít QR kód, takže stačí namířit čtečku.

Náš hypotetický kůň bude mít číslo 1234, takže do QR kódu zakódujeme text třeba „https://pujcovna.rider.cz/kun/1234“. Samozřejmě bychom tam mohli zakódovat jenom „1234“ (a pokud by šlo o 1D kód, ani by nám nejspíš nic jiného nezbylo), ale uvedení celého URL má řadu výhod. V první řadě tím zajistíme nějakou omezenou funkčnost i v případě, že kód načte někdo, kdo nemá naši aplikaci. Otevře se mu webová stránka, jejíž obsah máme plně pod kontrolou a můžeme ho třeba k instalaci aplikace vyzvat nebo nabídnout webové rozhraní bez nutnosti cokoliv instalovat.

Pokud naši aplikaci zákazník nainstalovanou má, lze v mobilních zařízeních nastavit, že adresy začínající určitým řetězcem (např. „https://pujcovna.rider.cz/“) se nemají otevírat v běžném prohlížeči, ale v naší aplikaci.

Tak či onak, aplikace nyní ví, že uživatel chce odvázat koně číslo 1234 a může mu to umožnit. V low-tech variantě tak, že mu např. sdělí kód ke kódovému zámku, jímž je kůň přivázán k zábradlí. Ve variantě high-tech pak tím, že elektronický zámek na dálku sama otevře, např. prostřednictvím mobilní datové sítě nebo nějaké LPWAN sítě pro internet věcí typu SigFox. Tak či onak, zámek cvakne a kůň je zákazníkovi k dispozici.

Po dojetí na místo určení zákazník proces zopakuje, tím či oním způsobem zaznamená, kde koně uvázal (což se zpravidla zaznamená pomocí GPS), zámek se zamkne a oř je připraven pro dalšího klienta.

Takhle, principiálně, fungují všechny půjčovny kol či koloběžek. Mohou tam být ještě nějaké další kroky (např. nutnost koně uvázat na některém z vybraných míst, mimo zakázanou zónu typu Staroměstské náměstí nebo třeba povinnost koně po vrácení vyfotit). Ty ale nejsou pro náš výklad podstatné.

Jak funguje podvod

Podvod, který trápí zájemce o ekologické cestování v New Yorku, využívá toho, že ve frekventovaných místech bývá „koní“ zpravidla hned několik vedle sebe. Útočník může okopírovat QR kód jednoho koně a nalepit ho na uzdečku koně, který stojí o kousek dál. A pak mu stačí vyčkat. Jeho oběť přijde k vybranému valachovi (hřebci ani klisny se pro své povahové vlastnosti do půjčovny obvykle nehodí) a naskenuje jeho kód.

Tímto krokem ovšem odemkne jiného koně, který měl zadané číslo původně. U něj již stojí připraven útočník, který koně odváže, vyšvihne se mu do sedla a volným (nebo naopak svižným, dle pružnosti nervů) krokem odjíždí za peníze cizího uživatele, kterému zůstal jen účet k úhradě.

QR kód sám o sobě je technologicky neutrální. Podvod není založen na nějakých jeho unikátních vlastnostech. Pokud by na uzdečce bylo napsáno číslo, které bude zákazník opisovat, stačilo by prostě změnit toto číslo, ale zlé věci se snadno svádějí na technologie.

Jak se dá tomuto podvodu bránit?

Z pohledu zákazníka je ochrana proti podobným útokům dost obtížná, až nemožná. Hraběcí rada říká, že byste neměli skenovat kódy, které vypadají jinak, než je obvyklé. Jenomže to je v praxi dost obtížně realizovatelné. Provozovatel typicky používá několik generací dopravních prostředků, které jsou značené každý trochu jinak a většinou způsobem, který je poměrně snadno padělatelný: typicky nějakou samolepkou, kterou je možné snadno vytisknout.

Z pohledu provozovatele je možné přijmout nějaká opatření. Na první pohled nejsnazší je dělat štítky tak, aby nebyly snadno padělatelné. Nepoužívat samolepky, které lze vyrobit na přenosné tiskárně za pár minut, ale laserem vyráběné kovové štítky, které lze sice taky vyrobit za pár minut, ale potřebujete k tomu laser, který asi běžný zloděj mít nebude. Jenomže to je drahé, komplikované, a nakonec vám do toho stejně hodí vidle uživatelé, kteří na vaše bezpečnostní prvky kašlou a šťastně naskenují cokoliv, co se jim dostane do spárů.

Typicky bývá v aplikaci omezení, že lze odemknout pouze koně, který je podle záznamů někde poblíž vás, a ne na druhé straně města. Jenomže přesnost lokalizace uživatelů i koní má – zejména v městských podmínkách – své rezervy, takže jsou tolerance obvykle dost značné.

Jediné aspoň trochu použitelné řešení je obousměrná komunikace. Aby uživatel musel potvrdit, že se mu zámek skutečně otevřel. Jenomže co budete jako provozovatel půjčovny dělat, když odpoví záporně? Může a nemusí mít pravdu.

QR kódy jsou v uvedeném podvodu nevinně. Žádná obdobná technologie by nedokázala tento problém vyřešit. Ani třeba běžné RFID/NFC tagy. Naprostou většinu z nich lze ovšem snadno padělat a zkopírovat také. Existují takové, které zkopírovat nejdou (nebo jenom obtížně), ale ty jsou obvykle neprakticky drahé a nutnost je všude aplikovat by asi našemu hypotetickému byznysu zasadila smrtící ránu.

Variantou by bylo, že by se zámek přímo odemykal aplikací z mobilu přes NFC. Pak by bylo možné tento typ útoku zastavit podmínkou fyzické blízkosti zákazníka a odemykaného zařízení. Nicméně ani to není příliš praktické: cena by byla ještě vyšší než u chytrých tagů. Kromě toho vyžadování NFC omezuje klientelu na majitele novějších a lepších mobilů.