All streams
Search
Write a publication
Pull to refresh
310
0
Николай Шлей @CodeRush

Firmware Security Engineer

Send message
Да, вероятнее всего виноват UEFI, либо какое-то оборудование, которое не хочет спать и просыпаться нормально.
WOL есть почти во всех современных UEFI, но может быть достаточно глубоко запрятан с настройки Power Management, стоит поискать.
У меня есть полный образ от iMac 12.2.
Apple использует нестандартную файловую систему для некоторых FV, которая не похожа по структуре на вышеописанную. В моем дампе два таких нестандартных региона. Также Apple использует дублирование регионов, чтобы при повреждении одного можно было продолжить загрузку из другого, этот же прием использует ASUS на своих десктопных платах.
Образ BIOS'а у Apple — обычный Intel Flash Image, он открывается и поддается настройке через FITC.
Не перерабатывая прошивку достаточно глубоко — не получится, а без исходного кода и платформы для сборки сделать такую переработку было бы подвигом.
Я не думаю, что для плат на чипсетах 6 серии будут еще выпущены UEFI с поддержкой SecureBoot и FastBoot — производитель считает их устаревшими.
Я занимался восстановлением BIOS'ов после известного пользователям плат ASUS на P67 и Z68 сбоя при обновлении МЕ. вот моя тема на форуме overclockers.ru. В тот момент у меня было много времени на это хобби, т.к. я посещал языковые курсы после переезда в Германию, да и тема показалась интересной. Сейчас времени стало меньше, но интерес не пропал, зато появилось желание разобраться в теме получше. А лучший способ разобраться самому в чем-то — это попытаться другим это объяснить. Вот и объясняю по мере сил.
Для UEFI я пробовал писать простой DXE-драйвер, и портировал в среду UEFI свою утилиту FD44Copier, но загрузчик разрабатывать не буду пока.
Как раз хотел писать во второй части своей статьи про этот патч, но вы меня опередили.
От себя посоветую в следующий раз использовать не IDA Pro, которая далеко не всем доступна, а бесплатная версия не поддерживает 64-битые исполняемые модули, а objdump в Linux или dumpbin из MSVC в Windows.
Как минимум еще у HP встречаются модели с белыми списками.
Написал, вот она.
Часть получилась не вторая, а полуторная, т.к. информации, если ее расписывать подробно, оказывается слишком много для одной статьи, приходится делить.
Начать можно здесь, а вот здесь уже есть ссылки на несколько разных версий.
Файл с UEFI Shell нужно положить либо на EFI System Partition, либо на внешний носитель с ФС FAT32 и назвать либо shell.efi, либо shell64.efi, либо чаще всего shellx64.efi, после чего подключить носитель и выбрать эту опцию. На всех платах, которые у меня есть — работает, но не все версии UEFI Shell запускаются, приходится скачивать и пробовать разные.
Во второй части я расскажу о процессе загрузки UEFI. Сейчас RAM инициализируется в конце второй фазы загрузки, а вся работа до этого происходит в кэше процеессора. А вообще, процесс начальной загрузки изменился не сильно, но переход в защищенный режим происходит теперь гораздо раньше.
Не думаю, что хаб UEFI будет чисто академическим, с учетом идущих вокруг SecureBoot холиваров.
На самом деле, эта статья — не чистое знание, а чистое «чуть чуть прошелся по верхам, и оборвал на самом интересном месте».
Тема UEFI очень обширная, тут и процесс загрузки, и разнообразие форматов исполняемых файлов, и схожесть структур данных в UEFI и Windows, и EDK, и UEFI Shell, и сборка своих исполняемых файлов для UEFI, и написание DXE-драйверов, и NVRAM, и SMM, и безопасность, и виды защит от прошивки, и это половина процента всего, что можно написать про UEFI, и что не будет выглядеть так скучно, как эта статья.
Если интересно — можно продолжать, если не сильно — можно написать пост со списком того, что стоило бы почитать на эту тему и остановиться на этом.
Написал первую часть, вот она.
Вторую напишу в ближайшее время.
SecureBoot нужен только потому, что без него там вообще никакой безопасности нет. UEFI — это самая настоящая OS, работающая в ring 0, а частями и ниже, и имеющая собственные драйверы, собственный сетевой стек и доступ до всей памяти и всех устройств в обход основной ОС.
Без какой-либо защиты, в том виде, в котором оно реализовано на платах на P67/Z68 — это кошмар любого безопасника.
Любой получивший один раз рута код может сделать с БИОСом что угодно.
И не просто стереть его, а записать своих модулей, которые, при грамотном программировании, даже обновление БИОСа стандартными средствами будут переживать.
И все это вот нам подается под соусом «ускоряем загрузку на 10 секунд, пишем БИОС на С, в настройках высокое разрешение и мышь!» Поэтому SecureBoot — все-таки хоть какой-то, но выход из сложившейся ситуации.
ИМХО, лучшая реализация «двойного» БИОСа сейчас у EVGA на новых платах.
Там три разных микросхемы, одна из которых не припаяна, а посажена в ZIF-кроватку.
Никаких хитрых механизмов нет и не нужно, сломалось — щелкнул тумблером, загрузился, щелкнул обратно, прошил новую версию.
И всякие проприентарные прошивальщики они не используют, доверяя прошивку надежному и простому Intel FPT.
И Phoenix, и InsydeH2O, которые как раз и используюся Dell, HP и Lenovo — нисколько не менее глючные. Про новые Dell с UEFI 2.3.1C и SecureBoot сказать ничего пока не могу — не сталкивался, а вот на старых багов не меньше, если не больше, чем на десктопных AMI, и чинят их также крайне неохотно. Но хотя бы белых списков оборудования Dell не вводит и файлы BIOS Update не шифрует, как это делают HP и Lenovo.
Только за одни белые списки, из за которых каждую новую версию БИОСа приходится модифицировать и шить нестандартными способами, я больше никогда решения ни HP ни Lenovo не куплю, пусть там UEFI хоть каким отличным будет. Оборудование и так делают все более закрытым, а чтобы какой-то кореец решал, какие 3G-модем и WiFi-карту я могу поставить в свой ноутбук, а какие нет — увольте.
С учетом включенных на этом ноутбуке по умолчанию Intel AT и защиты от записи сторонними утилитами прошить такой модифицированный БИОС может быть очень непросто.
Поэтому нужно писать в техническую поддержку и требовать возврата опции в список доступных для редактирования. Если быть достаточно настойчивым — вернут.
Посмотрел в доступные настройки BIOS'а N76VZAS.213 на предмет отключения SecureBoot с помощью AMIBCP.
Возможность эта в прошивке есть и должна быть на вкладке Security.
Отображается эта настройка или нет — другой вопрос, конечно.
Часть скриншота AMIBCP
image

Не знаю, откуда в русской версии презентации эти слова про диск, в английской их нет. Да и микросхем там все же две, а восстановление работает без жестких дисков, так что вопросы тут к переводчику, скорее.
Нет, это про другое. На платах Gigabyte установлено 2 микросхемы SPI flash и при невозможности старта с основной происходит старт с дополнительной, копирование содержимого дополнительной в основную и старт с основной. Таким образом, пользователю после сбоя достаточно подождать 2 минуты, пока выполняется копирование, и потом выставить свои настройки заново.
Вообще, идея установки на плату нескольких микросхем SPI flash — очень хорошая, жаль, что не все производители это понимают.

Information

Rating
Does not participate
Date of birth
Registered
Activity

Specialization

Embedded Software Engineer, System Software Engineer
Lead