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

Статья Реверс-инжиниринг UEFI-образов

atavism

HalReturnToBorderline
Premium
Регистрация
03.05.2020
Сообщения
150
Реакции
85
Депозит
0.0016
Основываясь на своем опыте и боли, собрал некоторую информацию, какой минимум необходим для реверса UEFI-образов. Я не уверен, что лычка "статья" нам подходит, поэтому, модераторы знают, что сделать, если у них появятся сомнения.

Оглавление
1. Достаем образ UEFI

1.1 Chipsec
1.2 RWeverything (Intel only)
1.3 Сайты вендоров комплектующих

2. Необходимые инструменты
2.1 Дизассемблеры
2.2 Плагины для дизассемблеров
2.2.1 efiXplorer & efiXloader (IDA)
2.2.2 efiSeek (Ghidra)
2.3 UEFITool

3. Эмуляция и отладка
4. На что стоит опираться



1659225706400.png


Достаем образ UEFI

Чтоб начать анализировать/реверсить UEFI-образ (или прошивку), нам необходимо достать её. Я насчитал несколько способов, как это можно сделать, у каждого безусловно есть свои плюсы и минусы, какой удобнее - решать вам.

Chipsec
Chipsec - это инструмент, позволяющий сделать дамп UEFI для его последующего анализа, помимо этого, Chipsec также имеет собственное API для работы с модулями UEFI. Также, Chipsec может с другими компонентами платформы, включая хардварь. Инструмент является кроссплатформенным, а также может запускаться в UEFI Shell (графическая оболочка командной строки), единственная сложность у вас будет с его установкой, так как установка везде разная в зависимости от ОС. К примеру, если вы пользуетесь Windows, то вам будет необходимо отключить DSE и TSM (делается это не сложно), так как Chipsec имеет собственные драйверы. естественно, не подписанные (насколько я помню). Более подробно об установке расписано в их собственном мануале.

Для нас, это, наверное, лучший вариант, так как прошивка будет "в чистом виде", без всяких паддингов и прочего. Chipsec рекомендуется запускать на отдельных системах, которые выступают в роли "отладочных", хотя, конечно, если вам не жалко, можете и на своей машине попробовать, но я сам бы не рекомендовал, ибо я так тоже однажды убил свою систему (драйвера Wacom делают чудеса, ведь это было как раз из-за них).


RWEverything (Intel Only)
RWEverything тоже весьма мощный инструмент, позволяющий производить запись и чтение на достаточно низком уровне ОС. Забавно, но через него также можно сдампить UEFI. Более подробно это расписано в переводе статьи от Яши - http://xssforum7mmh3n56inuf2h73hvhnzobi7h2ytb3gvklrfqm7ut3xdnyd.onion/threads/43125/

К сожалению, RWEverything работает только с процессорами Intel, так что обладатели AMD проходят мимо (как и я, собственно)


Сайты вендоров комплектующих
Логично, вендоры также предоставляют всякие обновления UEFI/BIOS, поэтому, мы можем брать образы для наших с вами дел. Не самый лучший вариант, но если ничего другое мы реализовать не можем, тогда только так. Из минусов, это то, что у нас остаются AMI Aptio Capsule и LZMA-хидеры, но, зато не надо биться с тем же Chipsec.

Из минусов, мною замеченных, вы вряд ли сможете достать какие-либо отдельные модули. У меня, к сожалению, так не получилось с модулями PEI (Pre-EFI Initialization) и DXE (Driver Execution Environment), но с DXE не сработает, только если доставать их через UEFITool, о котором мы поговорим позднее.


Необходимые инструменты

После того, как мы смогли достать образ UEFI, нам необходимо понять, чем же мы будем анализировать прошивку, как с ней работать и всё-всё-всё. В этом топике мы поговорим, какой-минимум инструментов нам может пригодиться, ну и соответственно какие инструменты использую я сам.

Дизассемблеры
Дизассемблер
- это основной инструмент, с которым мы будем работать на протяжении всех наших дел с UEFI. Выбор у нас между двух таких фиговин: IDA и Ghidra. Почему только они? Потому что другие не очень либо совсем не справляются с нашей задачей, а также не имеют возможности работы с плагинами. Скорее всего у вас уже есть что-то одно из предложенного, так что здесь я долго останавливаться не буду, что вам удобно, то и используйте.


Плагины для дизассемблеров
К сожалению, дизассемблеры не умеют в анализ UEFI «из коробки», поэтому, на помощь приходят плагины, созданные коммьюнити. Сперва поговорим об IDA.

efiXplorer & efiXloader
Два данных плагина для IDA позволяют нам полностью прочувствовать всю боль.

efiXloader – лоадер-плагин, отвечающий за правильный процессинг UEFI драйверов в контексте IDA. efiXloader умеет в определение входных точек DXE-драйверов, а также может «распаковывать» драйвера UEFI и складывать их в отдельную папку (рядом с анализируемым образом), что очень удобно бывает, когда нужно проанализировать что-то отдельно. Помимо этого также предоставляет возможность более удобной навигации по драйверам, что безусловно круто.

1659226019400.png

Результат работы efiXloader по извлечению драйверов

efiXplorer – плагин для анализа UEFI, весьма мощный инструмент, позволяющий определять сервисы, GUID, структуры и прочие начинки UEFI спецификации, а также читать NVRAM. Помимо этого, efiXplorer может и сам искать уязвимости в драйверах по определенным паттернам, но с этим стоит быть аккуратнее, так как могут попасться "false-positive уязвимости", банальный пример – SMMCallout, работающий в контексте SMMHandler.

1659228045200.png

Результат работы efiXplorer на примере сервиса EFI_BOOT_SERVICE

efiSeek
Это плагин для Ghidra, по сути он мало чем отличается от efiXplorer. Он также может находить сервисы, протоколы, GUID, и прочее. Ничего необычного в нем нет, но если вы пользуетесь Ghidra – он вам определенно поможет.

UEFITool
Небольшая тулза, которая может парсить, извлекать и изменять UEFI-образы. Весьма простая, но полезная, если необходимо что-то сделать с образом или просмотреть сигнатуры и принадлежность модулей к чему-либо.

1659228115400.png



Эмуляция и отладка

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

Для эмуляции нам понадобится QEMU, как «база» для всех модулей, входящих в наш «эмулятор», собственно, QEMU это «full system emulator». На базе QEMU будет использоваться Unicorn, для эмуляции CPU (в нашем случае x86_64), это нас избавит от морок с какими-либо околохардварными проблемами.
Однако, это не даст нам эмулировать бинарные файлы, так как Unicorn изначально не предоставляет такие возможности. Зато такие возможности предоставляет Qiling Framework, который может запускаться в контексте Unicorn, следовательно и эмулировать бинарные файлы, единственное, что нам необходимо сделать – настроить Qiling на возможность эмуляции UEFI-модулей.
В конце концов, мы также можем эмулировать и наши вещи, не относящиеся к UEFI, например – фаззеры, ведь фаззинг это весело!
Более подробно об этом можно почитать в этой статье.

Если у вас есть дополнительное оборудование, а также лишний ПК/ноутбук, вы можете заниматься отладкой почти напрямую, не заморачиваясь с эмуляцией, превратив лишнюю систему в «slave». В зависимости от процессора, у нас есть возможность нащупать JTAG (Joint Test Action Group), а также работать через USB3 (USB3 Hosting DCI). При активации DCI на нашей «дебаг-системе» порт USB3 также переходит в режим «slave» и начинает принимать команды от хоста. В зависимости от производителя и серии процессора способы активации DCI могут отличаться друг от друга. Для Intel активация может быть произведена тремя путями: через EFI HII (EFI Human Interface Infrastructure), Intel Image Flash Tool и P2SB.


На что стоит опираться

Конечно, картина может быть не полной, это нормально. В какой-то момент вы можете столкнуться с вопросами, по типу: «А что делает это, а что делает то?», «Что за параметр у этой функции?» и т.п. Это вполне нормальные вопросы.

Главным вашим помощником будет спецификация UEFI (желательно смотреть самые последние редакции спецификации), это официальная спецификация, описывающая стандарт и его условности. Она будет для вас словно «Библия» (как и для разработчиков), поэтому, если у вас возникают какие-то вопросы по поводу чего-либо – опирайтесь на нее, очень большая вероятность, что вы найдете ответ именно в спецификации.

1659226359600.png

2540 страниц чистой агонии


Второй вашей опорой может послужить EDKII, конкретно – Driver Writer's Guide. Он не покрывает все огрехи, но поможет вам разобраться в некоторых условностях работы UEFI, а также в функциях UEFI. Если вам необходимо понять, что делает та или иная функция и у вас нет времени рыться в сорцах EDKII, то это самое оно.

Иногда бывает так, что может попасться какой-нибудь странный GUID, который нигде не был замечен до этого ранее. К счастью, коммьюнити отслеживаются GUID, поэтому можно легко найти интересующий вас, к примеру, вы можете найти такой в репозитории ProcessHacker.

В конце концов, вам также поможет банальный гуглеж ваших вопросов или функций/сервисов, скорее всего ваш вопрос уже был когда-то задан на форумах или где-либо еще.


Мне никогда не равилось, что я пишу.
Автор: atavism
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
В инструментах эмуляции и отладки можно еще Intel Simics указать, мощный инструмент.
 
кто-нибудь пользовался efiXplorer? у меня в иде 7.7 не подгружается никакая версия из выложенных на гитхаб - ни 4.2, где только появилась поддержка иды 7.7, ни все более новые.
подозреваю, что надо скомпилировать из сорцов, но не хочу качать терабайты вижуал студии.

ping atavism


ида самая популярная с торрентов:


ida1.png



файлы положил как надо:

ida2.png




ida3.png



но плагин не подгружается:

ida4.png




ida5.png




в консоли никаких ошибок нет, питон на всякий случай установлен.


P.S.
надо рассказать, как им пользоваться, или сами разберётесь? там ничего сложного :)
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
надо рассказать, как им пользоваться, или сами разберётесь? там ничего сложного :)
Напиши статью, лишнем уж точно не будет.
 
Кстати, для общей информации, на просторах интернета есть модифицированный edk2, называется vector edk. Там уже встроены некоторые плюшки для малдева под uefi
 
Привет. Нужно ещё поставить efiXloader. Но с плагином не пойму тоже - у меня всё работает
естественно я его тоже установил, то есть закинул в папку loaders/
у тебя такая же версия иды? я вроде отсюда качал https://rutracker.org/forum/viewtopic.php?t=6218777

какую версию efiXplorer устанавливал? я пробовал все начиная с 4.2
 
естественно я его тоже установил, то есть закинул в папку loaders/
у тебя такая же версия иды? я вроде отсюда качал https://rutracker.org/forum/viewtopic.php?t=6218777

какую версию efiXplorer устанавливал? я пробовал все начиная с 4.2
Спасибо за ссылку) скачаю попробую
 
Ну, на своём опыте скажу - он весьма бесполезен.
Если я правильно помню, у стандартного едк какие то проблемы с ntfs. Vector-edk имеет интегрированный ntfs драйвер. Поправьте если ошибся.
 
Ида у меня 7.7, efiXplorer версии 5.2.
закинул 5.2 - то же самое, плагин не подгружается, в консоли пусто. ты его уже собранный с гитхаба качал, или компилировал из сорцов? на гитхабе вроде написано, что 5.2 предназначен для Иды 8.
в Иде есть какой-то дебаг режим, посмотреть лог загрузки? может, оно туда напишет, почему плагин не загрузился.
может, ещё версия винды влияет? какая у тебя стоит? я нагуглил, что "10 LTSC IoT" нынче самая нормальная винда, её и поставил.

Напиши статью, лишнем уж точно не будет.
повёлся, блин, на твоё предложение, ещё и в шаббат :D простейший вроде мануал, но пока всё отфоткал и расписал все нюансы - минус суббота. https://xss.pro/threads/92416/
 


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