A OnePlus 3/3T rendszerbetöltő sebezhetősége lehetővé teszi a SELinux átváltását megengedő módra a Fastbootban

A OnePlus 3/3T rendszerbetöltő súlyos biztonsági rése lehetővé teszi a támadók számára, hogy a SELinux állapotát Enforcingról Engedélyesre váltsák! Olvasson tovább, ha többet szeretne megtudni!

A OnePlus 3 és a OnePlus 3T a jelenleg megvásárolható legjobb telefonok közé tartoznak. Míg 2017 közelgő zászlóshajóit még nem tárták a fogyasztók elé, ezek hiányában a A OnePlus 3/3T uralja a valós teljesítményt megfizethető áron.

De ha igazságosak akarunk lenni az eszköz értékelése során, el kell ismernünk, hogy a OnePlus minden erőfeszítése ellenére a OnePlus 3/3T nem hibás. Korábban például már beszámoltunk olyan biztonsági problémákról, mint pl A OnePlus kiszivárogtatja az IMEI-adatokat hálózaton keresztül, amikor frissítéseket keres a telefonon. És most van egy másik biztonsági probléma, amelyet hozzá kell adnunk a listához, ez a potenciálisan veszélyesebb következményekkel járó probléma.

A OnePlus 3/3T rendszerbetöltőjének sebezhetősége rosszindulatú támadásokat nyit meg. Amint azt Roee Hay, az IBM X-Force Application Security Research Team munkatársa megállapította 

kiderült az IBM X-Force Exchange platformon, ez a biztonsági rés lehetővé teszi a támadók számára, hogy manipulálják a SELinux állapotát az eszközökön, és ezáltal átváltsák azt megengedő módba. A támadónak csak annyi kell akár fizikai hozzáférést a készülékhez, ill távoli hozzáférés egy ADB-kapcsolathoz a készülékhez.

SELinux, vagy a Security-Enhanced Linux, egy Linux kernel biztonsági modul, amely lehetővé teszi a biztonsági házirendek elérését és kezelését. A SELinux-ot az Android 4.3-tól kezdődően vezették be az Android rendszerbe, és be volt állítva Kikényszerítése alapértelmezett mód az Android 4.4 óta. Ez a kötelező beléptetőrendszer segít a meglévő hozzáférés-felügyeleti jogok érvényesítésében, és megkísérli megakadályozni a jogosultság eszkalációt okozó támadásokat. Ez akadályként hat az eszköze feletti jogosulatlan irányításra, például egy alkalmazásra vagy egy sebezhetőségre, amely rosszindulatú gyökér hozzáférést kíván elérni. A SELinux beállítása Kikényszerítése alapértelmezés szerint az Androidon az első lépés, hogy megvédje a normál felhasználókat az ilyen támadásoktól.

A sérülékenységet meglehetősen egyszerű kihasználni – valójában úgy tűnik, hogy ez a OnePlus hatalmas mulasztása, nem pedig az, hogy milyennek képzelnéd a tipikus kizsákmányolást. Először a támadó újraindítja a OnePlus 3/3T-t „gyorsindítás” módba – ha rendelkezik fizikai hozzáféréssel, egyszerűen nyomja meg a Hangerő-növelő gombot a rendszerindítás során, de ha nem, akkor kiadhatja az ADB parancsot. adb reboot bootloader a készülékhez. Az eszköz gyorsindítási módja egy USB interfészt tesz elérhetővé, amely nem engedheti meg a biztonságra érzékeny parancsok végrehajtását zárolt eszközökön. De a OnePlus 3/3T esetében egyszerűen ki kell adni a fastboot oem selinux permissive parancs a fastboot felületen keresztül váltja a SELinux módot innen Kikényszerítése nak nek Megengedő.

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

...

OnePlus3:/ $ getenforce
Permissive
OnePlus3:/ $

A probléma további bonyolítása érdekében a OnePlus 3 és 3T nem rendelkezik semmilyen bejegyzéssel az „About Screen” (Névjegy) képernyőn, amely megemlítené az eszköz jelenlegi SELinux állapotát. Az áldozat továbbra is figyelmen kívül hagyja eszköze veszélyeztetett állapotát, ha nem volt szemtanúja a kizsákmányolás aktív használatának. A SELinux állapotbejegyzés hiánya az „About Screen” részben hiányzik az Android 6.0 alapú Open Beta kiadásokból és az Android 7.0 hivatalos ROM-jaiból.

Számos alkalmazás létezik a SELinux állapotának Engedélyesre váltására, például a SELinuxModeChanger Alkalmazás. A SELinux átkapcsolása ezzel a módszerrel nem teszi lehetővé az állapot fennmaradását az újraindítás során. Bár lehet szkripteket használni fenntartani a Megengedő SELinux állapot kemény újraindítások során. Mindkét módszer root hozzáférést igényel, ami azt jelenti, hogy a felhasználó már ismeri azokat a kockázatokat, amelyeknek ki van téve. De a fő különbség a SELinux mód megváltoztatásával Megengedő a fenti sérülékenység felhasználása az, hogy nem csak kemény újraindítások során is fennáll, ezt teszi root hozzáférés nélkül.

A sérülékenység ellen a mai napig nincs jogorvoslat.


FRISSÍTÉS:

felé nyúltunk Sultanxda, az egyik legelismertebb egyéni ROM-fejlesztő a OnePlus eszközökhöz, hátha segít nekünk többet megtudni erről a problémáról. Azonnal beleásta magát a kódba, hogy megtalálja a gyökérforrást, ezt találta:

Úgy, ahogy a "fastboot oem selinux " parancs úgy működik, hogy egy extra argumentumot ad a kernel parancssorába Linux indításakor. Az extra argumentum az „androidboot.selinux=", ahol lehet "megengedő". Van, ahol a dolgok viccessé válnak: "androidboot.A kernel parancssorban lévő argumentumokat az Android init eleme elemzi. Egy normál Android éles összeállításban (egy "felhasználói" build) az "androidboot.selinux" argumentumot teljesen figyelmen kívül hagyják, és a Selinux mindig kényszerül. Tehát ez a hiba két problémából áll:

  1. A felhasználók beállíthatják, hogy a rendszertöltő átadjon egy jelzőt, amely általában engedélyezi a Selinuxot egy mérnöki/hibakereső ROM-felépítésnél
  2. A OnePlus módosította az Android initjét annak érdekében, hogy tiszteletben tartsa az "androidboot.selinux" jelzőt még az éles ROM-felépítéseknél is

Az Android indítóprogramja itt van úgy konfigurálva, hogy figyelmen kívül hagyja az „androidboot.selinux” jelzőt az éles összeállításoknál: https://android.googlesource.com/platform/system/core/+/android-6.0.0_r41/init/Android.mk#7

Az ALLOW_DISABLE_SELINUX jelző a forráskódban csak 1-re van állítva userdebug és mérnöki buildek esetén

(A ROM-omat ez nem érinti, mert a ROM-omat éles (felhasználói) módban készítem)

Tehát az "androidboot.selinux" egyszerűen figyelmen kívül marad a ROM-omban, a "fastboot oem selinux" A " parancsot a OnePlus is létrehozta, mivel a CAF nyilvános rendszerbetöltő forrásaiban nem létezik ilyen parancs. A fejem tetejére 4 mód jut eszembe, hogy ezt a feloldatlan rendszerbetöltővel rendelkező felhasználók javítsák:

  1. A rendszerbetöltő hexadecimális szerkesztésével módosítsa a „selinux” karakterlánc összes példányát valami másra (például „sclinux”), hogy a zászlót ne ismerje fel az Android indítóprogramja
  2. Szerkessze hexal az Android init bináris fájlját az OxygenOS rendszerben, hogy lecserélje az "androidboot.selinux" összes példányát a következőre: valami más (például "androidboot.sclinux"), így az Android init nem ismeri fel a androidboot.selinux zászló
  3. Adjon hozzá egy feltörést a kernel parancssori illesztőprogramjához, hasonlóan a SafetyNet bypasshoz, hogy elrejtse az "androidboot.selinux" jelzőt az Android indítóprogramja elől.

Szeretnénk megköszönni Sultanxdának az idejét és erőfeszítését, amellyel segített kideríteni, mi történik a színfalak mögött. Megkerestük a OnePlus-t is, aki tisztában van a helyzettel, és vizsgálja az ügyet.


Reméljük, hogy a OnePlus nyilvánosan elismeri a súlyos problémát, és átláthatóan tervezi a megoldást.