Sim-sim membuka atau membalikkan rekayasa interkom pintar

Setelah membaca posting KrupnikAda ide untuk menangani mitmproxy dan melihat bagaimana backend dari aplikasi mobile yang digunakan sehari-hari diatur. Pilihan jatuh pada aplikasi interkom. Setelah otorisasi, ini memungkinkan Anda untuk membuka pintu dan menjawab panggilan video. Apa yang terjadi dengan ini dan lubang apa yang berhasil saya temukan akan saya ceritakan di bawah luka.



Pengaturan proxy


Untuk menganalisis lalu lintas, pendekatan yang disebut pria di tengah sering digunakan. Terdiri dari fakta bahwa ketika terhubung ke jaringan lokal, lalu lintas dari perangkat yang dianalisis pertama-tama pergi ke komputer yang didekripsi dan dianalisis, dan kemudian dienkripsi kembali dan dikirim ke server. Untuk mendekripsi lalu lintas, yang paling populer adalah program mitmproxy. Menginstal mitmproxy bukan masalah besar.

Untuk melihat lalu lintas dari perangkat seluler, Anda harus terhubung ke wifi rumah Anda dari ponsel dan komputer. Instal mitmproxy di komputer dan jalankan. Pada ponsel dalam pengaturan wifi, atur alamat lokal dan port komputer sebagai server proxy. Selanjutnya, buka mitm.it dari ponsel dan instal sertifikat yang memungkinkan Anda mendekripsi permintaan https. Setelah langkah-langkah ini, permintaan dari browser menjadi terlihat. Hore! Namun, langkah selanjutnya adalah kekecewaan:


Pencarian google menyebabkan masalah terbuka di github . Ternyata, mulai dengan API Level 24, aplikasi tidak lagi mempercayai sertifikat pengguna. Untungnya, Anda dapat menyiasatinya dengan membuka ritsleting apk dan menambahkan konfigurasi berikut ke 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>

Selain itu, ada skrip siap pakai di github yang melakukan ini secara otomatis. Jadi, unduh apk, skrip tambalan, atur adb install command dan voila semuanya berfungsi.

Analisis lalu lintas


Kami melihat bahwa permintaan dilakukan ke alamat formulir:

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

Dua parameter dilewatkan di header:
'api-version': '2',
'authorization''Bearer your.jwt.token’

Parameter pertama adalah versi api, dan yang kedua adalah token otorisasi. Untuk otorisasi, token web json digunakan, yang terdiri dari tiga bagian: header, payload, dan tanda tangan.
Dekode dengan perintah:

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

lihat bahwa payload mengandung account_id dan exp. Bidang exp sesuai dengan waktu token dibuat, yang memungkinkan Anda untuk menghasilkan token untuk perangkat yang berbeda dari satu akun.

Yang paling menarik bagi kami adalah permintaan daftar interkom yang tersedia dan pintu pembuka. Saat mengirim permintaan (saya menggunakan python dan perpustakaan permintaan) ke

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

Kami mendapatkan json yang berisi daftar doorphones dengan bidang:

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

Di json id - doorphone identifier, mode - pintu mana yang dapat dibuka (nilai yang mungkin adalah one_door, left_door, right_door), akun sip dan tautan ke siaran video. Wow!

Menggunakan protokol inisiasi sesi (sip), panggilan video dilakukan melalui interkom. Di bidang sip_account kami menerima id'shniki dan kata sandi untuk interkom yang aksesnya dimiliki akun kami. Memanggil mereka sama saja tidak berfungsi, karena mereka ada di jaringan internal. Tapi bidang videonya menarik. Ini berisi tautan eksternal untuk menyiarkan video dari kamera. Sudah cukup untuk membuka vlc, menyalin tautan dan Anda dapat melihat-lihat jam di kamera doorphone. Tidak baik membuang tautan seperti itu!

Selanjutnya, kita akan mencari cara untuk membuka pintu. Ketika Anda mengklik tombol buka pintu, aplikasi mengirimkan permintaan get:

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

Ternyata ada atau tidaknya parameter id tidak mempengaruhi apa-apa, tetapi pintu memungkinkan dalam kasus doorphone dengan dua pintu untuk membuka tidak hanya Anda sendiri, tetapi juga pintu berikutnya pilihan Anda.

Sim-sim terbuka!


Setelah menemukan api, saya memutuskan untuk melakukan sesuatu yang bermanfaat. Hasilnya adalah aplikasi Android yang mengenali perintah suara, dan ketika itu mengenali perintah yang sudah ditentukan sebelumnya seperti β€œsim-sim open,” ia mengirimkan permintaan untuk membuka pintu yang sesuai.

temuan


Interkom pintar itu baik, tetapi interkom yang aman dan pintar bahkan lebih baik.

All Articles