Már korábban magyarul is több helyen megjelent, hogy egy orosz hacker, bizonyos Alexey Borodin felfedezett egy módszert, melynek segítségével ingyenesen bonyolíthatók le az alkalmazásokon belüli vásárlások (in-App Purchase) a különböző iEszközökön. Én most egy rövid összefoglalót szeretnék adni a probléma technikai részleteiről, illetve az Apple megoldásáról.
Az in-App Purchase segítségével az alkalmazásfejlesztők fizetős kiegészítőket illetve szolgáltatásokat - például új játék pályák, új tartalmak, előfizetéses prémium hozzáférések - társíthatnak az appjaikhoz, méghozzá úgy, hogy a vásárlási tranzakciók kezelését az Apple oldja meg az AppStore-on keresztül, ahová a felhasználók már amúgy is be vannak regisztrálva.
A vásárlás nagy vonalakban úgy történik, hogy a felhasználó a megfelelő termék kiválasztása után indít egy vásárlási kérelmet az alkalmazáson keresztül az AppStore-ba, az AppStore levonja a vásárlótól a megfelelő összeget, majd kiállít egy számlát. Ezek után az alkalmazás, vagy a fejlesztő szervere ellenőrzi a számla hitelességét, és ha mindent rendben talál, elérhetővé teszi az új terméket a felhasználó számára.
Az ingyen ebéd egy egyszerű man-in-the-middle támadással szerezhető meg: a felhasználó átállítja a DNS-ét és telepít egy új megbízható CA-t az eszközére, melynek eredményeként az AppStore felé irányuló kérések egy másik kiszolgálóhoz - esetünkben a Borodin által összerakott In-Appstore.com-ra - érkeznek be. Mivel ez az oldal az újonnan telepített CA által igazoltan az Apple-höz tartozik (valójában persze nem), az alkalmazás mindent el fog neki hinni amit mond.
A történet innentől két féle képpen folytatódhat:
- Az In-Appstore mindenképpen egy korábbi vásárlás számlájával válaszol. Ha az alkalmazás maga ellenőrzi a számlát, nem tehet mást, minthogy elfogadja azt, mivel a számla nem tartalmaz olyan információt, ami a számlát a konkrét vásárláshoz kötné, a digitális aláírás pedig stimmel.
- A másik esetben az alkalmazás a fejlesztő szerveréhez fordul, aki közvetlenül az AppStore-t kérdezi meg arról, hogy a kapott számla érvényes-e. Az AppStore viszont maga állította ki az ellenőrizendő számlát (csak egy másik vásárláshoz), így simán pozitív választ ad a kérésre, mire a fejlesztői szerver leküldi az új tartalmakat az alkalmazásnak.
Érdemes végiggondolni, hogy hol hibázott az Apple:
- A szerver tanúsítványok ellenőrzése fontos, ha a felhasználót meg szeretnénk védeni az Interneten leselkedő veszélyektől. Ez a technológia azonban nem védi meg az alkalmazásokat magától a felhasználótól!
- A hack emellett azért volt lehetséges, mert a számlákat nem lehetett az egyes vásárlásokhoz kötni. Ez kis túlzással olyan, mintha a NAV elfogadná a fénymásolt számlákat.
Az Apple-t természetesen elég kellemetlenül érintette az eset, ezért mindent megtettek az In-Appstore.com ellehetetlenítésére: a törést bemutató YouTube videó eltávolíttatták és szerzői jogok megsértése miatt is lépéseket tettek, blokkolták az In-Appstore.com hozzáférését az AppStore szervereihez, valamint felvették a kapcsolatot a PayPal-al, hogy megakadályozzák a Borodin költségeinek kompenzálására szervezett gyűjtést (a legitim receptek begyűjtése pénzbe került, az őket kiszolgáló kisteljesítményű szervert pedig le szeretnék cserélni).
Ennek hatására a szolgáltatást áthelyezték egy másik országba, Borodin pedig most már BitCoin adományokat is elfogad...
A valódi megoldást vélhetően a nem rég számlákra bevezetett egyedi azonosító fogja jelenteni, bár ennek használatának mikéntjéről a hivatalos fejlesztői dokumentáció egyelőre nem tesz említést.
Tipp: A fejlesztői útmutató nem határozza meg, hogy a fejlesztői szerver hogyan juttatja el a terméket az appnak (rá van bízva a fejlesztőre), ez a terület az egyes konkrét alkalmazások esetén igen érdekes lehet :)