Güvenli anlık bildirimler: teoriden pratiğe

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 Medium'dan makaleler kendimden ufak eklemelerle. “Soruşturmanın” sonuçlarını ve sorunun nasıl çözüldüğüne dair bir hikayeyi içeriyor.

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.

Güvenli anlık bildirimler: teoriden pratiğe

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ı. “Doğru şekilde şifrele” Xaker.ru'da mesajları şifreleme yöntemlerine adanmıştır.

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

Güvenli anlık bildirimler: teoriden pratiğe
Nasıl çalıştı: video.

Bunun ardından Apple'ın son bildirim sürümünün yeni güvenlik özelliklerine sahip olduğunu öğrendik. Onlar yayınlandı UNNotificationServiceExtension, geliştiricilerin APNS üzerinden tamamen şifrelenmiş bildirim verileri göndermesine olanak tanır. Son kullanıcının cihazındaki uygulama daha sonra şifre çözme işlemini gerçekleştirir (veya ek verileri indirir) ve bir bildirim görüntüler. Anlık bildirimlerin ikinci versiyonu için bunu temel aldık.

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.

Güvenli anlık bildirimler: teoriden pratiğe

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: github.com/Adamant-im/adamant-notificationService.

Kaynak: habr.com

Yorum ekle