Ένα άθροισμα ελέγχου αντιστοιχίζει byte σε μια αναφορά. Μια υπογραφή συνδέει την ακεραιότητα με ένα κλειδί. Κανένα από τα δύο δεν αποδεικνύει μόνο του ότι το λογισμικό είναι ασφαλές.
Πριν εγκαταστήσετε ένα APK για Android, ξεχωρίστε τρεις ελέγχους: Αντιστοιχεί αυτό το αρχείο στην αναμενόμενη έκδοση; Έχει υπογραφεί με το αναμενόμενο κλειδί; Μπορούν ανεξάρτητοι δημιουργοί να το αναπαραγάγουν από τον δηλωμένο πηγαίο κώδικα; Ένα άθροισμα ελέγχου SHA-256, μια υπογραφή APK και μια αναπαραγώγιμη μεταγλώττιση απαντούν σε αυτά τα ερωτήματα με διαφορετικό τρόπο.
Κανένας από αυτούς τους ελέγχους δεν αποτελεί από μόνος του ετυμηγορία για την παρουσία κακόβουλου λογισμικού. Ένα σωστά υπογεγραμμένο, αναπαραγώγιμο πρόγραμμα μπορεί και πάλι να περιέχει σφάλμα ασφαλείας ή σκόπιμα επιβλαβή συμπεριφορά.
Τι τεκμηριώνει κάθε μέθοδος επαλήθευσης
| Έλεγχος | Χρήσιμο αποτέλεσμα | Σημαντικός περιορισμός |
|---|---|---|
| Σύνοψη SHA-256 του αρχείου | Τα δικά σας byte αντιστοιχούν σε μια συγκεκριμένη έμπιστη σύνοψη | Ένας εισβολέας που αντικαθιστά τόσο το αρχείο όσο και τη σύνοψη μπορεί να ακυρώσει την αξία αυτής της σύγκρισης |
| Επαλήθευση υπογραφής APK | Η υπογραφή του πακέτου επαληθεύεται με το πιστοποιητικό υπογραφής του | Πρέπει να εξακριβώσετε ποιο κλειδί υπογραφής αναμένεται· η εγκυρότητα από μόνη της δεν ταυτοποιεί τον εκδότη |
| Σύγκριση αναπαραγώγιμης μεταγλώττισης | Το καθορισμένο παραγόμενο αρχείο μπορεί να αναδημιουργηθεί από τεκμηριωμένες εισόδους | Η αντιστοιχία πηγαίου κώδικα και δυαδικού αρχείου δεν αποδεικνύει ότι ο πηγαίος κώδικας είναι ασφαλής |
| Έλεγχος ασφαλείας | Αξιολογήθηκαν συγκεκριμένα ζητήματα σχεδιασμού ή υλοποίησης | Έχουν σημασία το πεδίο εφαρμογής του, η έκδοση, τα ευρήματα και τα ανεπίλυτα ζητήματα |
Το Android απαιτεί υπογραφή APK για την εγκατάσταση και τις ενημερώσεις. Με το Play App Signing, η Google μπορεί να διαχειρίζεται το κλειδί υπογραφής της εφαρμογής και να δημιουργεί APK διανομής από ένα app bundle. Πρόκειται για τεκμηριωμένες ρυθμίσεις εμπιστοσύνης, όχι για απόδειξη ότι οποιοσδήποτε ενδιάμεσος μπορεί να αλλάξει αθόρυβα ένα πακέτο διατηρώντας έγκυρη την υπογραφή του. Ο οδηγός του Android για την υπογραφή εφαρμογών.
Βήμα 1: προσδιορίστε το ακριβές παραγόμενο αρχείο
Καταγράψτε την έκδοση της εφαρμογής, το κανάλι κυκλοφορίας, το όνομα αρχείου και την παραλλαγή πλατφόρμας για την οποία προορίζεται. Χρησιμοποιήστε την επίσημη σελίδα διανομής του εκδότη, όχι ένα άθροισμα ελέγχου αντιγραμμένο από το ίδιο ανεπιθύμητο μήνυμα που σας έδωσε το APK.
Ένα APK που κατεβάζετε απευθείας από έναν εκδότη μπορεί να διαφέρει από ένα APK που δημιουργεί ένα κατάστημα εφαρμογών για μια συσκευή. Διαφορετικές εκδόσεις, αρχιτεκτονικές, τρόποι δημιουργίας πακέτων ή ρυθμίσεις υπογραφής μπορούν θεμιτά να παράγουν διαφορετικές συνόψεις αρχείων. Συγκρίνετε όμοια με όμοια πριν θεωρήσετε μια ασυμφωνία ένδειξη αλλοίωσης.
Το πρακτικό ερώτημα είναι: Από πού προήλθε η αναμενόμενη τιμή και γιατί εμπιστεύομαι αυτή την πηγή; Ο υπολογισμός μιας σύνοψης εκτός σύνδεσης δεν λύνει το πρόβλημα εμπιστοσύνης για μια σύνοψη αναφοράς που αποκτήθηκε μέσω διαδικτύου.
Βήμα 2: υπολογίστε το SHA-256 τοπικά
Αντικαταστήστε το messenger.apk με το όνομα του αρχείου που κατεβάσατε. Αυτά τα παραδείγματα διαβάζουν το αρχείο· δεν το εγκαθιστούν.
Linux:
sha256sum messenger.apk
macOS:
shasum -a 256 messenger.apk
Γραμμή εντολών των Windows:
certutil -hashfile messenger.apk SHA256
Συγκρίνετε ολόκληρη τη σύνοψη, αγνοώντας μόνο τα διαστήματα εμφάνισης και τη διάκριση πεζών-κεφαλαίων. Μη συγκρίνετε μόνο τους πρώτους ή τους τελευταίους λίγους χαρακτήρες. Φυλάξτε την αναμενόμενη σύνοψη μαζί με τις πληροφορίες κυκλοφορίας και έκδοσης, ώστε να μπορεί να επαναληφθεί η σύγκριση.
Αν οι τιμές διαφέρουν, σταματήστε πριν από την εγκατάσταση. Ελέγξτε το παραγόμενο αρχείο και την έκδοση, κατεβάστε το ξανά από την έμπιστη πηγή, εφόσον ενδείκνυται, και ρωτήστε τον εκδότη για μια ανεξήγητη ασυμφωνία. Μη «διορθώνετε» το αναμενόμενο άθροισμα ελέγχου ώστε να ταιριάζει με το αρχείο που έτυχε να παραλάβετε.
Βήμα 3: ελέγξτε την υπογραφή του APK
Για χρήστες που διαθέτουν τα Android SDK Build Tools, η τεκμηρίωση του apksigner της Google περιγράφει την επαλήθευση υπογραφών και την εμφάνιση στοιχείων πιστοποιητικού:
apksigner verify --verbose --print-certs messenger.apk
Η επαλήθευση πρέπει να επιτυγχάνει για τις πλατφόρμες που υποστηρίζει το APK. Συγκρίνετε τα στοιχεία του πιστοποιητικού υπογράφοντος με ένα έμπιστο αρχείο καταγραφής της έκδοσης ή με το τεκμηριωμένο ιστορικό διαδοχής κλειδιών υπογραφής του εκδότη. Μια υπογραφή με άγνωστο κλειδί δεν γίνεται αξιόπιστη χάρη στη λέξη «επαληθεύτηκε». Και η θεμιτή αλλαγή κλειδιού υπογραφής χρειάζεται αποδεικτικά στοιχεία, όχι μια οδηγία να αγνοήσετε την ασυμφωνία.
Η σύνοψη SHA-256 του αρχείου APK και το αποτύπωμα SHA-256 του πιστοποιητικού υπογραφής του είναι διαφορετικές τιμές. Μη συγκρίνετε τη μία με την άλλη.
Βήμα 4: αναζητήστε στοιχεία για την αναπαραγωγιμότητα της μεταγλώττισης
Ένας ισχυρισμός περί αναπαραγώγιμης μεταγλώττισης χρειάζεται καθορισμένη αναθεώρηση του πηγαίου κώδικα, περιβάλλον μεταγλώττισης, οδηγίες και συγκεκριμένο παραγόμενο αρχείο-στόχο. Ανεξάρτητα μέρη πρέπει να μπορούν να αναδημιουργήσουν αυτό το αρχείο και να συγκρίνουν το αποτέλεσμα. Ο ορισμός του έργου Reproducible Builds περιλαμβάνει αυτές τις εισόδους ως μέρος του ισχυρισμού.
Για μια εφαρμογή ανταλλαγής μηνυμάτων, χρήσιμα στοιχεία μιας έκδοσης είναι η ετικέτα του πηγαίου κώδικα, οι σταθερά καθορισμένες εκδόσεις εξαρτήσεων και αλυσίδας εργαλείων, οι οδηγίες μεταγλώττισης και τα αποτελέσματα ανεξάρτητων συγκρίσεων. Ρωτήστε τι ακριβώς συγκρίθηκε: ένα ανυπόγραφο παραγόμενο αρχείο, ένα υπογεγραμμένο APK ή επιλεγμένα περιεχόμενα του πακέτου. Μη συμπεραίνετε ότι υπάρχει αναπαραγωγιμότητα μόνο και μόνο επειδή δημοσιεύονται ο πηγαίος κώδικας και η σύνοψη του αρχείου λήψης.
Η αναπαραγωγιμότητα ενισχύει τη σύνδεση ανάμεσα στον ελεγμένο πηγαίο κώδικα και στον κώδικα που διανέμεται. Δεν μετατρέπει μια μη ελεγμένη υλοποίηση σε ασφαλές πρωτόκολλο ούτε αποδεικνύει ότι ένα τηλέφωνο που λειτουργεί δεν έχει παραβιαστεί.
Πού εντάσσεται το Proof Lab του Livara
Το Proof Lab του Livara προσφέρει τοπικό υπολογισμό της σύνοψης ενός APK και σύγκρισή της με τη δημοσιευμένη σύνοψή του. Οι κρυπτογραφικές επιδείξεις του έχουν στενότερο πεδίο από έναν έλεγχο ολόκληρου του πρωτοκόλλου ανταλλαγής μηνυμάτων. Χρησιμοποιήστε τον έλεγχο σύνοψης για τον δηλωμένο σκοπό του, μαζί με τις πληροφορίες αναμενόμενης έκδοσης και υπογραφής· μην τον θεωρείτε ανεξάρτητη απόδειξη αναπαραγώγιμων μεταγλωττίσεων ή απουσίας κερκόπορτας.
Το μοντέλο απειλών επισημαίνει ρητά τον περιορισμό όταν μπορούν να αντικατασταθούν τόσο ένα APK όσο και η εμφανιζόμενη σύνοψή του. Γι’ αυτό η προέλευση της τιμής αναφοράς σας έχει τόση σημασία όση και η σωστή εκτέλεση του υπολογισμού.
Συχνές ερωτήσεις
Αποδεικνύει ένα άθροισμα ελέγχου που ταιριάζει ότι το APK είναι ασφαλές;
Όχι. Τεκμηριώνει την αντιστοιχία με τη σύνοψη αναφοράς, με την προϋπόθεση ότι η αναφορά είναι αξιόπιστη και ισχύουν οι ιδιότητες ασφαλείας της συνάρτησης κατακερματισμού. Δεν αξιολογεί τη συμπεριφορά του προγράμματος.
Είναι περιττή η επαλήθευση υπογραφής αν το άθροισμα ελέγχου ταιριάζει;
Όχι. Οι έλεγχοι παρέχουν διαφορετικά στοιχεία. Μια υπογραφή συνδέει την ακεραιότητα του πακέτου με ένα κλειδί· μια σύνοψη αρχείου προσδιορίζει μια συγκεκριμένη ακολουθία byte.
Πρέπει μια λήψη από κατάστημα να έχει την ίδια σύνοψη με το APK του ιστοτόπου;
Μόνο αν υποτίθεται ότι πρόκειται για το ίδιο παραγόμενο αρχείο. Ελέγξτε πρώτα το κανάλι κυκλοφορίας, την έκδοση και τη μορφή του πακέτου. Μια ανεξήγητη ασυμφωνία αξίζει διερεύνηση, όχι αυτόματη κατηγορία ή αυτόματη έγκριση.
Μπορούν αυτοί οι έλεγχοι να εντοπίσουν λογισμικό κατασκοπείας που υπάρχει ήδη στο τηλέφωνό μου;
Όχι. Αξιολογούν ένα αρχείο εγκατάστασης, όχι κάθε στοιχείο της τρέχουσας κατάστασης λειτουργίας της συσκευής.



