Pull to refresh

Comments 10

Большое спасибо за такой объем информации.

С нетерпением жду продолжения.

Очень рад, что статья приглянулась вам! В последующей части планирую рассмотреть непосредственно исходный код открытых имплементаций (EDKII, coreboot, OpenBIOS) - от reset vector'а до передачи управления os-loader (bootloader).

А есть информация о том, в каком порядке и какими блоками (если блоками) процессор считывает флэш?

Процессор ничего не считывает, он просто запускается и начинает выполнять инструкции по адресу 0xFFFFFFF0. Ровно эта область и отображается в "память" посредством трансляции SPI-флэшки(ROM), через чипсет(или сейчас уже есть этот блок прямо в CPU). После инициализации контроллера памяти, происходит "bios shadowing", то есть его копирование в RAM.

По поводу того, что написано в статье про какие-то различные отображения регионов фирмвари в память, по моему это ни так. То есть есть биос, как поставляемый бинарный файл, и биос как прошивка лежащий в SPI-флэшки это разные вещи. В последнем случаи "флэшка" просто отображается как линейный кусок соответствующего размера начиная от 0xFFFF FFFF, больше никакой трансляции там нет.

Процессор ничего не считывает

Я написал "процессор", имея в виду железо, которое непосредственно обращается в флэшке по SPI. Интересует именно физический порядок считывания данных из флэшки (если это не XIP) непосредственно на старте, ещё до инициализации памяти. Есть ли какой нибудь документ на этот счёт, или это никак не регламентировано?

Это особенности реализации, мало кому интересные по сути.

Можно подключить вместо настоящей флешки эмулятор вроде Samedisk ZC25128 или DediProg EM100, включить в нем логирование доступа, и посмотреть самому. Есть еще открытый эмулятор SpiSpy за авторством товарища Треммела Хадсона с презентацией на видео, из которой можно достать вот эту отличную картинку:

На ней нет предшествующего всем шагам опроса SFDP, потому что она именно про доступ к физическим адресам, но он там подразумевается, т.к. современные процессоры с архитектурой х86 с флешей без поддержки SFDP не стартуют начиная с приблизительно 2011 года.

Поправлю немного про МЕ, потому что там не 486, а т.н. Minute IA (это такой переписанный на верилоге с нуля гибрид 586 и 686 с несколькими неработающими из за бага префиксами, на той же архитектуре в свое время выпускали Intel Quark SoC). На MIA (и ядро, основанное на MINIX) перешли в поколении Skylake, до этого использовали архитектуру ARCompact и ОСРВ ThreadX.

Это достигается путем маппинг flash-памяти в адресном пространстве процессора

Вот тут согласование потерялось немного, лучше исправить на что-то вроде "путем отображения в адресное пространство процессора".

Немного подробностей про AMD на днях опубликовали вот в этом посте, openSIL тоже пока ждем.

Если кто заинтересовался подробностями, настойчиво посоветую пройти бесплатные курсы OpenSecurityTraining2, там отличные и материалы, и преподаватели (автор большей части курсов - Xeno Kovah, мой бывший тимлид, очень сильный специалист по безопасности прошивок и прочих низкоуровневых штук, а курс по UEFI ведет Piotr Krol, глава 3mdeb). Лучше материалов в сети практически нет.

Поправлю немного про МЕ, потому что там не 486, а т.н. Minute IA (это
такой переписанный на верилоге с нуля гибрид 586 и 686 с несколькими
неработающими из за бага префиксами, на той же архитектуре в свое время
выпускали Intel Quark SoC).

Слышал, что Minute IA используется в Intel Integrated Sensor Hub (ISH). Но не знал, что ME тоже построен на ней. Сообственно, поэтому и не стал про них много расписывать. Эксперты, которые занимаются реверс инженерингом и пишут статьи/выступают на конференциях, к счастью, имеются.

На MIA (и ядро, основанное на MINIX) перешли в поколении Skylake, до этого использовали архитектуру ARCompact и ОСРВ ThreadX.

Упомяну в статье. Но к слову, повсеместное изучение ME началось как раз таки с его переходом на IA, где анализировать его действия гораздо легче.

К словам про OpenSecurityTraining2 присоединяюсь на все 100%, действительно заслуживает вашего внимания.

К слову, увидел твой комментарий в одной из соц. сетей, но сейчас его уже нет :( В любом случае, очень приятно, что один из легенд хабра по UEFI оценил мою статью. Буду стараться и дальше :)

Там забавно с MIA тоже, потому что внутри Intel по ее использованию нет консенсуса и потому в разных линейках там кто во что горазд, даже Arm завезли недавно. ISH аппаратно очень похож на МЕ и даже подключен примерно к тем же шинам (они его на замену отдельного EC планировали, и это даже используется на полутора хромобуках).

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

Прошу, посоветуйте что-то в качестве практического введения в UEFI как таковое на x86_64. Дитятко давно выросло, хочется уже осилить его как "мини-ОС".

Ну вот, как вручную набить модулями и запустить ОС? С нюансами по вариантам и граблям. Как что-нибудь заскриптовать независимо от ОС (например, самостоятельно подготовить окружение как реализовать какую-то логику выбора ОС, как подсунуть сетевой блочный носитель... ).

Ну вот такой средненький уровень... хочется.

Sign up to leave a comment.

Articles