BIOS, который найдет диск и загрузит 512 байт в память прост. Если бы я знал спецификацию на мою материнскую плату я бы написал его за несколько часов.
Если это так, то я могу прямо тут расписаться в полной свой профнепригодности и ехать собирать бананы в Африку, ибо по всему выходит, что как разработчик прошивок я никуда не годен.
Если серьезно, на средний по сложности проект адаптации BIOSа для CRB под конкретную плату уходит в среднем от 3 до 6 месяцев, и первые пару недель не грузится вообще ничего дальше начальной инициализации RAM, а иногда перестает работать еще раньше. Когда плата смогла загрузить хотя бы DOS — устраевается Boot-Party с шампанским и сладостями во всем отделе RnD, ибо это результат огромного количества работы практически всего отдела. А тут обещают управиться за несколько часов, блин.
Нет в современных ПК вообще ничего простого, даже чтобы UART завести нужна математика с пределителями, а чтобы завести RAM или PEG Gen3 нужна либо куча кода от производителя платформы, либо документация и несколько месяцев работы на полный день.
Более того, кто-то их реально сканировал хоть раз с рекламной площади?
QR-код — это ярчайший представитель M2M-интерфейсов, а вы предлагаете его постить крупно вместо ссылок. Кодируйте тогда уже все содержимое рекламы в QR-код, чего мелочиться то, заодно и города от вычурной рекламы избавите, пока не появятся терминаторы, способные распознавать коды находу. Вот на них, видимо, продукт и рассчитан.
Нужна ли конечному пользователю интернационализация, которая в UEFI из коробки? Возможность запуска ОС без загрузчика? Нормально реализованные Option ROMы, которым не приходится сражаться за место в legacy region C-F? GOP в конце концов, позволяющий использовать UEFI-драйвер графической подсистемы в любой даже самой примитивной ОС?
Если считать обычным пользователем человека, которому от БИОСа требуется, чтобы его ОС загрузилась и побыстрее — вообще никакой разницы между legacy BIOS, UEFI, FSP, OpenBIOS, coreboot, libreboot и остальными нет. Но дьявол прячется в деталях, как всегда.
Я не согласен с тем, что UEFI — это «рефакторинг» BIOSа, от которого там не осталось вообще ничего. Это новая реализация на основе новых идей, своего рода «вторая система». Да, теперь приходится эмулировать старое поведение при помощи некоторого числа хаков, но переходный период закончится через 5-7 лет, и можно будет начать пользоваться преимуществами UEFI без постоянной оглядки на совместимость.
Меня поражает такое отношение к UEFI. Разработчики умудрились унифицировать интерфейс прошивки, выпустить почти 70% от нее в открытом виде (проект TianoCore), выпустить открытую же спецификацию и средства разработки, и саму разработку упростить примерно впятеро, а простой пользователь все еще думает, что это рассадник вирусов и в нем нет ничего хорошего, кроме GPT.
Как избежать заражения — использовать SecureBoot и HW root-of-trust вроде Intel BootGuard и AMD/ARM TrustZone, которые уже сейчас вполне готовы к применению и два года не надо ждать. Есть, конечно, и обратная сторона — никаких больше модификаций оригинального БИОСа не сделать, и белый список оборудования не открутить, и расширенное меню не открыть, и прошивку на coreboot не сменить, свободу конечного пользователя снова ограничили ради безопасности теми самыми code signing и vendor lock-in.
Могу еще порекомендовать HT editor, который намного попроще, зато радует знакомым с детства интерфейсом.
Меня на radare2 навел один из его разработчиков, xvilka, и проект мне понравился, и хотя его интерфейс по умолчанию писали любители vim, но это его не портит. Очень жду, когда допилят Bokken до приличного состояния, и можно понемногу уходить с IDA в сторону открытых решений, а то уж больно дорого стоит нынче ее лицензия.
Пожалуйста, тебе спасибо за тестирование. Нервов надо много только если разбираться с нуля, ничего в этом не понимая, а так — дело на час, и которых 40 минут — война с малознакомым radare2.
Встроенного там нет, зато его можно вставить в полноразмерный порт mPCIe, и он даже без оригинального меню иногда работает. Более новый модем работал бы и без снижения ему скорости порта до Gen1 принудительно, это просто модем такой кривой попался. Насчет комплектации — она отличается наличием самого модема (у меня изначально стоял SSD на 32 Gb в этом слоте вместо него) и пластиковой задней крышкой с прорезью под SIM-карту, все остальное — такое же.
Попробовал — не получается показать то, что мне нужно. Вот файл, который требуется для правильного определения вышеупомянутых структур, загружаем его через to small.h и даем команду t, чтобы посмотреть загруженное. В терминал вываливается 100500 строк текста, на которые не хватает прокрутки. Можно, конечно, буфер сделать больше у терминала, но лучше сделать список структур, а не просто дамп и возможность ходить по нему, выбрать структуру из списка и т.п.
Буду ждать, эту фичу заиметь было бы очень здорово.
Сразу вдогонку — с интерфейсом команды t надо что-то делать, а то там даже прокрутки нет, приходится угадывать названия структур, которые не влезают. И буфер преступно маленький, весь behemoth.h из ida-utils отказывается загружаться.
Стрелки то ладно, и такие пойдут, но за совет однозначно спасибо. Самый главный вопрос: можно ли сделать так, чтобы вместо call [eax + 0x80] отображалось call [eax + offset InstallProtocolInterface]? Я даже собрал минимально-достаточный заголовочный файл, чтобы получить структуры EFI_BOOT_SERVICES и EFI_RUNTIME_SERVICES, загрузил его командой to, но как сделать аналог apply structure offset в r2 — не понимаю. И можно ли вообще, а если нельзя — когда будет можно?
Нет, вручную только. Да и там, зачастую, недостает половины необходимых для нормальной работы данных — дескриптора, региона МЕ, а иногда вообще приложены только те модули, которые требутеся обновить.
Все, что делается до инициализации памяти, и она сама — будет лежать в открытом виде, т.к. оно исполняется прямо из SPI-flash. В этот же драйвер инициализации можно встроить вызов своего кода, который зарегистрирует обработчик события EndOfPei, при срабатывании которого будет доступен как весь расшифрованный код PEI, так и уже расшифрованный код DXE.
Код, на который мы можем влиять, все равно будет и потому такая защита все равно будет отломана.
Решение — запускать код, который производит валидацию прошивки, до reset vector'а, чтобы на него вообще никак нельзя было повлиять (или можно, но только имея private key, как на код ME), такая себе комбинация HW-based validation и HW root-of-trust. Вот это уже без доступа к ключам или уязвимостей аппаратуры не сломать.
Секреты там вокруг всего разводятся — монополия на рынке, страшно ее терять. :)
Рекомендую для исследований купить Intel Galileo Gen2, там практически настоящий i586+ с JTAG из коробки, открытый UEFI и открытая документация. SMM оно тоже умеет.
Если хочется чего-то более производительного — Minnowboard Max, там нет JTAG, и открытую прошивку обещают на днях, но не могут выпустить в течение полугода, но я надеюсь, что таки выпустят. А там уже обычный Atom со всеми его плюшками.
Про систему управления — да если бы. Половина SMM-кода занята эмуляцией всякой легасятины времен динозавров, другая — разные вендорские утилиты для прошивки БИОСа, получения информации о системе, управления подсветкой и т.п. То, что могли написать на AML, если бы у него был менее наркоманский синтаксис.
Через TPM нельзя нормально проверить целостность firmware (точнее, можно, но это также бессмысленно, как защита из статьи), поскольку TMP умеет только measurement, а validation все равно находится в коде и может быть обойден. Что толку от TPM со всеми его хэшами, если их никто не спрашивает?
Именно поэтому и Intel, и AMD уже имеют в активе технологии hardware-based fimrware validation, и у Intel они уже давно работают на некоторых ноутбуках. На этот стек технологий условия NDA особенно драконовские, потому скажу всего два слова: Intel BootGuard и AMD TrustZone.
БИОСа в первую очередь. К примеру, происходит где-то в непонятном месте ресет (вот ровно как в статье), а у нас релизный БИОС без strings output (т.е. отладочные строки через COM-порт он не выводит). Добавляем в него драйвер, который вешает по ловушке на CF9h, A2h и 64h и выводит тип ресета и SMM CPU Context, из которого можно достать значение RIP и точное место, откуда он произошел, затем сделать дамп этого куска памяти и разбираться уже предметно.
Действительно дополнительные возможности, другая версия Management Engine и другой БИОС. Можно ли завести AMT на десктопных чипсетах — знает полтора человека из Intel.
Это хорошо, когда можно найти совместимое оборудование, но иногда его либо уже не найти, либо придется два месяца ждать заказ из Китая. При этом ничего, кроме вот такой защиты идиотской, не мешает поставить другой чип, адаптировать под него БИОС (часто достаточно смены VEN/DEV IDs) и отдать починенный ноутбук уже завтра.
Слишком много всего — соглашусь на 500%, но так сейчас работает маркетинг в массовом сегменте, новые фичи важнее исправления стары багов. Это плохо, но пока — вот так.
Если это так, то я могу прямо тут расписаться в полной свой профнепригодности и ехать собирать бананы в Африку, ибо по всему выходит, что как разработчик прошивок я никуда не годен.
Если серьезно, на средний по сложности проект адаптации BIOSа для CRB под конкретную плату уходит в среднем от 3 до 6 месяцев, и первые пару недель не грузится вообще ничего дальше начальной инициализации RAM, а иногда перестает работать еще раньше. Когда плата смогла загрузить хотя бы DOS — устраевается Boot-Party с шампанским и сладостями во всем отделе RnD, ибо это результат огромного количества работы практически всего отдела. А тут обещают управиться за несколько часов, блин.
Нет в современных ПК вообще ничего простого, даже чтобы UART завести нужна математика с пределителями, а чтобы завести RAM или PEG Gen3 нужна либо куча кода от производителя платформы, либо документация и несколько месяцев работы на полный день.
QR-код — это ярчайший представитель M2M-интерфейсов, а вы предлагаете его постить крупно вместо ссылок. Кодируйте тогда уже все содержимое рекламы в QR-код, чего мелочиться то, заодно и города от вычурной рекламы избавите, пока не появятся терминаторы, способные распознавать коды находу. Вот на них, видимо, продукт и рассчитан.
Если считать обычным пользователем человека, которому от БИОСа требуется, чтобы его ОС загрузилась и побыстрее — вообще никакой разницы между legacy BIOS, UEFI, FSP, OpenBIOS, coreboot, libreboot и остальными нет. Но дьявол прячется в деталях, как всегда.
Я не согласен с тем, что UEFI — это «рефакторинг» BIOSа, от которого там не осталось вообще ничего. Это новая реализация на основе новых идей, своего рода «вторая система». Да, теперь приходится эмулировать старое поведение при помощи некоторого числа хаков, но переходный период закончится через 5-7 лет, и можно будет начать пользоваться преимуществами UEFI без постоянной оглядки на совместимость.
Как избежать заражения — использовать SecureBoot и HW root-of-trust вроде Intel BootGuard и AMD/ARM TrustZone, которые уже сейчас вполне готовы к применению и два года не надо ждать. Есть, конечно, и обратная сторона — никаких больше модификаций оригинального БИОСа не сделать, и белый список оборудования не открутить, и расширенное меню не открыть, и прошивку на coreboot не сменить, свободу конечного пользователя снова ограничили ради безопасности теми самыми code signing и vendor lock-in.
На фото — либо Regional Express, либо какой-то из Regional Bahn'ов.
Меня на radare2 навел один из его разработчиков, xvilka, и проект мне понравился, и хотя его интерфейс по умолчанию писали любители vim, но это его не портит. Очень жду, когда допилят Bokken до приличного состояния, и можно понемногу уходить с IDA в сторону открытых решений, а то уж больно дорого стоит нынче ее лицензия.
Сразу вдогонку — с интерфейсом команды t надо что-то делать, а то там даже прокрутки нет, приходится угадывать названия структур, которые не влезают. И буфер преступно маленький, весь behemoth.h из ida-utils отказывается загружаться.
Код, на который мы можем влиять, все равно будет и потому такая защита все равно будет отломана.
Решение — запускать код, который производит валидацию прошивки, до reset vector'а, чтобы на него вообще никак нельзя было повлиять (или можно, но только имея private key, как на код ME), такая себе комбинация HW-based validation и HW root-of-trust. Вот это уже без доступа к ключам или уязвимостей аппаратуры не сломать.
Рекомендую для исследований купить Intel Galileo Gen2, там практически настоящий i586+ с JTAG из коробки, открытый UEFI и открытая документация. SMM оно тоже умеет.
Если хочется чего-то более производительного — Minnowboard Max, там нет JTAG, и открытую прошивку обещают на днях, но не могут выпустить в течение полугода, но я надеюсь, что таки выпустят. А там уже обычный Atom со всеми его плюшками.
Про систему управления — да если бы. Половина SMM-кода занята эмуляцией всякой легасятины времен динозавров, другая — разные вендорские утилиты для прошивки БИОСа, получения информации о системе, управления подсветкой и т.п. То, что могли написать на AML, если бы у него был менее наркоманский синтаксис.
Именно поэтому и Intel, и AMD уже имеют в активе технологии hardware-based fimrware validation, и у Intel они уже давно работают на некоторых ноутбуках. На этот стек технологий условия NDA особенно драконовские, потому скажу всего два слова: Intel BootGuard и AMD TrustZone.
Слишком много всего — соглашусь на 500%, но так сейчас работает маркетинг в массовом сегменте, новые фичи важнее исправления стары багов. Это плохо, но пока — вот так.