Chyba zabezpečení OnePlus 3/3T Bootloader umožňuje změnu SELinuxu na Permisivní režim ve Fastbootu

Závažná zranitelnost v bootloaderu OnePlus 3/3T umožňuje útočníkům přepínat stav SELinux z Vynucování na Permisivní! Čtěte dále a dozvíte se více!

The OnePlus 3 a OnePlus 3T patří mezi nejlepší telefony, které si nyní můžete koupit. Zatímco nadcházející vlajkové lodě pro rok 2017 mají být spotřebitelům teprve odhaleny, v případě jejich nepřítomnosti OnePlus 3/3T dominuje výkonu v reálném světě za přijatelnou cenu.

Ale pokud máme být spravedliví při posuzování zařízení, musíme uznat, že navzdory maximálnímu úsilí OnePlus nejsou OnePlus 3/3T bez chyb. Již dříve jsme například informovali o bezpečnostních problémech, jako je např OnePlus uniká podrobnosti o IMEI při kontrole aktualizací v telefonu. A nyní musíme do seznamu přidat další bezpečnostní problém, tento s potenciálně nebezpečnějšími důsledky.

Zranitelnost v bootloaderu OnePlus 3/3T otevírá dveře škodlivým útokům. Jak zjistil Roee Hay z týmu IBM X-Force Application Security Research Team a odhaleno na platformě IBM X-Force ExchangeTato chyba zabezpečení umožňuje útočníkovi manipulovat se stavem SELinux na zařízeních, a tím je přepnout do tolerantního režimu. Jediné, co útočník potřebuje, je

buď fyzický přístup do zařízení, popř vzdálený přístup k ADB připojení k zařízení.

SELinux, nebo Security-Enhanced Linux, je bezpečnostní modul linuxového jádra, který umožňuje přístup a správu bezpečnostních politik. SELinux byl představen Androidu počínaje Androidem 4.3 a byl nastaven na Prosazování režim jako výchozí od Androidu 4.4. Tento povinný systém řízení přístupu pomáhá prosazovat stávající práva řízení přístupu a snaží se zabránit útokům na eskalaci oprávnění. To funguje jako překážka pro neoprávněnou kontrolu nad vaším zařízením, jako je aplikace nebo zranitelnost, jejichž cílem je získat přístup root se zlým úmyslem. Nastavení SELinuxu na Prosazování ve výchozím nastavení na Androidu slouží jako první krok k ochraně běžných uživatelů před takovými útoky.

Tuto zranitelnost je poměrně snadné zneužít – ve skutečnosti se zdá, že jde o obrovské přehlédnutí ze strany OnePlus, spíše než o to, jak byste si představovali, že by váš typický exploit vypadal. Nejprve útočník restartuje OnePlus 3/3T do režimu „fastboot“ – pokud máte fyzický přístup, jednoduše během spouštění stiskněte tlačítko Volume-Up, ale pokud ne, můžete zadat příkaz ADB. adb reboot bootloader k zařízení. Režim rychlého spuštění na zařízení odhaluje rozhraní USB, které by nemělo umožnit dokončení žádného příkazu citlivého na zabezpečení na uzamčených zařízeních. Ale na OnePlus 3/3T jednoduše vydáte fastboot oem selinux permissive příkaz přes rozhraní rychlého spuštění přepíná z režimu SELinux Prosazování na Povolný.

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

...

OnePlus3:/ $ getenforce
Permissive
OnePlus3:/ $

Aby se problém ještě více zkomplikoval, OnePlus 3 a 3T nemají na obrazovce „O obrazovce“ žádnou položku, která by zmiňovala aktuální stav SELinux zařízení. Oběť bude i nadále zapomínat na kompromitovaný stav svého zařízení, pokud nebyla svědkem aktivního použití exploitu. Chybějící záznam stavu SELinux na obrazovce „O obrazovce“ chybí jak ve vydáních Open Beta založených na Androidu 6.0, tak i v oficiálních ROM Androidu 7.0.

Existuje několik aplikací, které přepínají stav SELinux na Permisivní, jako např SELinuxModeChanger aplikace. Přepnutí SELinuxu touto metodou neumožňuje přetrvání stavu po restartu. I když, můžete používat skripty udržovat Povolný Stav SELinuxu po tvrdých restartech. Obě tyto metody vyžadují přístup root, což znamená, že uživatel již zná rizika, kterým je vystaven. Ale hlavní rozdíl se změnou režimu SELinux na Povolný pomocí výše uvedené zranitelnosti je nejen to přetrvává i přes tvrdé restarty, dělá to tak aniž byste potřebovali root přístup.

Proti této zranitelnosti dnes neexistují žádné prostředky.


AKTUALIZACE:

Natáhli jsme se k Sultanxda, jednoho z nejuznávanějších vývojářů vlastních ROM pro zařízení OnePlus, abychom zjistili, zda by nám mohl pomoci dozvědět se více o tomto problému. Okamžitě se ponořil do kódu, aby našel kořenový zdroj, našel toto:

Způsob, jakým „fastboot oem selinux "Příkaz funguje tak, že přidává další argument do příkazového řádku jádra při spouštění Linuxu. Další argument přichází ve formě "androidboot.selinux=“, kde může být „povolný“. Tam jsou věci vtipné: „androidboot.Argumenty na příkazovém řádku jádra jsou analyzovány init systému Android. V normálním produkčním sestavení Androidu ("uživatelské" sestavení) je argument "androidboot.selinux" zcela ignorován a selinux je vždy nucen vynutit. Tato chyba se tedy skládá ze dvou problémů:

  1. Uživatelé mohou nastavit, aby zavaděč předal příznak, který by normálně umožnil selinuxu při sestavování inženýrské/ladící ROM
  2. OnePlus upravil init Android, aby ctil příznak „androidboot.selinux“ i pro produkční sestavení ROM

Zde je init systému Android nakonfigurován tak, aby ignoroval příznak „androidboot.selinux“ pro produkční sestavení: https://android.googlesource.com/platform/system/core/+/android-6.0.0_r41/init/Android.mk#7

Příznak ALLOW_DISABLE_SELINUX ve zdrojovém kódu je nastaven pouze na 1 pro uživatelské ladění a technické sestavení

(Moje ROM není tímto ovlivněna, protože svou ROM sestavuji v produkčním (uživatelském) režimu)

Takže "androidboot.selinux" je v mé ROM jednoduše ignorován, "fastboot oem selinux "Příkaz se také zdá být něčím, co vytvořil OnePlus, protože žádný takový příkaz neexistuje ve veřejných zdrojích bootloaderu CAF. Z hlavy mě napadají 4 způsoby, jak to opravit pro uživatele s odemčenými bootloadery:

  1. Hexadecimálně upravte zavaděč, abyste změnili všechny výskyty řetězce "selinux" na něco jiného (například "sclinux"), takže příznak nebude rozpoznán init systému Android
  2. Hexadecimálně upravte binární soubor Android init v OxygenOS, abyste nahradili všechny instance "androidboot.selinux" na něco jiného (jako "androidboot.sclinux"), takže Android init nerozpozná příznak androidboot.selinux
  3. Přidejte hack do ovladače příkazového řádku jádra podobný mému bypassu SafetyNet, abyste skryli příznak „androidboot.selinux“ z init systému Android

Rádi bychom poděkovali Sultanxdovi za jeho čas a úsilí, které nám pomohl zjistit, co se děje v zákulisí. Oslovili jsme také společnost OnePlus, která si je situace vědoma a záležitost prošetřuje.


Doufáme, že OnePlus veřejně přizná vážný problém a bude transparentní ve svých plánech na jeho nápravu.