мобильный экран

Эксплуатация прошивки Android — неподписанная прошивка в SoC Samsung CVE-2020-10831

TL, д-р  

Мы объясним, как мы использовали прошивку Android, используя недокументированный API-интерфейс ядра, который был обнаружен в результате обратного проектирования приложения Samsung «Скрытые заводские настройки».
Этот API позволяет прошивать неподписанную прошивку сенсорного экрана Samsung.
CVE затрагивает все серии Samsung S7-S10, использующие чипсет exynos.

Версия прошивки самсунг

Вдохновение  

После прочтения нулевого проекта большая статья об использовании прошивки WiFi для получения RCE, я решил, что должен попытаться провести собственное исследование прошивки. 

Общий обзор SoC  

В наши дни телефоны имеют гораздо больше, чем просто 1 процессор, работающий под управлением ОС Android, что делает их чрезвычайно сложными системами. 

В большинстве телефонов Android есть от 10 до 30 разных «компьютеров», каждый со своим процессором, памятью и хранилищем. 

Все эти устройства обмениваются данными по различным аппаратным протоколам связи, таким как IPC, I2C и т. д. 

Основными процессорами в телефонах Android являются:

AP / Процессор приложений – Это основной ЦП, известный вам по характеристикам телефона, который взаимодействует со всеми остальными процессорами и управляет ими, а также работает под управлением ОС Android. 

БП / Процессор основной полосы частот / Радио / Модем – BP отвечает за преобразование всех сотовых данных, полученных от радиоволн, в информацию, используемую программным обеспечением, путем реализации стека LTE. 

GPU - Графический процессор отвечает за обработку всех задач, связанных с графикой.

Есть больше блоков обработки, таких как Wi-Fi, Crypto, Camera, Audio и т. д. 

Все эти компоненты вместе называются «Система на кристалле» — SoC.

Поиск уязвимой цели 

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

Следовательно, использование информации от производителя может значительно облегчить исследование. 

После поиска в Google упомянутых зацепок многие форумы упоминали о проблеме с сенсорным экраном Samsung и о том, как ее исправить. 
Метод был относительно прост:

«Сначала перейдите к скрытым настройкам, написав * # 2663 # в приложении телефона, а затем нажмите «Обновить FW».

Поиск способов связи с прошивкой

Как упоминалось ранее, использовать знания производителя было бы намного проще, чем придумывать все самому. 

Запустив strace в Android-приложении, отвечающем за обновление прошивки, можно легко увидеть, что после нажатия кнопки обновления приложение пишет по следующему пути

«/sys/класс/sec/tsp/cmd»

Этот путь является частью механизма sysfs ядра. 

sysfs — это псевдофайловая система, предоставляемая ядром Linux, которая экспортирует информацию о связанных драйверах устройств. 

Здесь мы можем увидеть, как общаться с ядром из файла cmd:

взаимодействие команд ядра

Написание имени функции, например, «fw_update», а затем параметра «1» приведет к обновлению прошивки сенсорного экрана, используемому в официальном приложении заводских настроек. 
Но чтобы полностью понять функционал механизмов обновления прошивки нам нужно скачать ядро и посмотрите на код драйвера устройства. 
После изучения исходного кода ядра, обрабатывающего приведенную выше команду, в следующем комментарии была обнаружена очень интересная функциональность. 

эксплуатация прошивки андроида

Видимо, при написании:

«echo -n «обновление_прошивки: 0» > /sys/class/sec/tsp/cmd»

Параметр 0 сообщает ядру, откуда обновлять прошивку.

Как видно из комментария к коду ядра, передача 2 заставит ядро ​​обновить прошивку с UMS (sdcard). 
Дальнейший поиск в исходниках ядра покажет требуемый путь:

Эксплуатация прошивки Android с исходным кодом ядра

Процесс эксплуатации 

Чтобы проверить, можем ли мы прошить неподписанную / поврежденную прошивку, все, что нам нужно сделать, это попробовать и посмотреть, что произойдет.

(Вообще лучше модифицировать только читаемые человеком строки, такие как сообщение журнала, чтобы не нарушать процесс выполнения программы, к сожалению, я выбрал более глупый путь)

Команда

команда эксплуатации прошивки android

Результат печатается в журнале ядра (kmsg)

Журнал ядра, эксплуатация прошивки Android

В этой части исследования я не был на 100 процентов уверен, что это сработало, но после попытки щелкнуть на моем личном устройстве и увидеть множество ошибок ввода-вывода в kmsg (вместо простого нажатия), я понял, что просто успешно прошиваю искаженную прошивку сенсорного экрана. , вуала! 

Интересное замечание о фаззинге 

Когда я нашел API-интерфейс cmd-файла, моей первой мыслью было: «Давайте начнем его и найдем переполнения!»

слишком долгая эксплуатация прошивки Android

Но в журнале четко указано, что ввод слишком длинный и удален, чтобы предотвратить переполнение. 

Этот патч связан с уязвимость найден тем же исследователем статьи проекта нулевой, который вдохновил меня на исследование. 

перейти к содержанию