Guida

Cosa blocca ancora il certificate pinning

Un'app che fissa il proprio certificato non verrà decifrata da Busymate DevTools — né su iOS, né su Android, né tramite il proxy. Ecco esattamente cosa ogni via di cattura può e non può vedere, come riconoscere un host con pinning e cosa resta utile.

Ogni strumento di cattura che decifra HTTPS funziona allo stesso modo: presenta al client un certificato firmato da sé, e il client lo accetta perché si fida dell'autorità che lo ha firmato. Il certificate pinning è l'app che dichiara di fidarsi di un certificato o di una chiave specifici e di nient'altro. Quando un'app con pinning incontra il certificato sostitutivo, rifiuta semplicemente la connessione. È una proprietà dell'app, non un interruttore nello strumento, e nessuna via di cattura offerta da Busymate la aggira.

Uno strumento che tace su questo ti fa sprecare una sessione di ricerca su un bersaglio che non sarebbe mai stato decifrato. Per questo la guida è una mappa, non una scorciatoia: cosa consegnano la cattura su iPhone, l'app Android, il proxy desktop, un telefono con root della farm e il connettore Chrome di fronte a un host con pinning, come lo etichetta il feed, e quali parti del lavoro si fanno comunque.

Prima di iniziare

Cosa ti serve

Questa guida presuppone che il traffico stia già arrivando alla tua dashboard da almeno una via di cattura.

  • Un telefono o un client già associato e in cattura — la guida per iPhone o Android ti porta fin lì.

  • I nomi host dell'app che stai indagando, aggiunti alla lista SSL proxy così che la decifratura venga almeno tentata.

  • Il feed della dashboard aperto, con il filtro di ispezione a portata di mano.

  • Il permesso di ispezionare l'app: queste tecniche sono per il traffico di app e siti che possiedi o che sei autorizzato a debuggare.

Passo dopo passo

Fallo in ordine

Percorri le vie in ordine — ognuna restringe ciò che un host con pinning può ancora raccontarti.

  1. 01

    Sappi da quale archivio di fiducia dipende la tua via di cattura

    Su iOS la decifratura dipende dal profilo Busymate installato e con fiducia completa nelle Impostazioni — da lì ogni app sul telefono si fida del certificato presentato dall'app, tranne quelle che fanno pinning. Su Android ci sono due archivi: quello utente, che da Android 7.0 rispettano solo le app che lo consentono esplicitamente, e quello di sistema, che rispettano tutte le app ma in cui può scrivere solo un dispositivo con root. Il proxy desktop usa la fiducia che la macchina o il browser client ripongono nella sua autorità generata.

    Il pinning sta sopra tutti e tre. Un'app che fa pinning rifiuta il certificato sostitutivo da qualunque archivio provenga, quindi spostare un certificato in un archivio più forte non aiuta mai contro un host con pinning. Aiuta solo contro le app che rifiutavano l'archivio utente.

  2. 02

    Riconosci un host con pinning nel feed

    Un host che non hai messo in lista per la decifratura mostra un lucchetto chiuso con solo il nome e un contatore di richieste — è voluto, non è pinning. Un host con pinning ha un aspetto diverso: è nella tua lista, la decifratura è stata tentata, e la connessione è fallita oppure l'app ha riprovato e ha rinunciato. Il filtro di ispezione del feed della dashboard ha tre opzioni — solo decifrati, solo cifrati e solo con SSL pinning — e l'ultima isola esattamente quelle righe.

    L'altro segnale è comportamentale: l'app smette di funzionare per quell'host nel momento in cui viene decifrato, e ricomincia nel momento in cui togli l'host dalla lista. Se valgono entrambe, hai trovato una connessione con pinning.

  3. 03

    Cattura su iPhone: metadati, mai il body

    L'app iOS cattura a livello di sistema, via Wi-Fi e rete cellulare, e decifra gli host che elenchi. Di fronte a un'app con pinning registra comunque ogni connessione — l'host, i tempi, il numero e la dimensione delle richieste, la modalità di connessione in uso — ma non può produrre header né body, e nessun interruttore lo cambia. Attivare MITM All Hosts decifra ogni host senza pinning; su uno con pinning non fa nulla se non romperlo.

    La mossa pratica è togliere l'host con pinning dalla lista così che l'app continui a funzionare, tenere in lista gli altri host dell'app e leggere ciò che rivelano gli endpoint senza pinning. Molte app fanno pinning solo sull'host di autenticazione o di pagamento e lasciano aperto il resto.

  4. 04

    Android: senza root, con root, e dove sta il pinning

    Su un telefono Android senza root il certificato generato dall'app vive nell'archivio utente, quindi si decifrano solo le tue build di debug e gli altri client che lo consentono; ogni altra app viene registrata come metadati. Su un dispositivo con root il certificato può essere installato nell'archivio di sistema, e l'HTTPS diventa decifrabile a livello di sistema — tranne il pinning delle singole app. La farm di telefoni esegue i suoi dispositivi Android proprio a quel livello con root per questo motivo.

    Il root trasforma quindi una classe di app opache in leggibili — quelle che ignoravano semplicemente l'archivio utente — e lascia intatta la classe con pinning. Busymate non dichiara mai una decifratura a livello di sistema su un dispositivo senza root, né dichiara di superare il pinning su uno con root.

  5. 05

    Il proxy: lo stesso limite, più gli host che rifiuta di proposito

    Il proxy desktop ha con il pinning lo stesso rapporto delle app per telefono: un client con pinning rifiuta il certificato generato e la connessione fallisce. Porta inoltre una breve lista di host che non intercetta mai, qualunque cosa dicano le tue impostazioni SSL proxy — la PKI e gli endpoint di revoca di Apple, i responder di stato dei certificati usati dalla catena di Apple, e il backend stesso di Busymate — perché intercettarli romperebbe il dispositivo o la connessione live della dashboard. Passano come tunnel grezzi, ed è intenzionale, non una configurazione errata.

    Host che il proxy lascia passare intatti per scelta
    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
  6. 06

    Il connettore Chrome: il pinning non si applica

    C'è una via di cattura in cui il pinning è irrilevante. Il connettore da riga di comando avvia un'istanza di Chrome e ne legge il traffico tramite il DevTools Protocol, dal lato browser del TLS. La connessione cifrata tra Chrome e il server non viene mai toccata — non c'è alcun certificato sostitutivo da rifiutare, nulla da installare e nulla che il pinning possa rilevare. I flussi di login su provider i cui certificati fissati un proxy non può aprire vengono registrati dall'inizio alla fine, redirect e token inclusi.

    Il prezzo è la portata: copre ciò che gira dentro quel Chrome, non un'app nativa. Se il flusso che ti interessa ha una versione web, questa è la via che lo vede per intero.

  7. 07

    Usa ciò che un host con pinning ti dà comunque

    I metadati non sono niente. Vedi comunque quando l'app parla con l'host con pinning, quanto spesso, quanto pesano gli scambi e quanto durano, e puoi correlarli con le chiamate decifrate intorno. Le regole di blocco corrispondono ancora a livello di host su un host cifrato — il percorso è invisibile, ma puoi far comportare l'app come se quell'endpoint fosse irraggiungibile, che spesso è esattamente la modalità di errore che volevi testare. Le pause permettono all'host di bypassare del tutto il proxy così l'app continua a funzionare mentre ispezioni tutto il resto.

    E ogni azione che hai compiuto è nel registro di audit, così una sessione di ricerca lascia traccia di cosa è stato decifrato, cosa bloccato e cosa lasciato stare.

Risoluzione dei problemi

Cosa può andare storto

Gli errori che costano più tempo sono quelli che sembrano bug dello strumento e non lo sono.

  • L'app si è rotta appena ho aggiunto il suo host

    È pinning. Rimuovi l'host dalla lista SSL proxy — su iOS riavvia poi la VPN così il tunnel recepisce la modifica — e l'app si riprende. Tieni in lista gli altri suoi host.

  • MITM All Hosts non ha sbloccato l'app

    Non avrebbe mai potuto. Quell'interruttore allarga quali host senza pinning vengono decifrati; non ha effetto su un host che l'app fissa, e fa fallire anche ogni altra connessione con pinning sul telefono. Rispegnilo.

  • Nemmeno il root sul telefono Android ha aiutato

    Il root sposta il certificato nell'archivio di sistema, il che convince le app che ignoravano l'archivio utente. Non tocca un'app che confronta il certificato con il proprio pin.

  • Un host di sistema Apple non viene mai decifrato sul proxy

    È nella lista degli host che il proxy non intercetta mai, perché decifrarlo romperebbe il dispositivo. Nulla da sistemare; il filtro lo mostra come cifrato per scelta.

FAQ

Le domande più frequenti

Busymate offre un modo per aggirare il pinning?

No. Nessuna via di cattura modifica l'app bersaglio, inietta codice o altera la sua logica di fiducia. La risposta onesta per un'app nativa con pinning sono i metadati più ciò che rivelano i suoi host senza pinning.

Come distinguo il pinning da un host che ho semplicemente dimenticato di mettere in lista?

Un host non in lista mostra un lucchetto chiuso e l'app continua a funzionare. Un host con pinning è in lista, la decifratura è stata tentata, il filtro SSL pinning del feed lo isola e l'app fallisce finché non lo togli.

Quale via scelgo per un flusso di autenticazione su un provider con pinning?

Se il provider ha un login web, passalo dal connettore Chrome — il TLS termina dentro il browser e l'intera catena di redirect viene registrata. Per un'app nativa non esiste una via decifrata; cattura i metadati e le chiamate senza pinning intorno.

Conosci il limite prima di iniziare

Limita la decifratura agli host che stai testando, lascia che sia il feed a dirti quali fanno pinning e dedica la sessione a ciò che si può davvero leggere.

Ask your mate