[Важные вопросы] Безопасность прошивки — анализ пакета обновления 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
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose