Det er fantastisk at se den stigende anvendelse af certifikatfastgørelse i Android-apps. Når jeg løber ind i en app, der kaster forbindelsesfejl, mens jeg forsøger at proxy-anmodninger, har jeg en tendens til at blive mere interesseret i at dykke dybere. Sådan var det, da jeg for nylig brugte Subway-appen. At vende APK'en afslørede cert-pinning blandt nogle andre interessante resultater.
Start af appen under proxy-forespørgsler forårsagede denne fejl:
Fastgørelse er enkel nok til at omgå. Jeg startede med at dekompilere appen og analysere kildekoden til at fastgøre søgeord. Jeg fandt faktisk fastgørelsesimplementeringer i to separate klasser, der implementerede X509TrustManager. Her er en af metoderne, der håndhævede pinning:
// Code removed at request of Subway leadership
At omgå dette var så simpelt som at tilføje en return-sætning i smali-koden for at springe pinningskoden over i metoden ovenfor. Bemærk tilføjelsen af retur-ugyldig udsagn nedenfor:
// Code removed at request of Subway leadership
Efter at have genkompileret appen og installeret, blev jeg overrasket over at se denne nye fejl:
Subway brugte en tilpasset appsignaturbekræftelsesproces for at forhindre tilbageførsel af deres APK. Jeg fandt kilden til omtaler af denne proces og sporede den tilbage til følgende metode:
// Code removed at request of Subway leadership
Dette var et interessant forsøg på at forhindre reverse engineering, selvom det faktisk kun forårsagede en lille forsinkelse. For at omgå denne proces tilføjede jeg simpelthen en linje for at springe metodens udførelse over ved at tilføje en anden retur-ugyldig linje, svarende til pinning bypass-processen ovenfor.
// Code removed at request of Subway leadership
Efter genkompilering og installation af appen var jeg i stand til at fuldføre proxy-anmodninger:
Under min research faldt jeg videre dette Reddit-indlæg. Tilsyneladende var Subway også ved at afgøre, om brugerens enhed var blevet rootet. Jeg søgte rundt i kilden og bekræftede omtaler af roddetektionsmetoder.
// Code removed at request of Subway leadership
Dette er et godt eksempel på, at en app tager sikkerhed meget seriøst, men jeg er ikke helt sikker på begrundelsen bag rodkontrolprocessen. Selvom teknikker til pinning af certifikater og signaturverifikation generelt er en god idé, hæmmer de kun en smule omvendt konstruktionsprocessen.