Anleitung

Was Certificate Pinning weiterhin blockiert

Eine App, die ihr Zertifikat pinnt, lässt sich mit Busymate DevTools nicht entschlüsseln — nicht auf iOS, nicht auf Android, nicht über den Proxy. Hier steht genau, was jeder Aufzeichnungsweg sehen kann und was nicht, wie du einen gepinnten Host erkennst und was trotzdem nützlich bleibt.

Jedes Aufzeichnungstool, das HTTPS entschlüsselt, arbeitet gleich: Es legt dem Client ein selbst signiertes Zertifikat vor, und der Client akzeptiert es, weil er der signierenden Stelle vertraut. Certificate Pinning bedeutet, dass die App nur einem bestimmten Zertifikat oder Schlüssel vertraut und sonst keinem. Trifft eine gepinnte App auf das Ersatzzertifikat, verweigert sie schlicht die Verbindung. Das ist eine Eigenschaft der App, kein Schalter im Tool, und kein Aufzeichnungsweg, den Busymate ausliefert, hebelt sie aus.

Ein Tool, das das verschweigt, kostet dich eine Forschungssitzung an einem Ziel, das nie zu entschlüsseln war. Deshalb ist diese Anleitung eine Landkarte und kein Workaround: was Aufzeichnung auf dem iPhone, die Android-App, der Desktop-Proxy, ein gerootetes Farm-Smartphone und der Chrome-Connector jeweils gegen einen gepinnten Host liefern, wie der Feed ihn markiert, und welche Teile der Arbeit trotzdem erledigt werden.

Bevor du anfängst

Was du brauchst

Diese Anleitung setzt voraus, dass bereits über mindestens einen Aufzeichnungsweg Traffic in deinem Dashboard ankommt.

  • Ein bereits gekoppeltes und aufzeichnendes Smartphone oder einen Client — die iPhone- oder Android-Anleitung bringt dich dorthin.

  • Die Hostnamen der App, die du untersuchst, auf der SSL-Proxy-Liste, damit die Entschlüsselung wenigstens versucht wird.

  • Den Dashboard-Feed offen, mit seinem Inspektionsfilter in Reichweite.

  • Die Berechtigung, die App zu untersuchen: Diese Techniken sind für Traffic von Apps und Sites, die dir gehören oder die du debuggen darfst.

Schritt für Schritt

Der Reihe nach

Geh die Wege der Reihe nach durch — jeder engt ein, was dir ein gepinnter Host noch verraten kann.

  1. 01

    Wisse, auf welchen Vertrauensspeicher dein Aufzeichnungsweg baut

    Auf iOS hängt die Entschlüsselung davon ab, dass das Busymate-Profil installiert ist und in den Einstellungen volles Vertrauen hat — danach vertraut jede App auf dem Smartphone dem Zertifikat, das die App vorlegt, außer Apps, die pinnen. Auf Android gibt es zwei Speicher: den Nutzerspeicher, den seit Android 7.0 nur Apps beachten, die sich ausdrücklich dafür entscheiden, und den Systemspeicher, den jede App beachtet, in den aber nur ein gerootetes Gerät schreiben kann. Der Desktop-Proxy nutzt das Vertrauen, das der Client-Rechner oder -Browser seiner erzeugten Stelle entgegenbringt.

    Pinning steht über allen dreien. Eine App, die pinnt, lehnt das Ersatzzertifikat ab, aus welchem Speicher es auch kommt — ein Zertifikat in einen stärkeren Speicher zu verschieben hilft gegen einen gepinnten Host also nie. Es hilft nur gegen Apps, die den Nutzerspeicher verweigert haben.

  2. 02

    Einen gepinnten Host im Feed erkennen

    Ein Host, den du nicht zur Entschlüsselung gelistet hast, zeigt ein geschlossenes Schloss mit nur Hostname und Request-Zähler — das ist Absicht, kein Pinning. Ein gepinnter Host sieht anders aus: Er steht auf deiner Liste, die Entschlüsselung wurde versucht, und die Verbindung ist gescheitert oder die App hat es erneut probiert und aufgegeben. Der Inspektionsfilter des Dashboard-Feeds hat drei Stufen — nur entschlüsselt, nur verschlüsselt, nur SSL-gepinnt — und die letzte isoliert genau diese Zeilen.

    Das andere Merkmal ist das Verhalten: Die App funktioniert für diesen Host nicht mehr, sobald er entschlüsselt wird, und wieder, sobald du den Host von der Liste nimmst. Trifft beides zu, hast du eine gepinnte Verbindung gefunden.

  3. 03

    Aufzeichnung auf dem iPhone: Metadaten, nie der Body

    Die iOS-App zeichnet systemweit auf, über WLAN und Mobilfunk, und entschlüsselt die Hosts, die du listest. Gegen eine gepinnte App erfasst sie weiterhin jede Verbindung — Host, Timing, Zahl und Größe der Requests, den aktiven Verbindungsmodus —, kann aber weder Header noch Body liefern, und kein Schalter ändert das. MITM All Hosts einzuschalten entschlüsselt jeden nicht gepinnten Host; bei einem gepinnten tut es nichts, außer ihn kaputt zu machen.

    Praktisch nimmst du den gepinnten Host von der Liste, damit die App weiter funktioniert, lässt ihre übrigen Hosts drauf und liest, was die nicht gepinnten Endpunkte preisgeben. Viele Apps pinnen nur ihren Authentifizierungs- oder Zahlungs-Host und lassen den Rest offen.

  4. 04

    Android: ohne Root, mit Root, und wo Pinning sitzt

    Auf einem Android-Smartphone ohne Root liegt das von der App erzeugte Zertifikat im Nutzerspeicher, also entschlüsseln sich nur deine eigenen Debug-Builds und andere Clients, die sich dafür entschieden haben; jede andere App wird als Metadaten erfasst. Auf einem gerooteten Gerät lässt sich das Zertifikat in den Systemspeicher installieren, und HTTPS wird systemweit entschlüsselbar — bis auf das Pinning einzelner Apps. Genau deshalb betreibt die Phone-Farm ihre Android-Geräte auf dieser gerooteten Stufe.

    Root verwandelt also eine Klasse undurchsichtiger Apps in lesbare — die, die bloß den Nutzerspeicher ignoriert haben — und lässt die gepinnte Klasse unberührt. Busymate behauptet nie eine systemweite Entschlüsselung auf einem Gerät ohne Root und nie, dass Pinning auf einem gerooteten Gerät überwunden wäre.

  5. 05

    Der Proxy: dieselbe Grenze, plus Hosts, die er absichtlich verweigert

    Der Desktop-Proxy hat zum Pinning dasselbe Verhältnis wie die Smartphone-Apps: Ein gepinnter Client lehnt sein erzeugtes Zertifikat ab und die Verbindung scheitert. Zusätzlich führt er eine kurze Liste von Hosts, die er nie abfängt, egal was deine SSL-Proxy-Einstellungen sagen — Apples eigene PKI- und Sperrlisten-Endpunkte, die Zertifikatsstatus-Responder in Apples Kette und Busymates eigenes Backend —, weil ein Abfangen das Gerät oder die Live-Verbindung des Dashboards brechen würde. Sie passieren als rohe Tunnel, und das ist Absicht, keine Fehlkonfiguration.

    Hosts, die der Proxy absichtlich unangetastet durchlässt
    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

    Der Chrome-Connector: Pinning spielt keine Rolle

    Es gibt einen Aufzeichnungsweg, für den Pinning irrelevant ist. Der Kommandozeilen-Connector startet eine Chrome-Instanz und liest ihren Traffic über das DevTools Protocol, auf der Browser-Seite von TLS. Die verschlüsselte Verbindung zwischen Chrome und Server wird nie angefasst — kein Ersatzzertifikat, das abgelehnt werden könnte, nichts zu installieren, nichts, was Pinning erkennen könnte. Login-Flows bei Anbietern, deren gepinnte Zertifikate ein Proxy nicht öffnen kann, werden Ende zu Ende aufgezeichnet, Redirects und Tokens inklusive.

    Der Preis ist der Umfang: Er deckt ab, was in diesem Chrome läuft, keine native App. Hat der Flow, um den es dir geht, eine Web-Variante, ist das der Weg, der ihn vollständig sieht.

  7. 07

    Nutze, was ein gepinnter Host dir trotzdem gibt

    Metadaten sind nicht nichts. Du siehst weiterhin, wann die App mit dem gepinnten Host spricht, wie oft, wie groß die Austausche sind und wie lange sie dauern, und kannst das mit den entschlüsselten Aufrufen drumherum korrelieren. Blockregeln matchen auf einem verschlüsselten Host weiterhin auf Host-Ebene — der Pfad ist unsichtbar, aber du kannst die App so tun lassen, als wäre dieser Endpunkt unerreichbar, was oft genau der Fehlerfall ist, den du testen wolltest. Pausen lassen den Host den Proxy komplett umgehen, damit die App weiterläuft, während du alles andere untersuchst.

    Und jede Aktion steht im Audit-Trail, sodass eine Forschungssitzung eine Spur hinterlässt: was entschlüsselt, was blockiert und was in Ruhe gelassen wurde.

Fehlerbehebung

Was schief gehen kann

Die teuersten Fehler sind die, die wie Tool-Bugs aussehen und keine sind.

  • Die App ging kaputt, sobald ich ihren Host hinzugefügt habe

    Das ist Pinning. Entferne den Host von der SSL-Proxy-Liste — auf iOS danach das VPN neu starten, damit der Tunnel die Änderung übernimmt — und die App erholt sich. Lass ihre anderen Hosts gelistet.

  • MITM All Hosts hat die App nicht freigeschaltet

    Das konnte es nie. Dieser Schalter weitet aus, welche nicht gepinnten Hosts entschlüsselt werden; auf einen von der App gepinnten Host hat er keine Wirkung, und er lässt jede andere gepinnte Verbindung auf dem Smartphone ebenfalls scheitern. Schalte ihn wieder aus.

  • Das Android-Smartphone zu rooten hat auch nicht geholfen

    Root verschiebt das Zertifikat in den Systemspeicher, was Apps überzeugt, die den Nutzerspeicher ignoriert haben. Eine App, die das Zertifikat mit ihrem eigenen Pin vergleicht, berührt das nicht.

  • Ein Apple-System-Host wird auf dem Proxy nie entschlüsselt

    Er steht auf der Nie-abfangen-Liste des Proxys, weil ihn zu entschlüsseln das Gerät brechen würde. Nichts zu beheben; der Filter zeigt ihn absichtlich als verschlüsselt.

FAQ

Häufige Fragen

Liefert Busymate einen Pinning-Bypass?

Nein. Keiner der Aufzeichnungswege verändert die Ziel-App, injiziert Code oder patcht ihre Vertrauenslogik. Die ehrliche Antwort für eine gepinnte native App sind Metadaten plus das, was ihre nicht gepinnten Hosts preisgeben.

Wie unterscheide ich Pinning von einem Host, den ich nur vergessen habe zu listen?

Ein ungelisteter Host zeigt ein geschlossenes Schloss und die App funktioniert weiter. Ein gepinnter Host ist gelistet, die Entschlüsselung wurde versucht, der SSL-gepinnt-Filter des Feeds isoliert ihn, und die App scheitert, bis du ihn von der Liste nimmst.

Welchen Weg wähle ich für einen Authentifizierungs-Flow bei einem gepinnten Anbieter?

Hat der Anbieter einen Web-Login, lass ihn über den Chrome-Connector laufen — TLS endet im Browser und die gesamte Redirect-Kette wird aufgezeichnet. Für eine native App gibt es keinen entschlüsselten Weg; erfasse die Metadaten und die nicht gepinnten Aufrufe drumherum.

Kenne die Grenze, bevor du anfängst

Beschränke die Entschlüsselung auf die Hosts, die du testest, lass dir vom Feed sagen, welche pinnen, und verbring die Sitzung mit dem, was sich wirklich lesen lässt.

Ask your mate