Mýty o bezpečnosti mobilního bankovnictví: jsou nutná dlouhá hesla a SMS?

U běžných uživatelů je bezpečnost přihlašovacího procesu přímo úměrná utrpení, které při něm zažívají. “Když se tam nedostanu ani já, tak jak by se tam asi mohl dostat útočník?”

Už nějakou dobu se v diskuzích o bezpečnosti mobilních bankovnictví potkávám s celou řadou „odborníků“, kteří našli v našich aplikacích – kterým ovšem absolutně nevěří – zásadní bezpečnostní trhliny, které by se měly okamžitě řešit, protože jinak budou všichni lidé na světě do týdne bez peněz, na ulici, nazí a zbití. Nemohou pochopit, jak jsme mohli přehlédnout takové základní věci! Heslo nemůže být přeci jen číselný PIN. To není bezpečné, některé banky to řeší mnohem lépe, heslem aspoň patnáct čínských znaků dlouhým. Zásadně pak chybí potvrzovací SMS – a bez ní to přeci nemůže fungovat, protože v internetovém bankovnictví se samozřejmě vše musí potvrzovat přes SMS, že. A tím je to pak bezpečné. A fakt, že aplikace po přechodu na pozadí odhlásí uživatele až po dvou minutách, no to už…

Text původně vyšel na blogu Zápisky od plic, Lupa ho publikuje se souhlasem autora.

Zkrátka srážka s „odborníkem“ se nedá přežít se suchou hlavou. Zazní až příliš mnoho pádných argumentů, proč jsou všechny věci úplně blbě. A zasloužíme si to – jsme totiž pitomci a nedošla nám jedna zcela zásadní věc. Lidé nechtějí bezpečnost. Lidé chtějí oběti a mýty, kterým věří.

Více-faktorová autentizace

Přihlášení řeší filosofický problém: jak dokážu nějakému systému, že já jsem opravdu já a ne někdo jiný. O nic jiného se při přihlašování někam nejedná, ale v době klonování a nanotechnologií je to celkem blbý problém k řešení.

Prakticky známe dnes tři faktory, které se pro tento “důkaz totožnosti” používají:

  1. “Něco vím.” Uživatelské jméno a heslo, PIN, tvar geometrického obrazce na dotykovém displeji.
  2. “Něco mám.” Mobilní telefon, klíčenku, certifikát.
  3. “Něco jsem.” Aka biometrika.

Bohužel, více toho není – neznáme další faktory, které by se daly pro autentizaci použít. Je to na prd. Měli bychom to celé zabalit.

Ve většině systémů bez požadavku kritické bezpečnosti se používá jen první faktor. Na Facebook se přihlásím pomocí veřejného e-mailu (ten zná každý, píšeme z něj ostatně maily, že) a hesla (které znáte jen vy a podle diskuze na Twitteru také internetový obchod Mironet).

Systémy bank jsou na bezpečnost citlivější – používají tedy i druhý faktor. Například mobilní telefon. Tím, že zadám do internetového bankovnictví heslo (a splním “Něco vím”) a na mobil mi pak přijde potvrzovací SMS s kódem, který opíšu, dokážu to, že mám správnou SIM kartu. Čili – že “Něco mám”.

Vy, kteří pracujete v jaderné elektrárně nebo v armádě, dobře víte, že při vstupu do zabezpečených budov musíte projít přes biometrický scanner – brigádníka Sergeje Bubkova. Ten na základě geometrie vaší chůze i přes litr vodky, který vypil minulý večer, zcela jasně pozná, že to jste vy nebo někdo vám velmi podobný. A proto vás tedy dnes zatím nezastřelí. Zatím…

Bavíme-li se o mobilních bankovních aplikacích, řešíme typicky to, jak implementovat 1. a 2. faktor autentizace na zařízení, které je vysoce přenosné (furt se někde válí) a je neustále online, připojené občas k různým Wi-Fi sítím s různou úrovní zabezpečení. A s tím se pojí několik příběhů, které do sebe celkem pěkně zapadají a ukazují, že vše, co víte o bezpečnosti, je lež a měli byste to zapomenout…

Dvou-faktorová autentizace na mobilech

Tak v první řadě, jedna od plic: žádná mobilní bankovní aplikace v ČR není k začátku roku 2013 zcela odolná proti útoku virů či jiného malware a většina předpokládá jako 2. faktor autentizace mobilní zařízení samotné. Hrozí tak, že případný virus vysaje postupně z vašeho účtu zcela všechny vaše peníze a vy budete muset řešit složitou reklamaci s bankou, která velmi pravděpodobně nedopadne úspěšně, a proto strávíte zbytek života v chudobě. Pokud jste majitelé zařízení s OS Android, hrozí vám to o něco více než uživatelům uzavřenějšího iOS. Pokud máte naopak Windows Phone, nemusíte se bát vůbec, protože tato platforma je tak bezvýznamná, že psaní virů pro ni je záležitostí jen pro skalní fanoušky.

Vyděsil jsem vás, já vím, ale to je v pořádku, zajděte si pro kapesníček, utřete pot a jiné nečistoty, které jsem tím způsobil (článek neuteče) a pokračujte dál ve čtení. Bude lépe.

Stále naštěstí nedošlo k explozi hrozby mobilního malware – ačkoliv se o tom už velmi dlouho mluví. Mobilní telefon je tedy dnes považován za 2. faktor autentizace poměrně oprávněně a z tohoto pohledu je většina českých aplikací bankovních domů nyní bez problému a bezpečná k používání. Takže – uživatelé Windows Phone, moc se nám ostatním nesmějte…

Aby ale mohl být mobilní telefon prohlášen za 2. faktor autentizace trochu jistěji, je napřed nutné udělat jednu věc. Když si koupíte chytrý telefon a soused si koupí úplně stejný, protože vás prostě musí naštvat, jsou ty telefony – no – prostě celkem stejné. Aby z pohledu banky stejné nebyly a prokazovaly, že váš telefon je váš, musí se s nimi něco kouzelného stát. Proto většina bank, které to s bezpečností myslí vážně, vyžaduje aktivaci mobilního bankovnictví skrze internet banking (který je považován za “bezpečný kanál”), při které dojde k výměně klíčů mezi bankou a telefonem, které váš telefon “personalizují” (spojí ho s vámi a vaším účtem v bance).

Ty klíče budete většinou mít rádi – už jenom proto, že váš soused je nemá, takže jste ho doběhli. Navíc ale také umožňují to, že mohu říct, že můj PIN pro Mobilní eKonto je 7836, a je vám to úplně, ale úplně k ničemu. Jo, a taky ty klíče někdy mít rádi nebudete. Prokazují, že transakci provedenou v podniku pochybné pověsti jste opravdu udělali vy. Za tím je matematika. To neřešte… Prostě plaťte hotově.

Nebojte se tedy navzdory úvodnímu “odstavci od plic” používat aplikace mobilních bank, hrozba mobilního malware je pod hledáčkem a až se objeví, banka vám rozdá čípečky, nebo jiné čípečky, nebo se třeba podaří zpropagovat na ARM procesorech mechanismus TrustZone, a budete stejně v pohodě, jako jste dnes na stolních počítačích třeba s potvrzovacími SMSkami.

Ale počkat počkat, nešly by ty SMSky tedy použít i na mobilu, stejně jako v případě internetového bankovnictví na desktopu?

Mobilní banking a SMS? Blbost, blbost, blbost…

SMS se jako autentizační mechanismus u internetového bankovnictví začaly používat v době, kdy se masové šíření počítačových virů projevilo jako reálná hrozba. Pokud by se uživatel s infikovaným stolním počítačem přihlásil jen pomocí klientského čísla a hesla, vir by mohl tyto údaje zcizit a strhávat opakovaně neviditelné a nikým nezaznamenatelné částky v řádech desetikorun až stokorun, které se nenápadně tváří jako bankovní poplatky za neprovedenou příchozí transakci. Čili na ně nikdo velmi dlouho nepřijde, protože se tváří na poměry českých bank poměrně normálně. Osobní počítač díky hrozbě virů de facto (navzdory své bezpečné pevné poloze u vás doma v ložnici – v té době totiž notebooky moc nefrčely) přestal efektivně plnit roli 2. faktoru autentizace – “Něco mám” – a stal se něčím, co “mají všichni” (útočník obzvláště).

Naštěstí v té samé době propukla mánie mobilních telefonů. Mobil měl rázem zcela každý a každý rok dostával nový, někdy tedy i dva za rok – ostatně narozeniny i vánoce byly pro nový mobil vždy dobrá záminka. Tehdy jsem i já dostal svoji první Alcatel cihlu a užíval si pocit mít až dva řádky černého textu pro luxusní vzdálené SMS flirtování se spolužačkami před spaním.

A tak se zrodil nápad na zabezpečení internetového bankovnictví pomocí SMS kódu doručeného na samostatný hardware, který není infikovaný virem, a který každý má – byla to trochu záchrana na poslední chvíli. Ale tak jo, zabralo to.

SMS doručená na telefon ale plní v případě internetového bankovnictví pouze omezenou bezpečnostní roli. Zajišťuje totiž jen to, že virus může data o účtu pouze zcela volně číst a následně se pokusit podvrhnout maximálně jednu právě autorizovanou transakci. Což se děje zhruba takto:

  1. Uživatel vyplní formulář platebního příkazu.
  2. Virus ho neviditelně změní těsně před odesláním.
  3. Prohlížeč pošle modifikovaný požadavek na server.
  4. Server modifikovaný požadavek přijme.
  5. Zobrazí se potvrzovací stránka s podvrženým požadavkem, kterou ale virus obratem přepíše tak, aby uživatel nic nepoznal, na původní požadavek.
  6. Uživatel přepíše kód z SMS a potvrdí podvržený příkaz.

Ano – SMS s kódem může jako prvek ochrany obsahovat také číslo protistrany a částku transakce pro kontrolu informací vůči tomu, co je na obrazovce v prohlížeči. Uživatel to pak ale musí na telefonu opravdu zkontrolovat, ne pouze tupě opsat potvrzovací kód. A musí vědět, jak se má zachovat, když data v SMS nesedí s tím, co vidí v prohlížeči. Navíc někteří uživatelé to viděli jako bezpečnostní hrozbu. Nejde přeci jen tak posílat údaje o prováděné platbě do SMS zprávy, že. A proto většina bank údaje o platbě do SMS stejně neposílá…

To je fuk, zkrátka ale díky SMS nehrozí masový chaos na účtech při používání internetového bankovnictví. A hlavně je to trochu placebo. Mám ten telefon v ruce, dojde mi na něj SMS, jsem tedy zcela v bezpečí… Ufff…

Asi je jasné, že v případě mobilního telefonu s mobilním bankovnictvím je SMS ještě víc reálně na nic. Případný malware běžící na telefonu si SMS libovolně čte a modifikuje, stejně jako si zjistí heslo, které zadáte při přihlášení – a účet je pod kontrolou. Je trochu pracné si to takto uvědomit.

A to ani nemluvíme o tom, že například na OS Android může jakákoliv aplikace zachytávat všechny příchozí SMS zprávy, aniž by musela mít nějaká speciální práva nebo musela být nějakým sofistikovaným malware.

Takže – až se to stane a propukne totální zkáza lidstva kvůli infikovaným chytrým telefonům, tak přijdou čípečky, nebo jiné čípečky, nebo ARM TrustZone, nebo něco úplně jiného. Ale ne SMS potvrzování. Protože to je blbost.

Složitost hesla pro přihlášení

Naučil jsem se jednu věc, kterou zcela jistě zúročím, až budu senilní nerudnej dědek. Lidé chtějí trpět. Uživatelé mobilních bankovnictví obzvláště. V uvažování běžných uživatelů je totiž bezpečnost přihlašovacího procesu přímo úměrná utrpení, které při něm zažívají oni a jejich blízcí. Když se poté na poslední pátý pokus rozvzpomenou na správné heslo a konečně se dostanou ke svému účtu, čeká je blažený pocit vykoupení. A jakmile toto utrpení a následnou extázi nezažijí, je zle… Asi je to pochopitelné: “Když se tam nedostanu ani já, tak jak by se tam asi mohl dostat útočník?”

Již jsme si řekli, že jako druhý faktor autentizace je dnes používaný personalizovaný mobilní telefon samotný, a že to je celkem v cajku, dokud se nám nerozšíří mobilní viry. Jak to je ale s prvním faktorem? Tedy typicky heslem?

Je to jasné. Heslo musí být složité, nesmí obsahovat triviální schémata typu “12” nebo “ab”, musí obsahovat alespoň jeden čínský a jeden arabský znak, no a hlavně musí být strašně strašně dlouhé. Fajn. Pojďme to rozebrat trochu strukturovaně.

Napřed několik předpokladů – podívejme se hrubě, jak funguje Mobilní eKonto od Raiffeisenbank, jen v obrysech.

  • Ani banka vaše heslo (PIN) nezná. Nikdy se do banky neposílá. Slouží pro lokální odemčení velmi velmi dlouhých klíčů uložených v bezpečném úložišti na zařízení, které se vymění s bankou při aktivaci, a které tak fungují jako velmi velmi dlouhé heslo. PIN je zde tedy “lokální” věc.
  • Klíče jsou velmi dlouhé (pokud jsme to nezmínili) a jsou zcela náhodné, nemají žádnou strukturu. Když je tedy odšifrujete PINem lokálně, nevíte zhola nic. Vidíte nějaký hnusný ohavný binární chrchel, kterému ani já nerozumím. Musíte se tedy zeptat banky odesláním ověřovacího požadavku, jestli je ten chrchel OK klíč nebo ne. Když ne, banka sníží počet zbývajících pokusů na přihlášení. Když jo, jste na účtu.
  • Při posílání tohoto ověřovacího požadavku neposíláte PIN. A neposíláte ani klíč. Posíláte “jednorázový derivát klíče”. Když ho útočník chytí po cestě (což se nestane, protože aplikace paranoidně kontroluje SSL certifikát při HTTPS připojení), je mu úplně na nic. Útočník z něho neví PIN a neví z něho klíč. Nemůže změnit transakci, nemůže poslat novou transakci, nemůže ani transakci, která jednou prošla, zopakovat.
  • Po několika neúspěšných pokusech o přihlášení vám vaše mobilní banka udělá pá pá…

Dobře, teď můžeme dál. Předpokládejme, že útočník získá fyzickou kontrolu nad vaším personalizovaným mobilním telefonem. Zkrátka ukradne vám ho, bídák jeden upatlanej. A tím poruší druhý faktor autentizace. Jediné, co chrání vaše peníze (kromě nepříjemného reklamačního řízení v bance) je první faktor – heslo. Teď je správný okamžik pro paniku a volání na infolinku či běh na pobočku (nevýhoda mladých bank, které mají pobočku až v okresním městě, a ne u vás na hájovně) kvůli blokaci mobilního bankovnictví. Ale co když to prostě nestíháme?

V principu existuje několik typů útoku na heslo. A není jich tak moc.

1. Útok sociálním inženýrstvím

Spočívá v tom, že se “prořeknete” a PIN / heslo omylem sdělíte. Dopadu tohoto útoku se prostě nedá zabránit technicky. Když vám někdo v hospodě po šesti pivech řekne, že si zahrajete hru “Řekni čtyři nejkrásnější číslice na světě”, nehrajte ji. Když vám přijde e-mail, který vám slíbí hodinky Roflhex za to, že řeknete svůj PIN k mobilnímu bankingu, protože právě našli váš telefon, čímž jste splnili podmínky soutěže, a vy to uděláte, jste v pytli. A nejspíš asi i bez hodinek.

Pro “útok sociálním inženýrstvím” nehraje složitost hesla roli – je jedno, jestli útočníkovi sdělíte jednoduché nebo složité heslo.

2. Útok odpozorováním hesla

Je založen na tom, že vám někdo kouká přes rameno. Musí být heslo složité, nebo stačí číselný PIN? No, je diskutabilní, zda základní iPhone klávesnice, která jasně problikne modrým písmenem po tapnutí na displej je hůře odpozorovatelná, než vlastní klávesnice s upraveným kontrastem. Podle mě moc ne.

Tohle je celkem dobré video o hrozbách spojených s různými typy zařízení, které mimo jiné ukazuje, jak se dá přečíst heslo strojovou analýzou odrazu v brýlích (čas 9:30):

Jediná obrana proti odpozorování hesla je prakticky opět pouze ta lidská: podívejte se, jestli vám někdo nekouká přes rameno, a otřete si displej, protože skvrny od kečupu mohou indikovat klávesy, které používáte pro heslo. Nepoužívejte svůj mobilní banking nazí v temných uličkách plných plešatých úchylů, kteří slintají a koukají vám přes rameno.

Existují i dodatečné mechanismy, jak možnosti odpozorování hesla snížit. Jedním je například úprava kontrastu a velikosti písma, dalším třeba “shuffle” klávesnice – čili náhodné proházení kláves před každým stiskem. A ten se pak dělá jistě lépe s dekadickým heslem, než s plnou klávesnicí.

Pro “útok odpozorováním hesla” není důležitá složitost kódu, protože odpozorovat lze zhruba stejně snadno i složitější PIN. V případě útočníka koukajícího přímo přes rameno je problém nutné řešit netechnicky při jednoduchém i složitém heslu, a to edukací uživatelů.

3. Útok hádáním hesla

Při hádání dekadického PINu rozumné délky (aplikace Raiffeisenbank povoluje až 9 znaků) je šance na uhodnutí velmi malá, stejně jako v případě “složitějších hesel”, jako je například heslo “Adelka” nebo “Borec123”.

Hlavní pointa je v tom, že útočník nemůže hádat donekonečna a možných kombinací je něco přes miliardu (všechny PIN délky 4 + všechny PIN délky 5 + … + všechny PIN délky 9, kdy PIN “0000” je jiný než “000000000”). Nastavíte-li si PIN délky 9, je šance, že ho útočník trefí, fakt dost malá. Pokud se dnes ve zprávách dozvíte, že na zemi spadne meteorit a ví se, že přežije méně než 50 lidí a ostatní zemřou v hrozných bolestech, sháníte na Aukru kapsli s kyanidem. A taková je asi šance, že útočník uhodne číselný PIN délky 9 do pěti pokusů.

Velká výhoda číselného PINu je rovněž ta, že váš PIN pravděpodobně nikdo jiný nemá, protože PIN se pro autentizaci používá relativně ojediněle. Klasické heslo se naproti tomu používá všude. A opravdu to heslo, které používáte do mobilní banky, není zcela stejné, jako heslo na váš e-mail, Facebook účet nebo pro vstup do nějakého e-shopu, který s ním může nakládat různě až hrůzně?

Pro “útok hádáním hesla” není zásadně důležitá složitost kódu, pravděpodobnost uhodnutí rozumně dlouhého PIN kódu je astronomicky malá.

4. Útok dolováním hesla

Když útočník není úplný debil a najde telefon (čili je prolomen 2. faktor autentizace), kde předtím běžela aplikace mobilního bankovnictví, pokusí se k účtu dostat nějak jinak, než že bude tupě hádat PIN. Hádání PINu je pro tragédy. Pokud pak například narazíte na vypečeného opraváře chytrých telefonů, je tento člověk i celkem dobře technicky vybaven, de facto skoro stejně, jako například technici policie ČR provádějící forenzní analýzu v případě sběru důkazů.

Pokud je aplikace mobilního bankovnictví napsaná standardně, máte pak problém – takto vybavený bouchač typicky časem vydoluje z paměti PIN a klíče a ovládne váš účet. Pokud je napsaná dobře, jste v klidu.

Jde tu vlastně jen o to, aby se PIN nikdy moc nevyskytoval v paměti zařízení, protože kde nic není, ani smrt nebere. Aplikace může implementovat speciální šifrovanou klávesnici, která zajistí, že PIN nemůže být kompromitován při svém zadávání. Navíc je možné vytvořit i speciální kryptografický modul, který zajistí, že takto nemohou být kompromitovány ani odemčené klíče. Útočník se pak dostane maximálně tak k jednorázovým derivátům klíčů, které jsou mu k ničemu. A to vše platí dokonce i v případě, že aplikace stále žije, spuštěná na pozadí a vesele si tedy běží.

Pro “útok dolováním hesla” není důležitá složitost kódu, ale důsledná práce s pamětí zařízení.

Takže abych to zkrátil – bezpečnost hesla je možné zajistit i v případě, že heslo je tvořeno pouze číslicemi 0–9, pokud má dostatečnou délku, pokud uživatel dodržuje základní principy správného chování a pokud je aplikace správně implementována.

Panika z pohodlí

Aplikace Mobilní eKonto dělá jednu super věc. Když uživatel pošle aplikaci na pozadí, odhlásí se až po dvou minutách. Nesmírně se to hodí při kopírování údajů o platbě z příchozí pošty, protože platba z mobilu je buď přes QR kód (protože to je totálně boží a moc pohodlné), nebo protože je to někomu pohodlnější než na desktopu obecně, a nebo je velmi často činěna v nouzi jako poslední možnost, protože musím a nepočká to na doma, což typicky znamená doručení upomínky nebo faktury na pohybu či na cestách na mobilní e-mail.

Problém téhle super věci je ten, že uživateli se to dost blbě komunikuje. Aplikace se z jeho pohledu prostě neodhlašuje, což by tedy bylo samozřejmě dost pitomý.

Problém má dvě roviny: “jak věc komunikovat” a “je to tak dobře”?

První rovinu se snažím uchopit tímto článkem, takže to je v cajku, mám to pod kontrolou. Vyřešeno.

Druhá rovina požaduje aspoň základní analýzu možné hrozby. Útočník může uživateli vytrhnout mobil z ruky v metru, když vidí, že je přihlášený k mobilní bance, rychle poslat aplikaci na pozadí a utíkat s ním do svého doupěte co nejrychleji, aby to do dvou minut stihl. Nebo může vzít mobil, který si nepozorný uživatel mobilního bankovnictví položil na stůl a odešel na kávu, ale nejdéle do dvou minut od odložení zařízení. A teď přijde klíčová otázka: Je to problém?

První část úvahy je zamyšlení se nad tím, jak často se toto děje, jaká je pravděpodobnost, že se útočník trefí do těch dvou minut? Prakticky celkem malá, ve srovnání s přidaným pohodlím normálního uživatele někde jinde.

Pro aktivní operace bankovní aplikace navíc vyžaduje (buď povinně, nebo volitelně) autorizaci operace heslem. Čili útočník, který se trefí do dvou minut, získá pouze pasivní kontrolu nad účtem skrze navázané sezení – může koukat do zblbnutí na zůstatek a listovat si v platbách. To sezení může zkoušet udržovat při životě, ale po nějaké době ho banka tak jako tak vykopne, protože sezení je pevně časově omezené bez ohledu na aktivitu uživatele. Pro to, aby si útočník poslal někam peníze, potřebuje typicky zadat PIN kód – pak viz diskuze výše.

MIF16

Pokud se tohoto stavu přesto bojíte, explicitně se odhlašujte pomocí tlačítka pro odhlášení nebo si nastavte kódový zámek na celý telefon. Máte tam i jiné důležité a zcela nezabezpečené aplikace, například e-mailového klienta, po kterém bych tedy já osobně šel dřív než po mobilní bance.

Kdo se bojí, nesmí do lesa

Pokud se používání mobilních bankovnictví přes výše uvedené bojíte, velmi mě to mrzí – osobně mobilní bankovnictví používám neustále, protože v současném světě bez mobilního malware je srovnatelně bezpečné jako bankovnictví na desktopu. Ale v pořádku – nepoužívejte je. Aspoň nebude zbytečná zátěž na serverech, ať hledáme pozitiva. A nebo mi napište, čeho přesně se bojíte – ať už e-mailem (petr@inmite.eu) nebo na Twitteru. Pokusím se na váš dotaz odpovědět.

168 názorů Vstoupit do diskuse
poslední názor přidán 29. 6. 2013 12:43

Školení Jak vytvořit rychle jednoduchý web

  •  
    Jak mít na Internetu blog.
  • Jak si založit web na Wordpressu.
  • Jak pokračovat v jeho provozování.

Detailní informace o školení Jak vytvořit rychle jednoduchý web »