Pull to refresh
283
0.9
Николай Шлей @CodeRush

Firmware Security Engineer

Send message

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

И я вас, Алексей.

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

Если вы хотите что-то реально поменять, пишите не комментарии, а статьи, такого же примерно формата. "Вот так выглядит Hello World для какой-нибудь умной пуговицы на 8051", или "пишем на С прошивку для самодельного паяльника Т12", или "какой-нибудь промышленный 1Ггц\16к осциллограф за миллиард управляется древним Intel Atom или AMD Geode LX, ковыряем установленную на нем Windows XP" и т.п.

Ничего нельзя сделать, задавая вопросы в комментариях, если мы хотим, чтобы молодежь училась и интересовалась, надо её учить и интересовать. Я тоже пойду учить и интересовать, когда уволюсь из корпорации. Мой бывший начальник Xeno Kovah уже так и сделал в 2020 году, и теперь делится знаниями на OpenSecurityTraining2, про который я тут в комментариях тоже без конца повторяю, как попугай.

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

Буквально недавно объяснял интернам важность правильного указания выравнивания у структур и опасность добавления новых переменных в середину этих самых структур, являющихся частью XNU ABI, и понял, что первому языку не учат нигде, кроме как на работе, а с привычками, сформированными вторым, потом приходится бороться годами.

Или другой пример: Intel в свое время решили, что вместо стандартных memcpy и memset у них в EFI будут gBS->CopyMem и gBS->SetMem, а стандартной библиотеки не будет совсем. И все бы ничего, только вот компиляторы по стандарту языка С99 имею право заменять присваивания структурных переменных на вызов memcpy, и получается полная херня, когда тебе линкер сообщает, что линковать не будет, потому что у тебя нет memcpy, а у тебя в коде его и нет нигде, иди ищи присваивание, удачи.

IOMMU/DART решают эту задачу, и DMA-атаки перестали быть сколько-нибудь серьезной проблемой на любых нормально настроенных устройствах уже лет пять примерно.

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

Для UEFI пришлось выдумать стандартный механизм ESRT (EFI System Resources Table) и буквально заставить производителей поставлять свои обновления через Windows Update и Linux Vendor Firmware Service, потому что иначе заставить пользователя обновляться просто решительно невозможно, и он сидит с заранее сломанными прошивками с годами неисправленными уязвимостями, на которые в смысле безопасности надеяться - себя не уважать. Понятно, что там и на последние версии надежда такая-же, примерно, но отдать обновления в руки пользователя при нынешней культуре и стоимости разработки ПО (а прошивки - это ПО такое же, как и все остальное) - это ошибка.

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

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

Если совсем коротко, то требование это не функциональное, а политическое. Дело в том, что Microsoft с 2012 года безуспешно пытается заставить производителей ПК сделать им нормальные корень и цепочку доверия, без которых все системы безопасности Windows, в том числе защита ядра при помощи виртуализации (Virtualization-Based Security) и другие подобные полезные (без дураков полезные не только майкрософту, но и пользователю конечному тоже) технологии защиты обходятся престейшими буткитами, доступными любому школьнику.

В итоге сначала попытались внедрить UEFI SecureBoot повсеместно, получилась фигня полная, потому что пользователю он мешал, и отключить его до сих пор проще, чем нормально настроить, и потому он отключен практически у всех, но даже с работающим SB сама прошивка (которую поставляет ОЕМ, а не MS) должна быть нормально защищена, а ОЕМы этого не умеют, и не хотят учиться.

Через 10 лет попыток наладить статический корень доверия (т.е. цепочку подписей у каждого следующего звена в цепочке загрузки, которые проверяли бы предыдущие звенья) в MS решили, что дело - труба, и обратили свой взор к динамическому корню доверия (DRTM - Dynamic Root of Trust for Measurement), который как раз и требует наличия TPM (а точнее, его PCR-подсистемы, либо аналога вроде DICE). Фишка DRTM в том, что там нет никаких подписей, а вместо них система отправляет в TPM т.н. "измерения" (measurements) каждого звена цепочки загрузки, и "запечатывает" (seal) набором этих измерений пользовательские секреты, т.е. если вдруг в загрузке что-то заметно поменяется, то пользователя попросят разобраться с этим, не прекращая при этом зашгрузку, но и не распечатывая секреты. Реализовать такую защиту проще, а в сочетании с технологиями вроде Intel TXT, они в пределе позволяют вообще выкинуть прошивку из цепочки доверия, т.е. пофигу какая там творилась вакханалия, измерения совпали, secure reboot выполнился - значит все нормально, можно дальше грузить ядро ОС и не переживать за то, что оно уже все в хуках как ёлка в иголках.

Вторым способом, который МС пробует сейчас, является поставка своего собственного корня доверия\сопроцессора безопасности - Microsoft Pluton, который они ставят на SoC партнеров - AMD и Qualcomm. Он тоже может работать как TPM, но там кроме ТПМа есть еще масса всего.

У Apple на системах с M-чипами статическим корнем доверия является SecureROM, а динамическим - SEPROM и SEPOS. Т.е. при загрузке система не только проверяет подписи каждого компонента, но и кладет хеши их манифестов (файлов с подписями) в специальные аппаратные регистры SEAL_DATA_A и SEAL_DATA_B, которые потом на каждом этапе загрузке сверяются с текущим состоянием, и если не сошлись - SEPOS откажет в доступе к ключам, а вместо загрузки macOS произойдет загрузка recoveryOS в режиме Key Recovery Assistant.

Итого: MS надоело бороться с буткитами, а без TPM или другого подобного железа бороться с ними невозможно, поэтому в Windows 11 они потребовали от производителей железа установку TPM на все совместимые системы. Работает ли ядро ОС без него - конечно, только оно получается "с голой жопой", а для MS это теперь не только нежелательная, но и неподдерживаемая конфигурация.

Направлю интересующихся бесплатными онлайн-курсами на OST2, проект моего бывшего тимлида Xeno Kovah, который в 2020 году ушел из Apple FWSEC чтобы работать над собственными некоммерческими курсами на полный день. Очень серьезные курсы за авторством опытных людей из индустрии, рекомендую двумя руками.

Вот это талмуд, мое почтение. Программировал когда-то давно на VHDL и SystemC в магистратуре, и с тех пор остались положительные впечатления от первого и не очень положительные от второго.

В связи с Yosys рекомендую обратить внимание на проект Glasgow Interface Explorer и другие проекты уважаемой WQ.

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

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

На некоторых профессиональных ноутбуках предусматривают датчик открытия задней крышки, и прошивка EC (который всегда запитан от дежурного напряжения, и потому на состояние остальной машины ему пофиг, лишь бы батарея в ноль не села) может реагировать на него разными способами (видел даже сирену кастомную однажды), но это все электроника, которую можно вырубить, к примеру, мощным генератором ЭМИ.

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

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

Вскрытие корпуса отлично показывает небольшая капля лака с блестками, которую можно нанести на винты так, чтобы при попытке их открутить лак точно пострадал, и блестки повредились.

На маках с М-чипами нет BIOS/UEFI, и все этапы начальной загрузки проверяются последовательно, используя не только статический (цифровые подписи), но и динамический (аттестация) корень доверия.

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

Очень хорошо вас понимаю, потому что одно время работал на congatec AG, производителя компьютеров-на-модулях, которые затем вставлялись в разное промышленное оборудование за бешеные деньги, и там должны были без сбоев работать десятилетиями. В итоге пришлось и EFI-драйвер для USB-флоповода писать (даже для двух, потому что 5,25"-дискеты тоже еще в ходу), и EFI-загрузчик для Windows CE 6.0 собирать из глины и палок (причем палок очень не хватало), и работать (в 2016 году) с прекрасными процессорами AMD Geode GX2 и LX1 и системами на них. Удачи реально, попутного ветра в нейросетевую спину.

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

Засилье чат-ботов задолбало, потому что у этого интерфейса нулевая discoverability, т.е. абсолютно невозможно понять, какие команды бот "знает", а на какие начнет нести пургу, и где у него кнопка "вызов мясного оператора", если она у него есть вообще. Тупое текстовое меню времен IRC-ботов - лучше, чем этот навоз, простите.

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

Старый становлюсь, видимо, и дурацкий хайп теперь выглядит как дурацкий хайп, а не как прорывные технологии завтрашнего дня.

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

I've been a Roblox developer for over a year, and the worst part is the tax. When you use the Developer Exchange, Roblox takes a whopping 70% of your total income BEFORE you account for federal taxes you have to pay. All in all, you only keep about 20% of your profits to split between everyone on your development team.

Читайте первоисточник вместе со ссылками. Накакого RSA там нет, базовый алгоритм - ECDSA NIST P-256. Для постквантовой устойчивости используется Kyber-1024.

Вот в этом треде мнение MDG (студенты которого сломали предыдущий протокол в 2015 году) о новом, положительное.

Добавлю, что нужен опыт не только позитивный, но и негативный, т.е. какие-то проекты у хорошего сеньера уже успели сдохнуть в муках, какие-то баги не получилось исправить, какие-то политические и ресурсные вопросы не получилось решить, и т.п.

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

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

Основная теорема ИБ упрямо утверждает примерно следующее: "стоимость имеющей смысл защиты должна быть ниже, чем стоимость защищаемой ей информации", она же "стоимость обеспечения несанкционированного доступа к информации должна быть выше стоимости этой информации", она же закон Склярова. Так вот, еще до того, как идти городить матмодель и защищать ИоТ-устройства (от кого?), надо сначала понять, а что мы там защищаем? А надо ли?

Ну т.е. у вас вот нательный датчик, какие ценные данные он генерирует, чтобы для него делать все, что вы тут решили делать? У вас треки GPS-координат? У вас там платежные данные и банковские карты? Или может список контактов с телефона подтянутый?

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

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

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

1
23 ...

Information

Rating
1,382-nd
Location
Cupertino, California, США
Date of birth
Registered
Activity