Subway Androidi rakenduse pöördprojekteerimine

Tore on näha, et Androidi rakendustes hakatakse üha enam kasutama sertifikaatide kinnitamist. Kui satun puhverserveri taotlusi proovides peale rakendust, mis tekitab ühendusevigu, tunnen pigem huvi sügavamale sukeldumise vastu. Nii juhtus siis, kui ma hiljuti Subway rakendust kasutasin. APK ümberpööramine näitas teiste huvitavate leidude hulgas ka sertifikaadi kinnitamist.

Rakenduse käivitamine puhverserveri taotluste esitamise ajal põhjustas järgmise vea:

Kinnitamine on piisavalt lihtne, et sellest mööda minna. Alustuseks dekompileerisin rakenduse ja analüüsisin lähtekoodi märksõnade kinnitamiseks. Tegelikult leidsin rakenduste kinnitamise kahes erinevas klassis, mis rakendasid X509TrustManager. Siin on üks kinnitamise jõustanud meetoditest:

 // Code removed at request of Subway leadership

Sellest mööda hiilimine oli sama lihtne kui smali koodi tagastuslause lisamine, et ülaltoodud meetodil kinnitamiskood vahele jätta. Pange tähele lisamist tagastamine-tühine avaldus allpool:

 // Code removed at request of Subway leadership

Pärast rakenduse uuesti kompileerimist ja installimist nägin ma üllatusena seda uut viga:

Subway kasutas kohandatud rakenduse allkirja kinnitamise protsessi, et vältida APK tagasipööramist. Lähtudes selle protsessi mainimise allikast, leidsin selle järgmise meetodiga:

 // Code removed at request of Subway leadership

See oli huvitav katse pöördprojekteerimist ära hoida, kuigi tegelikult põhjustas see vaid väikese viivituse. Sellest protsessist mööda hiilimiseks lisasin lihtsalt rea meetodi täitmise vahelejätmiseks, lisades teise tagastamine-tühine rida, mis sarnaneb ülaltoodud kinnitamise möödaviigu protsessiga.

 // Code removed at request of Subway leadership

Pärast rakenduse uuesti kompileerimist ja installimist suutsin edukalt puhverserveri taotlusi esitada:

Uurimise ajal komistasin see Redditi postitus. Ilmselt tegi Subway ka kindlaks, kas kasutaja seade oli juurdunud. Otsisin allikas ringi ja kinnitasin juurte tuvastamise meetodite mainimist.

 // Code removed at request of Subway leadership

See on suurepärane näide rakendusest, mis võtab turvalisust väga tõsiselt, kuid ma pole juurkontrolliprotsessi põhjustes päris kindel. Kuigi sertifikaadi kinnitamise ja allkirja kontrollimise meetodid on üldiselt hea mõte, takistavad need pöördprojekteerimise protsessi vaid pisut.