Всем привет Ну что ребята, продолжаем изучать Андроид и его дебри. Поискав инфу в интернете про root integrity check я пришел к выводу, что ее очень мало, почти нет. Поэтому мне пришлось задействовать скрытые каналы поставки информации. И вот что удалось узнать, root integrity check это пункт в меню, который отвечает за проверку всех корневых файлов.
Такс, давайте переведем root integrity check на русский, значит что такое root? Root переводится как корень, слово integrity переводится как целостность, ну а check это уже проверить, еще говорят например чекать, прочекать типа. Короче говоря root integrity check переводится как проверка целостности корня, ну это если дословно
Еще я узнал, что пункт root integrity check находится в меню Android system recovery, название меню как бы намекает что меню само относится к восстановлению чего-то. Еще вроде бы если выбрать root integrity check, то процесс проверки может быть долговатым.
Ищу инфу дальше. Вот нашел картинку где есть этот пункт root integrity check, смотрите:
Короче ребята больше не могу найти инфу о root integrity check, но вроде и так все понятно, это проверка корневых файлов на целостность. То есть проверяется не нарушены ли файлы, не изменены ли они, являются ли оригинальными. На другом сайте написано даже что это проверка подписи всех корневых файлов
Вот такие дела ребята, инфы мало, но что смог найти, то это вам и написал. Удачи вам и хорошего настроения
На главную!26.06.2017 «>Читать! —>
На любом смартфоне и планшете под управлением Android есть меню Recovery. Оно предназначено для настройки системных параметров, резервного копирования и восстановления работы телефона. Чтобы зайти в этот системный раздел, нужно выключить устройство, а затем одновременно нажать кнопку питания и клавишу регулировки громкости (вверх или вниз). Через некоторые время на экране появится несколько разделов с настройками. Рекомендуется пользоваться меню Recovery аккуратно — через него можно случайно очистить внутреннюю память или вернуть гаджет к заводским настройкам.
Некоторые пункты меню Recovery вызывают вопросы у начинающих пользователей. Мы уже рассказывали о функциях Wipe Cache Partition и Wipe data/factory reset, теперь пришла очередь строчки Root Integrity Check. Этот раздел предназначен для проверки целостности корневых файлов. Такая процедура может потребоваться при возникновении ошибок в работе телефона. Например, если некоторые приложения отказываются работать, рекомендуется отрыть системное меню и запустить автоматическую проверку. Она занимает достаточно много времени, поэтому важно, чтобы смартфон был полностью заряжен или стоял за зарядке.
Как воспользоваться Root Integrity Check? Для этого необходимо запустить меню Recovery и выбрать соответствующий пункт. Важно заметить, что в режиме «восстановления» сенсорный экран не работает. Навигация выполняется кнопками регулировки громкости. Чтобы подтвердить действие, необходимо нажать кнопку питания.
Если проверка Root Integrity Check показывает ошибки, рекомендуется выполнить восстановление заводских настроек. Такая операция также осуществляется посредством меню Recovery. Для этого необходимо выбрать Wipe Data/Factory Reset и подождать, пока смартфон вернется на стандартные настройки. Важно заметить, что хранящаяся информация будет очищена, поэтому перед проведением сброса нужно сделать резервную копию.
Опция Root Integrity Check позволяет протестировать целостность корневых файлов и пригодится пользователям, сталкивающимся с ошибками работы операционной системы.
Цифровая подпись aboot и boot разделов
Я пытался выяснить каким публичным ключём подписаны boot образы. Распаковал ключи из aboot (binwalk -e aboot
), извлек подписи из образов и прошелся всеми публичными ключами по ним. Выяснил, что все образы подписаны одни ключём. С ходу не разобрался как вычислить смещение подписи у boot разделов, потому я просто перепаковываю образ и использую его размер как смещение. С aboot чуть сложнее. Мне удалось извлечь подпись и расшифровать sha256 образа. А вот понять как самому вычислять sha256, чтобы сравнить с расшифрованным значением, пока не удалось.
#!/bin/bash # print der certificate: # openssl x509 -inform der -in 0xff.crt -text -noout # mkdir boot # unpackbootimg -i 09-boot.img -o boot # cd boot # mkbootimg --kernel 09-boot.img-zImage --ramdisk 09-boot.img-ramdisk.gz --cmdline "`cat 09-boot.img-cmdline`" --base `cat 09-boot.img-base` --pagesize `cat 09-boot.img-pagesize` --dt 09-boot.img-dtb --kernel_offset `cat 09-boot.img-kerneloff` --ramdisk_offset `cat 09-boot.img-ramdiskoff` --tags_offset `cat 09-boot.img-tagsoff` --output mynew.img # dd if=../09-boot.img of=signature.bin bs=1 count=256 skip=$(ls -la mynew.img | awk '{print $5}') # cd .. # binwalk -e 05-aboot.img # extract aboot signature # dd if=05-aboot.img of=signature.bin bs=1 count=256 skip=$(od -A d -t x4 05-aboot.img | awk --non-decimal-data '/^0000016/ { i=sprintf("%dn","0x"$3); print (i+40)}') # extract base aboot image # 40 - aboot header size, refer to: https://android.googlesource.com/kernel/lk/+/caf/master/target/msm8226/tools/mkheader.c#160 # dd if=05-aboot.img of=aboot-base.img bs=1 count=$(od -A d -t x4 05-aboot.img | awk --non-decimal-data '/^0000016/ { i=sprintf("%dn","0x"$3); print (i)}') skip=40 # how sha256 was calculated? # openssl dgst -sha256 -sign private_key -out signature.bin aboot-base.img ? NAME=$1 IMG=${NAME}/mynew.img SIG=${NAME}/signature.bin #IMG=aboot-base.img #SIG=signature.bin CALC_SHA256=$(sha256sum ${IMG} | awk '{print $1}') for i in `find . -name *.crt`; do ORIG_SHA256=$(openssl rsautl -inkey /dev/null) -pubin -in ${SIG} 2>/dev/null | hexdump -ve '/1 "%02x"') if [ "${ORIG_SHA256}" != "" ]; then echo "sha256 was decrypted using ${i} key - ${ORIG_SHA256}" fi if [ "${ORIG_SHA256}" = "${CALC_SHA256}" ]; then echo "sha256 ${ORIG_SHA256}" echo "$i" fi done
В качестве эксперимента я попробовал записать boot раздел в раздел fota, зная, что при загрузке fota снимаются все ограничения. Здесь я сильно рисковал, т.к. мог получить bootloop, похожий на bootloop recovery. Метка загрузки в fota записывается в раздел fotamng и если раздел не загрузится, то я получу бесконечную перезагрузку.
К сожалению, boot раздел, записанный в fota не загрузился, а bootloop я, к счастью, не получил. Не понятно почему тогда boot раздел, записанный в recovery успешно загрузился. Толку от этого конечно нет, для recovery используется та же защита, что и для boot. Не знаю чем вызвано подобное поведение. Возможно различными смещениями ramdisk и tags:
boot/recovery:
ramdisk: 0x01000000 tags: 0x00000100
fota:
ramdisk: 0x02000000 tags: 0x01e00000
В Secure boot whitepaper от Qualcomm говорится о том, что подписывается sha256 hash от sha256 hash’ей нескольких сегментов ELF загрузчика. Количество сегментов определено в Subject’е сертификата. Например OU=05 00002000 SW_SIZE говорит о том, что в подписи содержится sha256 hash от первых 256 hash’ей областей по 32 байта (0x2000/32=256). Сам по себе aboot не содержит ELF заголовка и описание больше подходит к sbl1 (secondary boot loader).
Есть описание работы little kernel от Qualcomm, но и там нет ничего про алгоритм создания подписи aboot. Задача определить алгоритм все еще актуальна.
Содержание
Эксперименты с загрузчиками
Для проведения экспериментов я заказал из штатов за символическую сумму Kyocera Brigadier с разбитым экраном.
Я проверил цифровые подписи aboot загрузчиков. Subject’ы сертификатов оказались идентичными, следовательно они могут быть взаимозаменяемыми. Решился на эксперимент: прошить aboot от KC-S701 в Brigadier. Загрузчик заработал. На удивление, защита emmc от записи с этим загрузчиком не включилась и я смог спокойно восстановить загрузчик от Brigadier. Понимая все риски, я решил прошить загрузчик от Brigadier на KC-S701. Я бы получил возможность загружать любое неподписанное ядро и использовать fastboot. В этот раз телефон не загрузился.
Тут история могла бы закончиться, но «телефон не загрузился» — это черный экран. И на моё счастье это был черный экран не Qualcomm QHSUSB__BULK
, который требует специального подписанного загрузчика для восстановления телефона, а тот самый download mode, который представляет телефон как USB mass storage. Телефон был восстановлен. На сегодняшний день это последнее, что я предпринял.
- Как включать/отключать WiFi программными средствами? UPD: нашёл способ
- Почему пересборка политики sepolicy не работает? Несовершенный декомпилятор sepolicy? Что-то упущено?
- Что за режим перезагрузки oem-1?
Загрузка Fota
Почему boot раздел не грузится из раздела fota? Ведь они подписаны одним ключём. Если бы загрузка произошла, то я бы получил разлоченный телефон, в котором не пришлось бы подменять модули.
Расшифровка Kyocera properties
Kyocera наряду с android system properties использует свой внутренний механизм properties, который мне тоже не удалось выяснить. Наверняка там хранятся интересные опции, которые могут влиять в том числе и на снятие защиты bootloader’а. В телефоне есть библиотека libkcjprop_jni.so и демон kcjprop_daemon. Библиотеку можно подключить и использовать её функции, но у меня пока не нашлось времени этого сделать.
Опции пишутся на файловую систему, внутри бинарные данные:
$ ls -la /sysprop/kcjprop/rw/8d9d788ddd5fecfdbc6c5f7c5cecfc -rw-rw---- root root 16 1970-01-22 21:01 8d9d788ddd5fecfdbc6c5f7c5cecfc
Kexec
Kexec позволяет из ядра Linux загрузить другое ядро. По умолчанию в production релизах ядер отключают поддержку Kexec, но его можно включить через модуль ядра. Затем из user-end можно загрузить любое ядро, которое заменит текущее. Это выглядит как хак, но если хочется загружать своё ядро — этот вариант имеет своё место под солнцем.
Уязвимость в QSEE
QSEE — защита в процессорах Qualcomm, в которой недавно уже достаточно давно обнаружили уязвимость. Суть уязвимости — полный доступ к выполнению команд на уровне Trust Zone. Вплоть до загрузки любого ядра.
Пока еще разбираюсь в этом вопросе. Насколько я понял мне необходимо получить доступ к области emmc, называющейся RPMB. Этого можно добиться отправкой специально сформированной SCM командой. В области RPMB (Replay Protected Memory Block) содержатся биты, которые отвечают за lock/unlock статус.
Заключение
Код модулей, aboot загрузчики и библиотека для работы с Kyocera Propertiies находятся в моём репозитории на github: https://github.com/kayrus/break_free.
С каждым решением очередной проблемы, процесс всё больше напоминает апорию об Ахиллесе и черепахе. Не знаю на сколько еще хватит моего энтузиазма. Возможно здесь есть знающие люди, которые помогут достичь дна кроличьей норы.
Пользуясь случаем, выражаю благодарность разработчикам из компании Kyocera за прекрасные устройства и их защиту. В противном случае этой статьи бы не было. С другой стороны отсутствие регулярных обновлений сильно огорчает. Если у вас появится модель телефона с возможностью разблокировки загрузчика, я непременно его приобрету.
P.S. Огромное спасибо Николаю Еленкову (Nikolay Elenkov), автору книги Android security internals. Его пояснения о работе bootloader’а помогли понять процесс загрузки Android.
P.P.S. Еще один специалист по мобильной ИБ, Justin Case, сказал, что он знает уязвимость, которой подвержены все современные процессоры Qualcomm, но раскрывать её детали он не будет.
Asked1 year, 6 months ago Active1 month ago Viewed 6k times 1
In my attempts to troubleshoot a Notifications volume turning itself down problem on my HTC Desire 728, I selected in «system recovery» menu the option of root integrity check
.
It ran quickly, displaying the following:
Now check begins, please wait…..
load source zip file fail
System check FAIL!!
In the context of HTC, what does «root integrity check» actually means? Is it just an fsck
? If so why does it need to «load source zip file»? What does this FAIL!!
mean?
|improve this question
1 Answer 1
active oldest votes -1
Root integrity check fail means some person have modified apk or file on your android it means they could also spy on you because every apk have java permissions that you might not know off unless u check on computer with adb commands and remove the modified apk and files manually
|improve this answer
Not the answer you're looking for? Browse other questions tagged or ask your own question.
- http://virtmachine.ru/root-integrity-check-chto-eto-v-rekaveri-na-android-i-perevod-na-russkij.html
- https://androidlime.ru/root-integrity-check-in-recovvery
- https://habr.com/p/320150/
- https://android.stackexchange.com/q/196113