[Värskendus: teine ​​haavatavus on paigatud] Avastati kaks kriitilist OnePlus 3/3T alglaaduri turvaviga, millest üks on paigatud ja muud parandatud

OnePlus 3 ja OnePlus 3T jaoks on avastatud kaks alglaaduriga seotud viga. Üks on lapitud, teisega tegeletakse.

Alates selle artikli avaldamisest on Oxygen OS versioon 4.0.3 parandanud teise selles artiklis käsitletud turvaauku, nimelt dm-verity haavatavuse.

Enne Androidi juurutamise, kohandatud ROMide, tuumade ja muude modifikatsioonide imelisse maailma sisenemist peate esmalt oma seadme alglaaduri avama.

Mõnes seadmes (eriti operaatori kaubamärgiga seadmetel) tekitab see probleeme, kuna kasutajad peavad enne alglaaduri avamist tegelema oluliste tehniliste takistustega. Muud seadmed, näiteks Huawei telefonid, nõuavad originaalseadmete tootjalt taotlust unikaalse alglaaduri avamiskoodi saamiseks – see on väike takistus sisenemisel, kuid mitte väga keeruline. Veelgi paremad on Google'i Nexuse/Pixeli seeria või OnePlusi telefonid, mis nõuavad ainult arendaja seadetes valiku märkimist ja seejärel mõne valiku saatmist. fastboot käske.

Kuid hoolimata sellest, kui keeruline on alglaaduri avamine, jääb üks asi alati muutumatuks: nõue seadme avamisel pühkida. Seda tehakse ilmselgetel turvakaalutlustel, kuna kogu teie andmepartitsiooni saab pärast alglaaduri avamist hõlpsasti eraldada. Pahatahtlik (tehnilise oskusteabega) üksus võib teie andmetele juurdepääsu korral kohandatud taastamise kiirkäivitada ja teie seadmest täieliku varukoopia teha. Seetõttu peetakse alglaaduri avamist turvariskiks ja seepärast kustutatakse teie seade pärast selle avamist. Eeldades, et kõik läheb nii nagu peab, peaks tavakasutaja olema kaitstud ründajate eest, kes avavad alglaaduri, et mööda minna tavalistest Androidi lukustusmeetoditest. Kõik ei lähe siiski plaanipäraselt.


OnePlus 3/3T alglaaduri haavatavus

Uus turvaaukude komplekt oli just avalikustati autor Roee Hay (@roeehay), millest esimene võimaldab OnePlus 3/3T alglaaduri avada ilma kasutaja kinnituseta ja tehaseseadetele lähtestamist käivitamata. See haavatavus, märgistatud CVE-2017-5625, peetakse kriitilise raskusastmega haavatavaks ja see mõjutab kõiki OnePlus 3/3T seadmeid, mis töötavad operatsioonisüsteemides OxygenOS 3.2–4.0.1. Kasutajad, kes on juba versioonile üle läinud inkrementaalne OxygenOS 4.0.2 värskendada ei ole mõjutatud selle haavatavuse tõttu, kuna hr Hay selle vea OnePlusile privaatselt avalikustas 23. jaanuaril et nad saaksid probleemi kohe parandada.

Viga töötab, saates varalise, peidetud kiirkäivituskäsu: fastboot oem 4F500301. Selle käsu saatmisega jäetakse kasutaja alglaaduri lukustuse olek mööda (isegi kui "Luba OEM-i avamine" pole arendaja seadetes lubatud). Seade ei teavita kasutajat ega pühi seadet nii nagu peaks – tegelikult teatab seade siiski, et alglaadur on lukustatud! Veel üks kiirkäivituskäsk, fastboot oem 4F500302, lähtestab mõned alglaaduri sätted ja seda saab kasutada juba lukustamata seadme lukustamiseks.

Hr Hay avastas, et esimene kiirkäivituskäsk määrab selle, mida ta on nimetanud "maagiline Lipp", mis tühistab kontrolli, mis määrab vilkuva või kustutamise käsu täitmisel alglaaduri lukustuse oleku.

// '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);
...
 }

Loe rohkem

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);
}

Loe rohkem

CVE-2017-5626 saab kasutada käivitada kerneli kood. Ründaja võib vilkuda mis tahes soovitud alglaadimispildi. Siiski, kui nad vilguvad muudetud alglaadimiskujutis, käivitub Verified Boot ja hoiatab kasutajat, et muudatus on tuvastatud. Üks võimalus sellest mööda minna on vanema, muutmata alglaadimiskujutise välgutamine – see, mis sisaldab vanemaid ärakasutusi, mida on vahepeal parandatud. Sellegipoolest kestab teile antud "hoiatus" vaid 5 sekundit ja see lülitub automaatselt välja ja käivitub verifiedboot olekusse, kus ründaja kood ikkagi käivitub.

Hr Hay mainib, et on palju viise, kuidas seda viga pahatahtlikult ära kasutada. Näiteks muutis ta alglaadimispilti, et määrata SELinuxi režiim lubav samuti lisada alglaadimisel automaatselt juurdepääs ADB-le. Seejärel, pärast seda, kui kasutas seda haavatavust oma muudetud alglaadimispildi välgutamiseks, pääses ta juurde a juurkesta enne, kui kasutaja saab isegi oma mandaadi sisestada.

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

Ütlematagi selge, et see on üsna tõsine. Varastatud või müüritud seadme, mis teie arvates on teie tüüpiliste turvameetmete tõttu ohutu, saab selle ärakasutamise abil täielikult lüüa.


OnePlus 3/3T SELinuxi haavatavus

Teine haavatavus, märgistatud CVE-2017-5624, mõjutab kõik OxygenOS-i versioonid ja võimaldab seda teha dm-verity keelamine. Hr Hay avalikustas selle haavatavuse OnePlusi turvameeskonnale 16. jaanuar, kuid tuleb märkida, et XDA vanemliige th3g1zavastas selle haavatavuse iseseisvalt peal 23. jaanuar. Oleme rääkinud OnePlusiga, kes on seda teinud kinnitasid, et on tunnistanud seda teist haavatavust ja parandavad selle tulevases värskenduses.

Seda rünnakut on ka üsna lihtne sooritada. Dm-verity keelamiseks (või lubamiseks) tuleb anda vaid üks kiirkäivituskäsk: fastboot oem disable dm-verity. Selle lubamiseks lihtsalt väljasta fastboot oem enable dm-verity. Selle käsu käitleja, mis on võetud alglaaduri prügist, on näidatud allpool.


// '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);
}

Selle käsu väljastamine seab lipu, mida hr Hay nimetab dmVerityks, mida alglaadur kasutab kerneli käsurea argumendi saatmiseks, mis võib lubada või keelata dm-verity.

Seda saab kasutada koos esimese haavatavusega, et käivitada OnePlus 3/3T kõrge privilegeeritud koodi ilma kasutaja nõusolekuta – ja juurdepääsuga kasutaja andmetele. Näiteks suutis hr Hay installida rakenduse /system/priv-app, mis põhjustab rakenduse lisamise priv-app domeenile. See võimaldab pahatahtlikul rakendusel juurdepääsu seadme kõrgelt privilegeeritud funktsioonidele. Hr Hay demonstreerib allolevas videos mõlema turvaauku samaaegset ärakasutamist. Nagu näete, on seadme käivitamisel tema loodud rakendus juba eelinstallitud.


Järeldus ja märkus OnePlusilt

Nende kahe turvaauku võimalik kuritarvitamine on hirmutav. Tunnustame hr Hayt, et ta avalikustas need turvaaukud nii kiiresti OnePlusile. Siiski ei saa me karta, et sellised kiirkäivituskäsud on nendes seadmetes kättesaadavad. Kui kirjutasime juhendi, kuidas avastage peidetud kiirkäivituskäsud, meie eesmärk oli teavitada kasutajaid, et neil võib olla huvitavaid käske, mida nad saavad kasutada oma kasutuskogemuse parandamiseks. Me poleks kunagi arvanud, et alglaaduri koodis on sellised kõrgelt privilegeeritud käsud. Nagu "miks" need kiirkäivituskäsud sisalduvad püsivaras, anti meile a "ei kommenteeri." 

Kui te pole praegu oma OnePlus 3/3T värskendanud niipea, kui iga Oxygen OS-i järg on välja antud, soovitame teil värskendage kohe. Oxygen OS 4.0.2 värskendamine kaitseb teid esimese haavatavuse eest, kuid me peame ootama, kuni OnePlus laseb välja värskenduse, mis parandab teise haavatavuse, enne kui saame öelda, et olete nende eest täielikult kaitstud ärakasutamist. Peame seda tüüpi ärakasutamiste suhtes tulevikus silma peal hoidma.


Allikas: Roee Hay