И это только один чип, а не SoC с десятком встроенных устройств, двумя IOAPIC, IOMMU, контролером DDR4, который инициализирует встроенное ARM-ядро PMU с закрытой и подписанной прошивкой, с мостом PCI2PCI на каждой внешней PCIe-линии, и так далее, и тому подобное…
По поводу оплаты — Ланиту, я слышал, очень нужны сейчас специалисты по прошивкам, UEFI, U-boot'у и вот этому всему.
Дим, у всех продуктов, которые затронуты, EOL либо уже позади, либо завтра наступит. Это не SHNMV, это бизнес и ничего личного. Да и смысл реагировать на любые уязвимости в EDK1+, если там и без них — решето…
Не, Дим, по исходнику все же искать проще, поверь моему опыту. :) Если знать, что искать, на обнаружение совсем уж вопиющих случаев вроде твоего уйдет меньше пары минут, ибо синхронные SMI — все-таки пока еще звери довольно редкие, а во времена EDK1+ — вообще штук 5 на всю прошивку.
После того, как SAGE загнулась, я очень переживаю за судьбу этого во всех отношениях замечательного проекта. Когда-то давно некие люди из AMD обещали нам клятвенно поддержку coreboot в каждом релизе AGESA. Где она теперь…
Ученый в очередной раз изнасиловал журналиста, к сожалению.
Я не спорю, что баг серьезный, и этот конкретный баг — только первая ласточка среди всех проблем с синхронными SMI, которые ждут своего часа. Дело в том, что, как и в свое время а ассинхронными SMI, никто из разработчиков технологии не воспринимал её как вектор атаки, и потому ревью кода обработчиков синхронных SMI практически не проводилось, ибо все считали, что вызвать эти самые обработчики атакующий не сможет, он ведь не знает нужного хендла (SmmBase->Communicate) или GUIDа (SmmCommunicate->Communicate), и формат буфера ему тоже неизвестен, да и вообще, кому это надо все. А потом пришел Дима и не просто все сломал, а еще и выложил все карты на стол.
Но вернемся к изнасилованию: в нынешнем виде эксплоит является приложением для UEFI shell, т.е. этот шелл нужно еще запустить как-то, т.е. нужен физический доступ к машине и отключенный SecureBoot (привет коментаторам, которые его костерят). Чтобы обойти это ограничение, нужна собственная реализация Communicate, которая тоже будет работать только из UEFI OS (для legacy OS обработчики синхронных SMI диспетчером не вызываются вообще, такая своеобразная защита от дурака). Сделать это можно, и я не сомневаюсь ни на секунду, что Дима это рано или поздно сделает, но сейчас поводов для паники нет никаких.
Более того, на платах Gigabyte, Asrock, ASUS, и прочих десктопных платах такого рода этот конкретный эксплоит вообще не имеет значения, ибо там можно достичь того же эффекта (получить полный доступ к SPI flash) значительно более простыми способами, так что эксплоит, даже если он на этих устаревших платах и работает, опасности для них не представляет, ибо нет смысла просачиваться через вентиляцию, когда у тебя либо двери вообще нет, либо ключ от нее — под ковриком.
Отдельно хочу возразить людям, которые в очередной раз убеждают меня в том, что современное железо буквально само инициализируется и там хватит микрокода на пару килобайт, а остальное все Великий и Открытый Линукс сделает за нас. Почти год, ребята. Почти год своей жизни, работая 40 часов в неделю, я потратил на то, чтобы довести плату conga-TR3 из состояния голое мертвое железо до состояния прошла все тесты и готова к массовому производству, имея при этом всю документацию, референсную реализацию UEFI и поддержку со стороны AMI и AMD. Если вы можете сделать то же самое хотя бы за полгода — подавайте резюме в любую компанию, Apple/Microsoft/Dell/HP/Lenovo/etc, любую — и вас там оторвут с руками, предложив не меньше $200к в год, релокацию, жилье, шахматы и поэтесс. И напишите мне оттуда потом, чтобы я еще сильнее загрустил, что тормоз такой.
Проверять этот лог можно и самой прошивкой, например, на событии EndOfDxe. Не сошлось с эталоном — дальше не грузимся. Понятно, что все это, без настоящего аппаратного корня доверия, будет рано или поздно отломано, поэтому HWVB внедрили практически все производители процессоров, которые хотят продать клиентам нормальную доверенную загрузку, а не суррогат.
С BootGuard вы ничего никуда не инжектируете, ибо процессор сначала проверяет, что у подписи первой половины тома PEI хеш совпал с тем, что в чипсет прошит при производстве, а затем только ресет отпускает. Т.е. попробуете влезть в фазу SEC — и система просто откажется включаться, перешиваем, запускаем — не запускается.
Выпаять TPM теперь тоже нельзя, т.к. он теперь в чипсет встроен, как у Intel начиная с BayTrail, так и у AMD начиная с Merlin Falcon.
Если говорить об атаках на более старые системы без BG и с внешним TPM — там все можно, конечно, но очень и очень непросто, ибо придется трассировать реально каждый вызов Extend, которые там начинаются с PeiAfterMem и до BDS их там получается порядка тысячи. Не заметил один — весь лог на смарку, откатывайся. Понятно, что это можно автоматизировать и обойти, но стоимость таких решений получается чуть ли не выше стоимости защищаемой ими информации, т.е. главная задача ИБ защитой таки решена.
TPM — устройство пассивное, и потому позволил тут вовсе не «Intel'овский TPM», драйвер PCI прошивки. Чаще всего, устройства PCI в measurement log не добавляют, т.к. их можно добавить позже при помощи Hotplug, плюс это создает кучу неудобств из серии «отключил сетевуху — отвалился BitLocker».
Прекрасно, снимаю шляпу.
Когда найду немного времени — напишу подробнее про TPM и firmware TPM, а то там конь не валялся и легенды про ужасный DRM ходят.
Непонятно, почему не использовать qmake для генерации проекта для VS, XCode, Ninja и черта лысого, чтобы у вас был MOC и остальные плюшки автоматически.
Для VS проект из файла .PRO генерируется вот так:
У ARM'ов там с одной стороны U-boot, который развивается семимильными шагами, а с другой стороны — UEFI, который тоже уже практически готов и наберет свою долю так или иначе, просто потому, что UEFI Forum — не самая слабая организация. Что же до coreboot, то там из применений для «массового зрителя» одни хромобуки и остаются, пожалуй, на ARM или нет.
Пока еще поддерживаются, но в будущем поддержка останется только у Wombat, скорее всего.
SAGE очень жаль, реально, прекрасная Gizmo2 осталась без прошивки, куча хороших людей потеряли работу, что будет с coreboot — совсем не ясно теперь, даже с учетом гугла…
Подозреваю, что на 1600 не проходит какой-то из тестов, которые в обычной жизни либо не встречаются совсем, либо встречаются крайне редко. Пример из моей практики прямо сейчас: на моей плате на AMD Merlin Falcon некоторые типы памяти SODIMM DDR4 (зависит от чипов, максимальной частоты и SPD, конкретнее я пока не знаю) откзываются определяться (и машина зависает с пост-кодом 0x5D, последним до начала тренировки памяти) во время теста «10000 инициированных ОС софт-ресетов с включенной сетевой картой и сохранением логов на сервере». Максимальная частота памяти на этой платформе — 2133 Мгц, если ограничить ее на 1866 Мгц — все хорошо, и почти любая память (за исключением прототипов с проблемами в SPD) проходит любые тесты. Т.к. сам тест длится кучу времени, а тренирувку памяти на этой платформе выполняет закрытый код PMU, на который может влиять только AMD, то мне, как автору прошивки, в миллион раз проще ограничить частоту сверху (еще и при ambient +80*C легче будет обеспечить работоспособность), чем отлаживать это поведение в обнимку с аппаратным отладчиком AMD Wombat в течение пары месяцев. Вот примерно из таких соображений и лимитируют, та же история с белыми списками совместимого оборудования, которые всех бесят, примерно та же — с QVL на модули памяти и остальным. А маркетологи были бы очень рады рекламировать совместимость с более быстрой памятью, но тут им слова не дали.
После того, как оказалось, что к себе домой гугломобиль и гуглолюдей остальные люди пускать не намерены, а данные о помещениях этому самому гуглу как-то нужно собирать, появилась идея встроить в очередной «смартфон» сканер этих самых помещений. При этом, понятно, всем расскажут, что вот оно — будущее, а тот факт, что та же задача решается пространственным воображением за миллисекунды — никого не волнует, т.к. из воображения гугл пока еще данные доставать не научился, зато из «смартфонов» — еще как.
Автор схемы, скорее всего, под PE_RST_N имел в виду вывод микроконтролера, т.к. именно так он назван в даташите на него. PERST# — имя сигнала (или сети) PCIe reset, к которому нога PE_RST_N подключена. Две разные сущности — два разных имени, ничего необычного.
Плюс поставил, хоть и стена текста. Одно только покоробило: PE_RST_N и PERST# — выделенное сразу дает понять, что активный уровень этого сигнала — низкий, и это не недостаток качества документации, а недостаток знаний принятых в индустрии обозначений.
По поводу оплаты — Ланиту, я слышал, очень нужны сейчас специалисты по прошивкам, UEFI, U-boot'у и вот этому всему.
Я не спорю, что баг серьезный, и этот конкретный баг — только первая ласточка среди всех проблем с синхронными SMI, которые ждут своего часа. Дело в том, что, как и в свое время а ассинхронными SMI, никто из разработчиков технологии не воспринимал её как вектор атаки, и потому ревью кода обработчиков синхронных SMI практически не проводилось, ибо все считали, что вызвать эти самые обработчики атакующий не сможет, он ведь не знает нужного хендла (SmmBase->Communicate) или GUIDа (SmmCommunicate->Communicate), и формат буфера ему тоже неизвестен, да и вообще, кому это надо все. А потом пришел Дима и не просто все сломал, а еще и выложил все карты на стол.
Но вернемся к изнасилованию: в нынешнем виде эксплоит является приложением для UEFI shell, т.е. этот шелл нужно еще запустить как-то, т.е. нужен физический доступ к машине и отключенный SecureBoot (привет коментаторам, которые его костерят). Чтобы обойти это ограничение, нужна собственная реализация Communicate, которая тоже будет работать только из UEFI OS (для legacy OS обработчики синхронных SMI диспетчером не вызываются вообще, такая своеобразная защита от дурака). Сделать это можно, и я не сомневаюсь ни на секунду, что Дима это рано или поздно сделает, но сейчас поводов для паники нет никаких.
Более того, на платах Gigabyte, Asrock, ASUS, и прочих десктопных платах такого рода этот конкретный эксплоит вообще не имеет значения, ибо там можно достичь того же эффекта (получить полный доступ к SPI flash) значительно более простыми способами, так что эксплоит, даже если он на этих устаревших платах и работает, опасности для них не представляет, ибо нет смысла просачиваться через вентиляцию, когда у тебя либо двери вообще нет, либо ключ от нее — под ковриком.
Отдельно хочу возразить людям, которые в очередной раз убеждают меня в том, что современное железо буквально само инициализируется и там хватит микрокода на пару килобайт, а остальное все Великий и Открытый Линукс сделает за нас. Почти год, ребята. Почти год своей жизни, работая 40 часов в неделю, я потратил на то, чтобы довести плату conga-TR3 из состояния голое мертвое железо до состояния прошла все тесты и готова к массовому производству, имея при этом всю документацию, референсную реализацию UEFI и поддержку со стороны AMI и AMD. Если вы можете сделать то же самое хотя бы за полгода — подавайте резюме в любую компанию, Apple/Microsoft/Dell/HP/Lenovo/etc, любую — и вас там оторвут с руками, предложив не меньше $200к в год, релокацию, жилье, шахматы и поэтесс. И напишите мне оттуда потом, чтобы я еще сильнее загрустил, что тормоз такой.
Выпаять TPM теперь тоже нельзя, т.к. он теперь в чипсет встроен, как у Intel начиная с BayTrail, так и у AMD начиная с Merlin Falcon.
Если говорить об атаках на более старые системы без BG и с внешним TPM — там все можно, конечно, но очень и очень непросто, ибо придется трассировать реально каждый вызов Extend, которые там начинаются с PeiAfterMem и до BDS их там получается порядка тысячи. Не заметил один — весь лог на смарку, откатывайся. Понятно, что это можно автоматизировать и обойти, но стоимость таких решений получается чуть ли не выше стоимости защищаемой ими информации, т.е. главная задача ИБ защитой таки решена.
Когда найду немного времени — напишу подробнее про TPM и firmware TPM, а то там конь не валялся и легенды про ужасный DRM ходят.
Для VS проект из файла .PRO генерируется вот так: Для XCode — вот так:
SAGE очень жаль, реально, прекрасная Gizmo2 осталась без прошивки, куча хороших людей потеряли работу, что будет с coreboot — совсем не ясно теперь, даже с учетом гугла…