Nagyszerű látni, hogy az Android-alkalmazásokban egyre inkább elterjedt a tanúsítványrögzítés. Amikor olyan alkalmazásba futok, amely kapcsolódási hibákat vet fel, miközben megpróbálja proxy kéréseket küldeni, akkor jobban érdekel a mélyebbre merülés. Ez volt a helyzet, amikor nemrég használtam a Subway alkalmazást. Az APK megfordítása további érdekes eredményeket mutatott ki a tanúsítvány rögzítésére.
Az alkalmazás elindítása proxykérések közben ezt a hibát okozta:
A rögzítés elég egyszerű ahhoz, hogy megkerülje. Az alkalmazás visszafordításával kezdtem, és elemeztem a forráskódot a kulcsszavak rögzítéséhez. Valójában két különálló osztályban találtam rögzítő implementációkat, amelyek megvalósultak X509TrustManager. Íme az egyik módszer, amely kikényszerítette a rögzítést:
// Code removed at request of Subway leadership
Ennek megkerülése olyan egyszerű volt, mint egy return utasítás hozzáadása a smali kódhoz, hogy kihagyja a pinning kódot a fenti módszerben. Vegye figyelembe a kiegészítést a visszatérés-érvénytelen alábbi nyilatkozat:
// Code removed at request of Subway leadership
Az alkalmazás újrafordítása és telepítése után meglepődve láttam ezt az új hibát:
A Subway egyéni alkalmazás-aláírás-ellenőrzési folyamatot használt, hogy megakadályozza az APK visszafordítását. A folyamat megemlítésének forrását visszakeresve a következő módszerre vezettem vissza:
// Code removed at request of Subway leadership
Ez egy érdekes kísérlet volt a visszafejtés megakadályozására, bár valójában csak kis késést okozott. A folyamat megkerülése érdekében egyszerűen hozzáadtam egy sort, hogy kihagyjam a metódus végrehajtását egy másik hozzáadásával visszatérés-érvénytelen vonal, hasonlóan a fenti rögzítési bypass folyamathoz.
// Code removed at request of Subway leadership
Az alkalmazás újrafordítása és telepítése után sikeresen proxy kéréseket tudtam végrehajtani:
Kutatásom során megbotlottam ezt a Reddit bejegyzést. Nyilvánvalóan a Subway azt is meghatározta, hogy a felhasználó eszköze rootolt-e. Keresgéltem a forrásban, és megerősítettem a gyökérészlelési módszerek említését.
// Code removed at request of Subway leadership
Ez egy nagyszerű példa arra, hogy egy alkalmazás nagyon komolyan veszi a biztonságot, de nem vagyok egészen biztos a gyökérellenőrzési folyamat mögött meghúzódó érvekben. Bár a tanúsítvány rögzítési és aláírás-ellenőrzési technikák általában jó ötlet, csak kis mértékben akadályozzák a visszafejtési folyamatot.