Можно сделать EFI-снапшоты, если очень сильно хотеть, для этого /boot надо будет сделать не прямо на ESP, а рядом, и на ESP положить shim.efi и драйвер LVM/btrfs/что-там-у-вас-снапшоты-умеет. Если вот этих двоих обновлять при каждом обновлении ядра не понадобится, то будет почти хорошо. Я, конечно, против добавления дополнительных драйверов ФС на критический путь, но если пользователь страшно хочет снапшотов — будут ему снапшоты.
Там почти не о чем писать, к сожалению, потому что любое EFI-приложение может выступать в качестве загрузчика, а написание простейшего EFI-приложения на Хабре уже не разосвещалось, и в тех примерах достаточно заменить в inf-файле DXE_DRIVER на UEFI_APPLICATION, и у вас получится нужный вам загрузчик.
Вы слишком сильно распространяете свой собственный опыт на всю индустрию, мне кажется. «Не нужно мне — значит не нужно никому». Если вы буткитов не видели — это не значит, что их не бывает, а про шифровальщики вроде ExPetr/NotPetya, которые и возможны то исключительно потому, что большинство машин продолжает с удовольствием загружать все подряд из MBR, слышали почти все.
Потому что память у AMD теперь тренирует PSP своей подписанной и зашифрованной прошивкой, а документация рассказывает, как ему mailbox заполнить и где находится бит, на котором надо ждать, пока тренировка закончится.
Так было, только очень-очень давно. Нынешние прошивки переходят в 32-битный реальный режим с плоской памятью практически сразу с ресет-вектора, а в 64-битный — либо в начале фазы DXE, либо перед OS resume vector, то просто потому, что в PEI очень своеобразная вычислительная среда, и там большую часть времени приходится экономить место в L2 cache, поэтому 32-битный режим там все еще используется.
Давайте я поясню, зачем нужен SecureBoot — он позволяет (при правильной реализации) гарантировать, что прошивка передаст управление только подписанному доверенным сертификатом коду, что в свою очередь гарантирует, что а) без вашего ведома ничего лишнего на вашей системе не запустится и б) если загрузчик ОС каким-то образом будет изменен — его подпись нарушится, система не загрузится, и вы неминуемо это заметите.
Тот факт, что по умолчанию UEFI-совместимые прошивки доверяют сертификатам Microsoft CA и UEFI CA — это сделано не для того, чтобы ограничить свободу простого пользователя, а для того, чтобы можно было включить SecureBoot на большинстве устройств и пользователь не заметил бы этого. Да, приходится доверять MS по умолчанию, но когда на 95% процентах продаваемых систем используется Windows — это вполне резонно.
Если вы не хотите доверять MS — ваше право, на абсолютном большинстве плат (точнее, вообще на всех, кроме телефонов с Windows Mobile и планшетов с Windows RT, которые не являются general-purpose hardware) SecureBoot можно перевести в режим Setup, добавить свои сертификаты список доверенных и удалить предустановленные по умолчанию сертификаты MS и производителя платы.
В конце концов, если вам действительно не нужна безопасная загрузка, и вы согласны следить за целостностью загрузчика самостоятельно, SecureBoot можно отключить на любой системе, которая поддерживает режим Setup, просто удалив Platform Key, в таком режиме система загрузит все, что угодно.
Теперь про то, зачем следить за целостностью загрузчика: дело в том, что security history любых современных операционных систем, написанных на С — это сплошная череда локальных повышений привилегий и удаленных исполнений кода, и каждая пара RCE+LPE дает злоумышленнику доступ к вашему загрузчику, который он затем может модифицировать и закрепиться в системе так, что практически никакими средствами уровня ОС получившееся заражение буткитом невозможно ни обнаружить, ни вылечить. История загрузочных вирусов, шифровальщиков и прочих остальных — давняя и славная, а SecureBoot решает проблему с ними раз и насовсем.
В принципе — ничего не мешает, только тяжело это все. Можно запустить гипервизор вместо загрузчика и дальше там уже рулить как угодно, не трогая саму прошивку — это и отлаживать проще, и результат тот же практически, если на всякие вещи вроде редиректа SMI из ВМ наружу и совместного использования NVRAM не думать пока.
Фиг с ним, в принципе, его можно на виртуальной машине запустить, если очень хотеть, только вот непонятно, есть ли для OpenPOWER хоть какие-нибудь приличные ВМ даже за деньги, на которых можно было бы запустить (пусть даже с бубном) всю большую тройку. Ну и там может получиться примерно как с OpenBSD — безопасность Джо обеспечивается в основном его неуловимостью, даже без учета того, что на стоимость рабочей станции с Линуксом на борту можно купить неплохой автомобиль или месяц отдыхать на далеких островах.
Выбора у нас толком нет, потому что приличных RISC-V в кремнии в соседний магазин еще не завезли, а у остальных там те же примерно яйца, вид сбоку. Я, вообще говоря, очень рад, что эти проблемы с МЕ вскрылись сейчас, а не еще через 10 лет, потому что их так намного быстрее починят (или сделают вид, что починили). Пока прошивку никто не атаковал — сидели 20 лет с голым задом и дальше бы сидели, а теперь вон за три года сколько всего… Очень жду подобного развития событий и с МЕ и прочими периферийными контролерами, которые никогда никто не трогал, и не в курсе, насколько там все у всех сломано.
Если они его могут завести так, чтобы он у них работал и жрать не просил — я двумя руками за, пусть расцветают сто цветов, и вот это все.
Просто я когда-то давно уже участвовал краем уха в запуске коребута на нескольких платах congatec (даже в комментариях про это уже писал, ЕМНИП), и могу сказать, что чуть что не так — и ты один в этом мире, иди в IRC и надейся, что тебе там помогут, а не пошлют заткнуться и хакать. Пока за коребутом не встанет большая корпорация и не начнет продавать для него поддержку и нанимать разработчиков на зарплату — из 0.01% затея не вылезет. А т.к. даже Гугл, активно использовавший в прошлом коребут на хромобуках, уже медленно но верно съезжает на вендорский PEI + свой рантайм на go, то дальше этот процент будет, скорее всего, только уменьшатся, пока отличный, в общем то, проект не заглохнет совсем.
Не-не-не, Девид Блейн, это зависит от конкретной прошивки. У AMI, к примеру, тип загрузки управляется отдельно, а состояние CSM — отдельно, причем некоторые экземпляры даже не показывают строчку с CSM On/Off пока пользователь принудительно не отключит вручную все, для чего CSM может быть нужен.
«Нет, я не хочу легаси-загрузку, не хочу ВидеоБИОСы, не хочу легаси рейд, не хочу легаси загрузку по сети, да отключите это ведро уже, собаки злые!»
Вы путаете CSM и легаси-загрузку. CSM — это вообще наличие интерфейса BIOS Interrupt Call, 16-битных обработчиков прерываний, BDA/EBDA и всего такого, а легаси-загрузка — это использование вот этого всего для загрузки 16-битного кода из MBR.
Почти все современные ПК по умолчанию используют UEFI-загрузку, но CSM при этом не отключают, и в DOS с флешки на них все еще можно загрузиться без необходимости идти в BIOS Setup и включать его специально.
Нет, они там все поддерживают дух старой школы. Пользователь ожидает от х86-совместимой системы поддержки всех наколенных за 30 лет ее развития костылей, каких-нибудь сумашедших ресетов через порт клавиатуры (который эмулируется теперь при помощи бубна и такой то матери) и управления адресной линией А20. Без этого всего — это уже не IBM PC, и некоторым категориям пользователей от этого очень грустно. Вон выше даже Meklon продолжает использовать CSM и легаси-загрузку, т.к. она «просто работает», а то что для ее работы разработчики прошивок каждые полгода через ад проходят — этого никто не видит.
Пацаны там, конечно, вообще ребята, но идея переписать PEI потому, что мы можем — она очень плохо сочетается с современными реалиями. Ни один производитель нормальных х86 процессоров код иницилизации своего оборудования просто так не отдаст (я не знаю, чего они там все боятся, но вот так), а реверсить его можно до ишачьей пасхи, и к моменту, когда тренировка памяти наконец-то заработает, платформа успеет 10 раз устареть.
Идея заменить фазу DXE на Линукс — она в принципе не плохая, особенно для ребят вроде Гугла (проект NERF), которые в Линукс уже умеют, а в DXE — еще не сильно, но на таких системах кроме линукса в итоге ничего толком и не запустишь, а если снова начинать реализовывать SMBIOS, ACPI, SMM и UEFI — есть неплохой шанс, что снова получится DXE, только теперь уже местного разлива. Если их там NIH не разбил в самое сердце — пусть лучше TianoCore пилят, на мой взгляд.
Ext3 было бы довольно трудно внедрить в самом начале, потому что на тот момент Intel плотно работал над спецификацией вместе с MS, и люди просто использовали то, что знали. Зато стремление Интел открыть код нормально вывело FAT из под угрозы патентного преследования, правда случилось это буквально пару лет назад, а до этого драйвер поставлялся в бинаре, под отдельной лицензией и в отдельном репозитории.
Это потому, что по умолчанию почти на всех нынешних ПК (за исключением совсем новых топовых систем Dell, HP, Lenovo и MS, и продукции Apple последних трех примерно лет) CSM включен по умолчанию и его никто не выключает, потому что для этого надо в настройки лезть.
Самое смешное, когда CSM оказывается включен по умолчанию на системах с процессорами Intel Kaby Lake и новее, для которых для ОС старше Windows 10 и драйверов то толком нет, и не осталось никаких уже причин иметь включенный CSM, ведь видеокарту внешнюю туда можно воткнуть только в порт USB-C/TB3, но нет, инерция мышления IBV (в данном случае — AMI) сильна как никогда, а Intel пофиг — ОС загружается, что еще надо, а то, что у вас умолчания ничего общего с безопасностью не имеют — значит она вам и не нужна.
Оно там все кривое просто потому, что сам интерфейс BIOS IC — кривой как бараний рог, даже безотносительно безопасности.
Про матрешка-процессоры — то ли еще будет, про Integrated Sensor Hub как-то все молчат в тряпку, хотя там точно такое же ядро Quark, как и то, на котором МЕ исполняется, и его тоже можно использовать для каких-то своих интересных целей, если влом ставить свой копеечный АРМ вместо EC.
Выше ответил, изображения не будет в лучшем случае до загрузки видеодрайвера, в худшем — все зависнет намертво еще на загрузке. Отключите Legacy Boot целиком и посмотрите, как Windows 7 отреагирует на это, даже будучи запускаемой через bootmgrfw.efi
Вот этот пункт с мутным названием, скорее всего, и отключает CSM полностью.
Что подразумевает: CSM — это реализация старого интерфейса BIOS Interrupt Call, в том числе прерывания 10h, которое используется для работы с видеоадаптерами.
При отключенном CSM никакие обработчики прерываний BIOS не инициализируются (потому что они 16-битные, и работа с ними на современной 64-битной системе — очень сильное колдунство), в том числе не инициализируется VideoBIOS и не выделяется legacy VGA framebuffer, расположенный по физическим адресам A0000-BFFFF, поэтому все, что его раньше использовало для вывода на экран, теперь ничего никуда не выводит.
Нормальные EFI-совместимые загрузчики могли бы просто переключиться на использование EFI-протокола Graphic Output Protocol (GOP) и выводить свои веселые картинки при помощи GOP->Blt(), но в MS решили, что для Windows 7 это все реализовано не будет по каким-то своим причинам, возможно объективным, а возможно и сугубо политическим.
Можно сделать EFI-снапшоты, если очень сильно хотеть, для этого /boot надо будет сделать не прямо на ESP, а рядом, и на ESP положить shim.efi и драйвер LVM/btrfs/что-там-у-вас-снапшоты-умеет. Если вот этих двоих обновлять при каждом обновлении ядра не понадобится, то будет почти хорошо. Я, конечно, против добавления дополнительных драйверов ФС на критический путь, но если пользователь страшно хочет снапшотов — будут ему снапшоты.
Там почти не о чем писать, к сожалению, потому что любое EFI-приложение может выступать в качестве загрузчика, а написание простейшего EFI-приложения на Хабре уже не раз освещалось, и в тех примерах достаточно заменить в inf-файле DXE_DRIVER на UEFI_APPLICATION, и у вас получится нужный вам загрузчик.
Тот факт, что по умолчанию UEFI-совместимые прошивки доверяют сертификатам Microsoft CA и UEFI CA — это сделано не для того, чтобы ограничить свободу простого пользователя, а для того, чтобы можно было включить SecureBoot на большинстве устройств и пользователь не заметил бы этого. Да, приходится доверять MS по умолчанию, но когда на 95% процентах продаваемых систем используется Windows — это вполне резонно.
Если вы не хотите доверять MS — ваше право, на абсолютном большинстве плат (точнее, вообще на всех, кроме телефонов с Windows Mobile и планшетов с Windows RT, которые не являются general-purpose hardware) SecureBoot можно перевести в режим Setup, добавить свои сертификаты список доверенных и удалить предустановленные по умолчанию сертификаты MS и производителя платы.
В конце концов, если вам действительно не нужна безопасная загрузка, и вы согласны следить за целостностью загрузчика самостоятельно, SecureBoot можно отключить на любой системе, которая поддерживает режим Setup, просто удалив Platform Key, в таком режиме система загрузит все, что угодно.
Теперь про то, зачем следить за целостностью загрузчика: дело в том, что security history любых современных операционных систем, написанных на С — это сплошная череда локальных повышений привилегий и удаленных исполнений кода, и каждая пара RCE+LPE дает злоумышленнику доступ к вашему загрузчику, который он затем может модифицировать и закрепиться в системе так, что практически никакими средствами уровня ОС получившееся заражение буткитом невозможно ни обнаружить, ни вылечить. История загрузочных вирусов, шифровальщиков и прочих остальных — давняя и славная, а SecureBoot решает проблему с ними раз и насовсем.
Просто я когда-то давно уже участвовал краем уха в запуске коребута на нескольких платах congatec (даже в комментариях про это уже писал, ЕМНИП), и могу сказать, что чуть что не так — и ты один в этом мире, иди в IRC и надейся, что тебе там помогут, а не пошлют заткнуться и хакать. Пока за коребутом не встанет большая корпорация и не начнет продавать для него поддержку и нанимать разработчиков на зарплату — из 0.01% затея не вылезет. А т.к. даже Гугл, активно использовавший в прошлом коребут на хромобуках, уже медленно но верно съезжает на вендорский PEI + свой рантайм на go, то дальше этот процент будет, скорее всего, только уменьшатся, пока отличный, в общем то, проект не заглохнет совсем.
Другие вендоры иногда обзывают настройку CSM выбором ОС, т.е. Win7/other — включен, Win8+ — выключен, например.
«Нет, я не хочу легаси-загрузку, не хочу ВидеоБИОСы, не хочу легаси рейд, не хочу легаси загрузку по сети, да отключите это ведро уже, собаки злые!»
Почти все современные ПК по умолчанию используют UEFI-загрузку, но CSM при этом не отключают, и в DOS с флешки на них все еще можно загрузиться без необходимости идти в BIOS Setup и включать его специально.
Нет, они там все поддерживают дух старой школы. Пользователь ожидает от х86-совместимой системы поддержки всех наколенных за 30 лет ее развития костылей, каких-нибудь сумашедших ресетов через порт клавиатуры (который эмулируется теперь при помощи бубна и такой то матери) и управления адресной линией А20. Без этого всего — это уже не IBM PC, и некоторым категориям пользователей от этого очень грустно. Вон выше даже Meklon продолжает использовать CSM и легаси-загрузку, т.к. она «просто работает», а то что для ее работы разработчики прошивок каждые полгода через ад проходят — этого никто не видит.
Идея заменить фазу DXE на Линукс — она в принципе не плохая, особенно для ребят вроде Гугла (проект NERF), которые в Линукс уже умеют, а в DXE — еще не сильно, но на таких системах кроме линукса в итоге ничего толком и не запустишь, а если снова начинать реализовывать SMBIOS, ACPI, SMM и UEFI — есть неплохой шанс, что снова получится DXE, только теперь уже местного разлива. Если их там NIH не разбил в самое сердце — пусть лучше TianoCore пилят, на мой взгляд.
Самое смешное, когда CSM оказывается включен по умолчанию на системах с процессорами Intel Kaby Lake и новее, для которых для ОС старше Windows 10 и драйверов то толком нет, и не осталось никаких уже причин иметь включенный CSM, ведь видеокарту внешнюю туда можно воткнуть только в порт USB-C/TB3, но нет, инерция мышления IBV (в данном случае — AMI) сильна как никогда, а Intel пофиг — ОС загружается, что еще надо, а то, что у вас умолчания ничего общего с безопасностью не имеют — значит она вам и не нужна.
Про матрешка-процессоры — то ли еще будет, про Integrated Sensor Hub как-то все молчат в тряпку, хотя там точно такое же ядро Quark, как и то, на котором МЕ исполняется, и его тоже можно использовать для каких-то своих интересных целей, если влом ставить свой копеечный АРМ вместо EC.
Что подразумевает: CSM — это реализация старого интерфейса BIOS Interrupt Call, в том числе прерывания 10h, которое используется для работы с видеоадаптерами.
При отключенном CSM никакие обработчики прерываний BIOS не инициализируются (потому что они 16-битные, и работа с ними на современной 64-битной системе — очень сильное колдунство), в том числе не инициализируется VideoBIOS и не выделяется legacy VGA framebuffer, расположенный по физическим адресам A0000-BFFFF, поэтому все, что его раньше использовало для вывода на экран, теперь ничего никуда не выводит.
Нормальные EFI-совместимые загрузчики могли бы просто переключиться на использование EFI-протокола Graphic Output Protocol (GOP) и выводить свои веселые картинки при помощи GOP->Blt(), но в MS решили, что для Windows 7 это все реализовано не будет по каким-то своим причинам, возможно объективным, а возможно и сугубо политическим.