Je skvelé vidieť rastúce prijímanie pripínania certifikátov v aplikáciách pre Android. Keď narazím na aplikáciu, ktorá pri pokuse o zaslanie požiadaviek proxy vyvolá chyby pripojenia, mám tendenciu sa viac zaujímať o ponorenie hlbšie. To bol prípad, keď som nedávno použil aplikáciu Subway. Zvrátenie súboru APK odhalilo pripnutie certifikátu okrem niektorých ďalších zaujímavých zistení.
Spustenie aplikácie počas žiadostí cez proxy spôsobilo túto chybu:
Pripnutie je dostatočne jednoduché na obídenie. Začal som dekompiláciou aplikácie a analýzou zdrojového kódu na pripnutie kľúčových slov. Vlastne som našiel implementácie pripínania v dvoch samostatných triedach, ktoré sa implementovali X509 TrustManager. Tu je jedna z metód, ktoré vynútili pripnutie:
// Code removed at request of Subway leadership
Obísť to bolo také jednoduché ako pridanie príkazu return do malého kódu, aby sa preskočil pripínací kód v metóde vyššie. Všimnite si pridanie return-void vyhlásenie nižšie:
// Code removed at request of Subway leadership
Po opätovnej kompilácii aplikácie a inštalácii som bol prekvapený, keď som videl túto novú chybu:
Subway používal vlastný proces overovania podpisu aplikácie, aby zabránil vráteniu ich súboru APK. Keď som našiel zdroj zmienok o tomto procese, vysledoval som ho späť k nasledujúcej metóde:
// Code removed at request of Subway leadership
Bol to zaujímavý pokus zabrániť reverznému inžinierstvu, hoci v skutočnosti spôsobil iba mierne oneskorenie. Aby som tento proces obišiel, jednoducho som pridal riadok na preskočenie vykonávania metódy pridaním ďalšieho return-void linka, podobne ako v prípade vyššie uvedeného procesu obchádzania.
// Code removed at request of Subway leadership
Po opätovnej kompilácii a inštalácii aplikácie sa mi podarilo úspešne zadať proxy požiadavky:
Počas môjho výskumu som narazil tento príspevok na Reddit. Subway zrejme tiež zisťoval, či bolo zariadenie používateľa rootnuté. Hľadal som v zdroji a potvrdil som zmienky o metódach detekcie koreňov.
// Code removed at request of Subway leadership
Toto je skvelý príklad aplikácie, ktorá berie bezpečnosť veľmi vážne, ale nie som si celkom istý dôvodmi procesu kontroly koreňového adresára. Hoci techniky pripínania certifikátov a overovania podpisov sú vo všeobecnosti dobrý nápad, len mierne bránia procesu reverzného inžinierstva.