[Päivitys: Toinen haavoittuvuus korjattu] Kaksi kriittistä OnePlus 3/3T -käynnistyslataimen tietoturvavirhettä löydetty, yksi korjattu ja muita korjattu

click fraud protection

OnePlus 3:lle ja OnePlus 3T: lle on löydetty kaksi käynnistyslataukseen liittyvää vikaa. Toinen on korjattu, toista käsitellään.

Tämän artikkelin julkaisemisen jälkeen Oxygen OS -versio 4.0.3 on korjannut toisen tässä artikkelissa käsitellyn tietoturvahaavoittuvuuden, nimittäin dm-verityn.

Ennen kuin pääset Androidin juurtumisen, mukautettujen ROM-levyjen, ytimien ja muiden muutosten ihmeelliseen maailmaan, sinun on ensin avattava laitteesi käynnistyslatain.

Joissakin laitteissa (etenkin operaattorin merkkisissä laitteissa) tämä aiheuttaa ongelmia, koska käyttäjien on kohdattava merkittäviä teknisiä esteitä, ennen kuin he voivat avata käynnistyslataimen. Muut laitteet, kuten Huawei-puhelimet, edellyttävät, että anoat OEM: ltä ainutlaatuista käynnistyslataimen avauskoodia. Tämä on pieni pääsyn este, mutta ei kovin vaikeaa. Vielä parempia ovat Google Nexus/Pixel -sarjan tai OnePlus-puhelimet, jotka edellyttävät vain, että valitset vaihtoehdon kehittäjäasetuksista ja lähetät sitten muutaman pikakäynnistys komentoja.

Mutta riippumatta siitä, kuinka vaikeaa käynnistyslataimen lukituksen avaaminen on, yksi asia pysyy aina vakiona: vaatimus pyyhkiä laite lukituksen avaamisen yhteydessä. Tämä tehdään ilmeisistä turvallisuussyistä, koska koko tietoosiosi voidaan purkaa helposti, kun käynnistyslatain on avattu. Haitallinen taho (jolla on tekninen tietotaito) voi flash-käynnistää mukautetun palautuksen ja purkaa täydellisen varmuuskopion laitteestasi, jos he pääsevät käsiksi tietoihisi. Tästä syystä käynnistyslataimen lukituksen avaamista pidetään turvallisuusriskinä, ja siksi laitteesi pyyhitään lukituksen avaamisen jälkeen. Olettaen, että kaikki menee niin kuin pitääkin, tavallisen käyttäjän tulisi olla turvassa hyökkääjiltä, ​​jotka avaavat käynnistyslataimen lukituksen ohittaakseen Android-lukitustavat. Kaikki ei kuitenkaan mene suunnitelmien mukaan.


OnePlus 3/3T Bootloaderin lukituksen avaava haavoittuvuus

Uusi joukko haavoittuvuuksia oli juuri paljastettu kirjoittanut Roee Hay (@roeehay), joista ensimmäinen mahdollistaa OnePlus 3/3T: n käynnistyslataimen lukituksen avaamisen ilman käyttäjän vahvistusta ja käynnistämättä tehdasasetusten palautusta. Tämä haavoittuvuus, merkitty CVE-2017-5625, pidetään vakavana vakavana haavoittuvuutena, ja se vaikuttaa kaikkiin OnePlus 3/3T -laitteisiin, joissa on OxygenOS 3.2-4.0.1. Käyttäjät, jotka ovat jo päivittäneet inkrementaalinen OxygenOS 4.0.2 päivittää eivät vaikuta tämän haavoittuvuuden takia, koska Mr. Hay ilmoitti tämän puutteen yksityisesti OnePlusille tammikuun 23. päivänä jotta he voisivat korjata ongelman välittömästi.

Virhe toimii lähettämällä omaa, piilotettua pikakäynnistyskomentoa: fastboot oem 4F500301. Lähettämällä tämän komennon käyttäjän käynnistyslataimen lukitustila ohitetaan (vaikka "Salli OEM: n lukituksen avaaminen" ei olisi otettu käyttöön kehittäjäasetuksissa). Laite ei kehota käyttäjää eikä pyyhi laitetta kuten sen pitäisi olla - itse asiassa laite ilmoittaa silti, että käynnistyslatain on lukittu! Toinen pikakäynnistyskomento, fastboot oem 4F500302, nollaa jotkin käynnistyslataimen asetukset, ja sitä voidaan käyttää lukitsemaan jo lukitsematon laite.

Mr. Hay huomasi, että ensimmäinen pikakäynnistyskomento asettaa sen, mitä hän on kutsunut "maaginen lippu", joka ohittaa tarkistuksen, joka määrittää käynnistyslataimen lukitustilan, kun suoritetaan vilkkuvaa tai poistokomentoa.

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

Lue lisää

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

Lue lisää

CVE-2017-5626 voidaan käyttää suorita ydinkoodi. Hyökkääjä voi flash-kuvan minkä tahansa haluamansa käynnistyskuvan. Jos he kuitenkin vilkkuvat muokatun käynnistyskuvan, Verified Boot käynnistyy ja varoittaa käyttäjää, että muutos on havaittu. Yksi tapa, jolla tämä voidaan ohittaa, on flash-versio vanhasta, muokkaamattomasta käynnistysvedosta - sellaisen, joka sisältää vanhoja hyväksikäyttöjä, jotka on sittemmin korjattu. Siitä huolimatta sinulle annettu "varoitus" kestää vain 5 sekuntia, ja se sulkeutuu automaattisesti ja käynnistyy vahvistettuun käynnistystilaan, jossa hyökkääjän koodi suoritetaan edelleen.

Mr. Hay mainitsee, että on olemassa monia tapoja, joilla tätä puutetta voidaan käyttää hyväksi haitallisesti. Hän esimerkiksi muokkasi käynnistyskuvaa asettaakseen SELinux-tilan salliva sekä sisällyttää automaattisesti ADB-käytön käynnistyksen yhteydessä. Sitten, kun hän käytti tätä haavoittuvuutta hyväkseen muokatun käynnistyskuvansa salaamiseen, hän pääsi käyttämään a root shell ennen kuin käyttäjä voi edes syöttää valtuustietonsa.

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

Tarpeetonta sanoa, että tämä on melko vakavaa. Varastettu tai muurattu laite, jonka uskot olevan turvallinen tyypillisten turvatoimiesi vuoksi, voidaan tuhota kokonaan käyttämällä tätä hyväksikäyttöä.


OnePlus 3/3T SELinux -haavoittuvuus

Toinen haavoittuvuus, merkitty CVE-2017-5624, vaikuttaa kaikki OxygenOS-versiot ja sallii sen poista dm-verity käytöstä. Mr. Hay paljasti tämän haavoittuvuuden OnePlus Security -tiimille tammikuun 16. päivä, mutta on huomattava, että XDA: n vanhempi jäsen th3g1zlöysi itsenäisesti tämän haavoittuvuuden päällä Tammikuun 23. Olemme keskustelleet OnePlusin kanssa, joilla on vahvisti, että he ovat tunnustaneet ja korjaavat tämän toisen haavoittuvuuden tulevassa päivityksessä.

Tämä hyökkäys on myös melko yksinkertainen suorittaa. Sinun tarvitsee vain antaa yksi pikakäynnistyskomento dm-verityn poistamiseksi käytöstä (tai käyttöönotosta): fastboot oem disable dm-verity. Ota se käyttöön yksinkertaisesti myöntämällä fastboot oem enable dm-verity. Tämän komennon käsittelijä, joka on otettu käynnistyslataimen vedosta, on esitetty alla.


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

Tämän komennon antaminen asettaa lipun, jota Mr. Hay kutsuu dmVerityksi, jota käynnistyslatain käyttää lähettääkseen ytimen komentoriviargumentin, joka voi ottaa käyttöön tai poistaa käytöstä dm-verityn.

Tätä voidaan käyttää yhdessä ensimmäisen haavoittuvuuden kanssa erittäin etuoikeutetun koodin suorittamiseksi OnePlus 3/3T: ssä ilman käyttäjän suostumusta - ja pääsy käyttäjän tietoihin. Esimerkiksi Mr. Hay pystyi asentamaan sovelluksen hakemistoon /system/priv-app, mikä saa sovelluksen lisäämään priv-app-verkkotunnukseen. Tämä mahdollistaa haitallisen sovelluksen pääsyn laitteen erittäin etuoikeutettuihin toimintoihin. Mr. Hay osoittaa, että molempia haavoittuvuuksia hyödynnetään samanaikaisesti alla olevalla videolla. Kuten näet, kun hän käynnistää laitteen, hänen rakentamansa sovellus näytetään jo esiasennettuna.


Johtopäätös ja huomautus OnePlusilta

Näiden kahden tietoturva-aukon mahdollinen väärinkäyttö on pelottavaa. Kiitämme herra Hayta näiden haavoittuvuuksien paljastamisesta yksityisesti ja niin nopeasti OnePlusille. Emme kuitenkaan voi olla huolissaan siitä, että tällaiset pikakäynnistyskomennot ovat käytettävissä näillä laitteilla. Kun kirjoitimme oppaan kuinka löydä piilotetut pikakäynnistyskomennot, tarkoituksenamme oli ilmoittaa käyttäjille, että he voivat käyttää mielenkiintoisia komentoja käyttökokemuksensa parantamiseen. Emme koskaan uskoneet, että käynnistyslataimen koodissa olisi tällaisia ​​erittäin etuoikeutettuja komentoja. Mitä tulee "miksi" nämä pikakäynnistyskomennot sisältyvät laiteohjelmistoon, meille annettiin a "ei kommenttia." 

Toistaiseksi, jos et ole päivittänyt OnePlus 3/3T: täsi heti, kun jokainen Oxygen OS -versio on julkaistu, suosittelemme päivitä välittömästi. Päivittäminen Oxygen OS 4.0.2:een suojaa sinua ensimmäiseltä haavoittuvuudella, mutta meidän on odotettava OnePlusin julkaisee päivityksen, joka korjaa toisen haavoittuvuuden, ennen kuin voimme sanoa, että olet täysin turvassa niiltä hyödyntää. Meidän on pidettävä silmällä tällaisia ​​​​hyökkäyksiä tulevaisuudessa.


Lähde: Roee Hay