Ce blochează în continuare
O aplicație care își fixează certificatul nu se va decripta prin Busymate DevTools — nici pe iOS, nici pe Android, nici prin proxy. Iată exact ce poate și ce nu poate vedea fiecare cale de captură, cum recunoști un host cu pinning și ce rămâne util.
Orice instrument de captură care decriptează HTTPS funcționează la fel: prezintă clientului un certificat semnat de el însuși, iar clientul îl acceptă pentru că are încredere în autoritatea care l-a semnat. Certificate pinning este aplicația care spune că va avea încredere într-un anumit certificat sau într-o anumită cheie și în nimic altceva. Când o aplicație cu pinning întâlnește certificatul substitut, pur și simplu refuză conexiunea. Este o proprietate a aplicației, nu un comutator din instrument, și nicio cale de captură livrată de Busymate nu o ocolește.
Un instrument care tace despre asta îți irosește o sesiune de cercetare pe o țintă care nu avea să fie decriptată niciodată. De aceea acest ghid este o hartă, nu o soluție de ocolire: ce livrează captura pe iPhone, aplicația Android, proxy-ul de desktop, un telefon cu root din fermă și conectorul Chrome fiecare în fața unui host cu pinning, cum îl etichetează feedul și ce părți din muncă se fac totuși.
De ce ai
Acest ghid presupune că traficul ajunge deja în dashboardul tău prin cel puțin o cale de captură.
Un telefon sau un client deja asociat și în captură — ghidul pentru iPhone sau Android te duce acolo.
Numele de host ale aplicației pe care o investighezi, adăugate în lista SSL proxy ca decriptarea să fie măcar încercată.
Feedul dashboardului deschis, cu filtrul de inspecție la îndemână.
Permisiunea de a inspecta aplicația: aceste tehnici sunt pentru traficul aplicațiilor și site-urilor pe care le deții sau pe care ești autorizat să le depanezi.
Urmează
Parcurge căile în ordine — fiecare restrânge ce îți mai poate spune un host cu pinning.
- 01
Află de ce depozit de încredere depinde calea ta de captură
Pe iOS, decriptarea depinde de instalarea profilului Busymate și de încrederea completă acordată în Configurări — după aceea, fiecare aplicație de pe telefon are încredere în certificatul prezentat de aplicație, cu excepția celor care fac pinning. Pe Android există două depozite: cel al utilizatorului, pe care de la Android 7.0 îl respectă doar aplicațiile care acceptă explicit, și cel al sistemului, pe care îl respectă orice aplicație, dar în care poate scrie doar un dispozitiv cu root. Proxy-ul de desktop folosește încrederea pe care mașina sau browserul client o are în autoritatea sa generată.
Pinning-ul stă deasupra tuturor celor trei. O aplicație care face pinning respinge certificatul substitut din orice depozit ar veni, așa că mutarea unui certificat într-un depozit mai puternic nu ajută niciodată împotriva unui host cu pinning. Ajută doar împotriva aplicațiilor care refuzau depozitul utilizatorului.
- 02
Recunoaște un host cu pinning în feed
Un host pe care nu l-ai listat pentru decriptare arată un lacăt închis doar cu numele hostului și un contor de cereri — asta e intenționat, nu pinning. Un host cu pinning arată altfel: este în lista ta, decriptarea a fost încercată, iar conexiunea a eșuat sau aplicația a reîncercat și a renunțat. Filtrul de inspecție al feedului din dashboard are trei setări — doar decriptate, doar criptate și doar cu SSL pinning — iar ultima izolează exact acele rânduri.
Celălalt semn este comportamental: aplicația nu mai funcționează pentru acel host din clipa în care este decriptat și funcționează din nou din clipa în care scoți hostul din listă. Dacă ambele sunt adevărate, ai găsit o conexiune cu pinning.
- 03
Captura pe iPhone: metadate, niciodată corpul
Aplicația iOS capturează la nivel de sistem, pe Wi-Fi și rețea celulară, și decriptează hosturile pe care le listezi. În fața unei aplicații cu pinning înregistrează în continuare fiecare conexiune — hostul, timpii, numărul și dimensiunea cererilor, modul de conexiune în vigoare — dar nu poate produce antetele sau corpul, și nu există niciun comutator care să schimbe asta. Activarea MITM All Hosts decriptează fiecare host fără pinning; pentru unul cu pinning nu face nimic în afară de a-l strica.
Mișcarea practică este să scoți hostul cu pinning din listă ca aplicația să continue să funcționeze, să păstrezi restul hosturilor aplicației în listă și să citești ce dezvăluie endpoint-urile fără pinning. Multe aplicații fixează doar hostul de autentificare sau de plată și lasă restul deschis.
- 04
Android: fără root, cu root și unde stă pinning-ul
Pe un telefon Android fără root, certificatul generat de aplicație stă în depozitul utilizatorului, așa că se decriptează doar propriile build-uri de debug și alți clienți care au acceptat; orice altă aplicație este înregistrată ca metadate. Pe un dispozitiv cu root, certificatul poate fi instalat în depozitul de sistem, iar HTTPS devine decriptabil la nivel de sistem — cu excepția pinning-ului per aplicație. Ferma de telefoane își rulează dispozitivele Android la acel nivel cu root exact din acest motiv.
Așadar root-ul transformă o clasă de aplicații opace în unele lizibile — cele care doar ignorau depozitul utilizatorului — și lasă clasa cu pinning neatinsă. Busymate nu pretinde niciodată decriptare la nivel de sistem pe un dispozitiv fără root și nu pretinde niciodată că pinning-ul este învins pe unul cu root.
- 05
Proxy-ul: aceeași limită, plus hosturi pe care le refuză intenționat
Proxy-ul de desktop are aceeași relație cu pinning-ul ca aplicațiile de telefon: un client cu pinning refuză certificatul generat și conexiunea eșuează. Are, de asemenea, o listă scurtă de hosturi pe care nu le interceptează niciodată, indiferent ce spun setările tale SSL proxy — PKI-ul și endpoint-urile de revocare ale Apple, responderele de stare a certificatelor folosite de lanțul Apple și propriul backend Busymate — pentru că interceptarea lor ar strica dispozitivul sau conexiunea live a dashboardului. Ele trec ca tuneluri brute, iar asta este intenționat, nu o configurare greșită.
Hosturi pe care proxy-ul le lasă să treacă neatinse, prin design text# Passed through as raw tunnels by the proxy, regardless of your SSL-proxy list: pkis.apple.com ocsp*.apple.com crl*.apple.com valid.apple.com ppq.apple.com # the DigiCert OCSP / CRL responders Apple's chain uses *.busymate.net # the dashboard's own backend + Realtime connection - 06
Conectorul Chrome: pinning-ul nu se aplică
Există o cale de captură în care pinning-ul este irelevant. Conectorul din linia de comandă lansează o instanță Chrome și îi citește traficul prin DevTools Protocol, pe partea de browser a TLS. Conexiunea criptată dintre Chrome și server nu este atinsă niciodată — nu există certificat substitut de respins, nimic de instalat și nimic pe care pinning-ul să-l detecteze. Fluxurile de autentificare la furnizori ale căror certificate fixate un proxy nu le poate deschide sunt înregistrate cap-coadă, cu redirecționări și tokenuri incluse.
Compromisul este sfera de acoperire: acoperă ce rulează în acel Chrome, nu o aplicație nativă. Dacă fluxul care te interesează are o versiune web, aceasta este calea care îl vede în întregime.
- 07
Folosește ce îți mai oferă un host cu pinning
Metadatele nu înseamnă nimic? Ba da. Vezi în continuare când aplicația vorbește cu hostul cu pinning, cât de des, cât de mari sunt schimburile și cât durează, și le poți corela cu apelurile decriptate din jur. Regulile de blocare se potrivesc în continuare la nivel de host pe un host criptat — calea este invizibilă, dar poți face aplicația să se comporte ca și cum acel endpoint ar fi inaccesibil, ceea ce adesea este exact modul de eșec pe care voiai să-l testezi. Pauzele lasă hostul să ocolească proxy-ul complet, ca aplicația să continue să funcționeze în timp ce inspectezi tot restul.
Și fiecare acțiune pe care ai făcut-o este în jurnalul de audit, așa că o sesiune de cercetare lasă o urmă a ceea ce a fost decriptat, ce a fost blocat și ce a fost lăsat în pace.
Ce poate
Greșelile care costă cel mai mult timp sunt cele care arată ca defecte ale instrumentului și nu sunt.
Aplicația s-a stricat în clipa în care i-am adăugat hostul
Acesta este pinning. Scoate hostul din lista SSL proxy — pe iOS repornește apoi VPN-ul ca tunelul să preia schimbarea — și aplicația își revine. Păstrează celelalte hosturi ale ei listate.
MITM All Hosts nu a deblocat aplicația
Nu avea cum. Acel comutator extinde ce hosturi fără pinning sunt decriptate; nu are niciun efect asupra unui host pe care aplicația îl fixează și face să eșueze și orice altă conexiune cu pinning de pe telefon. Oprește-l la loc.
Nici root-ul pe telefonul Android nu a ajutat
Root-ul mută certificatul în depozitul de sistem, ceea ce convinge aplicațiile care ignorau depozitul utilizatorului. Nu atinge o aplicație care compară certificatul cu propriul pin.
Un host de sistem Apple nu se decriptează niciodată pe proxy
Este pe lista de hosturi pe care proxy-ul nu le interceptează niciodată, pentru că decriptarea lui ar strica dispozitivul. Nimic de reparat; filtrul îl arată criptat prin design.
Întrebări
Busymate livrează o ocolire a pinning-ului?
Nu. Niciuna dintre căile de captură nu modifică aplicația țintă, nu injectează cod și nu îi alterează logica de încredere. Răspunsul onest pentru o aplicație nativă cu pinning este metadate plus ce dezvăluie hosturile ei fără pinning.
Cum deosebesc pinning-ul de un host pe care pur și simplu am uitat să-l listez?
Un host nelistat arată un lacăt închis și aplicația continuă să funcționeze. Un host cu pinning este listat, decriptarea a fost încercată, filtrul SSL pinning al feedului îl izolează, iar aplicația eșuează până îl scoți din listă.
Ce cale aleg pentru un flux de autentificare la un furnizor cu pinning?
Dacă furnizorul are autentificare web, rulează-o prin conectorul Chrome — TLS se încheie în browser și întregul lanț de redirecționări este înregistrat. Pentru o aplicație nativă nu există cale decriptată; capturează metadatele și apelurile fără pinning din jur.
Cunoaște limita
Restrânge decriptarea la hosturile pe care le testezi, lasă feedul să-ți spună care fac pinning și petrece sesiunea pe ce poate fi citit cu adevărat.