Модификация прошивки — это один из самых сложных и интересных аспектов реверс-инжиниринга. В этой статье мы рассмотрим, как с помощью Binwalk можно проанализировать и модифицировать прошивку ПК, например, BIOS или UEFI, с целью добавления возможности удалённого доступа. Мы научимся использовать Binwalk для извлечения данных, анализа структуры прошивки и внедрения функционала для удалённого управления системой, а также разберемся, как такие изменения могут быть обнаружены антивирусами и как минимизировать риски.
Что такое Binwalk?
Binwalk — это инструмент для анализа бинарных файлов, предназначенный для реверс-инжиниринга и исследования структуры прошивок, образов дисков и других бинарных данных. Binwalk позволяет исследовать содержимое прошивки, извлекать её компоненты, находить скрытые данные и модифицировать её, добавляя новые функции. В данном контексте мы будем использовать его для анализа прошивки BIOS или UEFI ПК с целью внедрения удалённого доступа.
Цель этой статьи — проанализировать прошивку BIOS/UEFI ПК, извлечь из неё содержимое, найти уязвимые места и модифицировать прошивку с добавлением функционала для удалённого доступа, например, через SSH или RDP. Далее мы рассмотрим, как внедрение таких изменений может быть обнаружено антивирусными системами, и что можно сделать для минимизации этих рисков.
Результат может быть следующим:
Из этого вывода мы видим, что прошивка состоит из:
BIOS/UEFI header — заголовок прошивки, в котором содержатся метаданные.
LZMA compressed data — сжаты данные, возможно, драйвера или другие компоненты прошивки.
UEFI FAT filesystem — файловая система UEFI, содержащая все конфигурации и исполнимые файлы.
Binwalk создаст папку _bios_firmware.bin.extracted, в которой будет лежать файл с файловой системой, например, 100000.uefi. Теперь нам нужно извлечь содержимое этой файловой системы. Это можно сделать, например, с помощью команды mount для Linux:
Теперь мы можем исследовать содержимое файловой системы, которое может включать как конфигурационные файлы, так и исполнимые файлы прошивки.
Для этого используем команду find:
Если в прошивке присутствуют файлы с расширением .efi, это означает, что мы можем изменить их или добавить новые компоненты для реализации удалённого доступа.
Добавление SSH сервера: Для этого нужно скачать и встроить в прошивку минимальную версию OpenSSH, которая будет работать в среде UEFI.
Конфигурация SSH: В файл конфигурации sshd_config можно добавить необходимые параметры для разрешения авторизации по паролю и доступа по сети:
Автоматический запуск SSH-сервера: Мы можем добавить команду для автоматического старта SSH-сервера в скрипт загрузки, например, в /etc/rc.local или аналогичный файл.
Включение RDP
Установка RDP-сервера: Можно добавить минимальный RDP-сервер в прошивку, используя аналогичный подход, как и для SSH, скачав бинарники и добавив их в файловую систему прошивки.
Конфигурация RDP: Мы должны настроить параметры авторизации и управление доступом, чтобы подключение через RDP было возможно.
Для начала сжимаем изменения в новый образ прошивки:
Затем собираем финальный образ прошивки, включая новый сжатый образ:
Записываем модифицированную прошивку на устройство через утилиты, такие как flashrom, или используем интерфейсы для записи прошивки в BIOS или UEFI.
Как обойти Secure Boot?
Использование собственного ключа для подписания прошивки:
Если вы не хотите или не можете отключить Secure Boot, можно использовать собственный ключ для подписи прошивки или отдельных её компонентов.
Шаг 1: Использование UEFI-совместимого загрузчика
Создание или модификация загрузчика: Для того чтобы обойти Secure Boot, нужно использовать UEFI-совместимый загрузчик, который может быть либо стандартным загрузчиком, таким как GRUB2 или собственный кастомный загрузчик, либо загрузчиком с вашим собственным кодом.
Если у вас есть доступ к исходным кодам загрузчика, вы можете добавить необходимые изменения для внедрения удалённого доступа, как это было показано в предыдущем примере с SSH или RDP. Важно, что загрузчик должен быть написан с учётом всех специфичных для UEFI особенностей, таких как использование .efi файлов.
Подпись загрузчика: Если вы хотите использовать загрузчик, который не является официально подписанным для Secure Boot, его нужно подписать с помощью собственного ключа. Для этого можно использовать утилиты, такие как sbsigntool, чтобы подписать UEFI-загрузчик. Процесс выглядит следующим образом:
Сначала генерируйте ключи (приватный и публичный):
Подпишите загрузчик:
Добавление подписанного загрузчика в UEFI: После того как вы подписали загрузчик, необходимо добавить его в базу доверенных ключей UEFI. Это можно сделать с помощью утилиты KeyTool или через настройки BIOS/UEFI на вашем устройстве:
-Перезагрузите систему и войдите в BIOS/UEFI.
-Перейдите в раздел Secure Boot и добавьте ваш публичный ключ в раздел Key Management или Custom Secure Boot Keys.
-Таким образом, система будет доверять вашему подписанному загрузчику, несмотря на включённый Secure Boot.
Это была моя первая статья, и тут много чего не показано, т.к. если углубляться в эту тему можно написать несколько книг. Тут описано все в общих чертах и если вы уже захотите что то повторить то у вас уже имеется определенная база для этого. В добавок хочу добавить что выслушаю все комментарии и если чего то не хватает то готов дополнять тему и писать вторую часть. Всем удачи<3
Что такое Binwalk?
Binwalk — это инструмент для анализа бинарных файлов, предназначенный для реверс-инжиниринга и исследования структуры прошивок, образов дисков и других бинарных данных. Binwalk позволяет исследовать содержимое прошивки, извлекать её компоненты, находить скрытые данные и модифицировать её, добавляя новые функции. В данном контексте мы будем использовать его для анализа прошивки BIOS или UEFI ПК с целью внедрения удалённого доступа.Цель этой статьи — проанализировать прошивку BIOS/UEFI ПК, извлечь из неё содержимое, найти уязвимые места и модифицировать прошивку с добавлением функционала для удалённого доступа, например, через SSH или RDP. Далее мы рассмотрим, как внедрение таких изменений может быть обнаружено антивирусными системами, и что можно сделать для минимизации этих рисков.
Шаг 1: Сканирование прошивки с помощью Binwalk
Начнём с анализа файла прошивки с помощью Binwalk. Допустим, у нас есть образ прошивки BIOS или UEFI, назовём его bios_firmware.bin. Для того чтобы извлечь из него данные и понять его структуру, нужно выполнить простое сканирование:
Код:
binwalk bios_firmware.bin
Результат может быть следующим:
Код:
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 BIOS/UEFI firmware header
32768 0x8000 LZMA compressed data
1048576 0x100000 UEFI FAT filesystem, little endian
2097152 0x200000 LZMA compressed data
Из этого вывода мы видим, что прошивка состоит из:
BIOS/UEFI header — заголовок прошивки, в котором содержатся метаданные.
LZMA compressed data — сжаты данные, возможно, драйвера или другие компоненты прошивки.
UEFI FAT filesystem — файловая система UEFI, содержащая все конфигурации и исполнимые файлы.
Шаг 2: Извлечение файловой системы
Зная, что прошивка содержит файловую систему UEFI, мы можем извлечь её содержимое с помощью Binwalk. Запустим команду:
Код:
binwalk -e bios_firmware.bin
Binwalk создаст папку _bios_firmware.bin.extracted, в которой будет лежать файл с файловой системой, например, 100000.uefi. Теперь нам нужно извлечь содержимое этой файловой системы. Это можно сделать, например, с помощью команды mount для Linux:
Код:
mount -o loop _bios_firmware.bin.extracted/100000.uefi /mnt
Теперь мы можем исследовать содержимое файловой системы, которое может включать как конфигурационные файлы, так и исполнимые файлы прошивки.
Шаг 3: Поиск конфигурационных файлов и кода
После того как мы извлекли файловую систему, необходимо изучить её на наличие конфигурационных файлов и исполнимого кода, который может быть использован для внедрения функционала удалённого доступа. Мы ищем файлы с расширением .efi, так как они представляют собой исполнимые файлы, которые могут быть частью процесса загрузки.Для этого используем команду find:
Код:
find /mnt -name "*.efi"
Если в прошивке присутствуют файлы с расширением .efi, это означает, что мы можем изменить их или добавить новые компоненты для реализации удалённого доступа.
Шаг 4: Внедрение удалённого доступа через SSH или RDP
Теперь давайте рассмотрим два способа внедрения удалённого доступа в прошивку: через SSH или RDP.Включение SSH в UEFI:
Добавление SSH сервера: Для этого нужно скачать и встроить в прошивку минимальную версию OpenSSH, которая будет работать в среде UEFI.
Конфигурация SSH: В файл конфигурации sshd_config можно добавить необходимые параметры для разрешения авторизации по паролю и доступа по сети:
Код:
PermitRootLogin yes
PasswordAuthentication yes
Автоматический запуск SSH-сервера: Мы можем добавить команду для автоматического старта SSH-сервера в скрипт загрузки, например, в /etc/rc.local или аналогичный файл.
Включение RDP
Установка RDP-сервера: Можно добавить минимальный RDP-сервер в прошивку, используя аналогичный подход, как и для SSH, скачав бинарники и добавив их в файловую систему прошивки.
Конфигурация RDP: Мы должны настроить параметры авторизации и управление доступом, чтобы подключение через RDP было возможно.
Шаг 5: Сборка и запись модифицированной прошивки
После внесения всех изменений необходимо собрать прошивку обратно в единый файл и записать его на устройство.Для начала сжимаем изменения в новый образ прошивки:
Код:
mksquashfs /mnt/ new_bios_squashfs.squashfs -comp lzma
Затем собираем финальный образ прошивки, включая новый сжатый образ:
Код:
cat bios_firmware.bin.extracted/bootloader.bin new_bios_squashfs.squashfs > modified_bios_firmware.bin
Записываем модифицированную прошивку на устройство через утилиты, такие как flashrom, или используем интерфейсы для записи прошивки в BIOS или UEFI.
Шаг 6: Обход Secure Boot
Secure Boot — это технология безопасности, предназначенная для того, чтобы предотвратить загрузку несанкционированного кода в процессе старта устройства. Она проверяет цифровые подписи всех компонентов, загружаемых при запуске системы, включая операционную систему и компоненты BIOS/UEFI. Если модификация прошивки не подписана доверенным ключом, Secure Boot заблокирует её загрузку.Как обойти Secure Boot?
Использование собственного ключа для подписания прошивки:
Если вы не хотите или не можете отключить Secure Boot, можно использовать собственный ключ для подписи прошивки или отдельных её компонентов.
Шаг 1: Использование UEFI-совместимого загрузчика
Создание или модификация загрузчика: Для того чтобы обойти Secure Boot, нужно использовать UEFI-совместимый загрузчик, который может быть либо стандартным загрузчиком, таким как GRUB2 или собственный кастомный загрузчик, либо загрузчиком с вашим собственным кодом.
Если у вас есть доступ к исходным кодам загрузчика, вы можете добавить необходимые изменения для внедрения удалённого доступа, как это было показано в предыдущем примере с SSH или RDP. Важно, что загрузчик должен быть написан с учётом всех специфичных для UEFI особенностей, таких как использование .efi файлов.
Подпись загрузчика: Если вы хотите использовать загрузчик, который не является официально подписанным для Secure Boot, его нужно подписать с помощью собственного ключа. Для этого можно использовать утилиты, такие как sbsigntool, чтобы подписать UEFI-загрузчик. Процесс выглядит следующим образом:
Сначала генерируйте ключи (приватный и публичный):
Код:
openssl genpkey -algorithm RSA -out my_private_key.pem -aes256
openssl rsa -in my_private_key.pem -outform PEM -pubout -out my_public_key.pem
Подпишите загрузчик:
Код:
sbsign --key my_private_key.pem --cert my_public_key.pem --output bootloader.signed bootloader.efi
Добавление подписанного загрузчика в UEFI: После того как вы подписали загрузчик, необходимо добавить его в базу доверенных ключей UEFI. Это можно сделать с помощью утилиты KeyTool или через настройки BIOS/UEFI на вашем устройстве:
-Перезагрузите систему и войдите в BIOS/UEFI.
-Перейдите в раздел Secure Boot и добавьте ваш публичный ключ в раздел Key Management или Custom Secure Boot Keys.
-Таким образом, система будет доверять вашему подписанному загрузчику, несмотря на включённый Secure Boot.
Это была моя первая статья, и тут много чего не показано, т.к. если углубляться в эту тему можно написать несколько книг. Тут описано все в общих чертах и если вы уже захотите что то повторить то у вас уже имеется определенная база для этого. В добавок хочу добавить что выслушаю все комментарии и если чего то не хватает то готов дополнять тему и писать вторую часть. Всем удачи<3
