Vážna zraniteľnosť v zavádzači OnePlus 3/3T umožňuje útočníkom prepínať stav SELinux z vynútenia na povolený! Čítajte ďalej a dozviete sa viac!
The OnePlus 3 a OnePlus 3T patria medzi najlepšie telefóny, ktoré si teraz môžete kúpiť. Zatiaľ čo nadchádzajúce vlajkové lode z roku 2017 ešte nie sú spotrebiteľom odhalené, v prípade ich neprítomnosti OnePlus 3/3T dominuje výkonu v reálnom svete za dostupnú cenu.
Ale ak máme byť spravodliví pri hodnotení zariadenia, musíme uznať, že napriek maximálnemu úsiliu OnePlus, OnePlus 3/3T nie sú bez chýb. Predtým sme napríklad informovali o bezpečnostných problémoch ako napr OnePlus uniká podrobnosti o IMEI cez sieť pri kontrole aktualizácií v telefóne. A teraz musíme do zoznamu pridať ďalší bezpečnostný problém, tento s potenciálne nebezpečnejšími dôsledkami.
Zraniteľnosť v bootloaderi OnePlus 3/3T otvára dvere škodlivým útokom. Ako zistil Roee Hay z tímu IBM X-Force Application Security Research Team a odhalené na platforme IBM X-Force Exchange, táto zraniteľnosť umožňuje útočníkovi manipulovať so stavom SELinux na zariadeniach, čím ich prepne do permisívneho režimu. Všetko, čo útočník potrebuje, je
buď fyzický prístup do zariadenia, príp vzdialený prístup k pripojeniu ADB k zariadeniu.SELinux, alebo Security-Enhanced Linux, je bezpečnostný modul linuxového jadra, ktorý umožňuje prístup a správu bezpečnostných politík. SELinux bol predstavený pre Android počnúc Androidom 4.3 a bol nastavený na Presadzovanie režim ako predvolený od Androidu 4.4. Tento povinný systém kontroly prístupu pomáha presadzovať existujúce práva na kontrolu prístupu a pokúša sa zabrániť útokom eskalácie privilégií. Pôsobí to ako prekážka neoprávnenej kontroly nad vaším zariadením, ako je napríklad aplikácia alebo zraniteľnosť, ktorej cieľom je získať prístup root so zlým úmyslom. Nastavenie SELinuxu na Presadzovanie v predvolenom nastavení v systéme Android slúži ako prvý krok na ochranu bežných používateľov pred takýmito útokmi.
Zraniteľnosť sa dá pomerne jednoducho zneužiť – v skutočnosti sa zdá, že zo strany OnePlus ide o obrovský nedbanlivosť, a nie o to, ako by ste si predstavovali, ako by vyzeral váš typický exploit. Po prvé, útočník reštartuje OnePlus 3/3T do režimu „rýchleho spustenia“ – ak máte fyzický prístup, jednoducho počas zavádzania stlačte tlačidlo zvýšenia hlasitosti, ale ak nie, môžete zadať príkaz ADB. adb reboot bootloader
k zariadeniu. Režim rýchleho spustenia na zariadení odhaľuje rozhranie USB, ktoré by nemalo umožniť dokončenie žiadneho príkazu citlivého na zabezpečenie na uzamknutých zariadeniach. Ale na OnePlus 3/3T jednoducho vydáte fastboot oem selinux permissive
príkaz cez rozhranie rýchleho spustenia prepína z režimu SELinux Presadzovanie do Povoľný.
fastboot oem selinux permissive
...
OKAY[ 0.045s]
finished. totaltime: 0.047s...
OnePlus3:/ $ getenforce
Permissive
OnePlus3:/ $
Aby sa problém ešte viac skomplikoval, OnePlus 3 a 3T nemajú na obrazovke „O obrazovke“ žiadnu položku, ktorá by spomenula aktuálny stav SELinux zariadenia. Ak obeť nebude svedkom aktívneho využívania zneužitia, bude aj naďalej ignorovať napadnutý stav svojho zariadenia. Chýbajúca položka stavu SELinux na obrazovke „O obrazovke“ chýba vo vydaniach Open Beta založených na systéme Android 6.0, ako aj v oficiálnych ROM pre Android 7.0.
Existuje niekoľko aplikácií na prepnutie stavu SELinux na Permisívny, ako napríklad SELinuxModeChanger aplikácie. Prepnutie SELinux prostredníctvom tejto metódy neumožňuje, aby stav pretrvával počas reštartu. Aj keď, môžete používať skripty zachovať Povoľný Stav SELinux počas tvrdých reštartov. Obe tieto metódy vyžadujú prístup root, čo znamená, že používateľ už pozná riziká, ktorým je vystavený. Ale hlavný rozdiel so zmenou režimu SELinux na Povoľný pomocou vyššie uvedenej zraniteľnosti je nielen to pretrváva počas tvrdých reštartov, robí tak bez potreby prístupu root.
V súčasnosti neexistujú žiadne opravné prostriedky proti tejto zraniteľnosti.
AKTUALIZÁCIA:
Natiahli sme sa na Sultanxda, jedného z najuznávanejších vývojárov vlastných ROM pre zariadenia OnePlus, aby sme zistili, či by nám mohol pomôcť dozvedieť sa viac o tomto probléme. Okamžite sa pohrabal v kóde, aby našiel koreňový zdroj, našiel toto:
Spôsob, akým „fastboot oem selinux
- Používatelia môžu nastaviť, aby bootloader odovzdal príznak, ktorý by za normálnych okolností umožnil selinuxu povoliť zostavenie ROM pre inžinierstvo/ladenie
- OnePlus upravil init Android tak, aby ctil vlajku „androidboot.selinux“ aj pre produkčné zostavy ROM
Tu je miesto, kde je init systému Android nakonfigurovaný tak, aby ignoroval príznak „androidboot.selinux“ pre produkčné zostavy: https://android.googlesource.com/platform/system/core/+/android-6.0.0_r41/init/Android.mk#7
Príznak ALLOW_DISABLE_SELINUX v zdrojovom kóde je nastavený iba na 1 pre používateľské ladenie a inžinierske zostavy
(Moja ROM nie je ovplyvnená, pretože svoju ROM zostavujem v produkčnom (používateľskom) režime)
Takže "androidboot.selinux" je jednoducho ignorovaný v mojej ROM, "fastboot oem selinux
- Hexadecimálne upravte bootloader, aby ste zmenili všetky inštancie reťazca „selinux“ na niečo iné (napríklad „sclinux“), aby init systému Android nerozpoznal príznak
- Hexadecimálne upravte binárny súbor Android init v OxygenOS, aby ste nahradili všetky inštancie "androidboot.selinux" na niečo iné (napríklad "androidboot.sclinux"), takže inicializácia systému Android nerozpozná súbor príznak androidboot.selinux
- Pridajte hack do ovládača príkazového riadka jadra, ktorý je podobný môjmu bypassu SafetyNet, aby ste skryli príznak „androidboot.selinux“ z init systému Android
Chceli by sme poďakovať Sultanxdovi za jeho čas a úsilie, ktoré nám pomohol zistiť, čo sa deje v zákulisí. Oslovili sme aj spoločnosť OnePlus, ktorá si je vedomá situácie a vec skúma.
Dúfame, že OnePlus verejne prizná vážny problém a bude transparentný vo svojich plánoch na jeho odstránenie.