Η ευπάθεια του OnePlus 3/3T Bootloader επιτρέπει την αλλαγή του SELinux σε λειτουργία επιτρεπόμενης στο Fastboot

Μια σοβαρή ευπάθεια στον bootloader OnePlus 3/3T επιτρέπει στους εισβολείς να αλλάξουν την κατάσταση SELinux από Enforcing σε Permissive! Διαβάστε παρακάτω για να μάθετε περισσότερα!

ο OnePlus 3 και το OnePlus 3T είναι από τα καλύτερα τηλέφωνα που μπορείτε να αγοράσετε αυτή τη στιγμή. Ενώ οι επερχόμενες ναυαρχίδες του 2017 δεν έχουν ακόμη αποκαλυφθεί στους καταναλωτές, ελλείψει τους Το OnePlus 3/3T κυριαρχεί στις πραγματικές επιδόσεις σε προσιτή τιμή.

Αλλά, αν θέλουμε να είμαστε δίκαιοι στην αξιολόγηση της συσκευής, πρέπει να αναγνωρίσουμε ότι παρά τις καλύτερες προσπάθειες της OnePlus, το OnePlus 3/3T δεν είναι χωρίς ελαττώματα. Για παράδειγμα, έχουμε αναφερθεί στο παρελθόν για ζητήματα ασφάλειας όπως π.χ Η OnePlus διαρρέει λεπτομέρειες IMEI μέσω του δικτύου όταν ελέγχετε για ενημερώσεις στο τηλέφωνό σας. Και τώρα, έχουμε άλλο ένα ζήτημα ασφάλειας να προσθέσουμε στη λίστα, αυτό με δυνητικά πιο επικίνδυνες συνέπειες.

Μια ευπάθεια στον bootloader του OnePlus 3/3T ανοίγει πόρτες σε κακόβουλες επιθέσεις. Όπως διαπιστώθηκε από τον Roee Hay της ερευνητικής ομάδας ασφάλειας εφαρμογών IBM X-Force και 

αποκαλύφθηκε στην πλατφόρμα IBM X-Force Exchange, αυτή η ευπάθεια επιτρέπει σε έναν εισβολέα να χειριστεί την κατάσταση SELinux στις συσκευές, μεταφέροντάς την έτσι σε λειτουργία επιτρεπόμενης. Το μόνο που χρειάζεται ο επιθετικός είναι είτε φυσική πρόσβαση στη συσκευή ή απομακρυσμένη πρόσβαση σε μια σύνδεση ADB στη συσκευή.

SELinux, ή το Security-Enhanced Linux, είναι μια λειτουργική μονάδα ασφαλείας πυρήνα Linux που επιτρέπει την πρόσβαση και τη διαχείριση των πολιτικών ασφαλείας. Το SELinux εισήχθη στο Android ξεκινώντας από το Android 4.3 και ρυθμίστηκε σε Επιβολή λειτουργία ως προεπιλογή από το Android 4.4. Αυτό το υποχρεωτικό σύστημα ελέγχου πρόσβασης βοηθά στην επιβολή των υφιστάμενων δικαιωμάτων ελέγχου πρόσβασης και προσπαθεί να αποτρέψει επιθέσεις κλιμάκωσης προνομίων. Αυτό λειτουργεί ως εμπόδιο για μη εξουσιοδοτημένο έλεγχο της συσκευής σας, όπως μια εφαρμογή ή μια ευπάθεια που στοχεύει να αποκτήσει κακόβουλη πρόσβαση root. Ρύθμιση του SELinux σε Επιβολή από προεπιλογή στο Android χρησιμεύει ως το πρώτο βήμα για την προστασία των κανονικών χρηστών από τέτοιες επιθέσεις.

Η αξιοποίηση της ευπάθειας είναι μάλλον απλή - στην πραγματικότητα, φαίνεται να είναι μια τεράστια παράβλεψη από την πλευρά της OnePlus αντί για το πώς θα φανταζόσασταν ότι θα μοιάζει η τυπική σας εκμετάλλευση. Αρχικά, ένας εισβολέας επανεκκινεί το OnePlus 3/3T σε λειτουργία «γρήγορης εκκίνησης» - εάν έχετε φυσική πρόσβαση, απλώς πατήστε το κουμπί Αύξηση έντασης κατά την εκκίνηση, αλλά αν δεν το κάνετε, μπορείτε να εκδώσετε την εντολή ADB adb reboot bootloader στη συσκευή. Η λειτουργία γρήγορης εκκίνησης στη συσκευή εκθέτει μια διασύνδεση USB, η οποία δεν θα πρέπει να επιτρέπει την ολοκλήρωση οποιασδήποτε ευαίσθητης εντολής ασφαλείας σε κλειδωμένες συσκευές. Αλλά στο OnePlus 3/3T, απλά εκδίδει το fastboot oem selinux permissive εντολή μέσω της διεπαφής fastboot εναλλάσσει τη λειτουργία SELinux από Επιβολή προς την Επιτρεπτικός.

fastboot oem selinux permissive
...
OKAY[ 0.045s]
finished. totaltime: 0.047s

...

OnePlus3:/ $ getenforce
Permissive
OnePlus3:/ $

Για να περιπλέξει περαιτέρω το πρόβλημα, τα OnePlus 3 και 3T δεν διαθέτουν καμία καταχώρηση στην «Σχετικά με την οθόνη» για να αναφέρουν την τρέχουσα κατάσταση SELinux της συσκευής. Ένα θύμα θα συνεχίσει να αγνοεί την παραβιασμένη κατάσταση της συσκευής του, εάν δεν είδε την εκμετάλλευση να χρησιμοποιείται ενεργά. Η έλλειψη καταχώρισης κατάστασης SELinux στην «Σχετικά με την οθόνη» λείπει τόσο από τις εκδόσεις Open Beta που βασίζονται στο Android 6.0 όσο και από τις επίσημες ROM του Android 7.0.

Υπάρχουν αρκετές εφαρμογές για την εναλλαγή της κατάστασης SELinux σε Permissive, όπως η SELinuxModeChanger εφαρμογή. Η εναλλαγή του SELinux μέσω αυτής της μεθόδου δεν επιτρέπει στην κατάσταση να παραμείνει μέσω επανεκκίνησης. Ωστόσο, μπορείτε χρησιμοποιήστε σενάρια να διατηρηθεί το Επιτρεπτικός Κατάσταση SELinux στις σκληρές επανεκκινήσεις. Και οι δύο αυτές μέθοδοι απαιτούν πρόσβαση root, πράγμα που σημαίνει ότι ο χρήστης έχει ήδη γνώση των κινδύνων στους οποίους εκτίθεται. Αλλά η κύρια διαφορά με την αλλαγή της λειτουργίας SELinux σε Επιτρεπτικός χρησιμοποιώντας την παραπάνω ευπάθεια είναι ότι όχι μόνο παραμένει στις σκληρές επανεκκινήσεις, το κάνει χωρίς να χρειάζεται πρόσβαση root.

Δεν υπάρχουν διορθωτικά μέτρα κατά της ευπάθειας από σήμερα.


ΕΚΣΥΓΧΡΟΝΙΖΩ:

Απευθυνθήκαμε σε Sultanxda, ένας από τους πιο αναγνωρισμένους προγραμματιστές προσαρμοσμένης ROM για συσκευές OnePlus, για να δούμε αν θα μπορούσε να μας βοηθήσει να μάθουμε περισσότερα σχετικά με αυτό το ζήτημα. Έσκαψε αμέσως τον κώδικα για να βρει τη βασική πηγή, αυτό βρήκε:

Ο τρόπος που το "fastboot oem selinux "Η εντολή λειτουργεί είναι ότι προσθέτει ένα επιπλέον όρισμα στη γραμμή εντολών του πυρήνα κατά την εκκίνηση του Linux. Το επιπλέον όρισμα έρχεται με τη μορφή "androidboot.selinux=", που μπορεί να είναι «επιτρεπτική». Εκεί τα πράγματα γίνονται αστεία: "androidboot.Τα ορίσματα στη γραμμή εντολών του πυρήνα αναλύονται από το init του Android. Σε μια κανονική έκδοση παραγωγής Android (κατασκευή "χρήστη"), το όρισμα "androidboot.selinux" αγνοείται εντελώς και το selinux είναι πάντα αναγκασμένο να επιβάλλει. Επομένως, αυτό το σφάλμα αποτελείται από δύο ζητήματα:

  1. Οι χρήστες μπορούν να κάνουν τον bootloader να περάσει μια σημαία που κανονικά θα έκανε το selinux επιτρεπτό σε ένα build ROM μηχανικής/εντοπισμού σφαλμάτων
  2. Η OnePlus τροποποίησε το init του Android για να τιμήσει τη σημαία "androidboot.selinux" ακόμη και για εκδόσεις ROM παραγωγής

Εδώ το init του Android έχει ρυθμιστεί ώστε να αγνοεί τη σημαία "androidboot.selinux" για εκδόσεις παραγωγής: https://android.googlesource.com/platform/system/core/+/android-6.0.0_r41/init/Android.mk#7

Η σημαία ALLOW_DISABLE_SELINUX στον πηγαίο κώδικα έχει οριστεί μόνο σε 1 για εντοπισμό σφαλμάτων χρήστη και εκδόσεις μηχανικής

(Η ROM μου δεν επηρεάζεται από αυτό επειδή κατασκευάζω τη ROM μου σε λειτουργία παραγωγής (χρήστη)

Έτσι το "androidboot.selinux" απλά αγνοείται στη ROM μου, το "fastboot oem selinux Η εντολή φαίνεται επίσης να είναι κάτι που δημιούργησε η OnePlus, καθώς δεν υπάρχει τέτοια εντολή στις πηγές του δημόσιου bootloader του CAF. Από την κορυφή του κεφαλιού μου, μπορώ να σκεφτώ 4 τρόπους για να το διορθώσω για χρήστες με ξεκλείδωτους bootloaders:

  1. Επεξεργαστείτε το bootloader για να αλλάξετε όλες τις εμφανίσεις της συμβολοσειράς "selinux" σε κάτι διαφορετικό (όπως "sclinux"), έτσι ώστε η σημαία να μην αναγνωρίζεται από το init του Android
  2. Επεξεργαστείτε το δυαδικό αρχείο Android init στο OxygenOS για να αντικαταστήσετε όλες τις παρουσίες του "androidboot.selinux" σε κάτι διαφορετικό (όπως "androidboot.sclinux") έτσι ώστε το Android init να μην το αναγνωρίζει σημαία androidboot.selinux
  3. Προσθέστε ένα hack στο πρόγραμμα οδήγησης της γραμμής εντολών του πυρήνα παρόμοιο με το SafetyNet bypass για να αποκρύψετε τη σημαία "androidboot.selinux" από το init του Android

Θα θέλαμε να ευχαριστήσουμε τον Sultanxda για τον χρόνο και την προσπάθειά του να μας βοηθήσει να καταλάβουμε τι συμβαίνει στα παρασκήνια. Απευθυνθήκαμε επίσης στην OnePlus, η οποία γνωρίζει την κατάσταση και εξετάζει το θέμα.


Ελπίζουμε η OnePlus να αναγνωρίσει δημόσια το σοβαρό πρόβλημα και να είναι διαφανής στα σχέδιά της για την επίλυσή του.