Povratni inženiring aplikacije Subway za Android

Lepo je videti vse večjo uporabo pripenjanja potrdil v aplikacijah za Android. Ko naletim na aplikacijo, ki povzroča napake pri povezovanju, medtem ko poskuša posredovati zahteve proxyju, me bolj zanima potapljanje globlje. Tako je bilo, ko sem pred kratkim uporabljal aplikacijo Subway. Razveljavitev APK-ja je med nekaterimi drugimi zanimivimi ugotovitvami razkrila pripenjanje certifikata.

Zagon aplikacije med zahtevami proxyja je povzročil to napako:

Pripenjanje je dovolj preprosto, da ga obidete. Začel sem z dekompilacijo aplikacije in analizo izvorne kode za pripenjanje ključnih besed. Pravzaprav sem našel izvedbe pripenjanja v dveh ločenih razredih, ki sta izvajali X509TrustManager. Tukaj je ena od metod, ki je uveljavila pripenjanje:

 // Code removed at request of Subway leadership

Obhod tega je bil tako preprost kot dodajanje stavka return v kodi smali, da preskočite kodo za pripenjanje v zgornji metodi. Upoštevajte dodatek vrnitev-prazna izjava spodaj:

 // Code removed at request of Subway leadership

Po ponovnem prevajanju aplikacije in namestitvi sem bil presenečen, ko sem videl to novo napako:

Subway je uporabljal postopek preverjanja podpisa aplikacije po meri, da bi preprečil razveljavitev svojega APK-ja. Če sem iskal vir za omembo tega postopka, sem ga izsledil do naslednje metode:

 // Code removed at request of Subway leadership

To je bil zanimiv poskus preprečevanja obratnega inženiringa, čeprav je dejansko povzročil le majhno zamudo. Da bi obšel ta postopek, sem preprosto dodal vrstico za preskok izvajanja metode z dodajanjem druge vrnitev-prazna črto, podobno zgornjemu postopku obvoda pripenjanja.

 // Code removed at request of Subway leadership

Po ponovnem prevajanju in namestitvi aplikacije mi je uspelo uspešno namestiti proxy zahteve:

Med raziskovanjem sem naletel na to objavo na Redditu. Očitno je Subway tudi ugotavljal, ali je bila uporabnikova naprava rootana. Pobrskal sem po viru in potrdil omembe metod za odkrivanje korenin.

 // Code removed at request of Subway leadership

To je odličen primer aplikacije, ki varnost jemlje zelo resno, vendar nisem povsem prepričan o razlogih za postopek preverjanja korena. Čeprav so tehnike pripenjanja potrdil in preverjanja podpisov na splošno dobra ideja, le nekoliko ovirajo postopek obratnega inženiringa.