[Frissítés: a második biztonsági rés javítása] A OnePlus 3/3T rendszerbetöltő két kritikus biztonsági hibáját fedezték fel, az egyiket javították, és egy másikat kijavítottak

Két rendszerbetöltővel kapcsolatos hibát fedeztek fel a OnePlus 3 és OnePlus 3T esetében. Az egyiket foltozták, a másikkal foglalkoznak.

A cikk megjelenése óta az Oxygen OS 4.0.3-as verziója kijavította a cikkben tárgyalt második biztonsági rést, nevezetesen a dm-verity-t.

Mielőtt belépne az Android rootolás, egyéni ROM-ok, kernelek és egyéb módosítások csodálatos világába, először fel kell oldania a rendszertöltőt az eszközön.

Egyes eszközökön (különösen a szolgáltató márkájúakon) ez problémát jelent, mivel a felhasználóknak jelentős technikai akadályokkal kell megküzdeniük, mielőtt feloldhatnák a rendszerbetöltőt. Más eszközök, például a Huawei telefonok megkövetelik, hogy az OEM-től kérjen egyedi rendszerbetöltő-feloldó kódot – ez kisebb akadály a belépéshez, de nem túl nehéz. Még jobbak a Google Nexus/Pixel sorozatú vagy OnePlus telefonok, amelyeknél csak be kell jelölnie egy lehetőséget a Fejlesztői beállításokban, majd el kell küldenie néhányat. gyorsindítás parancsokat.

De bármennyire is nehéz a rendszerbetöltő feloldása, egy dolog mindig változatlan marad: az a követelmény, hogy feloldáskor törölni kell az eszközt. Ez nyilvánvaló biztonsági okokból történik, mivel a teljes adatpartíció könnyen kibontható a rendszerbetöltő feloldása után. Egy rosszindulatú entitás (a műszaki know-how-val) gyorsan elindíthat egy egyéni helyreállítást, és teljes biztonsági másolatot készíthet az eszközről, ha hozzáfér az Ön adataihoz. Ez az oka annak, hogy a rendszerbetöltő feloldása biztonsági kockázatnak minősül, és ezért törlik az eszközt a feloldás után. Feltéve, hogy minden úgy megy, ahogy kell, a rendszeres felhasználónak biztonságban kell lennie a támadóktól, hogy feloldják a rendszerbetöltőt, hogy megkerüljék a szokásos Android zárolási módszereket. Nem minden a terv szerint alakul azonban.


A OnePlus 3/3T rendszerbetöltő feloldó biztonsági rése

A sebezhetőségek új halmaza volt most hozták nyilvánosságra írta: Roee Hay (@roeehay), amelyek közül az első lehetővé teszi a OnePlus 3/3T rendszerbetöltőjének feloldását felhasználói jóváhagyás és a gyári beállítások visszaállítása nélkül. Ez a sebezhetőség, címkével CVE-2017-5625, kritikus súlyosságú sérülékenységnek számít, és az összes OxygenOS 3.2-4.0.1 rendszeren futó OnePlus 3/3T eszközt érinti. Azok a felhasználók, akik már frissítettek a növekményes OxygenOS 4.0.2 frissítés nem érintik ez a sérülékenység, mivel Mr. Hay privátban felfedte ezt a hibát a OnePlusnak január 23-án így azonnal befoltozhatták a problémát.

A hiba egy védett, rejtett fastboot parancs elküldésével működik: fastboot oem 4F500301. A parancs elküldésével a rendszer megkerüli a felhasználó rendszerbetöltő zárolási állapotát (még akkor is, ha az „OEM-feloldás engedélyezése” nincs engedélyezve a Fejlesztői beállításokban). Az eszköz nem kéri a felhasználót, és nem törli az eszközt úgy, ahogy kellene – sőt, az eszköz továbbra is jelzi, hogy a rendszerbetöltő zárolva van! Egy másik gyorsindítási parancs, fastboot oem 4F500302, visszaállít néhány rendszerbetöltő beállítást, és egy már feloldott eszköz zárolására használható.

Mr. Hay felfedezte, hogy az első gyorsindítási parancs beállítja azt, amit ""magicFlag", amely felülbírálja az ellenőrzést, amely meghatározza a rendszertöltő zárolási állapotát villogó vagy törlési parancs végrehajtásakor.

// 'oem 4F500301' handler
intsub_918427F0()
{
magicFlag_dword_91989C10 = 1;
if ( dword_9198D804 != dword_9198D804 )
assert(1, dword_9198D804, dword_9198D804);
return sendOK((int)"", dword_9198D804);
}

Fastboot Flash Handler


// 'flash' handler
constchar *__fastcall sub_91847EEC(char *partitionName, int *a2, int a3)
{
char *pname; // r5@1
...
pname = partitionName;
v4 = a2;
v5 = a3;
if ( returnTRUE1(partitionName, (int)a2) )
{
result = (constchar *)sub_918428F0(pname, v6);
if ( (result || magicFlag_dword_91989C10)
&& ((result = (constchar *)sub_91842880(pname, v10)) != 0 || magicFlag_dword_91989C10) )
{
result = (constchar *)sub_918428F0(pname, v10);
if ( !result || magicFlag_dword_91989C10 )
goto LABEL_7;
v8 = dword_9198D804;
if ( dword_9198D804 != dword_9198D804 )
goto LABEL_28;
v11 = "Critical partition flashing is not allowed";
}
else
{
v8 = dword_9198D804;
if ( dword_9198D804 != dword_9198D804 )
goto LABEL_28;
v11 = "Partition flashing is not allowed";
}
return (constchar *)FAIL2((int)v11, v10);
}
LABEL_7:
...
if ( *v4 != 0xED26FF3A )
{
if ( *v4 == 0xCE1AD63C )
cmd_flash_meta_img(pname, (unsigned int)v4, v5);
else
cmd_flash_mmc_img(pname, (int)v4, v5);
goto LABEL_10;
}
v7 = v4;
}
cmd_flash_mmc_sparse_img(pname, (int)v7, v5);
...
 }

Olvass tovább

Fastboot Erase Handler


// 'erase' handler
int __fastcall sub_91847118(char *partitionName, int a2, int a3)
{
 ...
v3 = partitionName;
v4 = returnTRUE1(partitionName, a2);
if ( !v4 )
{
LABEL_7:
...
if ( v4 )
{
if ( dword_9198D804 == dword_9198D804 )
return eraseParition(v3);
}
...
}
v4 = sub_918428F0(v3, v5);
if ( !v4 && !magicFlag_dword_91989C10 )
{
v6 = dword_9198D804;
if ( dword_9198D804 == dword_9198D804 )
{
v7 = "Partition erase is not allowed";
return FAIL2((int)v7, v5);
}
goto LABEL_23;
}
v4 = sub_91842880(v3, v5);
if ( !v4 && !magicFlag_dword_91989C10 )
{
v6 = dword_9198D804;
if ( dword_9198D804 == dword_9198D804 )
{
v7 = "Partition flashing is not allowed";
return FAIL2((int)v7, v5);
}
LABEL_23:
assert(v4, v5, v6);
}
v4 = sub_918428F0(v3, v5);
if ( !v4 || magicFlag_dword_91989C10 )
goto LABEL_7;
v6 = dword_9198D804;
...
v7 = "Critical partition erase is not allowed";
return FAIL2((int)v7, v5);
}

Olvass tovább

CVE-2017-5626 használható futtassa a kernel kódját. A támadó bármilyen indítóképet felvillanthat. Ha azonban felvillannak egy módosított rendszerindító lemezképet, a Verified Boot elindul, és figyelmezteti a felhasználót, hogy a rendszer egy módosítást észlelt. Az egyik módja annak, hogy ezt megkerüljük, egy régebbi, módosítatlan rendszerindító lemezkép felvillantása – amelyik régebbi, azóta már javított exploitokat tartalmaz. Ennek ellenére a kapott „figyelmeztetés” csak 5 másodpercig tart, és automatikusan feloldja magát, és elindul a verifiedboot állapotba, ahol a támadó kódja továbbra is lefut.

Mr. Hay megemlíti, hogy ezt a hibát számos módon lehet rosszindulatú módon kihasználni. Például módosított egy rendszerindító lemezképet, hogy beállítsa a SELinux módot megengedő valamint automatikusan tartalmazza az ADB hozzáférést a rendszerindításkor. Majd miután ezt a biztonsági rést kihasználva felvillantotta módosított rendszerindító lemezképét, hozzáférhetett a root shell, mielőtt a felhasználó megadhatná a hitelesítő adatait.

OnePlus3:/ # id
uid=0(root) gid=0(root) groups=0(root),1004(input),1007(log),1011(adb),
1015(sdcard_rw),1028(sdcard_r),3001(net_bt_admin),3002(net_bt),
3003(inet),3006(net_bw_stats),3009(readproc) context=u: r: su: s0

OnePlus3:/ # getenforce
Permissive

Mondanom sem kell, ez elég komoly. Egy ellopott vagy letéglaolt eszköz, amelyet a tipikus biztonsági intézkedései miatt biztonságosnak gondol, teljesen legyőzhető ezzel a kihasználással.


OnePlus 3/3T SELinux biztonsági rése

A második sérülékenység, felirat CVE-2017-5624, érinti az OxygenOS összes verziója és megengedi az embernek dm-verity letiltása. Mr. Hay felfedte ezt a sérülékenységet a OnePlus biztonsági csapatának január 16, de meg kell jegyezni, hogy az XDA Senior Member th3g1zfüggetlenül fedezte fel ezt a sebezhetőséget tovább január 23. Beszéltünk a OnePlusszal, akik igen megerősítették, hogy elismerték és kijavítják ezt a második sebezhetőséget egy jövőbeli frissítésben.

Ez a támadás is meglehetősen egyszerűen végrehajtható. Csak egyetlen gyorsindítási parancsot kell kiadni a dm-verity letiltásához (vagy engedélyezéséhez): fastboot oem disable dm-verity. Az engedélyezéséhez egyszerűen adja ki fastboot oem enable dm-verity. Az alábbiakban látható ennek a parancsnak a kezelője, amely a rendszerbetöltő kiíratából származik.


// 'oem disable_dm_verity' handler
intsub_9183B8EC()
{
int v0; // r0@1
int v1; // r1@1

dmVerity_dword_91960740 = 0;
v0 = sub_91845E10("ANDROID-BOOT!");
if ( dword_9198D804 != dword_9198D804 )
assert(v0, v1, dword_9198D804);
return sendOK((int)"", v1);
}

A parancs kiadása beállít egy jelzőt, amelyet Mr. Hay dmVerity-nek hív, és amelyet a rendszerbetöltő egy kernel parancssori argumentum küldésére használ, amely engedélyezheti vagy letilthatja a dm-verity-t.

Ez az első sérülékenységgel együtt használható nagy privilegizált kód futtatására a OnePlus 3/3T-n a felhasználó beleegyezése nélkül – és hozzáféréssel a felhasználó adataihoz. Például Mr. Hay tudott egy alkalmazást telepíteni a /system/priv-app mappába, aminek hatására az alkalmazás hozzáadódik a priv-app tartományhoz. Ez lehetővé teszi a rosszindulatú alkalmazások számára, hogy hozzáférjenek az eszköz kiemelten kiváltságos funkcióihoz. Mr. Hay az alábbi videóban bemutatja mindkét sebezhetőség egyidejű kihasználását. Mint látható, amikor elindítja az eszközt, az általa készített alkalmazás már előre telepítve van.


Következtetés és megjegyzés a OnePlustól

E két biztonsági rés potenciális visszaélései ijesztőek. Gratulálunk Mr. Hay-nek, amiért személyesen és ilyen gyorsan felfedte ezeket a biztonsági réseket a OnePlusnak. Ennek ellenére nem lehet nem félünk attól, hogy az ilyen gyorsindítási parancsok elérhetők ezeken az eszközökön. Amikor útmutatót írtunk arról, hogyan kell fedezze fel a rejtett gyorsindítási parancsokat, az volt a szándékunk, hogy tájékoztassuk a felhasználókat arról, hogy lehetnek érdekes parancsok, amelyekkel javíthatják élményüket. Soha nem gondoltuk volna, hogy ilyen nagy privilegizált parancsok ülnek a rendszerbetöltő kódban. Ami pedig azt illeti "miért" ezek a fastboot parancsok benne vannak a firmware-ben, kaptunk a "No comment." 

Ha egyelőre nem frissítette OnePlus 3/3T-jét, amint minden Oxygen OS build megjelent, javasoljuk, hogy azonnal frissítse. Az Oxygen OS 4.0.2-re való frissítés megvédi Önt az első sebezhetőségtől, de várnunk kell, amíg a OnePlus kiad egy frissítést, amely kijavítja a második sebezhetőséget, mielőtt azt mondhatnánk, hogy teljesen biztonságban van ezekkel szemben kihasználja. A jövőben is figyelnünk kell az ilyen jellegű kizsákmányolásokra.


Forrás: Roee Hay