„OnePlus 3/3T“ įkrovos įkrovos pažeidžiamumas leidžia „SELinux“ pakeisti į leistiną režimą „Fastboot“

Rimtas „OnePlus 3/3T“ įkrovos įkrovos pažeidžiamumas leidžia užpuolikams perjungti SELinux būseną iš priverstinio į leistiną! Skaitykite toliau, kad sužinotumėte daugiau!

The OnePlus 3 ir „OnePlus 3T“. yra vieni geriausių telefonų, kuriuos šiuo metu galite įsigyti. Nors būsimi 2017 m. flagmanai dar turi būti atskleisti vartotojams, jei jų nėra, „OnePlus 3/3T“ dominuoja realiame pasaulyje už prieinamą kainą.

Tačiau jei norime būti sąžiningi vertindami įrenginį, turime pripažinti, kad nepaisant visų „OnePlus“ pastangų, „OnePlus 3/3T“ nėra be trūkumų. Pavyzdžiui, anksčiau pranešėme apie tokias saugumo problemas kaip „OnePlus“ nutekėjo IMEI duomenys tinkle, kai tikrinate, ar telefone yra naujinimų. O dabar į sąrašą turime įtraukti dar vieną saugumo problemą, kuri gali turėti pavojingesnių pasekmių.

„OnePlus 3/3T“ įkrovos įkrovos pažeidžiamumas atveria duris kenkėjiškoms atakoms. Kaip nustatė Roee Hay iš IBM X-Force taikomųjų programų saugos tyrimų komandos ir atskleista IBM X-Force Exchange platformoje

, šis pažeidžiamumas leidžia užpuolikui manipuliuoti SELinux būsena įrenginiuose ir taip perjungti ją į leistiną režimą. Viskas, ko reikia užpuolikui arba fizinę prieigą prie įrenginio arba nuotolinė prieiga prie ADB ryšio prie įrenginio.

SELinux, arba patobulinta „Linux“, yra „Linux“ branduolio saugos modulis, leidžiantis pasiekti ir valdyti saugos politiką. SELinux buvo pristatytas „Android“, pradedant nuo 4.3 versijos „Android“, ir buvo nustatytas Vykdymas režimas kaip numatytasis nuo 4.4 versijos Android. Ši privaloma prieigos kontrolės sistema padeda užtikrinti esamas prieigos kontrolės teises ir bando užkirsti kelią privilegijų eskalavimo atakoms. Tai veikia kaip kliūtis neteisėtai valdyti įrenginį, pvz., programą ar pažeidžiamumą, kuriuo siekiama piktybiškai įgyti šakninę prieigą. SELinux nustatymas į Vykdymas pagal numatytuosius nustatymus „Android“ yra pirmasis žingsnis siekiant apsaugoti įprastus vartotojus nuo tokių atakų.

Pažeidžiamumą išnaudoti gana paprasta – iš tikrųjų atrodo, kad tai yra didžiulė „OnePlus“ klaida, o ne tai, kaip įsivaizduotumėte savo tipišką išnaudojimą. Pirma, užpuolikas iš naujo paleidžia „OnePlus 3/3T“ į „fastboot“ režimą – jei turite fizinę prieigą, įkrovos metu tiesiog paspauskite garsumo didinimo mygtuką, bet jei ne, galite išduoti ADB komandą. adb reboot bootloader prie įrenginio. Įrenginio greitosios įkrovos režimas atskleidžia USB sąsają, kuri neturėtų leisti atlikti jokių saugumo jautrių komandų užrakintuose įrenginiuose. Tačiau „OnePlus 3/3T“ tiesiog išduodami fastboot oem selinux permissive komanda per greitosios įkrovos sąsają perjungia SELinux režimą iš Vykdymas į Leidžiantis.

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

...

OnePlus3:/ $ getenforce
Permissive
OnePlus3:/ $

Siekiant dar labiau apsunkinti problemą, „OnePlus 3“ ir „3T“ neturi jokio įrašo „Apie ekraną“, kad būtų paminėta dabartinė įrenginio SELinux būsena. Auka ir toliau nepastebės pažeistos savo įrenginio būsenos, jei nematė, kad išnaudojimas buvo aktyviai naudojamas. SELinux būsenos įrašo skiltyje „Apie ekraną“ trūksta „Android 6.0“ pagrįstų „Open Beta“ leidimų ir „Android 7.0“ oficialių ROM.

Yra keletas programų, skirtų perjungti SELinux būseną į Leidžiama, pavyzdžiui, SELinuxModeChanger taikymas. Perjungus SELinux šiuo metodu, būsena išliks perkrovus. Nors, tu gali naudoti scenarijus išlaikyti Leidžiantis SELinux būsena per kietą paleidimą iš naujo. Abu šie metodai reikalauja root prieigos, o tai reiškia, kad vartotojas jau žino apie jam kylančią riziką. Tačiau pagrindinis skirtumas keičiant SELinux režimą į Leidžiantis naudojant minėtą pažeidžiamumą yra tai, kad ne tik išlieka per kietus perkrovimus, tai daro nereikalaujant root prieigos.

Šiuo metu nėra jokių priemonių nuo pažeidžiamumo.


ATNAUJINIMAS:

Mes pasiekėme Sultanxda, vienas iš labiausiai pripažintų tinkintų ROM kūrėjų, skirtų „OnePlus“ įrenginiams, norėdami sužinoti, ar jis galėtų mums padėti sužinoti daugiau apie šią problemą. Jis nedelsdamas įsigilino į kodą, kad surastų šakninį šaltinį, štai ką jis rado:

Taip, kaip „fastboot oem selinux " komanda veikia tuo, kad paleidžiant Linux į branduolio komandų eilutę prideda papildomą argumentą. Papildomas argumentas pateikiamas „androidboot.selinux=“, kur gali būti „leidžiantis“. Čia viskas tampa juokinga: „androidboot.Argumentus branduolio komandinėje eilutėje analizuoja „Android“ init. Įprastoje „Android“ gamybinėje versijoje („vartotojo“ versijoje) argumentas „androidboot.selinux“ yra visiškai ignoruojamas ir „selinux“ visada yra priverstas jį vykdyti. Taigi šią klaidą sudaro dvi problemos:

  1. Vartotojai gali priversti įkrovos įkroviklį perduoti vėliavėlę, dėl kurios „Selinux“ paprastai būtų leidžiamas inžinerijos / derinimo ROM versijoje
  2. „OnePlus“ modifikavo „Android“ pradinę versiją, kad pagerbtų „androidboot.selinux“ vėliavą net ir gamybinės ROM versijose

Štai kur „Android“ init sukonfigūruotas taip, kad gamybinėse versijose būtų nepaisoma „androidboot.selinux“ vėliavėlės: https://android.googlesource.com/platform/system/core/+/android-6.0.0_r41/init/Android.mk#7

Žyma ALLOW_DISABLE_SELINUX šaltinio kode yra nustatyta tik kaip 1, kai naudojama vartotojo derinimo ir inžinerinių versijų

(Mano ROM tai neturi įtakos, nes aš kuriu savo ROM gamybos (vartotojo) režimu)

Taigi „androidboot.selinux“ tiesiog ignoruojamas mano ROM, „fastboot oem selinux“ Atrodo, kad komanda taip pat yra kažkas, ką sukūrė „OnePlus“, nes CAF viešuosiuose įkrovos šaltiniuose tokios komandos nėra. Iš galvos galiu sugalvoti 4 būdus, kaip tai išspręsti vartotojams, turintiems atrakintas įkrovos tvarkykles:

  1. Hex-redaguokite įkrovos įkroviklį, kad pakeistumėte visus eilutės „selinux“ egzempliorius į kitokius (pvz., „sclinux“), kad vėliavėlės neatpažintų „Android“ init.
  2. Šešioliktainiu būdu redaguokite Android pradinį dvejetainį failą OxygenOS, kad pakeistumėte visus „androidboot.selinux“ egzempliorius į kažkas kitokio (pvz., „androidboot.sclinux“), kad „Android init“ neatpažintų androidboot.selinux vėliava
  3. Pridėkite branduolio komandinės eilutės tvarkyklės įsilaužimą, panašų į mano „SafetyNet“ aplinkkelį, kad paslėptumėte „androidboot.selinux“ vėliavėlę nuo „Android“ pradžios.

Norėtume padėkoti Sultanxda už jo laiką ir pastangas padedant mums išsiaiškinti, kas vyksta užkulisiuose. Taip pat susisiekėme su „OnePlus“, kuri žino situaciją ir tiria šį klausimą.


Tikimės, kad „OnePlus“ viešai pripažįsta rimtą problemą ir skaidriai planuoja ją išspręsti.