мобільний екран

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

TL, д-р  

Ми пояснимо, як ми використовували мікропрограму Android, використовуючи недокументований API ядра, який було знайдено шляхом реверсивного проектування програми Samsung «Hidden Factory Settings».
Цей API дозволяє перепрограмувати непідписане мікропрограмне забезпечення сенсорного екрану Samsung.
CVE впливає на всі серії Samsung S7-S10, які використовують чіпсет exynos.

Версія прошивки samsung

натхнення  

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

Загальний огляд SoC  

Сьогодні телефони мають набагато більше, ніж просто 1 ЦП, на якому працює ОС Android, що робить їх надзвичайно складними системами. 

Більшість телефонів Android мають 10-30 різних «комп’ютерів» усередині них, кожен із власним ЦП, пам’яттю та пам’яттю. 

Усі ці пристрої спілкуються через різні апаратні протоколи зв’язку, такі як IPC, I2C тощо. 

Основні процесори в телефонах Android:

AP / процесор додатків – Це основний ЦП, який ви знаєте зі специфікацій телефону, який спілкується та керує всіма іншими процесорами та запускає ОС Android. 

BP / Baseband Processor / Radio / Modem – BP відповідає за перетворення всіх стільникових даних, отриманих з радіохвиль, на програмну інформацію, яка використовується за допомогою стека LTE. 

Графічний процесор - Блок обробки графіки відповідає за виконання всіх завдань, пов’язаних із графікою

Існує більше блоків обробки, таких як Wi-Fi, Crypto, Camera, Audio тощо… 

Усі ці компоненти разом називають «системою на кристалі» (System on Chip) — SoC

Пошук вразливої ​​цілі 

Експлуатація мікропрограми Android складна, оскільки ми маємо дуже мало попередніх знань про архітектуру мікропрограми та те, як ОС взаємодіє з нею. 

Отже, використання інформації від виробника може значно полегшити дослідження. 

Після пошуків у Google за згаданими потенційними клієнтами багато форумів згадували проблему сенсорного екрана Samsung і способи її вирішення. 
Метод був відносно простим:

«Спочатку перейдіть до прихованих налаштувань, написавши *#2663# у програмі телефону, а потім натисніть «Оновити програмне забезпечення».

Пошук способів обміну даними з мікропрограмою

Як згадувалося раніше, використовувати знання виробника було б набагато легше, ніж з’ясувати все самостійно. 

Запустивши strace в програмі Android, яка відповідає за оновлення прошивки, ви можете легко побачити, що після натискання кнопки оновлення програма записує наступний шлях

«/sys/class/sec/tsp/cmd»

Цей шлях є частиною механізму sysfs ядра. 

sysfs — це псевдофайлова система, надана ядром Linux, яка експортує інформацію про відповідні драйвери пристроїв. 

Тут ми можемо побачити, як спілкуватися з ядром із файлу cmd:

зв'язок ядра cmd

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

експлуатація прошивки android

Мабуть, при написанні:

“echo -n "firmware_update:0" > /sys/class/sec/tsp/cmd”

Параметр 0 повідомляє ядру, з якого місця оновлювати мікропрограму.

Як показано в коментарі до коду ядра, передача 2 призведе до того, що ядро ​​оновить мікропрограму з UMS (sdcard). 
Подальший пошук джерела ядра покаже необхідний шлях:

використання джерела ядра прошивки android

Процес експлуатації 

Щоб перевірити, чи можемо ми прошити непідписану/несправну мікропрограму, усе, що нам потрібно зробити, це спробувати та подивитися, що станеться.

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

Команда

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

Результат, надрукований у журналі ядра (kmsg)

журнал ядра використання прошивки android

У цій частині дослідження я не був на 100 відсотків впевнений, що це спрацювало, але після спроби клацнути на моєму особистому пристрої та побачивши безліч помилок вводу-виводу в kmsg (замість того, щоб просто натиснути), я зрозумів, що просто успішно перепрошив неправильну мікропрограму сенсорного екрана , вуала! 

Цікаве зауваження щодо фаззингу 

Коли я знайшов API файлу cmd, моєю першою думкою було «давайте розпливемо його та знайдемо переповнення!»

занадто довге введення прошивки android експлуатації

Але в журналі чітко вказано, що вхідні дані занадто довгі та відкинуті, щоб запобігти переповненню. 

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

Перейти до вмісту