Μια μη τεκμηριωμένη λειτουργία Android επιτρέπει σε οποιαδήποτε αυθαίρετη εφαρμογή να αποκτήσει πρόσβαση root σε ένα επιτρεπτό περιβάλλον SELinux. Διαβάστε παρακάτω για να μάθετε περισσότερα!
Στον κόσμο του Android modding, οι άνθρωποι τείνουν να θεωρούν την πρόσβαση root ως τον ακρογωνιαίο λίθο όλων των πραγμάτων. Επιτρέπει στους χρήστες να έχουν τον πλήρη έλεγχο των συσκευών τους και να προσθέτουν λειτουργίες που δεν είναι πάντα διαθέσιμες στη διαμόρφωση αποθεμάτων. Αλλά όπως λένε — «με μεγάλη δύναμη έρχεται μεγάλη ευθύνη» — δεν είναι συνετό να παρακάμψετε το μοντέλο ασφαλείας του Android, εκτός αν ξέρετε σε τι ασχολείστε. Για τους βετεράνους λάτρεις του Android στα φόρουμ μας, πιθανότατα γνωρίζετε την πιθανότητα ύπαρξης backdoors στη συσκευή σας και είναι πιο πιθανό να εκτελείτε ένα αξιόπιστο mod με δυνατότητα root πάνω από την πιο πρόσφατη έκδοση Android με την πιο πρόσφατη ασφάλεια μπαλώματα. Τούτου λεχθέντος, ίσως γνωρίζετε μερικούς ανθρώπους που δεν ενδιαφέρονται πραγματικά για το τι τροποποιήσεις root εγκαθιστούν, εφόσον φαινομενικά λειτουργούν για αυτούς. Αυτός είναι ο λόγος για τον οποίο μπορείτε ακόμα να βρείτε ένα φορτηγό με mods που λειτουργούν μόνο όταν το SELinux έχει ρυθμιστεί σε επιτρεπτό, το οποίο, με τη σειρά του, αφήνει τους χρήστες του εξαιρετικά επιρρεπείς σε απειλές ασφαλείας.
Τι είναι το SELinux
SELinux ή Linux ενισχυμένο με ασφάλεια, είναι μια λειτουργική μονάδα ασφαλείας πυρήνα Linux ειδικά σχεδιασμένη για πρόσβαση και διαχείριση πολιτικών ασφαλείας. Παρουσιάστηκε αρχικά στο Android 4.3 Jelly Bean και τέθηκε στη λειτουργία Enforcing ως προεπιλογή από το Android 4.4 KitKat, SELinux βοηθά στην επιβολή των δικαιωμάτων ελέγχου πρόσβασης και προσπαθεί να αποτρέψει την κλιμάκωση των προνομίων επιθέσεις. Με λίγα λόγια, το SELinux λειτουργεί ως εμπόδιο για μη εξουσιοδοτημένο έλεγχο της συσκευής σας, όπως μια εφαρμογή ή μια ευπάθεια που στοχεύει να αποκτήσει κακόβουλη πρόσβαση root. Η ρύθμιση του SELinux σε "Εφαρμογή" από προεπιλογή είναι ένας από τους βασικούς τρόπους με τους οποίους οι κανονικοί χρήστες προστατεύονται από τέτοιες επιθέσεις.
Γιατί το Permissive SELinux δεν συνιστάται
Για να επαναλάβουμε, ο τυπικός τρόπος για να επιτύχετε πρόσβαση root σε μια συσκευή Android δεν χρειάζεται απαραίτητα να αλλάξετε την κατάσταση SELinux. Η αλλαγή της λειτουργίας SELinux από "Εφαρμογή" σε "Επιτρεπτή" απενεργοποιεί σκόπιμα ένα από τα βασικά χαρακτηριστικά ασφαλείας στη συσκευή, γι' αυτό ο χρήστης πρέπει να το επιτρέψει ρητά να συμβεί εγκαθιστώντας έναν εξειδικευμένο προσαρμοσμένο πυρήνα ή τροποποιώντας τις παραμέτρους της υπάρχουσας εικόνας εκκίνησης. Ένα κακώς κωδικοποιημένο mod που δεν έχει σωστή πολιτική SELinux συνήθως αναγκάζει τους τελικούς χρήστες να στραφούν σε επιτρεπτικό SELinux και ουσιαστικά επεκτείνει την επιφάνεια επίθεσης. Αυτό ακριβώς είναι ο προγραμματιστής vvb2060 έδειξαν όταν αυτοί δημοσίευσε μια μέθοδο κλιμάκωσης προνομίων απόδειξης της έννοιας όπου η μόνη απαίτηση για την απόκτηση ελέγχου είναι το επιτρεπτό SELinux.
Μπείτε στο Magica
Για να αποκτήσει ένας χρήστης πλήρης πρόσβαση root στη δική του συσκευή που εκτελεί Android 10 (ή νεότερη έκδοση) με το SELinux που έχει οριστεί σε επιτρεπτό, είναι εκπληκτικά εύκολο να do: Το μόνο που έχετε να κάνετε είναι να πατήσετε εγκατάσταση και το "Magica" θα αποκτήσει αυτόματα πρόσβαση root σε μια υπηρεσία και θα εγκαταστήσει το Magisk στην εκκίνηση εικόνα. Αυτό είναι κάτι πολύ ευρύτερο σε εύρος από το να τροποποιήσετε απλώς τη συσκευή σας. Σύμφωνα με τον XDA Senior Recognized Developer και τον συντηρητή Magisk topjohnwu, οποιαδήποτε αυθαίρετη εφαρμογή, συμπεριλαμβανομένου κακόβουλου λογισμικού, μπορεί να ριζώσει μόνιμα τη συσκευή σας χωρίς τη συγκατάθεση και την άδειά σας χρησιμοποιώντας το PoC.
Αν αναρωτιέστε σε τεχνικό επίπεδο τι εκμεταλλεύεται η Magica, η topjohnwu εξήγησε τα ακόλουθα στο μια ανάρτηση στο Reddit:
"Όταν το SELinux είναι επιτρεπτό κατά την εκκίνηση, το zygote θα το γνωρίζει αυτό και θα απενεργοποιήσει τα φίλτρα syscall seccomp. Αυτό ουσιαστικά δεν περιορίζει τις κλήσεις συστήματος που επιτρέπονται σε διαδικασίες τρίτων.
Στο Android 10+, υπάρχει μια νέα "μη τεκμηριωμένη" λειτουργία που ονομάζεται "App Zygote", όπου οι εφαρμογές τρίτων επιτρέπεται να δημιουργούν το δικό τους Zygote για "Απομονωμένες υπηρεσίες" (επίσης σχεδόν χωρίς έγγραφα). Τόσο το "App Zygote" και το "Isolated Services" είναι ειδικές λειτουργίες που έχουν σχεδιαστεί για Chrome/Webview*. Οι διεργασίες App Zygote εκτελούνται με ειδικά δικαιώματα και με το seccomp απενεργοποιημένο, μπορεί να καλέσει το setuid 0 και να κλιμακώσει το προνόμιό του και να αποκτήσει πρόσβαση root.
Εξακολουθεί να είναι κατά κάποιο τρόπο περιοριστικό σε σύγκριση με αυτό που παρέχουν οι κανονικές λύσεις root (π.χ. Magisk), ωστόσο πολλά μέτρα ασφαλείας στο Android θα καταργηθούν εντελώς όταν το UID=0. Για παράδειγμα, αρκεί να χρησιμοποιηθεί για την επιδιόρθωση εικόνων εκκίνησης, πράγμα που σημαίνει ότι μπορεί να χρησιμοποιηθεί για την εισαγωγή κακόβουλου λογισμικού όπως το τροποποιημένο Magisk για να το βοηθήσει να αποκτήσει «πραγματικά» δικαιώματα root.
Ενημέρωση: τι μπορεί να κάνει το ίδιο το UID=0; Στο πλαίσιο του Android, σχεδόν όλες οι υπηρεσίες έχουν τυφλό πράσινο φως όταν το UID της διαδικασίας αίτησης είναι 0. Αυτό σημαίνει ότι αυτή η ριζική διαδικασία είναι ικανή να χειριστεί τόνους υλικού χρησιμοποιώντας ειδικά API για Android (π.χ. ActivityManager)"
*Σύμφωνα με τον προγραμματιστή aviraxp, αυτά τα δύο χαρακτηριστικά έχουν σχεδιαστεί γενικότερα "για την κοινή χρήση πόρων και μνήμης μεταξύ πολλαπλών απομονωμένων διεργασιών."
συμπέρασμα
Λαμβάνοντας υπόψη την ανεπανόρθωτη ζημιά που μπορεί να προκληθεί σε χρήστες που στοχεύουν κακόβουλο λογισμικό σε ένα επιτρεπτό περιβάλλον SELinux, προτείνουμε σε όλους να συνεχίσουν να το επιβάλλουν, εκτός εάν είναι απολύτως απαραίτητο. Αν και είμαστε απλώς τυχεροί που έχουμε μια απόδειξη της ιδέας εκμετάλλευσης, δεν έχουμε ιδέα πόσοι δημιουργοί κακόβουλου λογισμικού γνωρίζουν ήδη για αυτό το μονοπάτι επίθεσης. Εξάλλου, ένα θύμα θα συνεχίσει να αγνοεί την παραβιασμένη κατάσταση της συσκευής του, αν δεν το έκανε βεβαιωθείτε ότι το exploit χρησιμοποιείται ενεργά, κάτι που δεν είναι δύσκολο να επιτευχθεί για μια αδίστακτη εφαρμογή που έχει επίμονη ρίζα πρόσβαση.