Ασφαλείς ειδοποιήσεις push: από τη θεωρία στην πράξη

Γεια σου Χαμπρ!

Σήμερα θα μιλήσω για αυτό που κάνουμε οι συνάδελφοί μου και εγώ εδώ και αρκετούς μήνες: ειδοποιήσεις push για κινητά instant messenger. Όπως είπα ήδη, στην εφαρμογή μας η κύρια έμφαση δίνεται στην ασφάλεια. Επομένως, ανακαλύψαμε εάν οι ειδοποιήσεις push έχουν «αδύνατα σημεία» και, εάν ναι, πώς μπορούμε να τα ισοπεδώσουμε για να προσθέσουμε αυτήν τη χρήσιμη επιλογή στην υπηρεσία μας.

Δημοσιεύω μια μετάφραση μας άρθρα από το Medium με μερικές μικρές προσθήκες από εμένα. Περιέχει τα αποτελέσματα της «έρευνας» και μια ιστορία για το πώς λύθηκε το πρόβλημα.

Εξετάζουμε το υλικό

Στο κλασικό μοντέλο, οι ειδοποιήσεις push καθιστούν τους messenger ευάλωτους σε επιθέσεις MITM (Man-in-the-middle). Για παράδειγμα, με την Google, τη Microsoft και την παλιά έκδοση του iMessage, η εφαρμογή στέλνει κλειδιά κρυπτογράφησης στους διακομιστές της Apple - στον διακομιστή, οι χρήστες επαληθεύονται και η κεφαλίδα του μηνύματος (ή το περιεχόμενό της) αποκρυπτογραφείται.

Ασφαλείς ειδοποιήσεις push: από τη θεωρία στην πράξη

Ως αποτέλεσμα, υπάρχει η ευκαιρία να διαβάσετε την αλληλογραφία αποκτώντας πρόσβαση στον διακομιστή ειδοποιήσεων push. Αυτό σημαίνει ότι οποιαδήποτε κρυπτογράφηση αλληλογραφίας είναι άχρηστη: οι ειδοποιήσεις push θα εξακολουθούν να αφήνουν τη δυνατότητα ανάγνωσης από τρίτους. Οι συντάκτες του άρθρου συζήτησαν αυτή τη δυνατότητα με περισσότερες λεπτομέρειες. "Κρυπτογράφηση σωστά" στο Xaker.ru, αφιερωμένο σε μεθόδους κρυπτογράφησης μηνυμάτων.

Εάν πιστεύετε ότι οι διακομιστές της Apple και της Google είναι 100% ασφαλείς έναντι διαρροής κλειδιών κρυπτογράφησης χρηστών, σκεφτείτε το γεγονός ότι οι υπάλληλοί τους έχουν πρόσβαση σε αυτά. Και οι εργαζόμενοι είναι άνθρωποι.
Παρά όλα τα τρωτά σημεία των ειδοποιήσεων push, πολλοί «ασφαλείς» άμεσοι αγγελιοφόροι, συμπεριλαμβανομένων των Signal και Telegram, τους χρησιμοποιούν. Διαφορετικά, οι χρήστες θα πρέπει να παρακολουθούν «μη αυτόματα» τα νέα μηνύματα συνδέοντας συνεχώς στην εφαρμογή. Κάτι που είναι πολύ άβολο και οι ανταγωνιστικοί αγγελιοφόροι θα έχουν ένα πλεονέκτημα.

Παράνοια και κοινή λογική


Στο έργο μας, ασχοληθήκαμε στενά με αυτό το θέμα πριν από αρκετούς μήνες. Χρειαζόταν να προσθέσουμε μια επιλογή ειδοποίησης push για να είμαστε ανταγωνιστικοί. Αλλά ταυτόχρονα, μην ανοίξετε μια τρύπα ασφαλείας, γιατί οποιαδήποτε διαρροή δεδομένων θα υπονομεύσει την εμπιστοσύνη στο έργο.

Ωστόσο, έχουμε ήδη ένα σημαντικό πλεονέκτημα: το messenger μας είναι αποκεντρωμένο (τα δεδομένα αποθηκεύονται στο blockchain) και οι εργαζόμενοι δεν έχουν πρόσβαση σε λογαριασμούς. Μόνο οι χρήστες έχουν κλειδιά κρυπτογράφησης και τα δημόσια κλειδιά των συνομιλητών είναι διαθέσιμα στο blockchain για προστασία από επιθέσεις MITM.

Στην πρώτη έκδοση των ειδοποιήσεων push, αποφασίσαμε να το παίξουμε όσο το δυνατόν περισσότερο με ασφάλεια και να μην μεταδώσουμε καθόλου το κείμενο του μηνύματος. Η υπηρεσία ώθησης δεν έλαβε το κείμενο του μηνύματος από τον κόμβο, αλλά μόνο ένα σήμα σχετικά με το γεγονός της λήψης του. Επομένως, ο χρήστης είδε την ειδοποίηση "Έφτασε νέο μήνυμα". Ήταν δυνατό να το διαβάσω μόνο στο messenger.

Ασφαλείς ειδοποιήσεις push: από τη θεωρία στην πράξη
Πώς λειτούργησε: βίντεο.

Μετά από αυτό, μάθαμε ότι η πιο πρόσφατη έκδοση ειδοποιήσεων της Apple έχει νέα χαρακτηριστικά ασφαλείας. Αυτοί κυκλοφόρησε UNNotificationServiceExtension, το οποίο επιτρέπει στους προγραμματιστές να στέλνουν πλήρως κρυπτογραφημένα δεδομένα ειδοποιήσεων μέσω APNS. Στη συνέχεια, η εφαρμογή στη συσκευή του τελικού χρήστη εκτελεί την αποκρυπτογράφηση (ή πραγματοποιεί λήψη πρόσθετων δεδομένων) και εμφανίζει μια ειδοποίηση. Το πήραμε ως βάση για τη δεύτερη έκδοση των ειδοποιήσεων push.

Τώρα έχουμε αναπτύξει τη δεύτερη έκδοση των ειδοποιήσεων push για iOS, η οποία σας επιτρέπει να εμφανίζετε το κείμενο του μηνύματος χωρίς κίνδυνο ασφαλείας. Στη νέα ιδέα, η λογική μοιάζει με αυτό:

  • Η υπηρεσία push στέλνει μια ειδοποίηση push με τον αριθμό συναλλαγής (το κρυπτογραφημένο μήνυμα μπορεί να είναι πολύ μεγάλο και το μέγεθος των ειδοποιήσεων είναι πολύ περιορισμένο)
  • Όταν η συσκευή λαμβάνει μια ειδοποίηση, εκκινεί το NotificationServiceExtension - μια μικροεφαρμογή που ζητά μια συναλλαγή από τον κόμβο ανά αναγνωριστικό, την αποκρυπτογραφεί χρησιμοποιώντας την αποθηκευμένη φράση πρόσβασης και στέλνει μια νέα ειδοποίηση στο σύστημα. Η φράση πρόσβασης αποθηκεύεται σε ασφαλή αποθήκευση.
  • Το σύστημα εμφανίζει μια ειδοποίηση με αποκρυπτογραφημένο μήνυμα ή μετάφραση.
  • Τα πλήκτρα δεν πηγαίνουν πουθενά, όπως και το απλό μήνυμα κειμένου. Η υπηρεσία push δεν έχει τρόπο να αποκρυπτογραφήσει το μήνυμα.

Ασφαλείς ειδοποιήσεις push: από τη θεωρία στην πράξη

Αποδεχθήκαμε αυτήν την έκδοση ως λειτουργική και την εφαρμόσαμε στην τελευταία ενημέρωση της εφαρμογής iOS.
Όσοι ενδιαφέρονται για την τεχνική πλευρά μπορούν να δουν τον πηγαίο κώδικα: github.com/Adamant-im/adamant-notificationService.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο