• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Binwalk и модификация прошивки ПК для подключения удалённого доступа

BERX

CD-диск
Пользователь
Регистрация
26.09.2024
Сообщения
18
Реакции
0
Модификация прошивки — это один из самых сложных и интересных аспектов реверс-инжиниринга. В этой статье мы рассмотрим, как с помощью Binwalk можно проанализировать и модифицировать прошивку ПК, например, BIOS или UEFI, с целью добавления возможности удалённого доступа. Мы научимся использовать Binwalk для извлечения данных, анализа структуры прошивки и внедрения функционала для удалённого управления системой, а также разберемся, как такие изменения могут быть обнаружены антивирусами и как минимизировать риски.

Что такое Binwalk?

binwalk-logo.svg

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

0*8TfmjvKD3jJshY4J

Из этого вывода мы видим, что прошивка состоит из:
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.jpg


Использование собственного ключа для подписания прошивки:
Если вы не хотите или не можете отключить 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
 
Тут описано все в общих чертах
да, прямо очень общих...

Добавление SSH сервера: Для этого нужно скачать и встроить в прошивку минимальную версию OpenSSH, которая будет работать в среде UEFI.
Установка RDP-сервера: Можно добавить минимальный RDP-сервер в прошивку, используя аналогичный подход, как и для SSH, скачав бинарники и добавив их в файловую систему прошивки.
вот этого не хватает 🌚
 
Модификация прошивки — это один из самых сложных и интересных аспектов реверс-инжиниринга. В этой статье мы рассмотрим, как с помощью Binwalk можно проанализировать и модифицировать прошивку ПК, например, BIOS или UEFI, с целью добавления возможности удалённого доступа. Мы научимся использовать Binwalk для извлечения данных, анализа структуры прошивки и внедрения функционала для удалённого управления системой, а также разберемся, как такие изменения могут быть обнаружены антивирусами и как минимизировать риски.

Что такое Binwalk?

binwalk-logo.svg

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

0*8TfmjvKD3jJshY4J

Из этого вывода мы видим, что прошивка состоит из:
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.jpg


Использование собственного ключа для подписания прошивки:
Если вы не хотите или не можете отключить 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
это чатпгп писал?

судя по скрину консоли это тот самый student
 
Не совсем понятно, как будет работать ssh при встраивании в прошивку таким обазом, если в системе уже есть ssh сервер например.
Плюс, в стандартных федора убунту и тд, подписаны еще vmlinux файл, каким образом тем же ключом подписать и его вот не ясно совсем.
Как подписать стандартным MS ключом понятно, кастомный свой вообще же работать не будет при такой схеме, так как efi и vmlinux разными ключами подписаны будут.
Ну и кроме того для всего этотого нужен root.
 
книга называется
ПРАКТИЧЕСКИЙ
ХАКИНГ
ИНТЕРНЕТА
ВЕЩЕЙ
Подробное руководство
по атакам на устройства
интернета вещей
Фотиос Чанцис, Иоаннис Стаис
Паулино Кальдерон
Евангелос Деирменцоглу и Бо Вудс
начало с 245 страницы, всё очень подробно описывается,
пытаюсь прикрепить, не получается, может прав не хватает, может форум блочит, на вирустотале чистый
 
Последнее редактирование:
Это не статья, а полный мусор из обалсти фантастики.
mount и mksquashfs для раздела биоса - бред. это не фат система, чтобы монтировать или работать как с файловой системой. скачайте efixplorer и не страдайте ерундой
сборка прошвики с cat - бред.
SSH, RDP в уефи - дичайший бред.
свои ключи - забыли про PK, KEK.

статья либо сгененирована, либо заменили термин "прошивка чего то" на uefi.
 
mount и mksquashfs для раздела биоса - бред. это не фат система, чтобы монтировать или работать как с файловой системой.
->
заменили термин "прошивка чего то" на uefi.
:)
SSH, RDP в уефи - дичайший бред.
почему нет? уефи же умеет работать с сетью, раз PXE можно встроить, то теоретически и какой-нибудь бэкконнект сокс или SSH сервер можно.
 
Смешно. Про подпись UEFI через цепочку ключей забыли?

1.
cat bios_firmware.bin.extracted/bootloader.bin new_bios_squashfs.squashfs > modified_bios_firmware.bin
Не, команда конечно красивая, ничего не могу сказать.
А то, что на новых материнских платах прошивка bios подписывается ключами от девелопера, это уже не канает?

2.
mksquashfs /mnt/ new_bios_squashfs.squashfs -comp lzma
Тут, я просто промолчу.
Записываем модифицированную прошивку на устройство через утилиты, такие как flashrom, или используем интерфейсы для записи прошивки в BIOS или UEFI.
И кирпичим bios наглухо. Учитывая то, что помимо проверки подписи, с внедрением SSH сервера (но до этого мы еще дойдем), изменится размер образа, а на материнских платах зачастую свободного места на Flash памяти в районе нескольких десятков/на край сотен килобайт.
Добавление SSH сервера: Для этого нужно скачать и встроить в прошивку минимальную версию OpenSSH, которая будет работать в среде UEFI.
Как скачать? Где скачать? Какой на*** SSH сервер в EFI?
EFI - не ОС высокого уровня, где "перекомпилировал и забыл"
Через EFI край что можно сделать красивого, и то, с некоторой болью - вытащить файлы с диска,
Можно попробовать с 0 написать что-то SSH совместимое, но зачем?

Установка RDP-сервера: Можно добавить минимальный RDP-сервер в прошивку, используя аналогичный подход, как и для SSH, скачав бинарники и добавив их в файловую систему прошивки.
С этого выпал просто...

Действительно: зачем сейчас идет упор на атаки ME (простым языком - контроллера южного моста MB), чтобы видеть экран в реалтайме (и то, с крайне большими НО, кучей боли, ассемблерного кода, и реверса на железном уровне), если можно просто скинуть exe файл RDP сервера на флэшку биоса, и получить HRDP))

И такой мусор в топе ветки...
 
нет, нельзя. uefi это не ос, в нем нет ничего что могло бы запустить подобное.
как тогда работает PXE?
 
как тогда работает PXE?
PXE был еще до UEFI кстати)
А так, насколько знаю, подгружает ELF бинарь в память, который по TCP/IP с нужного ресурса грузит по TFTP образ загрузчика и делает Chainload
Скрытый контент для зарегистрированных пользователей.

(Инфа вообще для читателей треда для общего ознакомления ахах)
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх