[Обновление: исправлена ​​вторая уязвимость] Обнаружены две критические уязвимости безопасности загрузчика OnePlus 3/3T, одна исправлена, остальные устраняются

click fraud protection

В OnePlus 3 и OnePlus 3T были обнаружены две ошибки, связанные с загрузчиком. Одну исправили, другую исправляют.

С момента публикации этой статьи в версии Oxygen OS 4.0.3 была исправлена ​​вторая уязвимость безопасности, обсуждаемая в этой статье, а именно dm-verity.

Прежде чем войти в чудесный мир рутирования Android, пользовательских прошивок, ядер и других модификаций, вам сначала необходимо разблокировать загрузчик на своем устройстве.

На некоторых устройствах (особенно под брендом оператора связи) это создает проблему, поскольку пользователям приходится сталкиваться со значительными техническими трудностями, прежде чем они смогут разблокировать загрузчик. Другие устройства, такие как телефоны Huawei, требуют, чтобы вы запросили у OEM-производителя уникальный код разблокировки загрузчика — небольшое препятствие для входа, но не очень сложное. Еще лучше — телефоны серии Google Nexus/Pixel или OnePlus, которые требуют от вас только отметить опцию в настройках разработчика, а затем отправить несколько быстрая загрузка команды.

Но как бы сложно ни было разблокировать загрузчик, одно всегда останется неизменным: требование вайпа устройства при разблокировке. Это сделано по очевидным причинам безопасности, поскольку весь раздел данных можно легко извлечь после разблокировки загрузчика. Злоумышленник (обладающий техническими знаниями) может загрузить пользовательское восстановление и извлечь полную резервную копию вашего устройства, если получит доступ к вашим данным. Вот почему разблокировка загрузчика считается угрозой безопасности, и именно поэтому после разблокировки вашего устройства стираются данные. Если предположить, что все идет как надо, обычный пользователь должен быть застрахован от того, что злоумышленники разблокируют загрузчик в обход стандартных методов блокировки Android. Однако не все идет по плану.


Уязвимость разблокировки загрузчика OnePlus 3/3T

Появился новый набор уязвимостей. только что раскрыто Рои Хэй (@roeehay), первый из которых позволяет разблокировать загрузчик OnePlus 3/3T. без подтверждения пользователя и без запуска сброса настроек. Эта уязвимость, помеченная CVE-2017-5625, считается уязвимостью критической серьезности и затрагивает все устройства OnePlus 3/3T, работающие под управлением OxygenOS 3.2–4.0.1. Пользователи, которые уже обновились до инкрементная OxygenOS 4.0.2 обновлять не затронуты из-за этой уязвимости, поскольку г-н Хэй конфиденциально раскрыл эту уязвимость OnePlus 23 января чтобы они могли немедленно исправить проблему.

Уязвимость заключается в отправке собственной скрытой команды fastboot: fastboot oem 4F500301. Отправляя эту команду, состояние блокировки загрузчика пользователя обходит (даже если «Разрешить разблокировку OEM» не включено в настройках разработчика). Устройство не запрашивает пользователя и не стирает данные устройства, как должно быть - фактически устройство все равно сообщит, что загрузчик заблокирован! Еще одна команда быстрой загрузки, fastboot oem 4F500302, сбросит некоторые настройки загрузчика и может использоваться для блокировки уже разблокированного устройства.

Г-н Хэй обнаружил, что первая команда fastboot устанавливает то, что он назвал "магияФлаг", которая отменяет проверку, определяющую состояние блокировки загрузчика при выполнении команды перепрошивки или стирания.

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

Обработчик флэш-памяти быстрой загрузки


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

читать далее

Обработчик стирания при быстрой загрузке


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

читать далее

CVE-2017-5626 можно использовать для выполнить код ядра. Злоумышленник может прошить любой загрузочный образ, который пожелает. Однако, если они прошьют измененный загрузочный образ, Verified Boot сработает и предупредит пользователя об обнаружении модификации. Один из способов обойти это — прошить старый, немодифицированный загрузочный образ, содержащий старые эксплойты, которые с тех пор были исправлены. Несмотря на это, «предупреждение», которое вы получаете, длится всего 5 секунд, и оно автоматически закрывается и загружается в проверенное состояние загрузки, в котором код злоумышленника все равно будет выполняться.

Г-н Хэй упоминает, что существует множество способов злонамеренного использования этой уязвимости. Например, он изменил загрузочный образ, чтобы установить режим SELinux на вседозволительный а также автоматически включать доступ к ADB при загрузке. Затем, воспользовавшись этой уязвимостью для прошивки модифицированного загрузочного образа, он смог получить доступ к root-оболочку еще до того, как пользователь сможет ввести свои учетные данные.

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

Надо сказать, что это достаточно серьезно. Украденное или заблокированное устройство, которое, по вашему мнению, безопасно из-за ваших типичных мер безопасности, можно полностью победить с помощью этого эксплойта.


Уязвимость OnePlus 3/3T SELinux

Вторая уязвимость, помеченная CVE-2017-5624, влияет все версии OxygenOS и позволяет человеку отключить дм-верити. Г-н Хэй сообщил об этой уязвимости команде OnePlus Security на 16 января, но следует отметить, что старший член XDA th3g1zсамостоятельно обнаружил эту уязвимость на 23 января. Мы поговорили с OnePlus, у которого есть подтвердили, что они признали и исправят эту вторую уязвимость в будущем обновлении.

Эту атаку также довольно просто выполнить. Чтобы отключить (или включить) dm-verity, достаточно ввести одну команду fastboot: fastboot oem disable dm-verity. Чтобы включить его, просто введите fastboot oem enable dm-verity. Обработчик этой команды, взятый из дампа загрузчика, показан ниже.


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

Выполнение этой команды установит флаг, который г-н Хэй называет dmVerity, который используется загрузчиком для отправки аргумента командной строки ядра, который может включать или отключать dm-verity.

Это можно использовать в сочетании с первой уязвимостью для выполнения высокопривилегированного кода на OnePlus 3/3T без согласия пользователя — и с доступом к данным пользователя. Например, г-н Хэй смог установить приложение в /system/priv-app, что привело к добавлению приложения в домен priv-app. Это позволяет вредоносному приложению получить доступ к высокопривилегированным функциям устройства. На видео ниже г-н Хэй демонстрирует одновременное использование обеих этих уязвимостей. Как вы можете видеть, когда он загружает устройство, оказывается, что созданное им приложение уже предустановлено.


Вывод и примечание от OnePlus

Потенциальные злоупотребления этими двумя уязвимостями безопасности пугают. Мы благодарим г-на Хэя за то, что он так быстро и конфиденциально сообщил OnePlus об этих уязвимостях. Тем не менее, мы не можем не встревожиться, что такие команды быстрой загрузки доступны на этих устройствах. Когда мы писали руководство о том, как обнаружить скрытые команды быстрой загрузки, мы намеревались сообщить пользователям, что могут быть некоторые интересные команды, которые они могут использовать для улучшения своего опыта. Мы никогда не думали, что такие высокопривилегированные команды будут находиться в коде загрузчика.. Что касается "почему" эти команды fastboot включены в прошивку, нам дали "без комментариев." 

На данный момент, если вы еще не обновляли свой OnePlus 3/3T сразу после выпуска каждой сборки Oxygen OS, мы рекомендуем вам обновить немедленно. Обновление до Oxygen OS 4.0.2 защитит вас от первой уязвимости, но нам придется подождать, пока OnePlus выпускает обновление, которое исправляет вторую уязвимость, прежде чем мы сможем сказать, что вы полностью защищены от этих уязвимостей. подвиги. Нам придется следить за подобными эксплойтами в будущем.


Источник: Рои Хэй