Ranjivost pokretačkog programa OnePlus 3/3T omogućuje promjenu SELinuxa u dopustivi način rada u Fastbootu

Ozbiljna ranjivost u OnePlus 3/3T bootloaderu omogućuje napadačima da prebace SELinux stanje iz Enforcing u Permissive! Čitajte dalje da biste saznali više!

The OnePlus 3 i OnePlus 3T su među najboljim telefonima koje trenutno možete kupiti. Dok nadolazeće vodeće modele za 2017. tek treba otkriti potrošačima, u njihovoj odsutnosti OnePlus 3/3T dominira performansama u stvarnom svijetu po pristupačnoj cijeni.

Ali, ako ćemo biti pošteni u procjeni uređaja, moramo priznati da unatoč naporima OnePlusa, OnePlus 3/3T nisu bez mana. Na primjer, ranije smo izvještavali o sigurnosnim problemima kao što su OnePlus otkriva IMEI podatke putem mreže kada provjeravate ažuriranja na svom telefonu. A sada imamo još jedno sigurnosno pitanje koje treba dodati na popis, ovo s potencijalno opasnijim posljedicama.

Ranjivost u pokretačkom programu OnePlus 3/3T otvara vrata zlonamjernim napadima. Kako je otkrio Roee Hay iz tima za istraživanje sigurnosti aplikacija IBM X-Force i otkriveno na platformi IBM X-Force Exchange

, ova ranjivost omogućuje napadaču da manipulira stanjem SELinuxa na uređajima, čime ga prebacuje u dopustivi način rada. Sve što napadač treba je bilo fizički pristup na uređaj, ili udaljeni pristup ADB vezi na uređaj.

SELinux, ili Linux s poboljšanom sigurnošću, sigurnosni je modul jezgre Linuxa koji omogućuje pristup i upravljanje sigurnosnim pravilima. SELinux je uveden u Android počevši od Androida 4.3 i postavljen je na Provođenje način kao zadani od Androida 4.4. Ovaj obvezni sustav kontrole pristupa pomaže u provedbi postojećih prava kontrole pristupa i pokušava spriječiti napade eskalacije privilegija. To djeluje kao prepreka za neovlaštenu kontrolu nad vašim uređajem, poput aplikacije ili ranjivosti koja ima za cilj zlonamjerno dobivanje root pristupa. Postavljanje SELinuxa na Provođenje prema zadanim postavkama na Androidu služi kao prvi korak za zaštitu običnih korisnika od takvih napada.

Ranjivost je prilično jednostavna za iskorištavanje - zapravo, čini se da je riječ o ogromnom propustu OnePlusa, a ne o onome kako biste zamislili da bi vaše tipično iskorištavanje izgledalo. Prvo, napadač ponovno pokreće OnePlus 3/3T u 'fastboot' modu - ako imate fizički pristup, jednostavno pritisnite tipku za povećanje glasnoće tijekom pokretanja, ali ako nemate, možete izdati ADB naredbu adb reboot bootloader na uređaj. Način brzog pokretanja na uređaju izlaže USB sučelje, koje ne bi trebalo dopustiti dovršetak nijedne sigurnosno osjetljive naredbe na zaključanim uređajima. Ali na OnePlus 3/3T, jednostavno izdavanje fastboot oem selinux permissive naredba kroz sučelje za brzo pokretanje prebacuje SELinux način iz Provođenje do Permisivan.

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

...

OnePlus3:/ $ getenforce
Permissive
OnePlus3:/ $

Da bi se problem dodatno zakomplicirao, OnePlus 3 i 3T ne posjeduju nikakav unos u 'About Screenu' koji bi spominjao trenutno SELinux stanje uređaja. Žrtva će i dalje ostati nesvjesna ugroženog stanja svog uređaja ako nije svjedočila aktivnom korištenju exploita. Nedostatak unosa SELinux stanja u 'About Screenu' nedostaje u Android 6.0 temeljenim Open Beta izdanjima kao iu Android 7.0 službenim ROM-ovima.

Postoji nekoliko aplikacija za prebacivanje SELinux stanja u Permissive, kao što je SELinuxModeChanger primjena. Prebacivanje SELinuxa ovom metodom ne dopušta postojanje stanja nakon ponovnog pokretanja. Ipak, možete koristiti skripte održavati Permisivan Stanje SELinuxa tijekom tvrdih ponovnih pokretanja. Obje ove metode zahtijevaju root pristup, što znači da korisnik već ima saznanja o rizicima kojima je izložen. Ali glavna razlika kod promjene SELinux načina rada na Permisivan korištenje gornje ranjivosti je da ne samo ustraje nakon teškog ponovnog pokretanja, to čini bez potrebe za root pristupom.

Od danas ne postoje lijekovi protiv ranjivosti.


AŽURIRAJ:

Posegnuli smo za Sultanxda, jednog od najpriznatijih programera prilagođenih ROM-ova za OnePlus uređaje, kako bismo vidjeli može li nam pomoći da saznamo više o ovom problemu. Odmah je kopao po kodu kako bi pronašao root izvor, ovo je što je pronašao:

Način na koji "fastboot oem selinux " naredba radi je da dodaje dodatni argument u naredbeni redak jezgre prilikom dizanja Linuxa. Dodatni argument dolazi u obliku "androidboot.selinux=", gdje može biti "permisivan". Tu stvari postaju smiješne: "androidboot." argumente u naredbenom retku jezgre analizira Android init. U normalnoj proizvodnoj verziji Androida ("korisnička" verzija), argument "androidboot.selinux" potpuno se zanemaruje i selinux se uvijek prisiljava na primjenu. Dakle, ovaj se bug sastoji od dva problema:

  1. Korisnici mogu natjerati bootloader da proslijedi oznaku koja bi inače selinux učinila permisivnim na izgradnji ROM-a za inženjering/otklanjanje pogrešaka
  2. OnePlus je modificirao Androidov init kako bi poštovao oznaku "androidboot.selinux" čak i za proizvodne ROM verzije

Evo gdje je Androidov init konfiguriran da zanemaruje oznaku "androidboot.selinux" za proizvodne verzije: https://android.googlesource.com/platform/system/core/+/android-6.0.0_r41/init/Android.mk#7

Oznaka ALLOW_DISABLE_SELINUX u izvornom kodu postavljena je samo na 1 za korisničke debug i inženjerske međugradnje

(Ovo ne utječe na moj ROM jer gradim svoj ROM u proizvodnom (korisničkom) načinu)

Dakle, "androidboot.selinux" je jednostavno zanemaren u mom ROM-u, "fastboot oem selinux" Čini se da je naredba također nešto što je stvorio OnePlus jer takva naredba ne postoji u CAF-ovim javnim izvorima za pokretanje sustava. Na pamet mi padaju 4 načina da to popravim za korisnike s otključanim bootloaderima:

  1. Hex-uredite bootloader da promijenite sve instance niza "selinux" u nešto drugo (kao što je "sclinux") tako da zastavu neće prepoznati Android init
  2. Heksadecimalno uredite Android init binary u OxygenOS-u da biste zamijenili sve instance "androidboot.selinux" u nešto drugačije (kao što je "androidboot.sclinux") tako da Android init neće prepoznati androidboot.selinux zastava
  3. Dodajte hack u upravljački program naredbenog retka jezgre sličan mojoj SafetyNet zaobilaznici kako biste sakrili oznaku "androidboot.selinux" od Android init

Željeli bismo zahvaliti Sultanxdi na njegovom vremenu i trudu koji nam je pomogao da shvatimo što se događa iza kulisa. Također smo se obratili OnePlusu, koji je svjestan situacije i istražuje slučaj.


Nadamo se da će OnePlus javno priznati ozbiljan problem i biti transparentan u svojim planovima za njegovo rješavanje.