Showing posts with label banke. Show all posts
Showing posts with label banke. Show all posts

Tuesday, October 30, 2012

Okrugli stol: Kome još treba cash?

Danas, 30. 10. 2012. godine, sudjelovao sam na okruglom stolu s temom Kome još treba cash? U najavi tog okruglog stola bilo je rečeno kako su prezenteri: László Szetnics (MasterCard Europe), Luka Tomašković (Zagrebačka banka) i Tihomir Mavriček (Hrvatski Telekom). Panelisti su Igor Strejček (Erste & Steiermärkische banka), Neven Barbaroša (Hrvatska narodna banka), Marijana Gašpert (Fina) i Marina Đukanović (Kolektiva). Moderator je bila Marina Ralašić iz magazina Banka. Još jedna žena je sudjelovala, ali koliko vidim njeno ime se ne spominje u najavi i ona je izgleda tek naknadno dodana. Razlog mog sudjelovanja je što me elektronički novac zanima iz tehničke, preciznije sigurnosne, perspektive. Ovo je moj osvrt na taj okrugli stol.

Pretpostavljam kako ste primjetili da cijelo vrijeme riječ okrugli stol stavljam u nakošena slova. Razlog leži u činjenici da nikakvog okruglog stola nije bilo - ni u doslovnom ni u prenesenom smislu, dakle skoro nikakve rasprave. Zaključaka još i manje. A o ciljevima se može samo sanjati. Istina, mogle su se čuti neke zanimljive informacije, ali imam dojam da je to jedina korist, odnosno, da osim zanimljivosti nemaju nekakvo dodatno značenje. Uglavnom, uvjeren sam da se radilo o "PR eventu" novinara. Tu ću ubaciti i jednu digresiju. Naime, nisam do sada razmišljao o naslovu ovog okruglog stola, ali sad tek uočavam riječ "cash" koja prilično strši, te se pitam zašto nije pisalo "gotovina"? Možda zato što to nije istoznačnica? Tko će ga znati, novinari iz magazina Banka su to organizirali, pa valjda oni kao novinari znaju dobro Hrvatski jezik, to im je dio struke, valjda?

Sve je prvo krenulo s prezentacijama, relativno kratkima. Prvo László Szetnics, potom Luka Tomašković i na kraju Tihomir Mavriček. László Szetnics je pričao o velikim vizijama koje MasterCard ima i u jednom trenutku je čak spomenuo da je sve sigurno. Lijepo od njega, ali ja sam poprilično skeptičan. Luka Tomašević mi se učinio dosta realnijim te je spomenuo neka iskustva i podatke koje Zaba ima. Primjerice, Zaba drži 90% tržišta mobilnog bankarstva i 20% vlasnika mobilnih telefona posjeduje pametni telefon. Zadnju prezentaciju držao je Tihomir Mavriček koji se je kleo u NFC (skraćenica od Near Field Communication) što je Luka Tomašević ispravno okarakterizirao kao način komunikacije, a ne nekakvo posebno sredstvo plaćanja. Inače, Mavriček je pustio promotivni film za uslugu plaćanja NFC-om. Radi se o očito namještenom filmu (što je i on komentirao), iako, bilo je zanimljivo vidjeti neka poznata lica u tom filmu (nekadašnji studenti fakulteta na kojemu ja radim, neki i dok sam ja bio student). Kasnije se moglo čuti kako je plaćanje NFC-om uvedeno u drugoj polovici 7. mjeseca i probni rok trebao je trajati do 31.10, ali je period proširen do 3. mjeseca 2013. Postoji trenutno 6 prodajnih mjesta, a broj korisnika je između 200 i 300, s tim da raste prema 300 te se radi isključivo o djelatnicima T-Coma. Tijekom "rasprave" jedan gospodin iz publike pitao je Mavričeka kako objašnjava činjenicu da je Apple odustao od NFC komunikacije u svom najnovijem proizvodu. Na to je Mavriček odgovorio protupitanjem, tko zna koja tvrtka ima najviše NFC patenata? Odgovor je, naravno, Apple. Valjda je time htio utvrditi kako Apple intenzivno radi na tome. Međutim, njegov argument je dvosjekli mač. Možda to znači i da je Apple, nakon prilično puno rada i stjecanja dosta iskustva s NFC-om (što je rezultiralo patentima) zaključio da je tehnologija neisplativa ili ju se iz nekog drugog razloga ne isplati ugrađivati u iPhone? To mogućnost nitko nije spomenuo.

Kada sam već toliko zapeo za prezentaciju T-Coma (koja je inače prštala animacijama i prava je, "hard core", marketinška prezentacija) ne mogu ne kritizirati upotrebu riječi inteligentno. Naime, na tim slajdovima pojavio se je izraz Inteligentna okolina. Jako me uzrujava besmislena (ilitiga marketinška) zloupotreba te riječi. Postoji bar približan koncenzus što inteligencija znači (sposobnost snalaženja u novoj situaciji), ali to nikako ne mogu povezati s načinom plaćanja koji T-Com pokušava uvesti, osim što se radi o pametnim telefonima, pa je možda tu poveznica prema inteligenciji! Uglavnom, ljudi bi trebali paziti što znače riječi koje upotrebljavaju, a ne upotrebljavati ih samo zato što lijepo zvuče!

Nakon prezentacije Tihomira Mavričeka, prvo je moderatorica postavila po jedno pitanje svakom od panelista, a onda je krenula "rasprava" (iako, teško bi mogao to zvati raspravom).  U tom dijelu moglo se je čuti nekakvih zanimljivih podataka:
  1. Transakcije na bankomatima se u Hrvatskoj ne naplaćuju, ali u okolnim državama da.
  2. Bankama treba gotovina kako bi mogli puniti bankomate, a to se prvenstveno nabavlja od trgovaca (nadam se da se dobro sjećam ovog drugog dijela).
  3. Vani se daje popust na korištenje kartica, dok se kod nas daje popust na gotovinu.
Moram reći kako sam pitanje popusta za gotovinu uvijek tumačio preskupom cijenom transakcija na POS uređajima pa me je to pitanje zašto je obrnuto kod nas iznenadilo. Ipak, tijekom "otvorenog dijela" jedan gospodin iz publike je jasno i glasno rekao da su cijene transakcija kod nas jako visoke i da je to glavna kočnica većem korištenju elektroničkog plaćanja!

Zanimljivo je bilo čuti Marinu Đukanović iz Kolektive. Naime, izgleda da je Kolektiva inicijalno nudila plaćanje samo kreditnim karticama, a kasnije je zbog pritiska tržišta i problema s karticama uvela plaćanje putem Internet bankarstva (odnosno, putem uplatnica). Kod problema s karticama istaknula je da su korisnici krivili Kolektivu, iako problemi nisu bili njihovi - što je u principu prirodna reakcija ljudi, tj. teško je očekivati nešto drugo. Ona je također istaknula kako ljudi ne žele upisivati brojeve kreditnih kartica te da "pune" PayPal račune i onda s njima plaćaju, tj. da nemaju povjerenja. Nakon toga se je osvrnula na potrebu za edukacijom o sigurnosti. Jedna od njenih izjava, ako se dobro sjećam, je i da je "mobilno plaćanje" u stvari "nazadno plaćanje". Naime, komplicirano je. Naknadno, tijekom diskusije, na pitanje o dobnim skupinama korisnika Kolektive rekla je da imaju statistike i da je većina korisnika između 18 i 35 godina, iako je u porastu broj korisnika od 35 do 55. Raspon njihovih korisnika inače je od 18 do 65 godina. Dobio sam želju u jednom trenutku komentirati njen komentar o povjerenju i PayPalu. Naime, nešto znam o sigurnosti i mogu reći da rijetko kome, ako ikome, vjerujem dovoljno da ću upisivati svoj broj kartice. U tom smislu, nikakva edukacija mi neće pomoći jer, ako već nekome moram vjerovati, onda ću vjerovati PayPalu i putem njega ću plaćati ostalima. Što se desi s brojem nakon što ga ja dam Kolektivi više ne znam niti mogu utjecati, a s obzirom na primjere provala na Internetu, teško mi je povjerovati da bi Kolektiva bila sigurna.

U zaključku moram reći nekoliko stvari. Prvo, niti u jednom trenutku nije bilo definirano što se podrazumijeva pod "elektronički novac" i to je cijelo vrijeme visjelo u zraku. No, na temelju prezentacija i cjelokupne priče moglo bi se zaključiti kako se radi o bilo kakvom plaćanju koji ide nekakvim (bilo kakvim) elektroničkim putem, ali da većina pod tim podrazumijeva elektronički način plaćanja. Zatim sigurnost je samo ovlaš spomenuta, dok se privatnost uopće nije spomenula niti jednom rječju. Konačno, osobno mislim da rasprave nije ni bilo - u smislu sukobljenih mišljenja - a nije bilo ni zaključaka.

Izvješće magazina Banka možete pronaći ovdje. Također, na istoj stranici dostupne su i prezentacije.

Monday, October 8, 2012

Kako radi token za Internet bankarstvo...

Što zbog posla, što zbog čiste znatiželje, već dulje vremena pokušavam saznati kako točno rade tokeni koji se koriste u Internet bankarstvu, primjerice Zabe. Primjetite da je naglasak na riječi "točno" budući da znam načelno kako rade, a i guglajući se mogu pronaći neke odokativne informacije. Međutim, to nije zadovoljavajuće, a čak ni dovoljno. Na Internetu je relativno lako pronaći proizvođača i konkretan token koji Zaba i ostali koriste, iako ima puno vrsta tokena, ali traženje kako točno ti tokeni rade iz nekog razloga nije baš tako lako. Ako bi se pitali zašto bi htio znati kako točno rade, tada je odgovor da osim znatiželje u pitanju je i sigurnost. Naime, zanima me u kojoj mjeri je proizvođač predodredio što i kako se treba raditi, a u kojoj mjeri programeri dizajniraju protokole. Izrada ispravnih i sigurnih protokola je izuzetno težak problem na kojemu i profesionalci koji se bave s tim imaju poprilično problema, a ako to radi neki programer koji se prije toga nije bavio proučavanjem protokola onda je velika vjerojatnost da će napraviti neku grešku. To pogotovo postaje bitno ako se uzme u obzir činjenicu da se uvode razne vrste mTokena koje su čisto programske komponente i prema tome programeri imaju potpunu slobodu implementirati ih kako god žele.

Opis upotrebe tokena

Tokeni u Internet Bankarstvu upotrebljavaju se u dvije svrhe. Prva namjena je za autentikaciju, drugim riječima, dokazivanje da smo onaj/ona za kog se predstavljamo. U tom smislu token generira broj (APPL1) koji je potrebno upisati u neko polje Web aplikacije i na taj način dokazati tko smo. Na neki način to je slično lozinci. Umjesto korisničkog imena koristi se broj tokena i broj tokena je vezan uz naš račun, odnosno, po broju tokena aplikacija na poslužitelju će pronaći naše podatke. Dakle, s tim procesom prijave (kucanja broja tokena i broja kojeg token generira) dokazujemo da posjedujemo token, i neposredno, da smo vlasnici nekog računa. Posjedovanje tokena je prvi faktor autentikacije! Očito je kako bi gubitkom ili krađom tokena netko dobio potpuni pristup našem računu i da se to spriječi, token je zaštićen PIN-om, četveroznamenkastim brojem, koji bi morao znati isključivo vlasnik tokena! To je drugi faktor autentikacije. Dakle, za uspješnu autentikaciju potrebno je imati token i znati PIN koji ga otključava. To je tzv. two-factor authentication (2FA) ili dvo-faktorska autentikacija. S obzirom da je PIN relativno mali broj koji se sastoji od samo četiri znamenke, koje omogućavaju 10000 kombinacije, nije tako teško pogađati PIN, treba vremena, ali je moguće. Kako bi se token zaštitio od napada pogađanja PIN-a, on se automatski zaključava nakon tri uzastopna neuspjela pokušaja. Ovaj sustav prilično je siguran budući da se broj koji generira token i koji se mora upisati u aplikaciju stalno mijenja i jako je teško pogoditi koji će biti idući broj! S obzirom da se generirani broj za autentikaciju može upotrijebiti samo jednom, onda se naziva i jednokratna lozinka, ili engleski one-time password (OTP).

Druga namjena je za autorizacija transakcija. Naime, ako se netko uspije ubaciti u komunikacijski kanal između banke i klijenta (što u biti i nije tako teško) tada se otvara mogućnost napada u kojemu napadač modificira podatke neke transakcije ili jednostavno inicira transakcije bez znanja korisnika. Recimo da klijent plaća režije i zbog toga prebacuje XYZ kn sa svog računa na račun tvrtke kojoj treba platiti račun. Napadač može presresti podatke o plaćanju kada putuju od klijenta do banke, promijeniti odredišni račun tako da to bude njegov račun, a istovremeno može promijeniti i cifru, i onda to proslijediti banci. Korisnik neće ni znati što se desilo. No, ne samo to, već nakon autentikacije (koju napadač ne može tako lako zaobići) može inicirati bilo koju transakciju i opet klijent neće biti svjestan da je upravo prevaren. Dakle, bez nekakve dodatne zaštite očito je da napadač može otuđiti sva sredstva s klijentovog računa i da se radi o priličnoj ozbiljnoj prijetnji.

Jedna mogućnost da se to spriječi je da klijent mora upisivati jednokratnu lozinku prije svake transakcije, tj. na neki način se uvijek mora autenticirati. Ovo će istina spriječiti napadača da izdaje naloge bez znanja korisnika, ali neće spriječiti napadača da promijeni podatke o transakciji bez znanja korisnika. Zbog toga se upotrebljava drugi pristup (koji također ima problem vidjeti Nadopunu 1!). Naime, kada korisnik upiše podatke o transakciji oni se šalju u banku. U banci se na temelju podataka iz transakcije (brojevi računa, iznosi i slično) generira jedinstveni broj koji nazivamo izazov (engl. challenge). Potom se korisniku prikazuju svi podaci iz naloga (dakle ponovo se prikazuje nalog) ali se prikazuje i broj generiran od strane banke. Korisnik taj broj mora utipkati u svoj token (APPL2) koji na temelju njega generira odgovor (response). Nakon toga, odgovor, zajedno sa svim podacima o transakciji vraća se u banku. Aplikacija u banci ponovo provjerava da li generirani jedinstveni broj odgovara podacima u transakciji te da li je korisnik upisao očekivani odgovor (primjetite da aplikacija u Banci zna koji broj očekuje). Ako je sve OK, transakcija se provodi, ako nije, transakcija se odbija. Na taj način značajno smo otežali posao napadaču u njegovim pokušajima promjene podataka iz transakcije. Da bi zaštita bila uspješna, i od korisnika se traži određena doza pažljivosti.

Implementacija

Razlog zašto sam se odlučio na pisanje ovog posta je što sam konačno uspio pronaći kako je implementirano generiranje jednokratne lozinke. Naime, to je opisano u RFC dokumentu TOTP: Time-Based One-Time Password Algorithm (RFC6238). Taj RFC je nadogradnja RFC-a pod nazivom HOPT: An HMAC-Based One-Time Password Algorithm (RFC4226). U oba algoritma koristi se HMAC funkcija (definirana u RFC2104) koja na temelju tajnog ključa i dodatnog parametra generira novu jednokratnu lozinku. E sad, razlika između TOPT i HOTP je baš u tom dodatnom argumentu, iako je sve ostalo potpuno isto. U slučaju HOTP-a, dodatni argument je brojač, dok je u slučaju TOTP-a dodatni argument trenutno vrijeme u sekundama podijeljeno s nekom konstantom (recimo s 30). Razlog uvođenja TOTP-a je poboljšana sigurnost. Naime, kod HOTP-a se brojač povećava nakon svakog korištenja pa ako korisnik ne  bi upotrebljavao token neko vrijeme, stalno bi bio isti OTP i napadač bi ga mogao pogađati te bi u jednom trenutku i uspio. Kod TOTP-a, kako vrijeme prolazi, mijenja se i jednokratna lozinka (svake minute ako se koristi dijeljenje s 30) te napadač sada ima pokretnu metu što je dosta složenije za pogoditi. Ono što mi se posebno sviđa kod RFC-a o HOTP-u je analiza sigurnosti, dok se u oba RFC-a nalazi Java kod koji implementira algoritam opisan u RFC-u. I pogodite što? Pronašao sam taj kod u mTokenu jedne određene banke. Kako i što, prešutit ću, bar za sada. :)

No, ovdje ima jedan ALI. Preporučena minimalna duljina jednokratne lozinke prema RFC-u je 6 znakova, dok se u tokenu upotrebljavaju 4 znamenke. Pretpostavljam da je razlika u finalnom koraku kada se radi modulo operacija, ali nisam siguran, a pogotovo nisam siguran koliko to utječe na sigurnost (trebalo bi proći analizu iz RFC-a, što ću sigurno obaviti čim uhvatim vremena).

Što se tiče jednokratne lozinke još je samo ostalo reći što je s onim tajnim ključem. Pa, taj ključ se generira na autentikacijskom poslužitelju (o toj komponenti nisam pisao, ali se ona nalazi u banci) te se taj broj upisuje u token preko onih ledica na vrhu tokena. Sumnjam kako se to obavlja prema protokolu opisanom u RFC6030 ili da je upotrebljeni protokol barem sličan tome opisanome u RFC-u. Inače, preporučena vrijednost za dijeljeni ključ prema RFC-u je 128 bita, ali ako je vjerovati postu na forumu, onda se u HR upotrebljavaju vrijednosti od 256 bita.

Što se tiče implementacije izazova i odgovora, prvo pitanje je što se od podataka uključuje u generiranje izazova. Pretpostavljam da je odluka prepuštena onima koji rade aplikaciju. Naime, tokenu je svejedno kako je nastao broj koji se upisuje, on jednostavno na temelju broja generira novi broj. U tom smislu postoji nejasnoća, ali moguće je da se koristi neka varijacija HOTP-a. Ono što i aplikacija i token moraju imati zajedničko je algoritam uz pomoć kojega se broj generira. Pretpostavljam da se za to koristi postupak definiran u RFC6287 - OCRA: OATH Challenge-Response Algorithm. Konkretno, postupak iz odjeljka 7.1. No ukratko, opet se koristi HOTP ali su neki ulazi promijenjeni, konkretno umjesto brojača (C) koristi se sažetak koji server šalje. Moguće je da se koristi i vremenska oznaka (trebalo bi provjeriti), ali sigurno se ne koristi PIN. Naime, PIN mora biti poznat isključivo korisniku i budući da ga poslužitelj ne zna onda ga ne može koristiti za generiranje podataka!

Umjesto zaključka

Čini se da je token prilično siguran sustav. U stvari, siguran je što se tiče stvari definiranih odgovarajućim standardima (RFC), ali kada je u pitanju programerska implementacija moguće su ranjivosti. Token ipak ne štiti od nekih mogućih zloupotreba, primjerice, neporecivost nije najbolje osigurana zbog toga što je izazov vrlo mali broj i grubom silom se može generirati slična transakcija s istim izazovom. Dodatno, moguće je i određeno modificiranje računa u prijenosu od strane napadača, iako nije trivijalno. U tom smislu pametne kartice nude doista puno bolje rješenje, ali na uštrb više zahtjevanih resursa (čitači, instalacija dodatne programske podrške).

Nadopuna 1 [20121011]
Na žalost, moram se ispraviti. Mehanizam izazova i odgovora (challenge-response) ne štiti od MITM (ili MITB) napada. Naime, napadač koji se ubaci u komunikacijski kanal može prilikom slanja naloga na poslužitelj izmjeniti podatke, poslužitelj na to generira izazov i vraća nalog zajedno s izazovom korisniku. Međutim, napadač vraća originalne podatke u nalog ali ne dira izazov te to prikazuje korisniku. Korisnik ukucava odgovor te se nalog, zajedno s odgovorom šalje na poslužitelj. Međutim, napadač u prolazu modificira nalog tako da opet ima krive podatke. Poslužitelj na to provodi transakciju. Ovaj napad nije moguće detektirati samo na temelju izazova budući da korisnik ne zna da li je on ispravan za podatke trenutno prikazane u formi!

Sunday, February 12, 2012

Malo o velikim sustavima i percepciji ljudi...

Ja sam laik što se tiče bankarskog sustava i ovo ovdje je moje viđenje stvari. Dakle, moram reći kako se prilično uzrujam kada čitam pojedine komentare u kojima se napada HNB. Neću tvrditi da HNB nije bez grijeha, nitko nije bez grijeha. Ali kada su argumenti u najmanju ruku nebulozni, što je čest slučaj onih koji komentiraju, onda me to stvarno uzruja i posljedica toga je ovaj post. Iako ovdje spominjem konkretan primjer bankarskog sustava, u biti radi se o općenitoj stvari o čemu ću na kraju posta više.

Naime, dosta često se u raznim raspravama na forumu vadi argument kako HNB negativno djeluje prema građanima i štiti interese banaka, a kao jedan od razloga za to se navodi što je Rohatinski član bankarskog kruga i u interesu mu je da radi za banke. Međutim, mislim da takve izjave pokazuju osnovno nepoznavanje velikih sustava, jer situacija nije baš tako jednostavna. Dakle, bankarski sustav je velik i složen i prva činjenica je da ga ne može voditi bilo tko, dapače, mora ga voditi netko tko jako dobro poznaje bankarski sustav i tko ima iskustva u vođenju velikih sustava, da ne spominjem i smisao za vođenje i rad s ljudima. Kada se uzme sve to u obzir, jasno je kako se radi o vrlo malom broju ljudi koji zadovoljavaju te uvjete. Naravno, uvijek se može staviti na bilo koji položaj bilo koga, ali da mi je vidjeti tko će tvrditi da će to dobro završiti - osim ako se ne poziva na čistu koincidenciju, što je moguće, ali izuzetno malo vjerojatno. Druga činjenica je da je stabilnost financijskog sustava, pa prema tome i banaka, nužan preduvjet stabilnosti države. Primarna zadaća HNB-a je održavanje stabilnosti financijskog sustava RH, a jedan od mehanizama s kojim se to postiže je i kontrola banaka. Sve super, samo da nema jednog neizbježnog problema. Postoji izreka koja kaže tko je jači taj kači, i to je i ovdje slučaj. Bez obzira što je država, u osnovi, najjači igrač naspram svih banaka, rat između države i banaka bi bila pirova pobjeda za državu. Dakle, kompromisi se jednostavno moraju raditi i to je neizbježno, a kompromis znači da se mora popuštati na obje strane.

Sada, konačno, dolazim i do percepcije ljudi. Ljudi vide stvari koje ih direktno tište, ali ne vide cjelinu. Pa prema tome, kada HNB napravi nešto što ide kao minus građanima, onda se pljuje po HNB-u, kada napravi nešto što ne ide na ruku bankama, onda najčešće to ti isti građani ne vide i u konačnici smatraju da HNB radi samo protiv njih, a u korist banaka. S tim ne želim reći da je HNB uvijek u pravu, čak obratno, vjerojatno je načinjeno dosta pogrešaka. Međutim, u svakom složenom sustavu, i uz najbolju namjeru, pogreške su neumitne!

Osobno mislim kako bilo koji veliki sustav ima iste "probleme" kao i HNB, međutim, razlika je da to ljudi ne osjete direktno na svojoj koži i prema tome ne reagiraju na to. Zaključak je da u Hrvatskoj ima četiri milijuna izbornika, guvernera HNB-a, predsjednika vlade, itd.

About Me

scientist, consultant, security specialist, networking guy, system administrator, philosopher ;)

Blog Archive