Обновить
310
0
Николай Шлей @CodeRush

Firmware Security Engineer

Отправить сообщение

Поправлю немного про МЕ, потому что там не 486, а т.н. Minute IA (это такой переписанный на верилоге с нуля гибрид 586 и 686 с несколькими неработающими из за бага префиксами, на той же архитектуре в свое время выпускали Intel Quark SoC). На MIA (и ядро, основанное на MINIX) перешли в поколении Skylake, до этого использовали архитектуру ARCompact и ОСРВ ThreadX.

Это достигается путем маппинг flash-памяти в адресном пространстве процессора

Вот тут согласование потерялось немного, лучше исправить на что-то вроде "путем отображения в адресное пространство процессора".

Немного подробностей про AMD на днях опубликовали вот в этом посте, openSIL тоже пока ждем.

Если кто заинтересовался подробностями, настойчиво посоветую пройти бесплатные курсы OpenSecurityTraining2, там отличные и материалы, и преподаватели (автор большей части курсов - Xeno Kovah, мой бывший тимлид, очень сильный специалист по безопасности прошивок и прочих низкоуровневых штук, а курс по UEFI ведет Piotr Krol, глава 3mdeb). Лучше материалов в сети практически нет.

Почему все такое ублюдское? Потому что озвучено профессиональными программистами.

Дело в том, что Линукс, если не считать ядро, которое пишут десяток корпораций поменьше, объединившись для того, чтобы их не съели другие две корпорации побольше (авторы остальных двух популярных ОС), написан практически целиком силами энтузиастов и для других таких же энтузиастов. Люди пилят миллиард своих маленьких проектов в этом лоскутном одеяле потому, что пилить свой проект - это весело. При этом веселее заниматься новым, чем поддерживать старое, веселее заниматься своим, чем поддерживать чужое, и самое главное - веселее бросить надоевшую в определенный момент идею ради реализации новой, более привлекательной.

Для того, чтобы сделать первые 80% работы, мотивация зачастую не требуется никакая, кроме внутренней ("йо-хо-хо, а давайте запилим свой DE!"). Оставшиеся 80% работы (это сарказм такой, если что) требуют экспоненциально растущей мотивации, на которую у энтузиастов нет ни времени, ни денег.

"Пилить хорошую реализацию" на последних этапах превращения "интересного нового ПО" в "хорошее работающее ПО" - это крайне скучное занятие для творческого ума, это бесконечные переписывания неудачных решений, борьба с затыками с производительностью, борьба с ошибками в UI и UX, борьба с нетривиальными багами, которые не проявляются сразу, а сидят молча и портят пользователями жизнь, и т.п. Бесплатно практически никто этим заниматься не станет - это тяжелая работа, с джаст-фор-фаном никак не связанная.

Все упомянутые вами технологии не были разработаны Васянами с горы, пишушими по праздникам у себя из подвала. X11 - MIT/DEC/IBM, ELF - AT&T Unix SVR4, Git - Linus Torvalds, Qt - Trolltech/Nokia/QtCompany. Чуете подвох?

Основные причины: репутационные потери от незакрытых известных уязвимостей, требования регуляторов, abundance of caution, оно же по русски дутье на воду после ожога на молоке.

Spectre V2 тоже в практическом смысле совершенно не опасная уязвимость с точки зрения пользователя, но защиту от нее таки включили во всех мейнстримовых ОС по умолчанию, даже если это привело к существенной потере производительности.

Если коротко, до пользователя конечного мало кому есть дело, он процессоры вагонами не закупает и потому корпорации интересен мало. Исправления эти полезны операторам дата-центров и облаков, а то, что они цепляют всех остальных - ну вот так, се ля ви, не нравится - у конкурента покупайте, какие могут быть вопросы.

Задача исследователей была как раз в том, чтобы вывести процессор на такие закритические режимы, чтобы его нормально работающие при нормальных условиях механизмы безопасности буквально сошли с ума от недостатка питания. И процессор им это позволил без проблем, в чем собственно уязвимость и состоит.

Впрочем, SGX, TrustZone, и прочие подобные решения, основанные на идее исполнять защищаемый и атакуемый код на одних и тех же вычислительных блоках - они во многом провальные заранее, и потому на практике SGX исполняет одну заметную функцию: отличная технология для защиты кандидатских диссертаций по инфобезу, там таких уже штук 30 защитили, и конца не видно пока.

Если же вопрос в том, почему нельзя разрешить, скажем, андервольт на 0.1В, и запретить какие-то совсем неадекватные значения - непонятно, по какой границе проходит эта самая адекватность, и как доказать, что она проходит именно по ней. В результате выбрали режим "по умолчанию", да так и оставили, а если атакующие найдут способ добиться каких-то заметных результатов повышением напряжения - по умолчанию запретят и его, если еще не запретили.

Так и есть, но за безопасность от пользователя платят другие корпорации, а платят они потому, что иначе поставщики контента этот самый контент будут доставлять в низком разрешении и с низким битрейтом, если будут вообще. Устройство, на котором не работают стриминговые сервисы - это в нынешнее время практически бесполезный кусок железа для огромного количества пользователей, поэтому DRM, TDX, и прочая защита корпораций от пользователя - они производителям железа фактически навязаны производителями контента. Не будут брать - отключим газ.

Вообще, практика показывает, что устройства с закрытыми экосистемами, в которых пользователь является атакующим по умолчанию - они в некоторых нишах не только прибыльны, но и буквально выдавливают из них более открытых конкурентов. Xbox Series X, который с точки зрения железа - практически обычный ПК, а с точки зрения ОС - практически обычный ПК с Windows и HyperV, стоит 500 долларов (т.е. продается в убыток), а аналогичный по производительность игровой ПК стоит уже 1500 долларов (и продается 5% наценкой хорошо если). На ПК при этом не нужно платить за онлайн-подписку, игры можно пиратить или покупать в десятке разных сторов на распродажах сильно дешевле, в онлайн-играх можно читерить, в оффлайн-играх можно редактировать память и собирать все ачивки одной кнопкой, в общем полная свобода и анархия, гуляй рванина! И несмотря на это все, консоли остаются популярными даже если на них практически не осталось эксклюзивов (не говоря уже про японские Sony и Nintendo, которые эксклюзивами в основном и интересны). Люди готовы платить деньги за удобство, отсутствие вирусов и читеров, и даже низкий фреймрейт и невозможность тонкой настройки игр и железа их не пугает.

Мне самому эта ситуация очень сильно не нравится, и я всеми силами стараюсь сохранить системы, над которыми работаю, максимально открытыми для изменений. Пока что получается, и Asahi Linux - хорошее практическое доказательство этому. Тем не менее, работы еще непочатый край, и вести ее с каждым годом легче не становится, потому что закрытые экосистемы - это контроль, контроль - это деньги, а деньги очень нужны держателям акций, ради блага которых работает при капитализме любая корпорация, даже самая добрая, волшебная и социальная.

Ну с андервольтингом конкретно проблемы возникли после широко известной в узких кругах уязвимости Plundervolt, которую действительно на существующих процессорах иначе чем запретами не получится решить. И не реагировать на нее тоже нельзя - это репутационные потери, проблемы с государственными заказчиками (которые требуют при закупках закрытия известных уязвимостей), и т.п. В итоге пострадали в основном простые пользователи, у которых отобрали удобную фичу во имя безопасности, тот самый security-convenience-tradeoff, в перекосом то в одну сторону, то в другую.

Брюки превращаются... превращаются брюки... в элегантные шорты!

На машинах HP поновее можно было бы наткнуться на SureStart, который на замену одного МЕ региона на другой скорее всего начал бы громко ругаться, и пришлось бы либо шить две микросхемы вместо одной, либо пояснить EC, у кого здесь паяльник и ружье.

Спасибо Intel за то, что не фьюзит эти настройки намертво, не слишком яростно скрывает свой инженерный софт, и иным образом закрывает глаза на подобного рода вещи.

На большинстве материнок есть штатный разъем для программирования SPI NOR, либо подсистема для его программирования через EC или другой какой-либо управляющий чип. ASUS BIOS Flashback, Asrock Flashback, имя им легион. В крайнем случае можно заменить микросхему на подходящий для нее ZIF-сокет, если по высоте пройдет. На ноутбуках я всей этой фигней заниматься все равно не рекомендую, они нынче очень плотно упакованы и лишний раз их даже открывать опасно - оторвешь какие-нибудь пластиковые лапки, или шлейф толщиной в десятую миллиметра порвешь...

Почему сломались перед фирмварью: очень мало смысла что-то делать с ПО, которое практически полностью умирает, отработав. Да, от него остаются всякие ACPI-таблицы, рантайм сервисы и прочие данные SMBIOS и обработчики SMI, но по факту для ОС, если она не собирается с прошивкой разговаривать каким-либо образом, прошивка все также прозрачна. Да, какие-то куски памяти помечены как "занято тут", но оно и раньше так было, и теперь карту памяти не нужно получать через int 15h. В итоге Линукс, в основном, и так нормально загружается, что сразу уменьшает количество желающих ковыряться в прошивке раз примерно в сто. Дальше там вступает в игру тот факт, что нижняя часть прошивки, та, что память тренирует и железо основное инициализирует - она документированна, но так, что от этого никакого толку. Вся тренировка - это нынче проприетарная магия-магия-магия-магия, опа, память нашлась. Причем на современных процессорах AMD эту тренировку проводит прошивка Platform Security Processor'а, которая подписана и зашифрована. Все эти вопросы - решаемые, понятно, но к моменту, когда они решены, платформа успевает устареть на 3-5-10 лет, и больше не нужна никому, кроме самых отбитых энтузиастов открытости всего на свете. Рекомендую посмотреть на список железа, поддерживаемого проектом libreboot, который является форком coreboot без единого проприетарного компонента.

Я не могу сказать, что coreboot, LinuxBoot, oreboot и прочие альтернативы UEFI провалились, и я сам с 2019 года участвую в разработке прошивки для Apple Silicon HW, в которой от UEFI нет ничего вообще, и мой кусок мне нравится намного больше, чем UEFI SecureBoot, и авторы Asahi Linux согласны, по пока что всем альтернативам сильно не хватает того уровня стандартизации и поддержки индустрией, которую Intel сотоварищи обеспечили за прошедшие 20 лет для UEFI. "Безобразно, но единообразно". Более того, UEFI, как уже писал выше, это просто интерфейс, и реализовывать его может хоть PI-совместимая прошивка на базе EDK2 (как сейчас на большей части х86-машин сделано), так и любая другая, у Asahi этим U-Boot занимается, например.

Про UEFI с точки зрения ОС: по сути именно в ОС (т.е. не в загрузчике) там доступны только UEFI Runtime Services, которых немного, и они после UEFI 2.8 опциональные решительно все. Почитайте там про них сами, там немного совсем, а то этот коммент еще больше делать придется.

Про программаторы и т.п. - там UEFI вообще не участвует никак, потому что с точки зрения записи на флешку, что там сейчас на ней волнует очень мало кого. Есть у меня статейка про CH341A, но там с тех пор и софт сильно улучшился, и во flashrom поддержку этого программатора добавили, и вообще жизнь стала лучше и веселее. Вообще рекомендую пойти на Win-Raid и почитать там все подряд.

С точки зрения любой нормальной ОС, чем меньше приходится полагаться на непонятный кусок потенциально глючного и сильно устаревшего говна - тем лучше, поэтому они продолжают инициализировать все железо сами, кроме того, до которого не могут по каким-то причинам дотянуться. Никаким "драйверами" из UEFI, кроме супер-специальных случаев Platform Reset'а, ACPI Sleep States, и прочих подобных, ОС не пользуются, потому что на них надёжа - как на ёжа.

Давайте по порядку, начиная с буткитов: буткиты для BIOS были ничуть не менее задорные, и для их распространения можно было вообще не заморачиваться записью на флеш (а она была перезаписываемой давно уже, просто туда действительно меньше писали в те времена, когда на все настройки хватало 128 байт CMOS SRAM). UEFI - это просто интерфейс, причем интерфейс объективно неплохой, по сравнению с тем 16-битным уебищем, которое он заменил. Да, можно было намного лучше, и жуткую дрянь заменили на чуть менее жуткую, но прогресс там очень заметный, в смысле безопасности практической тоже.

Про статью: непонятно, про что там писать в этой статье. Образ современной прошивки для Intel и AMD делится на регионы, и на одной микросхеме SPI NOR Flash хранится несколько прошивок для разных устройств, часть их которых имеют свои собственные перезаписываемые регионы, в которых хранят всякие настройки, результаты тренировок, и прочие данные, которые медленно или неудобно каждый раз при загрузке генерировать заново. У UEFI PI-части это NVRAM, у CSME - MFS, у PSP - PSP_NV_AREA, и т.п.

Про перерезание дорожек: система ваша тут же станет колом и загружаться перестанет, дорожки придется восстанавливать. Сделать так, чтобы прошивка современная могла жить на RO-флеше - это сложная инженерная задача, и перезанием дорожек она не решается. Нужна ранняя эмуляция NVRAM, отключение ME через HAP-бит, и прочие танцы с бубном, чтобы система вообще смогла загрузиться, а потом еще придется как-то ей пояснять, откуда именно грузиться, потому что стандартный механизм BootOrder/BootXXXX как раз на перезаписываемом NVRAMе и основан. Можно сделать - можно, стоит ли овчина выделки - на мой взгляд, нет, если условия не специальные. Если интересно, посмотрите слайды к моей перезентации на ZN2015, там я делал плюс-минус похожую модификацию, но до полного RO дело доводить не стал - неудобно уже и так.

Про coreboot: Dasharo недавно смогли портировать его на относительно современную материнскую плату на Z690, не без помощи Intel Firmware Support Package, который им там память и тренирует, собственно, но тем не менее. Почему разработка заглохла - проект этот очень затратный с точки зрения времени и квалификации разработчиков, и при этом объективно мало кому нужен вне серверного рынка. Энтузиасты открытых технологий, зачастую, не имеют средств для оплаты труда этих самых разработчиков, а на одном энтузиазме такие проекты обречены на поддержку двух с половиной устаревших плат, и тех же двух с половиной OpenCompute-совместимых блейдов из недр Google, которые за coreboot на них могут заплатить.

Парадокс основной в том, что прошивка - это такое ПО, которое с точки зрения пользователя "ничего не делает", но при этом от его работы напрямую зависит, будет эта груда железа перед ним компьютером, или останется грудой железа. Т.к. потребительских свойств кроме "не ебет мозги" у продукта нет, то и конкуренции нет, и развития никакого нет, и те же самые проблемы с безопасностью, стабильностью, усталостью флеша, записью данных пес знает куда и т.д. и т.п., с которыми я воевал в 2013 году - они все еще с нами в 2023, и будут там еще лет 20, а то и 50. Предыдущий 16-битный ассемблерный пиздец тоже 30 лет похоронить не могли, и сейчас еще кое-где CSM по умолчанию включают...

Решал ту же задачу в октябре прошлого года, решил ее так:
1. https://openwrt.org/tag/802.11ax?do=showtag&tag=802.11ax - список всех устройств с WiFi 6, про которые на OpenWrt Wiki что-то написано. Его можно отфильтровать от неподдерживаемых, а затем выбрать то, что подходит по цене и фичам.
2. Остановился в итоге на Belkin RT3200, который стоял в Walmart на распродаже за $40 или около того. 5 портов Gigabit Ethernet, один порт USB 2.0, MT7622BV/MT7531BE, 1.35Ghz armv8, 512MB DRAM, 128 MB NAND.

Добавлю к уже сказанному, что к проблемам по ссылке выше недавно добавились еще и известные эксплуатируемые уязвимости в загрузчиках Windows, которые MS отказывается отзывать (при том, что загрузчики других ОС они при похожих условиях отзывали массово). Т.е. мало того, что SecureBoot и так никто не включал, кроме полутора анонимусов, так теперь еще и его конфигурация по умолчанию перестала выполнять свою основную функцию - защищать от выполнения вредоносного кода. Отлично, мужики, замечательная безопасная загрузка, и конкурсы интересные…

Круто, а как? Потыкал везде, почитал везде, никаких способов сделать так самому не нашел.

Я тут внезапно запоздало присоединюсь, хоть статей и не пишу теперь. В старом редакторе, что в статьях, что в комментариях, был такой замечательный HTML-тег <abbr title="Terminate-and-Stay-Resident">TSR</abbr>, а в новом я его найти не смог. Доколе?!

Все так, но именно прижимные сокеты без рамки на моей практике самые неприятные с точки зрения практической эксплуатации. Затянешь на градус слабее - один несильный удар в торец платы, и все, POST она больше не проходит, где-то импеданс уехал. Затянешь сильнее - плата в дугу, та же фигня. Затянешь идеально - через 10 минут понадобится менять процессор или южный мост, и все по новой. Четыреждыблядская ярость, других слов нет.

После очень напряженной любви в присядку с подобными friction-held сокетами в обнимку с динамометрической отверткой на разного рода CRB и прочих Evaluation Carrier'ах могу сказать только одно по поводу этого "изобретения": припаянным работать будет, прижатым - хрен его знает, но скорее нет, потому что обеспечить равномерное прижатие, и сохранение этого равномерного прижатия, и достаточную целостность сигнала при прохождении через границу сред, и при этом сделать этот разъем обслуживаемым пользователем - крайне трудная инженерная задача, а припаять при этом в разы проще, дешевле и надежнее.

Ну я тут иронизирую не по поводу Device Tree конкретно, потому что с ними как раз нет особых проблем (а еще потому, что у меня самого рыло в пуху по самый хвост, и на больших aarch64-машинах, к которым я уже несколько лет прикладываю руку, никаких UEFI и ACPI нет, зато без Device Tree они не грузятся дальше iBoot-та первой стадии), а именно по поводу позиции "к черту вашу сложную гадость, у нас тут все хорошо".

Настолько хорошо, что сама arm буквально запрещает использовать Device Tree на системах, реализующих Server Base Boot Requirements:

Systems using SBBR recipe must meet the requirements that are specified in section 5 (PSCI/SMCCC), section 6 (Secondary Core Boot), section 7 (UEFI), section 8 (ACPI), and section 9 (SMBIOS).

Хорошо это или плохо - очень дискуссионный вопрос, но на мой взгляд, скорее хорошо. Безобразно, зато единообразно, бери любой дистрибутив любой популярной ОС и ставь его прямо из ISO-образа, а не вот это все.

Именно поэтому особенно забавно смотреть на попытки некоторых удивительных людей саботировать внедрение UEFI и ACPI на большие aarch64-машины, под предлогом того, что "нам этого переусложненного хлама тут не надо, мы отлично справляемся с нашими Device Tree и трехстадийными патченными-перепатченными загрузчиками такого же патченного-перепатченного ядра линукса".

Замечательно справляетесь, пацаны, продолжайте. /s

Подробности от Бена Феликса про правило 4% и тот факт, что на самом деле действительно безопасный процент лежит в интервале от 2.5 до 3 процентов: раз, два, три. И если следующая статья будет про счастье, то еще четыре вдогонку.

Моя собственная формула финансовой независимости: (инвестиции) = (средние затраты за три последних года) x 40. При росте суммы инвестиций можно понемногу увеличивать и затраты, но уже на $40k в год вполне можно жить во многих относительно неплохих местах в США, при условии, что жилье уже в собственности, и в желаемом месте налоги и страховки не сумасшедшие.

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

Информация

В рейтинге
Не участвует
Дата рождения
Зарегистрирован
Активность

Специализация

Инженер встраиваемых систем, Системный инженер
Ведущий