The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Утечка 20ГБ внутренней технической документации и исходных т..."
Отправлено Аноним, 08-Авг-20 00:17 
Возможность софтварной прошивки зависит от биоса. Я не разбираюсь в AMD, но могу рассказать как это работает в Intel. Это как раз я и написал ту статью про прошивку x230/t430/t530 через уязвимость, а потом ребята по ней сделали 1vyrain. Кстати уже есть официальная дока: https://doc.coreboot.org/mainboard/lenovo/ivb_internal_flash...

Итак, сейчас будет небольшая лекция.

Во-первых существует несколько регистров:

1. Регистры PR0-PR5 (SPIBAR+0x74), в них задается защищаемая область SPI чипа, плюс есть бит WP, если он 1, то в указанную область нельзя писать.

2. Рядом (SPIBAR+0x04) есть регистр HSFS, в нем есть бит FLOCKDN, если он 1, то снять его может только reset хоста, а ещё когда он 1, то нельзя писать в регистры PR0-PR5.

3. Регистр BIOS_CNTL (LPC Interface Bridge, в адресном пространстве PCI), в нем есть биты BIOSWE, SMM_BWP и BLE.

BIOSWE всегда R/W, он контролирует можно ли писать в биос. То есть перед записью в любом случае его нужно проставить в 1, например flashrom делает это сам автоматически.
Если SMM_BWP=1, то писать в биос можно из SMM. После установки в 1 изменить нельзя.
Если BLE=1, то установка BIOSWE в 1 вызовет SMI (прерывание SMM). После установки в 1 изменить нельзя.

Из информации выше должно быть понятно, что для нормальной записи нужно либо отсутствие проставленных PRx (либо бита WP в них), либо непроставленный бит FLOCKDN, чтобы можно было просто обнулить регистры PRx, при этом крайне желательно иметь выключенные SMM_BWP/BLE, иначе нужен ещё и SMM эксплоит, поскольку писать можно будет только из SMM.

Способ записи на 30-й серии thinkpad основывается как раз на том, что в старых версиях биоса отключен SMM_BWP, плюс из-за незащищенного UEFI bootscript можно перезаписать этот самый bootscript, и подменить значения регистров, которые будут писаться из этого скрипта при восстановлении из S3, например снять бит FLOCKDN регистра HSFS.

Ещё как пример у меня есть ноут Samsung, там PRx вообще не проставлены, SMM_BWP тоже 0, и биос можно спокойно полностью перезаписать из-под линукса.

Но это ещё не все, самое веселое только начинается.

Во-вторых, есть биты доступа во флеш дескрипторе (FD). К разделу, в котором лежит собственно сам биос, это не относится, но там задаются права на чтение/запись к разделу ME и самому флеш дескриптору.

При этом доступ к флеш дескриптору можно переопределить (это фича железа), замкнув пин HDA_SDO на единицу, либо в случае старых платформ, если я не ошибаюсь (надо сверяться с доками), GPIO33 на землю при включении. В этом случае до следующего резета заданные права доступа к FD будут игнорироваться и в него можно будет писать. На некоторых ноутах, кстати (HP вроде), есть даже какой-то хоткей, по-видимому реализуемый через EC, который это делает. Это называется пинмод. Тут нужно смотреть схематику и иметь более-менее прямые руки, чтобы чего-нибудь лишнего не замкнуть.

Если вендор не сделал fd read-only либо не защитил его регистрами PRx либо вы сделали пинмод, короче если можно в него писать, плюс можно писать куда-нибудь ещё, например в область ME (бывает, что она тоже R/W и ME работает в manufacturing mode, так в Apple раньше делали), либо в часть региона bios (часто защищают только bootblock, остальное можно писать, пример - thinkpad x220), либо есть любая другая открытая для записи область размером хотя бы несколько сотен килобайт, это открывает возможность для сложного, хрупкого, но реального хака.

Приведу пример с реальными данными с x220. Биос лежит в 0x00500000-0x007fffff. Через регистры PRx и бит FLOCKDN защищена область 0x00780000-0x007fffff, что означает что мы спокойно можем писать всё что угодно в 0x00500000-0x0077ffff. Что мы можем сделать:

a) собираем маленький образ coreboot с небольшим payload, например seabios, либо grub с минимумом модулей, который поместится в свободную для записи область. Главное заранее подумать о том, чтобы выбранный payload был способен потом загрузить вашу ОС.

b) пишем его в эту область.

c) патчим флеш дескриптор (через тот же ifdtool): переопределяем раздел bios как 0x00500000-0x0077ffff, 0x0077ffff это будет новый reset vector. Плюс добавляем новый раздел 0x00780000-0x007fffff, можно назвать его pd (platform data), это обязательно нужно для того, чтобы в будущем можно было в него писать. Если нет раздела, то и писать в эту область не получится.

d) прошиваем новый флеш дескриптор

e) выключаем компьютер. Именно выключаем, т.к. новый fd вступит в силу только с холодного старта.

f) Если делали пинмод, то надо будет снова. Включаем компьютер, у нас загружается наш маленький coreboot из нового раздела. Загружаемся в линукс, никакие PRx больше не стоят.

g) Снова патчим fd, чтобы bios занимал все доступное пространство 0x00500000-0x007fffff, либо просто берем оригинальный. Прошиваем новый fd.

h) Собираем нормальный coreboot и прошиваем уже куда надо, т.е. в 0x00500000-0x007fffff. Еще одно выключение-включение и готово.

Это довольно ненадежная (в том плане, что малейшая ошибка и вы получите кирпич, который надо будет восстанавливать программатором), но абсолютно реальная процедура, которую я проворачивал на макбуках, и даже скрипт для этого написал и доку https://review.coreboot.org/c/coreboot/+/38770, а один юзер с irc-канала #coreboot таким образом прошил свой x201.

---

Полагаю, я исчерпывающе ответил на вопрос "когда будет прошивка с флешки/диска или каким другим "софтовым" способом?" - это зависит не от нас.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
  Введите код, изображенный на картинке: КОД
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру