Красавчики
Красавчики

Приветствую!

В нашем несовершенном мире «умных домов» и повсеместного IoT с относительно недавних пор стало модным производить (да и покупать домой) очередного разговорчивого электронного друга, а именно: Яндекс Станции, VK Капсулы, SberBoom и тому подобные девайсы.

К сожалению для разработчиков (не путать с вендорами) этих устройств, некоторые из них содержат уязвимости, позволяющие пользователям с нужными навыками локально получить полный контроль над железкой, прочитать те данные, которые пользователь не должен уметь читать, да и в целом иметь возможность изучить прошивку, найти в ней уязвимости и так далее.

Конечно, как можно понять из названия, речь пойдёт об устройствах на базе SoC от Amlogic — A113X. В данном материале я расскажу о том, как можно защитить ваши устройства на базе этого чипа от описанных выше вещей, почему Amlogic не смог предложить эту защиту разработчикам, и другие интересные детали. Программисты умных колонок, и просто интересующиеся — добро пожаловать под кат.

A113X уязвим?

Возможно, некоторые разработчики устройств «умного дома», работавшие с Amlogic A113X сейчас сильно удивились, узнав, что камень, который они выбрали для разработки, подвержен какой‑то уязвимости (к тому же, её внесли не они сами).

Так вот, ещё в 2020 году в другом чипе от Amlogic — S905D3 была найденая критическая уязвимость на уровне Bootrom, позволяющая исполнять любой неподписанный код, которую, очевидно, невозможно исправить. Уязвимой оказалась одна из команд протокола Amlogic USB Download, используемого утилитой от вендора Aml Burning Tool v3 для прошивки и обновления устройств. К тому же, был публично опубликован эксплоит, позволяющий воспользоваться данной уязвимостью локально и выполнить нужные команды. Например, можно вычитать ключи шифрования из защищённой области чипа (фьюзов) и расшифровать содержимое некоторых областей прошивки, либо просто сдампить сам Bootrom и изучить его детальнее.

Казалось бы, при чём тут A113X? Дело в том, что указанный протокол обновления используется и в герое данной статьи, и содержит ту же самую уязвимость. Только вот публичного эксплоита вроде как нет (на самом деле автор не искал). К тому же, внимательные читатели, которые уже прочитали об уязвимости по ссылке, заметили, что защититься от уязвимости можно!

Согласно материалу, можно воспользоваться "password protection", встроенной в Bootrom, и всё - уязвимость будет неэксплуатабельной. Изучив код бутрома, я могу с уверенностью сказать - парольная защита правда закрывает найденную багу.

Парольная защита

Капсула от VK, на которую я накатил защиту паролем
Капсула от VK, на которую я накатил защиту паролем

Защита паролем подразумевает запись хэша необходимого вам пароля во фьюзы и установку там же соответствующего бита. Проверка будет происходить каждый раз, когда по USB к устройству кто-то подключается и пытается отправлять команды, срабатывая до выполнения основных его команд, типа уязвимой AM_REQ_WR_LARGE_MEM. И всё бы хорошо, но есть одно НО.

Инструменты разработчика (SDK), предоставляемые Amlogic, действительно содержат утилиту, которая позволяет при сборке прошивки задать необходимый пароль и создать файл, который будет включать в себя прошиваемые в устройство фьюзы. Данный файл с фьюзами (включающий также и ключи шифрования прошивки) может иметь названия в стиле secureboot_set/secure_boot_set/amlogic_set и так далее, и используется утилитой, упомянутой ранее — Aml Burning Tool.

Прежде чем упомянуть то самое НО, стоит рассказать, что у Amlogic существует разделение своих чипов на так называемые «семейства», и у них есть вот такие названия:

  • a1

  • axg // это наш A113X

  • c1

  • g12a

  • g12b

  • gxb

  • gxl

  • gxtvbb

  • tl1

  • tm2

  • txhd

  • txl

  • txlx

Для каждого представленного семейства в SDK имеется свой собственный вариант утилиты для создания Secure Boot Set. Это сделано потому, что у всех из них реализован собственный Bootrom со своей структурой хранения флагов и ключей во фьюзах.

Так вот, НО заключается в том, что не для всех семейств в списке утилита создания файла фьюзов позволяет этот самый пароль на USB задать. А в ответ на запросы вендор утверждает, что возможности установить пароль на таких семействах нет в принципе.

Столкнувшись с этим, разработчики, которые хотели как‑то защитить своё устройство от незапланированного использования (иногда даже не подозревая об уязвимости), начинают идти на различные хитрости (либо не идти), лишь бы не дать исследователю поковыряться в прошивке:

  • Используют USB‑пины, но не выводят их наружу, при этом скрывая распиновку на плате

  • Продолжают использовать USB‑порт, защищая уровень повыше (RH, U‑Boot bootdelay)

  • Используют USB‑порт (защита отсутствует)

Конечно, все эти защиты упираются только во время, необходимое исследователю, чтобы их обойти:

  • распиновку можно прозвонить

  • защиты уровня выше Bootrom не имеют смысла, если цепочка доверия нарушена

Amlogic говорит правду?

Давайте же выясним, правду ли говорит вендор, утверждая, что на чипах типа A113X парольной защиты нет. Для этого нам потребуется сдампить сам Bootrom камня. Тем, кто разрабатывает под данный чип, провернуть такое проще простого — главное написать код, который сдампит содержимое памяти по адресу 0xFFFF0000 в UART.

Ну а для тех, у кого возможности разрабатывать (или хотя бы подписывать) код для A113X нет (условный исследователь безопасности устройств) вариант только один — изучать возможности запуска своего кода на устройстве. И этот вариант фактически содержит единственное решение:

  • Модификация эксплоита от S905D3 под A113X

Я не хотел бы приводить здесь адаптированный эксплоит по разным причинам. Скажу лишь, что после детального изучения сдампленного Bootrom от S905D3 процесс модификации становится сильно проще. Ну а остальное — тупо брутфорс неизвестных адресов.

Как бы то ни было, получив код бутрома A113X, убеждаемся в наличии в протоколе USB функции проверки пароля:

Наличие в протоколе команды проверки пароля
Наличие в протоколе команды проверки пароля
Проверка установленного бита проверки пароля USB
Проверка установленного бита проверки пароля USB

Добавляем поддержку пароля для axg (A113X)

Отлично, мы выяснили, что пароль таки проверяется, но специально созданная для этого утилита даже не имеет нужного флага, чтобы этот пароль прописался в файл фьюзов. Не беда, давайте запишем в него нужные байтики и дело в шляпе, да?

На самом деле, не всё так просто! Если присмотреться к самому файлу фьюзов, можно заметить некоторую "кашу" (назовём это "высокой энтропией"). Это может означать как использование какого-то шифрования, так и сжатия (а возможно и того, и другого).

Кусок файла secure_boot_set
Кусок файла secure_boot_set

Сразу забегу вперёд и скажу, что это таки шифрование. Если покопаться в утилите для создания файла фьюзов для других платформ (название у неё aml_encrypt_xxx, где xxx — имя платформы), в которых поддержка пароля реализована, можно обнаружить много интересных деталей.

Во‑первых, можно найти саму команду задания пароля mkpsd. Во‑вторых, обнаружить и алгоритм шифрования файла фьюзов. Неделя отладки — и вот, мы уже можем расшифровывать secure_boot_set (в том числе и для платформы axg). Осталось понять, как в этот файл запихнуть флаг USB_PD_CHK_ENABLE и сам хэш пароля от USB.

Для этого придётся ещё немного поизучать код Bootrom. Там, внутри функции check_password можно обнаружить следующий код:

Чтение структуры с фьюзами
Чтение структуры с фьюзами

Видим, что нужный нам хэш находится по смещению 0x60. Ещё у хэша рядом лежит "соль":

Поле с "солью" располагается сразу за хэшем
Поле с "солью" располагается сразу за хэшем

Ну а необходимое расположение бита для проверки пароля USB_PD_CHK_ENABLE удалось выяснить по расположению других флагов в том же secure_boot_set, и оно оказалось равно 0xB4. То есть алгоритм получается следующий:

  1. Расшифровываем secure_boot_set

  2. Записываем хэш пароля USB и соль по смещению 0x60

  3. Устанавливаем бит номер 15 в единицу в дворде по смещению 0xB4

  4. Шифруем файл обратно

  5. Прошиваем его через UBoot команду efuse amlogic_set, предварительно записав в нужный адрес памяти содержимое файла фьюзов с паролем (можно и содержащего только информацию о пароле, без ключей шифрования AES и тому подобного)

  6. Вуаля, эксплоит больше не работает!

Заключение

Почему вендор не смог включить всё то же самое в утилиты для платформы axg (A113X), что было проделано в данной статье, имея при этом все исходные коды (все ли?), мне не понятно. Тем более, тот был уведомлен о том, что возможность установки пароля для axg есть.

Забавным также остаётся тот факт, что подавляющее большинство устройств на базе A113X не содержат включенной проверки пароля на USB и подвержены эксплуатации давно найденной уязвимости, возможности закрыть которую нет, кроме как установив данный пароль.

Для подтверждения написанного в данном материале потока мыслей я подверг пыткам через эксплоит устройства от Яндекса, VK и Сбера на базе этой платформы, и лишь у последнего данная защита оказалась включенной, не давая возможности запускать собственный код.

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

Скрипты

Набор для создания secure_boot_set с USB-паролем:

Ссылка

Примеры использования:

  • Для того, чтобы создать файл secure_boot_set с фьюзом проверки пароля необходимо:

python usb_password_a113x.py e usb_secureboot_set.bin -p password.bin
  • Для расшифровки имеющегося файла:

python usb_password_a113x.py d usb_secureboot_set_dec.bin -i usb_secureboot_set.bin

Комментарии (18)


  1. Tuvok
    01.04.2024 16:11
    +4

    уязвимости, позволяющие пользователям с нужными навыками локально получить полный контроль над железкой, прочитать те данные, которые пользователь не должен уметь читать, да и в целом иметь возможность изучить прошивку, найти в ней уязвимости

    Это как понимать? С каких пор полностью владеть своим устройством стало "уязвимостью"? И какие такие данные пользователь на своём устройстве не должен читать? И почему не иметь возможность изучить прошивку на уязвимости, которые, маловероятно, но возможно, ему же и удастся устранить? Действительно интересно, может не в том контексте прочитано?


    1. DrMefistO Автор
      01.04.2024 16:11

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

      Вы же ставите пароль на телефон, хотя могли бы не ставить, дать кому-то ещё данные с него почитать.


      1. vabka
        01.04.2024 16:11

        Телефоном пользователь таки владеет.


        1. DrMefistO Автор
          01.04.2024 16:11

          Не нужно путать интеллектуальную собственность (код, прошивка, ключи шифрования), и коробку, в которой оно лежит.


          1. Tuvok
            01.04.2024 16:11
            +4

            Интеллектуальная собственность это право продажи и торговой марки, в этом нет сомнений. Однако в данном случае подразумевается контроль над устройством, а не тиражирование и продажа кода. В оборудование в собственности каждый должен иметь ничем не ограниченный доступ. Покупается устройство в работающем виде, а не коробка в которой оно лежит.


            1. DrMefistO Автор
              01.04.2024 16:11

              Ну так оно и работает. А авторы кода просто хотят защитить его, это их полное право. Функционал устройства не нарушается. Вы же не думаете, что за условных 10к рублей вы покупаете доступ ко всей кодовой базе, и ключам, которые они туда положили?

              Подписки на сервисы работают именно так: устройство продаётся ниже определённой стоимости, так как пользователь покупает вместе с ними (по сути отдельно) сами подписки, и обязуется пользоваться сервисами, которые туда положил разработчик.

              Думаю, явного запрета на перепрошивку таких устройств на что-то своё нет, до тех пор, пока вы не публикуете информацию о том, как это сделать (по сути, пиратить). Вспомните истории про Sony и взломы их современных плоек, про Nintendo и их войну с этими же пиратами.

              Хотите устройство незащищённое - покупайте что-то от условных Xiaomi, разлочивайте загрузчик, заливайте своё добро, они и не против будут.


              1. NutsUnderline
                01.04.2024 16:11
                +1

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

                Но зачастую ставиться вопрос что разработчик конкретно напортачил делов, взял за это деньги, и исправлять банально не хочет. А то и (в случае тех же телефонов и смартфонов) зловреда подселил в прошивку. И что мышки обязуются вкушать кактус, или просто выбросить глючное устройство, и купить новое (уж точно другого разработчика)? Если идет подписка на сервис, то и должен быть сервис, а не то что кто то обязуется заносить деньги.

                Как по мне так вообще никому, ну может кроме создателей клонов, не сдался этот "безценный код" как таковой, суть часто именно в допиливании. А получается очередная собака на сене.


                1. DrMefistO Автор
                  01.04.2024 16:11

                  Но и вас никто не заставляет покупать те устройства, с политикой партии которых вы не согласны.


                  1. NutsUnderline
                    01.04.2024 16:11
                    +1

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


                    1. DrMefistO Автор
                      01.04.2024 16:11

                      Только я всё равно не понимаю, каким образом ключи и вычитанная прошивка помогут избежать глючности устройства?


                      1. NutsUnderline
                        01.04.2024 16:11
                        +1

                        Избежать - нет, поправить - вполне да.


                      1. DrMefistO Автор
                        01.04.2024 16:11

                        Там цифровые подписи, поэтому поправить "глючность" могут всё равно только разработчики.


                      1. NutsUnderline
                        01.04.2024 16:11

                        поэтому они тоже зло


                      1. DrMefistO Автор
                        01.04.2024 16:11

                        Не соглашусь. Цифровые подписи защищают Вас (именно Вас, а не разработчиков) от подделки прошивки в том числе и на этапе цепочки поставок. Атака так и называется: "атака на цепочку поставок" (supply chain attack). То есть, условный ушлый дилер девайсов или китаец не сможет перепрошить железку, встроив бэкдор до того, как она попадёт в магазин, или к Вам в руки.


                      1. NutsUnderline
                        01.04.2024 16:11
                        +1

                        С этого я и начал. Собственно, хотелось бы тут еще другие видеть мнения


  1. acc0unt
    01.04.2024 16:11

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


    1. DrMefistO Автор
      01.04.2024 16:11

      del


    1. DrMefistO Автор
      01.04.2024 16:11

      Вы плохо читали материал. Уязвимость в бутроме.