Az IT-biztonsággal foglalkozó Mantra Information Security alapítója, Bucsay Balázs nemrég egy kritikus hibáról számolt be az európai kötelező visszaváltási rendszerben (DRS), ami elméletben jelentős anyagi haszonszerzésre adhatna lehetőséget a rosszindulatú szereplőknek. A szakértők konkrét csalást nem követtek el, az etikai szabályokat betartva hívták fel a rendszer üzemeltetőinek figyelmét a problémára, valamint tettek javaslatot arra, miként tehetnék biztonságosabbá a vonalkódokra támaszkodó újrahasznosítási rendszert.
A Mantra szakértőinek feltűnt, hogy a vonalkód alatt feltüntetett számsorozat egy részlete mutatja az utalvány értékét, aminek a megváltoztatása esetleges visszaélésekre adhat lehetőséget, amennyiben egy további metódust is követnek a rosszindulatú felek.
A szakértők több minta gyűjtése után azonosították, hogy az utalvány 26 számból álló kódjának utolsó két kulcseleme az összeg és az ellenőrző számjegy, illetve olyan azonosítók is szerepelnek még benne, mint az üzlet egyedi kódja, vagy egy egyszerűsített időbélyeg.
Az ellenőrző számjegy lényegében egy hibaellenőrző kód, amely a számsorozat érvényességét erősíti meg a kasszáknál, ezen a koncepción alapulnak a Luhn-algoritmust használó betéti vagy hitelkártyák (Visa, Mastercard, Amex) is. Ez az algoritmus lehetővé teszi a kártyaszám utolsó számjegyének kiszámítását az előzőek alapján, lehetővé téve a rendszerek számára, hogy hibákat észleljenek a tévesen beírt számjegyek esetén, mielőtt egy tranzakció végrehajtását megkísérelnék.
Ugyan az automata által előállított utalványok nem a Luhn-algoritmust használják, de a megoldás nagyon hasonló, és amennyiben egy rosszindulatú fél képes lenne az utalványok hibaellenőrző kódját visszafejteni, elméletileg érvényes kódokat generálhatna egyedi összegekkel, akár egészen magasakkal.
Bucsay szerint sikerült feltörniük a hibaellenőrző kódot, majd azt Python-szkriptbe implementálni. Egy programmal lényegében az utalvány bármely kódjának megadásával (az ellenőrző számjegy kivételével) kiszámítható válik a helyes ellenőrző számjegy.
Ez azt jelenti, hogy ha valaki módosítaná az utalvány kódjában szereplő összeget, egy új érvényes utalványt is tudna generálni.
A vonalkód csíkjainak előállítása sem különösebben nehéz, elvégezhető nyílt forráskódú eszközök vagy online források segítségével.
A Mantra szakemberei nem tervezik sem a Python-szkript, sem a mögötte álló matematikai formula nyilvánossá tételét, a szakértők az etikai szabályokat betartva a gyakorlatban nem hajtottak végre visszaélést.
A mögöttes infrastruktúráért felelős céggel már felvették a kapcsolatot, ami elismerte a hiba létezését, és dolgozik a rendszerrel való visszaélések visszaszorítására szolgáló megoldásokon
- írja az informatikai szakember.
A nem csak magyar, hanem más uniós országokból származó utalványok vizsgálata után a Mantra arra a következtetésre jutott, hogy a probléma szélesebb körű lehet.
A sebezhetőséget az jelenti lényegében, hogy az utalvány értéke közvetlenül a vonalkódba van kódolva, és nem védi semmilyen biztonsági mechanizmus az offline támadások megelőzése érdekében.
Az utalvány bemutatásakor az üzlet rendszere a központi adatbázis online ellenőrzésével hitelesíthetné annak érvényességét, garantálva, hogy csak valós utalványokat fogadjanak el. Egy ilyen megoldás implementálása azonban további erőforrásokat és időt igényelne, de jelentősen növelné a biztonságot és megakadályozná az utalványértékek jogosulatlan manipulálását.
Címlapkép forrása: Shutterstock