Obrnuti inženjering aplikacije Subway za Android

Sjajno je vidjeti sve veće prihvaćanje prikvačivanja certifikata u Android aplikacijama. Kad naiđem na aplikaciju koja izbacuje pogreške veze dok pokušava proslijediti proxy zahtjeve, više me zanima dublje ronjenje. Takav je bio slučaj kada sam nedavno koristio aplikaciju Subway. Poništavanje APK-a otkrilo je prikvačivanje certifikata među nekim drugim zanimljivim nalazima.

Pokretanje aplikacije tijekom proxy zahtjeva uzrokovalo je ovu pogrešku:

Prikvačivanje je dovoljno jednostavno zaobići. Počeo sam s dekompiliranjem aplikacije i analizom izvornog koda za prikvačivanje ključnih riječi. Zapravo sam pronašao implementacije pričvršćivanja u dvije odvojene klase koje su implementirale X509TrustManager. Evo jedne od metoda koja je nametnula prikvačivanje:

 // Code removed at request of Subway leadership

Zaobilaženje ovoga bilo je jednostavno kao dodavanje naredbe return u kodu smali za preskakanje koda za pribadanje u gornjoj metodi. Obratite pažnju na dodatak povratak-niština izjava ispod:

 // Code removed at request of Subway leadership

Nakon ponovnog kompajliranja aplikacije i instalacije, bio sam iznenađen kad sam vidio ovu novu pogrešku:

Subway je koristio prilagođeni postupak provjere potpisa aplikacije kako bi spriječio poništavanje svog APK-a. Tražeći izvor za spominjanje ovog procesa, pratio sam ga do sljedeće metode:

 // Code removed at request of Subway leadership

Ovo je bio zanimljiv pokušaj sprječavanja obrnutog inženjeringa, iako je zapravo uzrokovao samo malu odgodu. Kako bih zaobišao ovaj proces, jednostavno sam dodao redak za preskakanje izvršenja metode dodavanjem drugog povratak-niština liniju, slično gore navedenom postupku premosnice pričvršćivanja.

 // Code removed at request of Subway leadership

Nakon ponovnog kompajliranja i instaliranja aplikacije, uspio sam uspješno poslati proxy zahtjeve:

Tijekom svog istraživanja naišao sam na ovu objavu na Redditu. Navodno je Subway također utvrđivao je li korisnikov uređaj rootan. Pretražio sam izvor i potvrdio spominjanje metoda otkrivanja korijena.

 // Code removed at request of Subway leadership

Ovo je izvrstan primjer aplikacije koja sigurnost shvaća vrlo ozbiljno, ali nisam sasvim siguran u razloge koji stoje iza procesa provjere korijena. Iako su tehnike pričvršćivanja certifikata i provjere potpisa općenito dobra ideja, one samo malo ometaju proces obrnutog inženjeringa.