[Важные вопросы] Безопасность прошивки — анализ пакета обновления OTA
[Важные вопросы] Безопасность прошивки — анализ пакета обновления OTA

Предисловие

Что такое ОТА?

OTA (Over-the-Air) — способ удаленной загрузки и установки обновлений прошивки или программного обеспечения устройства через сети беспроводной связи (например, Wi-Fi, сотовые сети). Этот метод широко используется в смартфонах, устройствах Интернета вещей, автомобильной электронике и других областях.

Энтузиасты Xiaomi, вероятно, знакомы с этими пакетами пролистывания строк, перелистывания карт и прошивки для различных систем. Не знаю, пробовали ли вы прошить недавнюю ОС ThePaper. Конечно, существуют также различные умные дома, такие как маршрутизаторы, автомобили и даже настольные лампы, которые обновляются через OTA.

Здесь автор передает две прошивки Разархивировать Анализ упаковки Случай,Приходите узнать о безопасности прошивки.

Тип и архитектура пакета обновления (прошивки)

Двоичное изображение (.bin):Наиболее распространенные форматы прошивок,Включать содержит весь код и данные, необходимые для запуска устройства.,Обычно используется в маршрутизаторах、Камера、IoT-устройства и т. д.

Сжатый пакет (.zip, .tar, .gz, .xz):Конвертировать несколькодокумент Упакованы и сжаты в одиндокумент。

Файл изображения (.img):Включатьвесьдокументобраз системы,Обычно используется для встроенных устройств и образов операционных систем (Linux, Android).

Файл Intel HEX (.hex):Текстовый формат прошивкидокумент,Обычно используется в микроконтроллерах и встроенных системах.

Motorola Файл S-записи (.srec, .s19):Похоже на:Intel Текстовый файл прошивки в формате HEX.

ELF-файл (.elf):исполняемый файлисвязываемый формат,Включить исполняемый код и сегмент данных,Обычно используется при разработке встроенных систем.

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

Случай

пакет обновления маршрутизатора tp-link

Ссылка на скачивание прошивки

Структура каталогов после распаковки выглядит следующим образом. В настоящее время мы занимаемся bin-файлом.

Как распаковать и проанализировать?

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

Установка и использование binwalk
Язык кода:bash
копировать
sudo apt-get install binwalk 	// ubuntu
brew install binwalk			// macos
Язык кода:bash
копировать
# Определить структуру файла и данных Включать
binwalk firmware.bin
Язык кода:bash
копировать
# Рекурсивное извлечение содержимого
binwalk -Me firmware.bin

После извлечения файла формата ubi в двоичный файл

Что такое файл формата UBI? UBI (Unsorted Block Image) — это файловая система для флэш-памяти NAND, которая обеспечивает выравнивание износа и управление поврежденными блоками во флэш-памяти. Файловые системы UBI распространены во встроенных устройствах, особенно там, где требуются надежность и долговечность. ==Почему это в формате ubi? == Понятно, что bin — это универсальный двоичный формат. В процессе упаковки прошивки различные файловые системы и форматы данных единообразно упаковываются в файлы .bin, чтобы упростить процесс передачи и обновления. Файлы прошивки могут содержать несколько форматов файловых систем, таких как UBI, EXT4, FAT32 и т. д. Эти форматы файловых систем используются для хранения операционных систем, приложений, драйверов, файлов конфигурации и т. д.

Разархивированный файл UBI

Установка и использование ubi_reader

ubi_reader — набор инструментов для работы с файловыми системами UBI. Он включает в себя несколько инструментов командной строки для чтения и извлечения файлов изображений UBI и UBIFS.

Язык кода:bash
копировать
#  Ubuntu/Debian 
sudo apt-get update
sudo apt-get install python3 python3-pip mtd-utils
# Centos
sudo yum install python3 python3-pip mtd-utils
# установка пипа
pip3 install ubi_reader
Язык кода:bash
копировать
# Проверять UBI Информация о файле изображения
ubireader_display_info 12D4.ubi
Язык кода:bash
копировать
# извлекать UBI Все, что есть в файле изображения
ubireader_extract_images 12D4.ubi

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

Язык кода:bash
копировать
# список UBI файлы в файле изображения
ubireader_list_files 12D4.ubi
# извлекатьспецифическийдокументили块
ubireader_extract_files 12D4.ubi
Установка и использование unsquashfs

unsquashfs — инструмент для распаковки и извлечения образов файловой системы SquashFS. SquashFS — это формат файловой системы с высокой степенью сжатия, доступный только для чтения, обычно используемый во встроенных устройствах и дистрибутивах Linux.

Язык кода:bash
копировать
# ubuntu
sudo apt-get update
sudo apt-get install squashfs-tools
# centos
sudo yum install squashfs-tools
# macos
brew install squashfs

Используйте инструмент unsquashfs для распаковки файлов ubifs один за другим.

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

Язык кода:bash
копировать
unsquashfs -d output img-2022911448_vol-ubi_rootfs.ubifs

Как видите, исходный код прошивки в принципе доступен...

Пакет OTA-обновления определенной автомобильной компании

После серии процессов распаковки был получен файл payload.bin (аналог флэш-пакета Android)

Здесь я сначала использовал binwalk для распаковки, но в итоге попал в бесконечный цикл.

Окончательно распакованный пакет xz имел величину пол Т! Это показало, что метод декомпрессии был неправильным, поэтому я сдался.

Распаковка прошивки BYD OTA

Распакованный файл OTA генерирует множество файлов .img, которые соответствуют различным разделам устройства, и каждый раздел имеет свои определенные функции.

Связанные разделы

Классификация

Имя раздела

описывать

Загрузитесь и начните

boot.img

Содержит ядро ​​и исходную файловую систему (ramdisk) для загрузки системы Android.

dtbo.img

Содержит файлы наложения дерева устройств для абстракции оборудования.

vendor_boot.img

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

xbl.img

Прошивка, содержащая расширяемый загрузчик.

xbl_config.img

Содержит данные конфигурации загрузчика.

abl.img

Содержит загрузчик Android, который загружает и запускает операционную систему.

Драйверы и прошивка оборудования

aop.img

Содержит прошивку для управления режимами пониженного энергопотребления и датчиками.

bluetooth.img

Содержит драйвер и прошивку Bluetooth.

cpucp.img

Содержит встроенное ПО для процессора управления ЦП.

devcfg.img

Содержит данные конфигурации устройства и драйверы.

dsp.img

Содержит встроенное ПО для процессора цифровых сигналов (DSP), используемого для таких задач, как обработка звука.

featenabler.img

Содержит профили включения функций для включения или отключения определенных функций.

hyp.img

Содержит прошивку для гипервизора для поддержки виртуализации.

imagefv.img

Содержит том прошивки UEFI, используемый для загрузки и инициализации оборудования.

modem.img

Содержит прошивку модема для связи в сотовой сети.

qupfw.img

Содержит прошивку Qualcomm для обработки радиосигналов.

shrm.img

Содержит драйвер общей памяти.

tz.img

Прошивка, содержащая ARM TrustZone для безопасной обработки и криптографических операций.

uefisecapp.img

Содержит приложения для безопасной загрузки UEFI.

==Система и приложения==

system.img

Содержит основные части операционной системы Android, включая системные приложения, файлы библиотек, фреймворки и т. д.

system_ext.img

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

product.img

Содержит конкретные функции и приложения продукта. Для настройки различных моделей устройств или рыночных версий.

vendor.img

Содержит драйверы для оборудования и файлы библиотек, предоставленные производителем устройства. Относится к уровню абстракции оборудования (HAL) и интерфейсу поставщика (VINTF).

odm.img

Содержит определенные драйверы оборудования и файлы конфигурации, предоставленные производителем устройства (ODM). Для поддержки конкретного оборудования.

multiimgoem.img

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

Безопасность и проверка

keymaster.img

Содержит встроенное ПО диспетчера ключей для операций шифрования и дешифрования.

vbmeta.img

Содержит метаданные для Android Verified Boot.

vbmeta_system.img

Содержит системные метаданные для Android Verified Boot.

Распаковка второго слоя

Второй уровень относительно прост. В системах Windows или Linux вы можете использовать инструмент 7-Zip для распаковки файлов .img и написания сценария пакетной распаковки.

Язык кода:bash
копировать
#!/bin/bash

# Создать выходной каталог
output_dir="./output"
mkdir -p "$output_dir"

# Пройти все файлы в текущем каталоге .img документ
for img_file in *.img; do
  # Получить имя документа (без расширения)
  file_name=$(basename "$img_file" .img)
  
  # Создайте распакованный выходной каталог.
  extracted_dir="$output_dir/${file_name}_extracted"
  mkdir -p "$extracted_dir"
  
  # использовать 7z Разархивировать img документ в соответствующий выходной каталог
  7z x "$img_file" -o"$extracted_dir"
  
  # Проверить Разархивировать результаты
  if [ $? -eq 0 ]; then
    echo "Successfully extracted $img_file to $extracted_dir"
  else
    echo "Failed to extract $img_file"
  fi
done

Здесь следует отметить, что файл .img может быть конвертирован из разных форматов (ext4, ubi, elf), поэтому конкретные шаги распаковки будут зависеть от ситуации...

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода