Interphone intelligent d'ingénierie ouverte ou inversée SIM-SIM

AprÚs avoir lu le post KrupnikasIl y avait une idée pour gérer mitmproxy et voir comment le backend des applications mobiles utilisées quotidiennement est organisé. Le choix s'est porté sur l'application interphone. AprÚs autorisation, il vous permet d'ouvrir les portes et de répondre aux appels vidéo. Ce qui en est ressorti et quels trous j'ai réussi à trouver, je le dirai sous la coupe.



ParamĂštres du proxy


Pour analyser le trafic, une approche appelée homme au milieu est souvent utilisée. Il consiste en ce que lorsqu'il est connecté à un réseau local, le trafic provenant de l'appareil analysé va d'abord vers l'ordinateur sur lequel il est décrypté et analysé, puis il est rechiffré et envoyé au serveur. Pour décrypter le trafic, le plus populaire est le programme mitmproxy. L'installation de mitmproxy n'était pas un gros problÚme.

Pour afficher le trafic depuis un appareil mobile, vous devez vous connecter Ă  votre wifi domestique depuis votre tĂ©lĂ©phone et votre ordinateur. Installez mitmproxy sur l'ordinateur et exĂ©cutez. Sur le tĂ©lĂ©phone dans les paramĂštres wifi, dĂ©finissez l'adresse locale et le port de l'ordinateur en tant que serveur proxy. Ensuite, accĂ©dez Ă  mitm.it depuis le tĂ©lĂ©phone et installez un certificat qui vous permet de dĂ©crypter les requĂȘtes https. AprĂšs ces Ă©tapes, les demandes du navigateur sont devenues visibles. Hourra! Cependant, l'Ă©tape suivante a Ă©tĂ© la dĂ©ception:


Une recherche sur Google a conduit à un problÚme ouvert sur le github . Il s'est avéré qu'à partir de l'API niveau 24, les applications ne font plus confiance aux certificats utilisateur. Heureusement, vous pouvez contourner ce problÚme en décompressant apk et en ajoutant la configuration suivante à AndroidManifest.xml:

<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>

De plus, il y a un script prĂȘt Ă  l'emploi sur le github qui le fait automatiquement. Alors, tĂ©lĂ©chargez apk, script de patch, installez adb install et le tour est jouĂ©.

Analyse du trafic


Nous constatons que les demandes sont adressées aux adresses du formulaire:

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

Deux paramĂštres sont passĂ©s dans l'en-tĂȘte:
'api-version': '2',
'authorization''Bearer your.jwt.token’

Le premier paramĂštre est la version api et le second est le jeton d'autorisation. Pour l'autorisation, un jeton Web json est utilisĂ©, qui se compose de trois parties: l'en-tĂȘte, la charge utile et la signature.
DĂ©codez-le avec la commande:

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

voir que la charge utile contient account_id et exp. Le champ exp correspond à l'heure de création du jeton, ce qui vous permet de générer des jetons pour différents appareils à partir d'un seul compte.

Les plus intĂ©ressantes pour nous sont les demandes de liste des interphones disponibles et des portes qui s'ouvrent. Lors de l'envoi d'une requĂȘte (j'ai utilisĂ© python et la bibliothĂšque de requĂȘtes) Ă 

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

Nous obtenons json contenant une liste d'interphones avec des champs:

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

Dans json id - identifiant d'interphone, mode - quelle porte peut ĂȘtre ouverte (les valeurs possibles sont one_door, left_door, right_door), un compte SIP et un lien vers la diffusion vidĂ©o. Hou la la!

En utilisant le protocole d'ouverture de session (SIP), les appels vidĂ©o sont effectuĂ©s via l'interphone. Dans le champ sip_account, nous avons reçu id'shniki et les mots de passe pour les interphones auxquels notre compte a accĂšs. Les appeler tout de mĂȘme ne fonctionne pas, car ils sont sur le rĂ©seau interne. Mais le champ vidĂ©o est intĂ©ressant. Il contient un lien externe pour diffuser la vidĂ©o de la camĂ©ra. Il suffit d'ouvrir vlc, de copier le lien et vous pouvez regarder autour de l'horloge sur la camĂ©ra de l'interphone. Ce n'est pas bon de disperser de tels liens!

Ensuite, nous découvrirons comment ouvrir la porte. Lorsque vous cliquez sur le bouton d'ouverture de la porte, l'application envoie une demande d'obtention:

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

Il s'est avéré que la présence ou l'absence du paramÚtre id n'affecte rien, mais la porte permet dans le cas d'un interphone à deux portes d'ouvrir non seulement la vÎtre, mais aussi la porte suivante de votre choix.

Sim-sim ouvert!


AprÚs avoir compris l'api, j'ai décidé de faire quelque chose d'utile. Le résultat est une application Android qui reconnaßt les commandes vocales et lorsqu'elle reconnaßt des commandes prédéfinies comme «sim-sim open», elle envoie une demande d'ouverture de la porte correspondante.

résultats


Un interphone intelligent est bien, mais un interphone sûr et intelligent est encore mieux.

All Articles