Sim-Sim Open oder Reverse Engineering Smart Intercom

Nach dem Lesen des Beitrags KrupnikasEs gab eine Idee, sich mit Mitmproxy zu befassen und zu sehen, wie das Backend der täglich verwendeten mobilen Anwendungen angeordnet ist. Die Wahl fiel auf die Intercom-Anwendung. Nach der Autorisierung können Sie Türen öffnen und Videoanrufe beantworten. Was dabei herauskam und welche Löcher ich gefunden habe, werde ich unter dem Schnitt erzählen.



Proxy-Einstellungen


Um den Verkehr zu analysieren, wird häufig ein Ansatz verwendet, der als Mann in der Mitte bezeichnet wird. Es besteht darin, dass bei einer Verbindung mit einem lokalen Netzwerk der Datenverkehr vom analysierten Gerät zuerst zu dem Computer geleitet wird, auf dem er entschlüsselt und analysiert wird, und dann zurück verschlüsselt und an den Server gesendet wird. Am beliebtesten zum Entschlüsseln des Datenverkehrs ist das Mitmproxy-Programm. Die Installation von Mitmproxy war keine große Sache.

Um den Datenverkehr von einem mobilen Gerät anzuzeigen, müssen Sie von Ihrem Telefon und Computer aus eine Verbindung zu Ihrem Heim-WLAN herstellen. Installieren Sie mitmproxy auf dem Computer und führen Sie es aus. Legen Sie auf dem Telefon in den WLAN-Einstellungen die lokale Adresse und den Computeranschluss als Proxyserver fest. Gehen Sie als Nächstes vom Telefon zu mitm.it und installieren Sie ein Zertifikat, mit dem Sie https-Anforderungen entschlüsseln können. Nach diesen Schritten wurden Anforderungen vom Browser sichtbar. Hurra! Der nächste Schritt war jedoch die Enttäuschung:


Eine Google- Suche führte zu einem offenen Problem auf dem Github . Es stellte sich heraus, dass Anwendungen ab API Level 24 Benutzerzertifikaten nicht mehr vertrauen. Glücklicherweise können Sie dies umgehen, indem Sie apk entpacken und AndroidManifest.xml die folgende Konfiguration hinzufügen:

<network-security-config>  
     <debug-overrides>  
          <trust-anchors>  
               <!-- Trust preinstalled CAs -->  
               <certificates src="system" />  
               <!-- Additionally trust user added CAs -->  
               <certificates src="user" />  
          </trust-anchors>  
     </debug-overrides>  
</network-security-config>

Darüber hinaus gibt es auf dem Github ein vorgefertigtes Skript , das dies automatisch ausführt . Also, laden Sie apk herunter, patchen Sie das Skript, setzen Sie den Befehl adb install und voila alles funktioniert.

Verkehrsanalyse


Wir sehen, dass Anfragen an Adressen des Formulars gestellt werden:

https://{intercom-company-url}/api/

Im Header werden zwei Parameter übergeben:
'api-version': '2',
'authorization''Bearer your.jwt.token’

Der erste Parameter ist die API-Version und der zweite ist das Autorisierungstoken. Für die Autorisierung wird ein JSON-Web-Token verwendet, das aus drei Teilen besteht: Header, Nutzlast und Signatur.
Dekodiere es mit dem Befehl:

pyjwt decode --no-verify your.jwt.token

Sehen Sie, dass Payload account_id und exp enthält. Das Feld exp entspricht dem Zeitpunkt, zu dem das Token erstellt wurde. Auf diese Weise können Sie Token für verschiedene Geräte aus einem Konto generieren.

Am interessantesten für uns sind Anfragen nach einer Liste der verfügbaren Gegensprechanlagen und zum Öffnen von Türen. Beim Senden einer Anfrage (ich habe Python und die Anforderungsbibliothek verwendet) an

https://{intercom-company-url}/api/customers/properties/{account_id}/intercoms 

Wir bekommen json mit einer Liste von Türtelefonen mit Feldern:

[
    {
        'id': ID,
        'mode': MODE, 
        'sip_account': {'ex_user': USER_ID, 'proxy': PROXY,  'password': PSWD}, 
        'video': [{'quality': 'low', 'source': 'rtsp://LINK }]
    }
]

In json id - Türsprecherkennung, Modus - welche Tür geöffnet werden kann (mögliche Werte sind one_door, left_door, right_door), sip account und ein Link zur Videoübertragung. Beeindruckend!

Unter Verwendung des Sitzungsinitiierungsprotokolls (sip) werden Videoanrufe über die Gegensprechanlage getätigt. Im Feld sip_account haben wir id'shniki und Passwörter für Gegensprechanlagen erhalten, auf die unser Konto Zugriff hat. Es funktioniert nicht, sie trotzdem anzurufen, da sie sich im internen Netzwerk befinden. Aber das Videofeld ist interessant. Es enthält einen externen Link zum Senden von Videos von der Kamera. Es reicht aus, vlc zu öffnen, den Link zu kopieren und auf der Türkamera rund um die Uhr zu schauen. Es ist nicht gut, solche Links zu zerstreuen!

Als nächstes werden wir herausfinden, wie man die Tür öffnet. Wenn Sie auf die Schaltfläche zum Öffnen der Tür klicken, sendet die Anwendung eine Abrufanforderung:

https://{intercom-company-url}/api/customers/intercoms/{intercom_id}/unlock?door=left_door&id={intercom_id}

Es stellte sich heraus, dass das Vorhandensein oder Fehlen des ID-Parameters nichts beeinflusst, aber die Tür ermöglicht im Fall eines Türsprechers mit zwei Türen, nicht nur Ihre eigene, sondern auch die nächste Tür Ihrer Wahl zu öffnen.

Sim-Sim offen!


Nachdem ich die API herausgefunden hatte, beschloss ich, etwas Nützliches zu tun. Das Ergebnis ist eine Android-Anwendung, die Sprachbefehle erkennt. Wenn vordefinierte Befehle wie "sim-sim open" erkannt werden, wird eine Anforderung zum Öffnen der entsprechenden Tür gesendet.

Ergebnisse


Eine intelligente Gegensprechanlage ist gut, aber eine sichere und intelligente Gegensprechanlage ist noch besser.

All Articles