Hétpecsét Információbiztonsági Egyesület

Súlyos hibák a bankkártya-elfogadó rendszerekben

Új támadási lehetőséget mutatott be a bankkártya-elfogadó rendszerek ellen Karsten Nohl és Fabian Braulein a most folyó Chaos Computer Club 32C3 konferenciáján - számol be az Ars Technica. Az IT-biztonsági kutatók a terminálok által használt adatátviteli protokollok működésében mélyedtek el, a felfedezések pedig igen aggasztóak - felkészült támadók mind a kereskedőket, mind a bankkártyával fizető vevőket megkopaszthatják és kiolvashatják a PIN-kódot is.

A kártyaolvasó és a pénztárgép között

A kutatók két protokollt vettek nagyító alá és mindkettő esetében jelentős problémát találtak. A ZVT nevű, a hordozható kártyaolvasó és a POS-terminál (kassza) közötti adatátvitelért felel, és iparági szabványnak számít. A ZVT fizikai kapcsolatra eredetileg a soros portot használt, ennek kikopásával a legtöbb esetben ma már vezetékes és vezeték nélküli Etherneten folyik a forgalom. A protokoll valódi múmia, semmiféle hitelesítést nem használ a küldő és fogadó fél ellenőrzésére, így ha a támadó a két fél közé tud ékelődni, akkor egyszerűen indíthat man-in-the-middle támadást, és begyűjtheti az utazó adatokat - a mágnescsíkon tárolt információkat vagy épp a PIN-kódot magát.

A fenti adatok birtokában nagyon egyszerűen klónozható a vásárló kártyája, amellyel így a támadó ATM-ből vehet fel pénzt, vagy vásárolhat boltban is. A támadás szépsége, hogy a közbeékelődött támadó teljesen észrevétlen maradhat, vagyis az eredeti tranzakció zökkenőmentesen le tud zajlani, anélkül, hogy a vásárló vagy a kereskedő észrevenne bármilyen problémát.

A támadás részletei nagyon érdekesek: a kártyaolvasókat ugyanis úgy tervezik, hogy a PIN-kód sosem hagyja el azokat, sem a POS, sem más rendszerek felé. Így szükség van egy újabb csavarra ahhoz, hogy ennek küldését kikényszeríthesse a támadó. A ZVT protokoll segítségével tetszőleges szöveg kiírható az olvasó képernyőjére (például analitikához néha bekérik az irányítószámot), ezzel pedig a PIN-kérő dialógus is meghamisítható. Az erre adott választ pedig a kártyaolvasó megküldi a pénztárgép felé - ahol pedig a támadó elfoghatja ezt a csomagot. Mivel fura lenne a PIN-t kétszer bekérni, ilyenkor PIN-nélküli fizetést is indítványozhat a támadó (ez még mindig támogatott a rendszerekben), igaz, ilyenkor a pénztárgép rányomtatja a nyugtára a PIN-mentes fizetés tényét.

A ZVT elvben kínál védelmet pont az ilyen támadás ellen, a képernyőre íráshoz azért csak igényel valamilyen hitelesítést. Ez a MAC (message authentication code), amely gyakorlatilag egy azt igazoló aláírás, hogy a képernyőre megbízható fél akar írni. A kutatók itt is hibát találtak, a MAC ugyanis idő-alapú támadással legyőzhető - a helyes kód feldolgozása kicsivel rövidebb ideig tart, mint a hibásé, ennek nyomán megfejthető az aláírás.

Megfejni a kereskedőt

A kártyaolvasót a kereskedő és a tranzakciót feldolgozó bank egy azonosító és egy port párosával konfigurálja fel, ezek jelölik ki, hogy a kártyáról lehúzott pénz milyen bankszámlára kerüljön. Természetesen ez a konfiguráció is a ZVT protokollon keresztül történik, amennyiben a helyi hálózathoz a támadó hozzáférést tud szerezni. A beállítást elvben jelszó védi, ez azonban az esetek túlnyomó többségében fix, és széles körben ismert, így érdemi védelmet nem nyújt.

Ebben a támadási vektorban is van persze csavar, a terminál azonosítójának megváltoztatása teljesen alaphelyzetbe állítja a kártyaolvasót, ami kiüti a többi tárolt információt is. Itt jön jól a Poseidon protokoll, amely a terminál és a bank közötti kommunikációért felel, és amelyen keresztül lekérdezhetőek a terminál beállításához szükséges adatok, így azok visszaírhatóak a gépre az új azonosítóval együtt.

A Poseidon protokoll problémáira épít egy harmadik, szintén hipotetikus támadás. A terminálokat a fent említett azonosítón és port számon túl egy harmadik, szervizjelszó egészíti ki, ezzel a hárommal párosítható egy terminál egy adott kereskedő bankszámlájához. A kutatók azt találták, hogy mindhárom paraméter meghatározható külső fél számára: az azonosító minden nyugtán megtalálható (és amúgy is szekvenciálisan növekedik), a jelszó némi webes kereséssel szintén megtalálható a nagyobb kereskedők esetében, a port pedig brute-force módszerrel megszerezhető. E hármas birtokában a terminál bejelentkeztethető a bankhoz, mint egy adott kereskedőnél található pénztári eszköz.

Mit ér ezzel a támadó? A terminálok nem csak egyirányú pénzmozgás indítására alkalmasak - nem csak fizetni lehet ezekkel az eszközökkel, hanem a kereskedő számlájáról a bankkártyára is mozgatható pénz. A kereskedők ezt használják a pénzvisszatérítésre, téves fizetés vagy bármilyen visszafizetés egy negatív értékű átutalással történik. A kutatók szerint ilyen fordított irányú kifizetés a hamis terminálokról is indítható, ezzel pedig szépen megcsapolható a kereskedő számlája. A legszebb, hogy az idegen terminál létezése a kereskedő számára nem látható, így adott esetben elképzelhető, hogy csak hónap végi összegzésnél derülhet fény a hiányzó összegekre.

Bankok és bankkártyák - hitelesítést hírből sem

A biztonságos adatkapcsolatok és a hitelesített, titkosított kommunikáció korában meglehetősen paradox, hogy pont a fizetéshez kapcsolódó protokollok nem élnek ezekkel a megoldásokkal. Adott esetben a facebookozó felhasználó családi fotói is komolyabb védelmet élveznek, mint ugyanennek a felhasználónak a bolti vásárlása. A problémát súlyosbítja, hogy míg a ZVT inkább Európában használatos protokoll, a harmadik típusú támadáshoz használt Poseidon egy globális ISO-szabvány implementációja, és valószínű, hogy az alternatív implementációk is támadhatóak ugyanolyan eszközökkel. A hiba a szabványban rejlik, amely semmilyen hitelesítést nem igényel a kommunikáló eszközöktől, igaz, nem is zárja ki annak implementációját.

A teljes videó itt nézhető meg, roppant érdekes betekintés a kártyás fizetési rendszerek működésébe: A video

Gálffy Csaba, 2015. december 30. 11:30 A cikk.

Chaos POS

Megtekintés: 1236