[Ενημέρωση: Επιδιορθώθηκε το δεύτερο θέμα ευπάθειας] Ανακαλύφθηκαν δύο κρίσιμα ελαττώματα ασφαλείας του Bootloader OnePlus 3/3T, ένα διορθώθηκε και άλλα που αντιμετωπίζονται

Ανακαλύφθηκαν δύο ελαττώματα που σχετίζονται με τον bootloader για το OnePlus 3 και το OnePlus 3T. Το ένα μπαλώθηκε, το άλλο αντιμετωπίζεται.

Από τη δημοσίευση αυτού του άρθρου, η έκδοση 4.0.3 του Oxygen OS έχει διορθώσει το δεύτερο θέμα ευπάθειας ασφαλείας που συζητείται σε αυτό το άρθρο, δηλαδή το dm-verity.

Πριν εισέλθετε στον υπέροχο κόσμο του rooting Android, των προσαρμοσμένων ROM, των πυρήνων και άλλων τροποποιήσεων, πρέπει πρώτα να ξεκλειδώσετε τον bootloader στη συσκευή σας.

Σε ορισμένες συσκευές (ιδιαίτερα στις επώνυμες εταιρείες), αυτό δημιουργεί πρόβλημα, καθώς οι χρήστες πρέπει να αντιμετωπίσουν σημαντικά τεχνικά εμπόδια για να μπορέσουν να ξεκλειδώσουν τον bootloader. Άλλες συσκευές όπως τα τηλέφωνα Huawei απαιτούν να ζητήσετε από τον OEM για έναν μοναδικό κωδικό ξεκλειδώματος του bootloader - ένα μικρό εμπόδιο στην είσοδο, αλλά όχι πολύ δύσκολο. Ακόμα καλύτερα είναι τα τηλέφωνα της σειράς Google Nexus/Pixel ή τα τηλέφωνα OnePlus που απαιτούν μόνο να επιλέξετε μια επιλογή στις Ρυθμίσεις προγραμματιστή και να στείλετε μερικά γρήγορη μπότα εντολές.

Αλλά ανεξάρτητα από το πόσο δύσκολο μπορεί να είναι να ξεκλειδώσετε το bootloader σας, ένα πράγμα θα παραμένει πάντα σταθερό: η απαίτηση να σκουπίζετε τη συσκευή κατά το ξεκλείδωμα. Αυτό γίνεται για προφανείς λόγους ασφαλείας, καθώς ολόκληρο το διαμέρισμα δεδομένων σας μπορεί εύκολα να εξαχθεί μόλις ξεκλειδωθεί ο bootloader. Μια κακόβουλη οντότητα (με την τεχνική τεχνογνωσία) θα μπορούσε να εκκινήσει μια προσαρμοσμένη ανάκτηση και να εξαγάγει ένα πλήρες αντίγραφο ασφαλείας της συσκευής σας, εάν αποκτήσει πρόσβαση στα δεδομένα σας. Αυτός είναι ο λόγος για τον οποίο το ξεκλείδωμα του bootloader σας θεωρείται κίνδυνος ασφαλείας και γι' αυτό η συσκευή σας σκουπίζεται μετά το ξεκλείδωμα. Υποθέτοντας ότι όλα πάνε όπως θα έπρεπε, ένας τακτικός χρήστης θα πρέπει να είναι ασφαλής από τους εισβολείς που ξεκλειδώνουν το bootloader για να παρακάμψει τις τυπικές μεθόδους κλειδώματος Android. Δεν πάνε όλα σύμφωνα με το σχέδιο, ωστόσο.


Ευπάθεια ξεκλειδώματος του OnePlus 3/3T Bootloader

Ένα νέο σύνολο τρωτών σημείων ήταν μόλις αποκαλύφθηκε από τον Roee Hay (@roeehay), το πρώτο από τα οποία επιτρέπει το ξεκλείδωμα του bootloader του OnePlus 3/3T χωρίς επιβεβαίωση χρήστη και χωρίς ενεργοποίηση επαναφοράς εργοστασιακών ρυθμίσεων. Αυτή η ευπάθεια, με ετικέτα CVE-2017-5625, θεωρείται μια ευπάθεια κρίσιμης σοβαρότητας και επηρεάζει όλες τις συσκευές OnePlus 3/3T που εκτελούνται σε OxygenOS 3.2-4.0.1. Χρήστες που έχουν ήδη αναβαθμιστεί στο αυξητικό OxygenOS 4.0.2 εκσυγχρονίζω δεν επηρεάζονται λόγω αυτής της ευπάθειας, καθώς ο κ. Hay αποκάλυψε ιδιωτικά αυτό το ελάττωμα στην OnePlus στις 23 Ιανουαρίου ώστε να μπορούν να επιδιορθώσουν το ζήτημα αμέσως.

Το ελάττωμα λειτουργεί με την αποστολή μιας αποκλειστικής, κρυφής εντολής fastboot: fastboot oem 4F500301. Με την αποστολή αυτής της εντολής, η κατάσταση κλειδώματος του bootloader του χρήστη παρακάμπτεται (ακόμη και όταν το "Να επιτρέπεται το ξεκλείδωμα OEM" δεν έχει ενεργοποιηθεί στις Ρυθμίσεις προγραμματιστή). Η συσκευή δεν προτρέπει τον χρήστη ούτε σκουπίζει τη συσκευή όπως θα έπρεπε - στην πραγματικότητα, η συσκευή θα εξακολουθεί να αναφέρει ότι ο bootloader είναι κλειδωμένος! Μια άλλη εντολή fastboot, fastboot oem 4F500302, θα επαναφέρει ορισμένες ρυθμίσεις του bootloader και μπορεί να χρησιμοποιηθεί για το κλείδωμα μιας ήδη ξεκλειδωμένης συσκευής.

Ο κύριος Hay ανακάλυψε ότι η πρώτη εντολή fastboot ορίζει αυτό που έχει ονομάσει "magicFlag" που παρακάμπτει τον έλεγχο που καθορίζει την κατάσταση κλειδώματος του bootloader κατά την εκτέλεση μιας εντολής που αναβοσβήνει ή διαγράφει.

// 'oem 4F500301' handler
intsub_918427F0()
{
magicFlag_dword_91989C10 = 1;
if ( dword_9198D804 != dword_9198D804 )
assert(1, dword_9198D804, dword_9198D804);
return sendOK((int)"", dword_9198D804);
}

Fastboot Flash Handler


// 'flash' handler
constchar *__fastcall sub_91847EEC(char *partitionName, int *a2, int a3)
{
char *pname; // r5@1
...
pname = partitionName;
v4 = a2;
v5 = a3;
if ( returnTRUE1(partitionName, (int)a2) )
{
result = (constchar *)sub_918428F0(pname, v6);
if ( (result || magicFlag_dword_91989C10)
&& ((result = (constchar *)sub_91842880(pname, v10)) != 0 || magicFlag_dword_91989C10) )
{
result = (constchar *)sub_918428F0(pname, v10);
if ( !result || magicFlag_dword_91989C10 )
goto LABEL_7;
v8 = dword_9198D804;
if ( dword_9198D804 != dword_9198D804 )
goto LABEL_28;
v11 = "Critical partition flashing is not allowed";
}
else
{
v8 = dword_9198D804;
if ( dword_9198D804 != dword_9198D804 )
goto LABEL_28;
v11 = "Partition flashing is not allowed";
}
return (constchar *)FAIL2((int)v11, v10);
}
LABEL_7:
...
if ( *v4 != 0xED26FF3A )
{
if ( *v4 == 0xCE1AD63C )
cmd_flash_meta_img(pname, (unsigned int)v4, v5);
else
cmd_flash_mmc_img(pname, (int)v4, v5);
goto LABEL_10;
}
v7 = v4;
}
cmd_flash_mmc_sparse_img(pname, (int)v7, v5);
...
 }

Διαβάστε περισσότερα

Fastboot Erase Handler


// 'erase' handler
int __fastcall sub_91847118(char *partitionName, int a2, int a3)
{
 ...
v3 = partitionName;
v4 = returnTRUE1(partitionName, a2);
if ( !v4 )
{
LABEL_7:
...
if ( v4 )
{
if ( dword_9198D804 == dword_9198D804 )
return eraseParition(v3);
}
...
}
v4 = sub_918428F0(v3, v5);
if ( !v4 && !magicFlag_dword_91989C10 )
{
v6 = dword_9198D804;
if ( dword_9198D804 == dword_9198D804 )
{
v7 = "Partition erase is not allowed";
return FAIL2((int)v7, v5);
}
goto LABEL_23;
}
v4 = sub_91842880(v3, v5);
if ( !v4 && !magicFlag_dword_91989C10 )
{
v6 = dword_9198D804;
if ( dword_9198D804 == dword_9198D804 )
{
v7 = "Partition flashing is not allowed";
return FAIL2((int)v7, v5);
}
LABEL_23:
assert(v4, v5, v6);
}
v4 = sub_918428F0(v3, v5);
if ( !v4 || magicFlag_dword_91989C10 )
goto LABEL_7;
v6 = dword_9198D804;
...
v7 = "Critical partition erase is not allowed";
return FAIL2((int)v7, v5);
}

Διαβάστε περισσότερα

Το CVE-2017-5626 μπορεί να χρησιμοποιηθεί σε εκτέλεση κώδικα πυρήνα. Ένας εισβολέας μπορεί να αναβοσβήνει όποια εικόνα εκκίνησης θέλει. Ωστόσο, εάν αναβοσβήνει μια τροποποιημένη εικόνα εκκίνησης, το Verified Boot θα ξεκινήσει και θα προειδοποιήσει τον χρήστη ότι έχει εντοπιστεί μια τροποποίηση. Ένας τρόπος για να παρακαμφθεί αυτό είναι να αναβοσβήνει μια παλαιότερη, μη τροποποιημένη εικόνα εκκίνησης - μια που περιέχει παλαιότερα exploit που έκτοτε έχουν διορθωθεί. Ακόμα κι έτσι, η "προειδοποίηση" που σας δίνεται διαρκεί μόνο για 5 δευτερόλεπτα και αυτόματα απορρίπτεται και εκκινείται στην κατάσταση επαληθευμένης εκκίνησης όπου ο κώδικας του εισβολέα θα εξακολουθεί να εκτελείται.

Ο κ. Hay αναφέρει ότι υπάρχουν πολλοί τρόποι με τους οποίους αυτό το ελάττωμα μπορεί να αξιοποιηθεί με κακόβουλο τρόπο. Για παράδειγμα, τροποποίησε μια εικόνα εκκίνησης για να ορίσει τη λειτουργία SELinux επιτρεπτικός καθώς και να περιλαμβάνει αυτόματα πρόσβαση στο ADB κατά την εκκίνηση. Στη συνέχεια, αφού εκμεταλλεύτηκε αυτήν την ευπάθεια για να αναβοσβήνει την τροποποιημένη εικόνα εκκίνησης του, μπόρεσε να αποκτήσει πρόσβαση σε α ριζικό κέλυφος προτού ακόμη ο χρήστης μπορέσει να εισαγάγει τα διαπιστευτήριά του.

OnePlus3:/ # id
uid=0(root) gid=0(root) groups=0(root),1004(input),1007(log),1011(adb),
1015(sdcard_rw),1028(sdcard_r),3001(net_bt_admin),3002(net_bt),
3003(inet),3006(net_bw_stats),3009(readproc) context=u: r: su: s0

OnePlus3:/ # getenforce
Permissive

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


Ευπάθεια OnePlus 3/3T SELinux

Η δεύτερη ευπάθεια, με την ένδειξη CVE-2017-5624, επηρεάζει όλες οι εκδόσεις του OxygenOS και επιτρέπει σε κάποιον να απενεργοποιήστε το dm-verity. Ο κ. Hay αποκάλυψε αυτό το θέμα ευπάθειας στην ομάδα ασφαλείας του OnePlus 16 Ιανουαρίου, αλλά πρέπει να σημειωθεί ότι το XDA Senior Member th3g1zανακάλυψε ανεξάρτητα αυτή την ευπάθεια επί 23 Ιανουαρίου. Έχουμε μιλήσει με την OnePlus που έχει επιβεβαίωσαν ότι έχουν αναγνωρίσει και θα διορθώσουν αυτό το δεύτερο θέμα ευπάθειας σε μελλοντική ενημέρωση.

Αυτή η επίθεση είναι επίσης αρκετά απλή στην εκτέλεση. Χρειάζεται μόνο να εκδοθεί μια εντολή fastboot για να απενεργοποιήσετε (ή να ενεργοποιήσετε) το dm-verity: fastboot oem disable dm-verity. Για να το ενεργοποιήσετε, απλώς εκδώστε fastboot oem enable dm-verity. Ο χειριστής αυτής της εντολής, που λαμβάνεται από μια ένδειξη του bootloader, φαίνεται παρακάτω.


// 'oem disable_dm_verity' handler
intsub_9183B8EC()
{
int v0; // r0@1
int v1; // r1@1

dmVerity_dword_91960740 = 0;
v0 = sub_91845E10("ANDROID-BOOT!");
if ( dword_9198D804 != dword_9198D804 )
assert(v0, v1, dword_9198D804);
return sendOK((int)"", v1);
}

Η έκδοση αυτής της εντολής θα ορίσει μια σημαία, την οποία ο κ. Hay αποκαλεί dmVerity, η οποία χρησιμοποιείται από τον bootloader για να στείλει ένα όρισμα γραμμής εντολών του πυρήνα που μπορεί να ενεργοποιήσει ή να απενεργοποιήσει το dm-verity.

Αυτό μπορεί να χρησιμοποιηθεί σε συνδυασμό με την πρώτη ευπάθεια για την εκτέλεση εξαιρετικά προνομιακού κώδικα στο OnePlus 3/3T χωρίς τη συγκατάθεση του χρήστη - και με πρόσβαση στα δεδομένα του χρήστη. Για παράδειγμα, ο κ. Hay μπόρεσε να εγκαταστήσει μια εφαρμογή στο /system/priv-app που προκαλεί την προσθήκη της εφαρμογής στον τομέα priv-app. Αυτό επιτρέπει σε μια κακόβουλη εφαρμογή να έχει πρόσβαση σε εξαιρετικά προνομιακές λειτουργίες της συσκευής. Ο κ. Hay δείχνει ότι και τα δύο αυτά τρωτά σημεία αξιοποιούνται ταυτόχρονα στο παρακάτω βίντεο. Όπως μπορείτε να δείτε, όταν εκκινεί τη συσκευή, η εφαρμογή που κατασκεύασε φαίνεται ότι είναι ήδη προεγκατεστημένη.


Συμπέρασμα & Σημείωση από την OnePlus

Οι πιθανές καταχρήσεις αυτών των δύο τρωτών σημείων ασφαλείας είναι τρομακτικές. Επαινούμε τον κ. Hay που αποκάλυψε αυτές τις ευπάθειες ιδιωτικά και τόσο γρήγορα στην OnePlus. Ωστόσο, δεν μπορούμε παρά να ανησυχούμε ότι τέτοιες εντολές fastboot είναι προσβάσιμες σε αυτές τις συσκευές. Όταν γράψαμε έναν οδηγό για το πώς να ανακαλύψτε κρυφές εντολές fastboot, πρόθεσή μας ήταν να ενημερώσουμε τους χρήστες ότι μπορεί να υπάρχουν κάποιες ενδιαφέρουσες εντολές που μπορούν να χρησιμοποιήσουν για να βελτιώσουν την εμπειρία τους. Ποτέ δεν πιστεύαμε ότι τέτοιες εξαιρετικά προνομιακές εντολές θα βρίσκονταν στον κώδικα του bootloader. Οσον αφορά "Γιατί" αυτές οι εντολές fastboot περιλαμβάνονται στο υλικολογισμικό, μας δόθηκε ένα "κανένα σχόλιο." 

Προς το παρόν, εάν δεν έχετε ενημερώσει το OnePlus 3/3T μόλις κυκλοφορήσει κάθε έκδοση του Oxygen OS, σας προτείνουμε ενημερώστε αμέσως. Η ενημέρωση στο Oxygen OS 4.0.2 θα σας προστατεύσει από την πρώτη ευπάθεια, αλλά θα πρέπει να περιμένουμε μέχρι το OnePlus κυκλοφορεί μια ενημέρωση που διορθώνει τη δεύτερη ευπάθεια προτού μπορέσουμε να πούμε ότι είστε πλήρως ασφαλείς από αυτές κατορθώματα. Θα πρέπει να είμαστε σε επιφυλακή για τέτοιου είδους κατορθώματα στο μέλλον.


Πηγή: Roee Hay