Ey Habr!
Bugün meslektaşlarım ve benim birkaç aydır yaptığımız şeyden bahsedeceğim: mobil anlık mesajlaşma programları için anlık bildirimler. Daha önce de söylediğim gibi, uygulamamızda asıl vurgu güvenlik üzerinedir. Bu nedenle, anlık bildirimlerin "zayıf noktaları" olup olmadığını ve varsa bu yararlı seçeneği hizmetimize eklemek için bunları nasıl düzeltebileceğimizi öğrendik.
Çevirimizi yayınlıyorum
Malzemeyi inceliyoruz
Klasik modelde, anlık bildirimler mesajlaşma programlarını MITM (Ortadaki Adam) saldırılarına karşı savunmasız hale getiriyor. Örneğin, Google, Microsoft ve iMessage'in eski sürümünde uygulama, Apple sunucularına şifreleme anahtarları gönderir; sunucuda kullanıcıların kimlikleri doğrulanır ve mesaj başlığının (veya içeriğinin) şifresi çözülür.
Sonuç olarak anlık bildirim sunucusuna erişim sağlanarak yazışmaların okunması şansı doğar. Bu, herhangi bir yazışma şifrelemesinin işe yaramaz olduğu anlamına gelir: anlık bildirimler yine de üçüncü şahıslar tarafından okunma olasılığını bırakacaktır. Makalenin yazarları bu olasılığı daha ayrıntılı olarak tartıştı.
Apple ve Google sunucularının sızdırılan kullanıcı şifreleme anahtarlarına karşı %100 güvenli olduğunu düşünüyorsanız çalışanlarının bu sunuculara erişebildiğini göz önünde bulundurun. Ve çalışanlar insandır.
Anlık bildirimlerin tüm güvenlik açıklarına rağmen, Signal ve Telegram da dahil olmak üzere birçok "güvenli" anlık mesajlaşma uygulaması bunları kullanıyor. Aksi takdirde kullanıcılar uygulamaya sürekli giriş yaparak yeni mesajları “manuel olarak” izlemek zorunda kalacaklar. Bu çok sakıncalıdır ve rakip haberciler avantaj elde edecektir.
Paranoya ve sağduyu
Projemizde bu konuyu birkaç ay önce yakından ele almıştık. Rekabetçi olabilmek için bir anlık bildirim seçeneği eklememiz gerekiyordu. Ancak aynı zamanda güvenlik açığı da açmayın çünkü herhangi bir veri sızıntısı projeye olan güveni sarsacaktır.
Ancak zaten önemli bir avantajımız var: Messenger'ımız merkezi değildir (veriler blockchain'de depolanır) ve çalışanların hesaplara erişimi yoktur. MITM saldırılarına karşı koruma sağlamak için yalnızca kullanıcıların şifreleme anahtarları vardır ve muhatapların ortak anahtarları blockchain üzerinde mevcuttur.
Anında bildirimlerin ilk sürümünde mümkün olduğunca güvenli oynamaya ve mesaj metnini hiç aktarmamaya karar verdik. Push hizmeti düğümden mesaj metnini almadı, yalnızca mesajın alındığına dair bir sinyal aldı. Bu nedenle kullanıcı “Yeni mesaj geldi” bildirimini gördü. Bunu yalnızca messenger'da okumak mümkündü.
Bunun ardından Apple'ın son bildirim sürümünün yeni güvenlik özelliklerine sahip olduğunu öğrendik. Onlar
Artık iOS için anlık bildirimlerin ikinci sürümünü geliştirdik; bu, mesaj metnini güvenlik riski olmadan görüntülemenize olanak tanır. Yeni konseptte mantık şu şekilde görünüyor:
- Anlık hizmet, işlem numarasını içeren bir anında bildirim gönderir (şifreli mesaj çok büyük olabilir ve bildirimlerin boyutu çok sınırlıdır)
- Cihaz bir bildirim aldığında, düğümden kimliğe göre bir işlem talep eden, kayıtlı parolayı kullanarak bunun şifresini çözen ve sisteme yeni bir bildirim gönderen bir mikro uygulama olan NotificationServiceExtension'ımızı başlatır. Parola güvenli bir depolama alanında saklanır.
- Sistem, şifresi çözülmüş bir mesaj veya çeviri içeren bir bildirim görüntüler.
- Tıpkı düz metin mesajı gibi tuşlar hiçbir yere gitmiyor. Push hizmetinin mesajın şifresini çözmenin bir yolu yoktur.
Bu sürümü çalışıyor olarak kabul ettik ve iOS uygulamasının son güncellemesinde uyguladık.
Teknik tarafıyla ilgilenenler kaynak kodunu görebilir:
Kaynak: habr.com