Pemberitahuan push yang aman: dari teori hingga praktik

Hei Habr!

Hari ini saya akan berbicara tentang apa yang telah saya dan rekan-rekan saya lakukan selama beberapa bulan sekarang: pemberitahuan push untuk pesan instan seluler. Seperti yang sudah saya katakan, dalam aplikasi kita penekanan utamanya adalah pada keamanan. Oleh karena itu, kami mengetahui apakah pemberitahuan push memiliki “titik lemah” dan, jika demikian, bagaimana kami dapat menyamakannya untuk menambahkan opsi berguna ini ke layanan kami.

Saya menerbitkan terjemahan kami artikel dari Medium dengan beberapa tambahan kecil dari saya sendiri. Berisi hasil “investigasi” dan cerita tentang bagaimana masalah tersebut diselesaikan.

Kami memeriksa materinya

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

Pemberitahuan push yang aman: dari teori hingga praktik

Hasilnya, ada peluang untuk membaca korespondensi dengan mendapatkan akses ke server notifikasi push. Artinya enkripsi korespondensi apa pun tidak ada gunanya: pemberitahuan push akan tetap meninggalkan kemungkinan dibaca oleh pihak ketiga. Penulis artikel membahas kemungkinan ini secara lebih rinci. “Enkripsi dengan benar” di Xaker.ru, didedikasikan untuk metode mengenkripsi pesan.

Jika menurut Anda server Apple dan Google 100% aman terhadap kebocoran kunci enkripsi pengguna, pertimbangkan fakta bahwa karyawan mereka memiliki akses ke server tersebut. Dan karyawan adalah manusia.
Terlepas dari semua kerentanan pemberitahuan push, banyak pengirim pesan instan “aman”, termasuk Signal dan Telegram, menggunakannya. Jika tidak, pengguna harus memantau pesan baru secara “manual” dengan terus-menerus masuk ke aplikasi. Hal ini sangat merepotkan, dan pengirim pesan yang bersaing akan mendapatkan keuntungan.

Paranoia dan akal sehat


Dalam proyek kami, kami membahas masalah ini dengan cermat beberapa bulan yang lalu. Kami perlu menambahkan opsi pemberitahuan push agar kompetitif. Namun pada saat yang sama, jangan membuka celah keamanan, karena kebocoran data apa pun akan merusak kepercayaan terhadap proyek tersebut.

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

Pada pemberitahuan push versi pertama, kami memutuskan untuk bermain aman semaksimal mungkin dan tidak mengirimkan teks pesan sama sekali. Layanan push tidak menerima teks pesan dari node, tetapi hanya sinyal tentang fakta penerimaannya. Oleh karena itu, pengguna melihat notifikasi “Pesan baru telah tiba”. Dimungkinkan untuk membacanya hanya di messenger.

Pemberitahuan push yang aman: dari teori hingga praktik
Cara kerjanya: video.

Setelah itu, kami mengetahui bahwa notifikasi versi terbaru Apple memiliki fitur keamanan baru. Mereka dilepaskan UNNotificationServiceExtension, yang memungkinkan pengembang mengirim data notifikasi terenkripsi sepenuhnya melalui APNS. Aplikasi di perangkat pengguna akhir kemudian melakukan dekripsi (atau mengunduh data tambahan) dan menampilkan pemberitahuan. Kami menganggapnya sebagai dasar untuk pemberitahuan push versi kedua.

Kami kini telah mengembangkan pemberitahuan push versi kedua untuk iOS, yang memungkinkan Anda 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)
  • Saat perangkat menerima notifikasi, perangkat meluncurkan NotifikasiServiceExtension kami - aplikasi mikro yang meminta transaksi dari node berdasarkan id, mendekripsinya menggunakan frasa sandi yang disimpan, dan mengirimkan notifikasi baru ke sistem. Frasa sandi disimpan di penyimpanan yang aman.
  • Sistem menampilkan pemberitahuan dengan pesan atau terjemahan yang didekripsi.
  • Kuncinya tidak kemana-mana, sama seperti pesan teks biasa. Layanan push tidak memiliki cara untuk mendekripsi pesan.

Pemberitahuan push yang aman: dari teori hingga praktik

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

Sumber: www.habr.com

Tambah komentar