Обновить
8K+
320
Николай Шлей@CodeRush

Firmware Security Engineer

29,1
Рейтинг
692
Подписчики
Отправить сообщение
PVS-Studio анилизирует не тектовые файлы, а препроцессированные, а получить их можно либо интегрировав анализатор в сборочную систему, либо запустив Compiler Monitoring и «поймав» эти файлы во время сборки. Самой программе, понятно, компилятор не нужен, не без него очень трудно получить то, что она ожидает на вход.
Спасибо, теперь ждем версию для MacOS и интеграцию с XCode. *подмигивает*
Кто про что, а вшивый про баню: если не затруднит, сделайте дамп региона BIOS и выложите куда-нибудь, а то производители никаких обновлений прошивки еще не выкладывали, а без их понять, насколько там все хорошо (или печально, что вероятнее) — решительно невозможно. Insyde в пресс-релизе обещает там практически технологии завтрешнего дня, а что по факту — хотелось бы посмотреть.
Называется такой подход MAC, самая известная реализация — SELinux. В итоге все гладко на бумаге, только правила никто писать не хочет, а для программ посложнее блокнота само написание таких правил — весьма нетривиальное занятие. Ну и пользователи (или администраторы, что случается намного чаще) не выносят прокрустового ложа MAC и отключают его начисто. Ничего личного, просто в очередной раз при выборе между безопасностью и удобством использования выбрали удобство.
И еще пример. И еще. И RW Everything со своим драйвером, который и подписан, и может вообще все.
Вот так примерно и выглядит добрая половина драйверов режима ядра от сторонних производителей. Людям нужно было решить проблему, и они ее решили, а как это выглядит с точки зрения безопасности — всем наплевать. Вот еще один пример похожего поведения.
The ASUS «Generic Function Service» includes a couple of drivers, ASMMAP.sys / ASMMAP64.sys,
the version resources describe them as «Memory mapping Driver».

This description is very accurate, it has a pair of ioctls, 0x9C402580 and 0x9C402584, that map or
unmap to the calling process' address space ANY PART OF PHYSICAL MEMORY, with READ/WRITE permissions.
Using code that has been copypasta'd a bunch of times, but seems to originate from a sample driver for NT 3.1.
1993 vintage code, everybody.

It also has a couple of other ioctls that allocate or free some RAM and gives the physical and virtual pointers
to it, and another one that can make any I/O request (does in/out byte/word/dword with parameters given in the ioctl buffer, and returns the result for the case of in).
Более того, там при рефакторинге закралась копипаста вот здесь, и код переписаный просто не работает:
let myArray = [null, { }, 15];  
let myMap = new Map([ ['functionKey', function() {}] ]);  
let myObject = { 'stringKey': 'Hello world' };  
getCollectionWeight(myArray);  // => 7 (1 + 4 + 2)  
getCollectionWeight(myMap);    // => 4  
getCollectionWeight(myObject); // => 2  
Это потому, что отладочный вывод в декодируемые на LPC IO-порты 0x2F8-0x2FF доступен очень рано и делается буквально парой ассемблерных команд, и это очень помогает в отладке прошивки. Более того, если производитель материнской платы устанавливает на нее EC или SuperIO, пара UART-портов ему достается бесплатно, а если даже не устанвливает — несколько HSUART-портов есть в любом чипсете и SoC специально для отладочных целей.
В данном случае символ это означает собаку и используется для того, чтобы упомянуть известное графическое макро с собакой, раздающей плохие советы.
SMM — настоящее кольцо, у него свои IDT/GDT, свои права на доступ к памяти и устройствам, своя виртуализация и свой набор MSR-регистров, некоторые из которых доступны только из SMM.
ME — не кольцо, а микроконтроллер со своей архитектурой и прошивкой, имеющий доступ к памяти x86 через DMA.
Отличная статья, спасибо.

Поправлю немного по примечаниям:
4. Выбрать загрузочное устройство в  Windows 8 и Windows 10 очень просто, даже не имея пароля. На стартовом экране есть кнопка Power, которая открывает меню с Power off/Standby/Restart. Если нажать на Restart удерживая Shift, вместо перезагрузки произойдет переход в меню Troubleshooting, откуда можно перейти сначала на Advanced Settings, а затем и на Startup Settigs, где и выбрать следующее загрузочное устройство. Пишу по памяти и не имею сейчас доступа к машине с Windows, но когда я пробовал вышеописанное в последний раз пару месяцев назад — работало.
5. Лучше не создавать больше одного ESP (и не создавать ESP меньше 200 Мб, ограничение не жесткое, но некоторым старым загрузчикам не нравится), а просто сложить все загрузчики на один раздел. Efibootmgr действительно лучше не пользоваться, а вот UEFI Shell намного чаще приходится загружать с внешнего носителя, т.к. встраивать его себе в прошивку — потенциальная проблема безопасности, и потому не очень рекомендуется.

Нужно бежать на работу, потом допишу еще пару замечаний, когда смогу прочитать статью вдумчиво, а не на бегу.
Деваться им в этой ситуации некуда, так что пойдут как миленькие. У меня сейчас нет тестовой системы с Windows, чтобы проверить это утверждение, но я обязательно вернусь к этому вопросу, когда она появится.
Устраняется эта «неустранимая» уязвимость на всех машинах с ключом Microsoft KEK тем же обновлением, который закрывает уязвимость в загрузчике, путем добавления хешей уязвимых загрузчиков в переменную dbx, что запрещает их загрузку. Если же у вас свой собственный ключ в KEK — добавьте эти хеши самостоятельно.
В вашем примере нет модальности в интерфейсе. Кнопка приседания означает только приседание и ничего больше. А вот если у вас есть какая-то кнопка «мета», при нажатии на которую кнопка «приседание» теперь кнопка «сменить оружие на пистолет» — вот тут модальность в интерфейсе и появляется. На клавиатуре у нас такими оказываются CapsLock (на нем у меня смена раскладки), NumLock (всегда включен) и Scroll Lock (почти не пользуюсь). При этом, если раскладок становится больше двух (три, например, немецкая еще), то переключать их циклически, как предлагает ОС по умолчанию — это просто кошмар.
Ваша уверенность в том, что я не пробовал VIM и EMACS и не отказался от них сознательно — ни на чем не основана. Пробовал, остановился на альтернативах. Да, режимы в интерфейсах терпеть не могу и стараюсь избавляться от них там, где это возможно.
Не хотите спорить — дело ваше, вам удобно — на здоровье.
Стараюсь называть вещи своими именами. Модальная ерунда — это модальная ерунда, будь она хоть в любимом редакторе, хоть в интерфейсе микроволновой печи, хоть где-то еще. Любые режимы увеличивают когнитивную нагрузку, точка. Если вы готовы с этим мириться ради экономии времени на перенос руки на мышь или нажатие стрелок — имеете полное право. Более того, переход «ты ругаешь утилиту, ей пользуются люди и им нравится, значит ты ругаешь и этих людей тоже» — это демагогия, которая не имеет под собой логической основы.
Я живу и работаю в Баварии, в нашем офисе около 20 разработчиков железа, специалистов по board bring-up и разработчиков драйверов — ни VIM, ни EMACS я не видел нигде. Посещал офисы Bosch, Siemens, Vector и многих других — примерно та же ситуация. Откройте любой мало-мальски уважаемый редактор — и по умолчанию там никаких режимов нет, и VIM-режим там тоже никто по умолчанию не включает.
Спасибо за переход на личности первым же сообщением, отличный аргумент. Вы, конечно, понимаете и за себя, и за меня.
Все эти редакторы не вымерли, просто они такие же артефакты из прошлого, как sed и awk. Мощно? Не вопрос. Просто? Еще как. Нужно кому-нибудь? Конечно. Сколько людей пользуется сейчас для написания нового кода? Два с половиной.
Если у вас вот это перечисленное требует когнитивной нагрузки и выполняется сознанием — не завидую. В противном случае — не понимаю вашего сарказма. Любые режимы в интерфейсах — несомненое зло, и если их можно искоренить — их нужно искоренить.
Любая модальная ерунда — это повышение когнитивной нагрузки на пустом месте, ибо теперь нужно помнить не только то, какое именно действие выполняется по нажатию каждой клавиши, а еще и в каком режиме мы сейчас находимся, в какой режим мы теперь хотим, и как нам перейти в него. Кратковременной памяти мало и так, и в итоге шутка о том, что VIM, на самом деле, имеет два режима — «бибикать» и «портить всё» — уже не кажется смешной.
Более того, программирование от ввода текста отличается очень сильно, и от интегрированной среды разработки в первую очередь требуется не экономия на перемещении курсора, а интеллектуальный подсказки, итеграция с отладчиком, профилировщиком, анализаторами, системами управления версиями и остальными утилитами, необходимыми разработчику даже больше, чем собственно текстовый редактор. В IDE для разработки UEFI-совместимых прошивок AMI Visual eBIOS, например, есть мастер IRQ routing'а, генератор GUIDов, интерфейс для быстрой настройки PCI/SMBus/IOAPIC-устройств, интерфейс для управления build-токенами и другие вещи, нужные именно для разработки прошивки. Понятно, что все это можно добавить и в VIM или EMACS, только вот почему-то пока никто не собрался…
UEFI 2.1 трехлетней давности, в которой даже SecureBoot'а нет, а о безопасности какой-то слыхом не слыхивали. Вот тебе и производитель решений для индустрии…
Изините, господа, но нет.

Информация

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

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

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