Πρόσφατα οι ερευνητές Tielei Wang, Kangjie Lu, Lu Long, Simon Chung, και Wenke Lee από το Georgia Tech έδωσαν μια ομιλία στο 22ο Συμπόσιο Ασφαλείας USENIX και αποκάλυψαν τις λεπτομέρειες για το πώς δημιούργησαν αυτό που ονομάζουν «Jekyll εφαρμογή», που με επιτυχία την πέρασαν στο App Store της Apple κάνοντας έπειτα μια σειρά από ελεγχόμενες «κακόβουλες» επιθέσεις.
Οι μέθοδοί τους ανέδειξαν αρκετούς τομείς που χωλαίνει το σύστημα εξέτασης και έγκρισης/αναθεώρησης εφαρμογών της Apple καθώς τόνισαν και κάποιες αδυναμίες που έχει η ασφάλεια του iOS. Να τονίσουμε πως οι ερευνητές απέσυραν άμεσα την εφαρμογή τους εφόσον αυτή εγκαταστάθηκε στις δοκιμαστικές iOS συσκευές τους. Το θέμα είναι πως απέδειξαν με τον καλύτερο τρόπο πως και άλλοι προγραμματιστές θα μπορούσαν να ξεγλιστρήσουν μια malware εφαρμογή από τα μάτια των Reviewers της Apple.
Οι λεπτομέρειες για το πως η Apple εξετάζει μια εφαρμογή καθώς και τα διάφορα στάδια προς την έγκριση και αναθεώρηση κάποιας δεν είναι δημοσίως γνωστά. Εκτός από μερικές αξιοσημείωτες εξαιρέσεις ως τώρα η Apple έχει καταφέρει να κρατήσει την ασφάλεια του App Store της σε υψηλά επίπεδα.
Η βασική προϋπόθεση μιας Jekyll εφαρμογής είναι να υποβληθεί ως ακίνδυνη και μόλις εγκριθεί και δημοσιευθεί στο App Store τότε να δείξει τον κακόβουλο χαρακτήρα της. Η ιδέα είναι πολύ απλή αλλά παρακάτω θα σας παρουσιάσουμε και τις λεπτομέρειες που αξίζει να διαβάσετε.
Η διαδικασία έγκρισης μιας εφαρμογής στο App Store.
Όταν ένα προγραμματιστής υποβάλλει την εφαρμογή του για έγκριση στην Apple η εφαρμογή έχει γίνει ήδη compile (συνταχθεί και ελεγχθεί για σφάλματα) πράγμα το οποίο σημαίνει πως η Apple δεν έχει την δυνατότητα να δει τον πηγαίο κώδικα της. Αυτό που ακούγεται είναι πως η Apple κάνει 2 ελέγχους σε κάθε εφαρμογή που της υποβάλετε. Ο πρώτος είναι να βάλει την εφαρμογή σε μια συσκευή και να βεβαιωθεί πως αυτή πληροί τις κατευθυντήριες γραμμές της εταιρείας και δεν παραβιάζετε οποιαδήποτε πολιτική της Apple. Ο δεύτερος έλεγχος μάλλον είναι μια αυτοματοποιημένη διαδικασία η οποία κάνει αναζήτηση για ενδείξεις που θα συνδέουν την εφαρμογή με ιδιωτικά δικά της API στον μεταγλωττισμένο κώδικα που δεν πρέπει να έχουν χρησιμοποιηθεί.
Μια Jekyll εφαρμογή ξεκινάει όπως κάθε άλλη φυσιολογική εφαρμογή που μπορείτε να βρείτε και να κατεβάσετε στο App Store. Οι ερευνητές χρησιμοποίησαν της εφαρμογή Hacker News για το ξεκίνημα τους. Υπό κανονικές συνθήκες η εφαρμογή αυτή συνδέεται σε έναν απομακρυσμένο server και κάνει λήψεις ειδήσεων εκ μέρους του χρήστη και εν συνέχεια του εμφανίζει διάφορα άρθρα. Με βάση τους 2 ελέγχους που κάνει η Apple και αναφέραμε παρά πάνω μια τέτοια εφαρμογή θα εγκριθεί εύκολα μιας και δεν παραβιάζει εκ πρώτης όψης κανέναν από τους κανόνες του App Store και φυσικά δεν χρησιμοποιεί κάποιο ιδιωτικό API. Μόλις η Jekyll εφαρμογή εγκριθεί και εμφανιστεί στις λίστες του App Store τότε τα πράγματα παίρνουν μια περίεργη και ύπουλη στροφή.
Μέσα στη Jekyll εφαρμογή οι ερευνητές έβαλαν τοποθέτησαν με έξυπνο τρόπο σημεία στο κώδικα τους επιτρέποντας το άνοιγμα μιας κερκόπορτας κατά βούληση. Όταν αυτό το κομμάτι του κώδικα ενεργοποιηθεί μετά την έγκριση της εφαρμογής από την Apple μπορούσαν εν συνεχεία να αλλάξουν τη λογική ολόκληρης της εφαρμογής. Αυτό το κατάφεραν με την εκμετάλλευση μιας γνωστής ευπάθειας με το όνομα υπερχείλιση του buffer στην εφαρμογή. Ο κακόβουλος κώδικας επίσης δεν ήταν συγκεντρωμένος σε ένα σημείο αλλά αποτελούνταν από πολλά μικρά κομμάτια που αυτόνομα δεν μπορούν να κάνουν τίποτα αλλά αν ενωθούν τότε τα πράγματα αλλάζουν προς το χειρότερο όπως μπορείτε να φανταστείτε.
Το iOS χρησιμοποιεί δύο σημαντικές μεθόδους ασφαλείας για την παρεμπόδιση επιθέσεων υπερχείλισης buffer: Την Διεύθυνση τυχαίας ρύθμιση της διάταξης Διαστήματος (ASLR) και την Αποτροπή εκτέλεσης δεδομένων (DEP). Η ASLR λειτουργεί με την τυχαία κατανομή της μνήμης για τις διαδικασίες του λειτουργικού και της εκάστοτε εφαρμογής. Με αυτό τον τρόπο καθιστά πολύ δύσκολο για έναν εισβολέα να προβλέψει αξιόπιστα τις διευθύνσεις μνήμης που θα χρησιμοποιηθούν για το κομμάτι του κώδικα που μπορεί να θέλουν να καλέσουν και να ενώσουν. Το DEP από την πλευρά του ενισχύει την προστασία έναντι επιθέσεων υπερχείλισης buffer, εξασφαλίζοντας ότι τα κομμάτια της μνήμης που μπορεί να εγγραφούν και κομμάτια της μνήμης που μπορεί να εκτελεστούν παραμένουν διαχωρισμένα. Αυτό σημαίνει ότι αν ένας εισβολέας είναι σε θέση να γράψει σε ένα κομμάτι της μνήμης ένα κακόβουλο κώδικα δεν θα είναι σε θέση να το εκτελέσει και το ανάποδο.
Οι ερευνητές σημείωσαν μια αδυναμία στο ASLR του iOS. Kάθε εκτελέσιμο αρχείο, η ίδια η εφαρμογή, μια βιβλιοθήκη, κ.λπ., του αποδίδεται μια τυχαία θέση στη μνήμη συστήματος δημιουργώντας διάφορες ενότητες. Ωστόσο, σε κάθε μία από αυτές τις ενότητες, η διάταξη της μνήμης θα παραμείνει η ίδια, γεγονός που τελικά την καθιστά προβλέψιμη. Ως αποτέλεσμα, αν μπορείτε να πάρετε τη διεύθυνση μνήμης από ένα κομμάτι του κώδικα, μπορείτε να συμπεράνετε στη συνέχεια τη διάταξη μνήμης για το σύνολο της μονάδας, η οποία σας επιτρέπει να καλέσετε οποιοδήποτε άλλο κομμάτι του κώδικα εντός της εν λόγω μονάδας.
Όσο για το DEP, αυτό γενικά αποσκοπεί στην πρόληψη από έναν εισβολέα να εκμεταλλευτεί την υπερχείλιση του buffer μιας εφαρμογής. Μια Jekyll εφαρμογή μπορεί να παρακάμψει το DEP χρησιμοποιώντας κώδικα που υπάρχει ήδη στην μνήμη.
Ιδιωτικά API
Όπως αναφέρθηκε προηγουμένως, η Apple θα απορρίψει γενικά οποιαδήποτε εφαρμογή συνδέεται με κάποιο ιδιωτικό πλαίσιο ή καλούν κάποιο ιδιωτικό API. Η Apple χρησιμοποιεί κατά πάσα πιθανότητα στατικά εργαλεία ανάλυσης για την ανίχνευση τυχόν ιδιωτικών φορέων που έχουν συνδεθεί και χρησιμοποιηθεί στον κώδικα. Αλλά με την Jekyll εφαρμογή είδαμε παραπάνω πως οι ερευνητές κατάφεραν να αλλάξουν δυναμικά τον κώδικα της αλλά μπορούν να κάνουν και κάποια κλήση ιδιωτικού API;
Υπάρχουν δύο ιδιωτικά APIs ιδιαίτερου ενδιαφέροντος εδώ: Ta dlopen και dlsym. To dlopen σας επιτρέπει να φορτώσετε και να συνδέσετε μια δυναμική βιβλιοθήκη μόνο από το όνομα αρχείου. To dlsym σας επιτρέπει να αναζητήσετε τη διεύθυνση μνήμης μιας καθορισμένης μεθόδου για ένα πλαίσιο που φορτώνονται από dlopen, το οποίο είναι ακριβώς αυτό που θα πρέπει να κάνετε για να καλέσετε μια ιδιωτική μέθοδο της Jekyll εφαρμογής. Έτσι, αν οι ερευνητές μπορούν να καταφέρουν να εντοπίσουν το dlopen και το dlsym, μπορούν να χρησιμοποιήσουν αυτές τις μεθόδους και να φορτώσουν και μάλιστα εύκολα οποιαδήποτε άλλο ιδιωτικό APIs στη συσκευή.
Να τονίσουμε για ακόμη μια φορά πως όλα τα παραπάνω ενεργοποιούνται εφόσον η εφαρμογή εγκριθεί.
Η επίθεση
Τώρα που είδαμε πώς οι ερευνητές μπορούν να αλλάξουν τη ροή της εφαρμογής τους και να καλέσουν ιδιωτικά APIs, ας δούμε την κακόβουλη συμπεριφορά μιας Jekyll εφαρμογής.
Σε συσκευές με το iOS 5 και το iOS 6 οι ερευνητές ήταν σε θέση να αποκτήσουν πρόσβαση στην κάμερα, στον αριθμό κλήσεων στο bluetooth και να υποκλέψουν ένα σημαντικό αριθμό πληροφοριών χωρίς ο χρήστης να καταλάβει τίποτα. Στο iOS 5 μπορούσαν να στείλουν μηνύματα και email από μια συσκευή χωρίς ο χρήστης να το αντιληφθεί κάτι το οποίο δεν είναι δυνατόν στο iOS 6. Πάρα αυτά και στις δύο εκδόσεις μπορούσαν άνετα να αποσπάσουν tweets να κλέψουν φωτογραφίες ακόμη και να κάνουν κλήση αριθμών η προώθηση κλήσεων σε ένα άλλο που είχαν προκαθορίσει.
Η αντιμετώπιση του προβλήματος
Δυστυχώς, η τρέχουσα διαδικασία έγκρισης μιας εφαρμογής της Apple δεν έχει συσταθεί για την ανίχνευση αυτού του είδους συμπεριφορών. Η Apple εξετάζει μόνο τη συμπεριφορά μιας εφαρμογής κατά τη στιγμή της έγκρισης. Αν η συμπεριφορά μιας εφαρμογής αλλάξει δυναμικά στο App Store, η Apple δεν είναι καθόλου εξοπλισμένη για να εντοπίζει αυτές τις αλλαγές και να παρακολουθεί σε πραγματικό χρόνο τη συμπεριφορά των εφαρμογών, αφού έχουν έχουν ανέβει στο App Store. Η Apple θα μπορούσε να απαιτήσει από τους προγραμματιστές να υποβάλουν τον πηγαίο κώδικα τους, αλλά θα ήταν ανέφικτο για την Apple να επιθεωρήσει τον πηγαίο κώδικα της κάθε εφαρμογής που υποβάλλεται στο App Store.
Πολλές επιθέσεις που προσπάθησαν να πραγματοποιήσουν οι ερευνητές στο iOS 7 προς μεγάλη τους έκπληξη ήταν ανεπιτυχείς και ίσως σημαίνει πως η Apple αν και καθυστερημένα ίσως πήρε κάποιο μέτρο για την αντιμετώπιση των παραπάνω ευπαθειών του λογισμικού της.
Τέλος θα μπορούσε κάποιος εύκολα να πει γιατί δεν έχουμε με βάσει τα παραπάνω πολλές επιθέσεις μιας και σίγουρα οι ερευνητές δεν είναι οι μόνοι που θα μπορούσαν να δημιουργήσουν μια Jekyll εφαρμογή.
Η απάντηση είναι σχετικά εύκολη αν αναλογιστεί κάποιος τα εξής:
Ακόμη και ένας νόμιμος προγραμματιστής με μεγάλες εφαρμογές θα αγωνιστεί για να τραβήξει την προσοχή των χρηστών. Με πάνω από 900.000 εφαρμογές στο App Store είναι εύκολο για μια εφαρμογή να περάσει απαρατήρητη. Μια εφαρμογή Jekyll θα μπορούσε να χρησιμοποιηθεί με επιτυχία μόνο αν στόχευε συγκεκριμένα άτομα που θα την κατέβαζαν κατόπιν παρότρυνση τρίτων.
Καλώς ή κακώς για κάποιον κακόβουλο προγραμματιστή το App Store της Apple δεν θα ήταν η πρώτη του επιλογή αλλά το Google Play του Android μιας και εκεί οι κανόνες ασφαλείας είναι πολύ πιο χαλαροί παρά τις προσπάθειες που καταβάλει η Google από το 2009. Επίσης μην ξεχνάμε και το App Store στην ουσία για τους Jailbreakers που ακούει στο όνομα Cydia καθώς και άλλα Store με πειρατικές και σπασμένες εφαρμογές που θα ήταν η «παιδική χαρά» ενός τέτοιου προγραμματιστή και μιας Jekyll εφαρμογής.
Η Apple μπορεί να τραβήξει εύκολα εφαρμογές από το App Store, ανά πάσα στιγμή και να ανακαλέσει τους λογαριασμούς προγραμματιστών. Όπως έχουμε δει σε πολλές περιπτώσεις, αν μια εφαρμογή καταφέρνει να γλιστρήσει από την Apple γρήγορα μπορεί να αφαιρεθεί από το App Store της Apple μόλις συνειδητοποιήσουν το λάθος του.
Η Apple έχει χρησιμοποιήσει πολλαπλά επίπεδα ασφάλειας στο iOS. Ένα από τα μέτρα ασφαλείας είναι το Sandbox. Το Sandboxing περιορίζει όλες τις εφαρμογές και τις κάνει να έχουν το δικό τους χώρο στο σύστημα. Οποιαδήποτε εφαρμογή είναι πολύ περιορισμένη για το πώς μπορεί να αλληλεπιδρά άλλες εφαρμογές και τα δεδομένα τους.
Πηγή: appleworldhellas.com