73
Салют, боец! Сегодня мы погрузимся в самые тёмные уголки системы — туда, где живёт UEFI и его хвалёный Secure Boot. Ты узнаешь, что эта “непробиваемая” защита на самом деле имеет слабые места, и я покажу, как их находить и использовать для запуска своего кода. Забудь про теорию из учебников, здесь только хардкор, практика и рабочие инструменты.
Обход Secure Boot через уязвимости в UEFI
Secure Boot — это стандарт безопасности, созданный для того, чтобы при запуске компьютера загружалось только доверенное программное обеспечение, подписанное производителем (OEM). Идея проста: каждая компонента в цепи загрузки (прошивка, загрузчик ОС) проверяет криптографическую подпись следующей. Если подпись неверна или отсутствует — загрузка останавливается. Это мощный барьер против буткитов и другого низкоуровневого вредоносного ПО.
Но, как и любая крепость, Secure Boot имеет уязвимости. Атака на него — это не лобовой штурм, а скорее диверсия. Основная цель — найти легитимный, подписанный Microsoft или другим вендором загрузчик, в котором есть баг. Затем, уже имея права администратора в работающей системе, ты подменяешь оригинальный загрузчик на этот уязвимый, но всё ещё доверенный. Система его “съест”, так как подпись в порядке, а ты получаешь возможность проэксплуатировать уязвимость и выполнить произвольный код до старта основной ОС.
Такие атаки — не выдумка. Вот несколько нашумевших примеров:
Ключевая мысль: слабое звено — это огромный зоопарк сторонних драйверов и загрузчиков, которые получают цифровую подпись от Microsoft для совместимости. Именно в них чаще всего и находят дыры.
Настройка Chipsec для анализа прошивок
Для охоты на баги в UEFI нам понадобится серьёзный инструмент. Chipsec — это мощный фреймворк с открытым исходным кодом для анализа безопасности платформы: железа, прошивок (BIOS/UEFI) и других низкоуровневых компонентов
Что умеет Chipsec?
Пошаговая установка и запуск
1 2 |
git clone https://github.com/chipsec/chipsec.git cd chipsec |
2. Установка зависимостей (для Linux):
1 2 3 4 |
# Для Debian/Ubuntu sudo apt-get install build-essential python3-dev python3-setuptools libpci-dev nasm # Установка Python-модулей pip install -r requirements.txt |
3. Сборка драйвера и утилит:
1 2 |
python3 setup.py build sudo python3 setup.py install |
4. Загрузка драйвера:
Это самый важный и опасный шаг. Chipsec для работы нужен прямой доступ к железу, который он получает через свой драйвер.
1 |
sudo modprobe chipsec |
ВАЖНО! Использование Chipsec на рабочей машине — плохая идея. Его драйвер даёт приложениям прямой доступ к физической памяти и железу, что может привести к зависанию системы или даже её повреждению. В Windows для его работы придётся включать тестовый режим подписи драйверов (TestSigning), что отключает важный механизм защиты ядра. Используй его только на тестовом стенде, который не жалко.
Первый запуск и основные команды
Давай проверим, что всё работает. Запустим основной модуль для автоматического сканирования на известные уязвимости:
1 |
sudo chipsec_main -m all |
Эта команда прогонит все доступные модули и выдаст отчёт о конфигурации твоей системы. Обращай внимание на результаты с пометкой [FAIL]
— это потенциальные проблемы.
Для анализа Secure Boot есть специальная группа модулей:
1 2 |
# Проверка переменных Secure Boot и их защиты sudo chipsec_main -m uefi.secureboot |
Практика: Дамп и анализ BIOS
Теория — это хорошо, но давай перейдём к делу. Наша цель — получить образ прошивки (дамп) и поковырять его в поисках интересного.
С помощью Chipsec это делается одной командой. Она читает содержимое SPI-флеш памяти и сохраняет его в файл.
1 |
sudo chipsec_util spi dump bios_dump.bin |
В результате ты получишь файл bios_dump.bin
— это и есть полная копия твоей прошивки. Если где-то чтение не удалось (например, из-за защищённых регионов), эти области будут заполнены 0xFF
.
Сырой бинарный дамп — это просто набор байтов. Чтобы превратить его в информацию, нужны правильные инструменты.
bios_dump.bin
. Ты увидишь дерево всех файлов внутри прошивки.SomeVendorDriver.efi
, можно поискать информацию о его уязвимостях в сети.bios_diff.py
. Они показывают, какие модули были изменены, добавлены или удалены.Пример сценария атаки
Допустим, в процессе анализа ты нашёл в прошивке старый, но подписанный драйвер VulnerableStorage.efi
, в котором есть уязвимость переполнения буфера при обработке имени файла.
Твой план действий:
VulnerableStorage.efi
и передаст управление твоему шелл-коду.efibootmgr
в Linux) изменить порядок загрузки так, чтобы система сначала загружала не стандартный bootmgfw.efi
(Windows) или grubx64.efi
(Linux), а специальное UEFI-приложение, которое сначала загрузит уязвимый драйвер VulnerableStorage.efi
, а затем передаст ему на обработку твой вредоносный файл.Это высший пилотаж, требующий глубоких знаний. Но теперь ты знаешь, в каком направлении копать. Secure Boot — это мощная технология, но не панацея. Уязвимости были, есть и будут, а значит, всегда есть работа для тех, кто не боится заглянуть под капот. Удачи в исследованиях