Рањивост ОнеПлус 3/3Т покретачког програма омогућава промену СЕЛинук-а у дозвољени режим у брзом покретању

Озбиљна рањивост у покретачком програму ОнеПлус 3/3Т омогућава нападачима да пребаце СЕЛинук стање са Енфорцинг на Пермиссиве! Читајте даље да бисте сазнали више!

Тхе ОнеПлус 3 анд тхе ОнеПлус 3Т су међу најбољим телефонима које тренутно можете купити. Док потрошачима тек треба да се открију предстојећи водећи модели 2017, у њиховом одсуству ОнеПлус 3/3Т доминирају перформансама у стварном свету по приступачној цени.

Али, ако желимо да будемо фер у процени уређаја, морамо да признамо да упркос најбољим напорима ОнеПлус-а, ОнеПлус 3/3Т није без својих грешака. На пример, раније смо извештавали о безбедносним питањима као што су ОнеПлус пропушта ИМЕИ детаље преко мреже када тражите ажурирања на свом телефону. А сада, имамо још једно безбедносно питање које треба додати на листу, ово са потенцијално опаснијим последицама.

Рањивост у боотлоадер-у ОнеПлус 3/3Т отвара врата злонамерним нападима. Како је открио Роее Хаи из ИБМ Кс-Форце тима за истраживање безбедности апликација и откривено на платформи ИБМ Кс-Форце Екцханге

, ова рањивост омогућава нападачу да манипулише стањем СЕЛинук на уређајима, чиме га пребацује у дозвољени режим. Све што је потребно нападачу је било физички приступ на уређај, или даљински приступ АДБ вези на уређај.

СЕЛинук, или Сецурити-Енханцед Линук, је безбедносни модул Линук кернела који омогућава приступ и управљање безбедносним политикама. СЕЛинук је уведен у Андроид почевши од Андроида 4.3 и постављен је на Спровођење режим као подразумевани од Андроид 4.4. Овај обавезни систем контроле приступа помаже у спровођењу постојећих права контроле приступа и покушава да спречи нападе ескалације привилегија. Ово делује као препрека за неовлашћену контролу над вашим уређајем, као што је апликација или рањивост која има за циљ да злонамерно добије роот приступ. Постављање СЕЛинук-а на Спровођење подразумевано на Андроид-у служи као први корак за заштиту нормалних корисника од таквих напада.

Рањивост је прилично једноставна за експлоатацију – у ствари, чини се да је то велики превид са стране ОнеПлус-а, а не како бисте замислили да изгледа ваш типичан експлоатација. Прво, нападач поново покреће ОнеПлус 3/3Т у режим 'брзог покретања' - ако имате физички приступ, једноставно притисните дугме за повећање јачине звука током покретања, али ако не, можете издати АДБ команду adb reboot bootloader на уређај. Режим брзог покретања на уређају открива УСБ интерфејс, који не би требало да дозволи да се било која безбедносно осетљива команда заврши на закључаним уређајима. Али на ОнеПлус 3/3Т, једноставно издавање fastboot oem selinux permissive команда преко интерфејса за брзо покретање искључује СЕЛинук режим Спровођење до Пермиссиве.

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

...

OnePlus3:/ $ getenforce
Permissive
OnePlus3:/ $

Да би се проблем додатно закомпликовао, ОнеПлус 3 и 3Т не поседују никакав унос на „О екрану“ који би помињао тренутно стање СЕЛинук уређаја. Жртва ће и даље остати несвесна компромитованог стања свог уређаја ако није видела да се експлоатација активно користи. Недостатак уноса стања СЕЛинук-а у „О екрану“ недостаје како у отвореним бета издањима заснованим на Андроиду 6.0, тако иу званичним РОМ-овима за Андроид 7.0.

Постоји неколико апликација за пребацивање стања СЕЛинук на Пермиссиве, као што је СЕЛинукМодеЦхангер апликација. Пребацивање СЕЛинук-а преко ове методе не дозвољава да стање опстане кроз поновно покретање. Мада, можеш користити скрипте за одржавање Пермиссиве СЕЛинук стање током хард ребоот-а. Обе ове методе захтевају роот приступ, што имплицира да корисник већ зна о ризицима којима је изложен. Али главна разлика је у промени режима СЕЛинук на Пермиссиве користећи горњу рањивост је да не само опстаје током тешких рестартовања, тако и ради без потребе за роот приступом.

Од данас не постоје правни лекови против рањивости.


АЖУРИРАЊЕ:

Дошли смо до Султанкда, један од најпризнатијих програмера прилагођених РОМ-а за ОнеПлус уређаје, да видимо да ли може да нам помогне да сазнамо више о овом проблему. Одмах је ископао у код да пронађе основни извор, ево шта је нашао:

Начин на који „фастбоот оем селинук " наредба функционише јесте да додаје додатни аргумент у командну линију кернела када покреће Линук. Додатни аргумент долази у облику „андроидбоот.селинук=", где може бити „дозвољавајуће“. Ту ствари постају смешне: „андроидбоот." аргументе на командној линији кернела анализира Андроид инит. У нормалној продукцијској верзији Андроид-а („корисничка“ верзија), аргумент „андроидбоот.селинук“ се потпуно игнорише и селинук је увек приморан да спроводи. Дакле, ова грешка се састоји од два проблема:

  1. Корисници могу да натерају покретач покретања да проследи ознаку која би нормално учинила селинук дозвољеним на РОМ-у за инжењеринг/дебаговање
  2. ОнеПлус је модификовао Андроид инит да би поштовао „андроидбоот.селинук“ заставу чак и за продукцијске РОМ верзије

Ево где је Андроид инит конфигурисан да игнорише ознаку "андроидбоот.селинук" за производне верзије: https://android.googlesource.com/platform/system/core/+/android-6.0.0_r41/init/Android.mk#7

Ознака АЛЛОВ_ДИСАБЛЕ_СЕЛИНУКС у изворном коду је постављена само на 1 за корисничке грешке и инжењерске верзије

(Ово не утиче на мој РОМ јер правим свој РОМ у производном (корисничком) режиму)

Дакле, "андроидбоот.селинук" се једноставно игнорише у мом РОМ-у, "фастбоот оем селинук " изгледа да је наредба нешто што је ОнеПлус креирао, јер таква команда не постоји у ЦАФ-овим јавним изворима покретача. Углавном, могу да смислим 4 начина да ово поправим за кориснике са откључаним покретачима:

  1. Хек-едитујте покретач да бисте променили све инстанце стринга „селинук“ у нешто другачије (као што је „сцлинук“) тако да Андроид инит не би препознао заставицу
  2. Хек-едитујте Андроид инит бинарни фајл у ОкигенОС-у да бисте заменили све инстанце „андроидбоот.селинук“ у нешто другачије (као "андроидбоот.сцлинук") тако да Андроид инит неће препознати андроидбоот.селинук флаг
  3. Додајте хак у управљачки програм командне линије језгра сличан мом СафетиНет бајпасу да бисте сакрили ознаку "андроидбоот.селинук" од Андроид-овог покретања

Желели бисмо да се захвалимо Султанкди на његовом времену и труду да нам помогне да схватимо шта се дешава иза кулиса. Такође смо контактирали ОнеПлус, који је упознат са ситуацијом и испитује ствар.


Надамо се да ће ОнеПлус јавно признати озбиљан проблем и да је транспарентан у својим плановима за његово решавање.