Pemberitahuan push aman: dari teori ke praktik

Halo, Habr!

Hari ini saya akan berbicara tentang apa yang telah saya dan kolega saya lakukan selama beberapa bulan: tentang pemberitahuan push untuk pesan instan seluler. Seperti yang saya katakan, dalam aplikasi kita penekanan utamanya adalah pada keamanan. Oleh karena itu, kami mengetahui apakah pemberitahuan push memiliki "kelemahan" dan jika demikian, bagaimana kami dapat menaikkannya untuk menambahkan opsi yang bermanfaat ini ke layanan kami.

Saya menerbitkan terjemahan artikel kami dengan Medium dengan beberapa tambahan dari diri saya. Itu berisi hasil dari "penyelidikan" dan sebuah cerita tentang bagaimana masalah itu diselesaikan.

Jelajahi materiel


Dalam model klasik, push notification membuat messenger rentan terhadap serangan MITM (Man-in-the-middle, Man in the Middle). Misalnya, dengan Google, Microsoft, dan dalam versi iMessage yang lama, aplikasi mengirimkan kunci enkripsi ke server Apple - pengguna diautentikasi di server dan header pesan (atau kontennya) didekripsi.



Akibatnya, ada peluang untuk membaca korespondensi dengan mendapatkan akses ke server push notification. Ini berarti bahwa enkripsi korespondensi tidak berguna: pemberitahuan push masih akan meninggalkan peluang untuk dibaca oleh pihak ketiga. Penulis artikel β€œEnkripsi Hikmat ” di Xaker.ru, yang membahas metode enkripsi pesan, membahas kemungkinan ini secara lebih rinci.

Jika Anda berpikir bahwa server Apple dan Google tidak akan membiarkan kebocoran kunci enkripsi pengguna 100%, pertimbangkan bahwa karyawan mereka memiliki akses ke sana. Dan karyawannya adalah manusia.
Dengan semua kerentanan mendorong, banyak utusan "aman", termasuk Signal dan Telegram, menggunakannya. Jika tidak, pengguna harus "secara manual" memonitor pesan baru dengan terus memasukkan aplikasi. Yang sangat merepotkan, dan rasul yang bersaing akan mendapatkan keuntungan.

Paranoia dan akal sehat


Dalam proyek kami, kami memahami masalah ini beberapa bulan yang lalu. Kami perlu membuat pemberitahuan push sebagai opsi agar kompetitif. Tetapi pada saat yang sama, jangan membuat lubang di keamanan, karena setiap kebocoran data akan merusak kredibilitas proyek.

Namun, kami sudah memiliki keuntungan penting: messenger kami terdesentralisasi (data disimpan di blockchain), sementara karyawan tidak memiliki akses ke akun. Hanya pengguna yang memiliki kunci enkripsi, dan kunci publik lawan bicara tersedia di blockchain untuk melindungi terhadap serangan MITM.

Dalam versi pertama dari push, kami memutuskan untuk memainkannya sebanyak mungkin dan tidak mengirimkan teks pesan sama sekali. Layanan push yang diterima dari node bukan teks pesan, tetapi hanya sinyal tentang fakta penerimaannya. Oleh karena itu, pengguna melihat pemberitahuan "Pesan baru telah tiba." Itu mungkin untuk membacanya hanya di dalam kurir.


Cara kerjanya: video .

Setelah itu, kami mengetahui bahwa pemberitahuan versi terbaru dari Apple memiliki fitur keamanan baru. Mereka merilis UNNotificationServiceExtension, yang memungkinkan pengembang mengirim data notifikasi sepenuhnya terenkripsi melalui APNS. Kemudian aplikasi pada perangkat pengguna akhir mendekripsi (atau mengunduh data tambahan) dan menampilkan pemberitahuan. Kami menganggapnya sebagai dasar dari versi push yang kedua.

Sekarang kami telah mengembangkan versi notifikasi push untuk iOS, yang memungkinkan Anda untuk menampilkan teks pesan tanpa risiko keamanan. Dalam konsep baru, logikanya terlihat seperti ini:

  • Layanan push mengirimkan pemberitahuan push dengan nomor transaksi (pesan terenkripsi bisa sangat besar, dan ukuran pemberitahuan sangat terbatas)
  • Setelah menerima pemberitahuan, perangkat memulai NotificationServiceExtension kami - aplikasi mikro yang meminta transaksi dari node dengan id, mendekripsi menggunakan kata sandi yang disimpan, dan memberi sistem pemberitahuan baru. Frasa sandi disimpan di gudang yang aman.
  • Sistem menampilkan pemberitahuan dengan pesan atau terjemahan yang didekripsi.
  • Tombol tidak pergi ke mana pun, seperti halnya pesan teks biasa. Layanan push tidak memiliki kemampuan untuk mendekripsi pesan.



Kami menganggap versi ini berfungsi dan menerapkannya dalam pembaruan terbaru aplikasi iOS.
Mereka yang tertarik pada sisi teknis dapat melihat kode sumber: github.com/Adamant-im/adamant-notificationService .

Source: https://habr.com/ru/post/id456902/


All Articles