Рональд Минних (Ronald Minnich), основатель проекта CoreBoot,
выступил (https://osseu17.sched.com/event/ByYt/replace-your-exploit-ri... на завершившейся несколько дней назад конференции LinuxCon с докладом (https://schd.ws/hosted_files/osseu17/84/Replace%20UEFI&... в котором рассказал о развиваемом в Google открытом проекте NERF (https://github.com/osresearch/heads/tree/nerf) (Non-Extensible Reduced Firmware).В рамках NERF предпринята попытка разработки прозрачной и открытой замены прошивкам UEFI, в основе которой использовано ядро Linux и урезанное программное окружение. Конечной целью является предоставление средств для замены (UEFI) или отключения (SMM, Intel ME) всех прослоек, выполняемых вне основной операционной системы, и блокирования любой связанной с UEFI и Intel ME фоновой активности.
NERF также рассчитан на снижение векторов возможных атак, расширение возможностей по контролю за активностью прошивок, исключение излишней функциональности (например, TCP-стек и web-сервер), удаление встроенных механизмов обновления в пользу обновления из базового Linux-окружения. В состав NERF входит избавленный от блобов упрощённый вариант прошивки для Intel ME (Management Engine), урезанная прошивка для UEFI, код для отключения SMM, ядро Linux, образ initramfs c системой инициализации и инструментарием u-root (http://u-root.tk/), написанными на языке Go.
В прошивке для Intel ME оставлены только компоненты для начальной инициализации CPU, все остальные модули удалены (https://www.opennet.ru/opennews/art.shtml?num=47091) при помощи инструментария me_cleaner (https://github.com/corna/me_cleaner) (прошивка сокращена с 5 Мб до 300 Кб). Код обработчиков SMM (https://ru.wikipedia.org/wiki/System_Management_Mode) (System Management Mode) также отключен и переведён на обработку прерываний SMI через ядро Linux.
Прошивка для UEFI переведена на использование ядра Linux, наработок CoreBoot и инструментария u-root (https://github.com/u-root/u-root). U-root написан на языке Go и включает в себя легковесную систему инициализации, оболочку rush и набор типовых утилит (https://github.com/u-root/u-root/tree/master/cmds), таких как cp, mv, ls, grep, sort, dd, insmod, wget, netcat и т.п.
Примечательно, что в формируемый при помощи u-root образ корневой ФС включается лишь процесс инициализации и несколько исполняемых файлов с компилятором языка Go. Все команды собираются только при необходимости - если запущенная утилита не была собрана ранее, то её компиляция осуществляется на лету после попытки первого запуска. Результат компиляции вызванной утилиты помещается в tmpfs и доступен для повторного использования в рамках текущего сеанса.
Таким образом, в u-root все утилиты предлагаются в исходных текстах, а для адаптации инструментария требуется лишь настройка компилятора. Компиляция занимает доли секунды и не приводит к ощутимым задержкам при вызове. Подобный подход позволяет сделать образ u-root универсальным и распространять единый образ корневой ФС для всех платформ, поддерживаемых компилятором языка Go (для каждой новой архитектуры требуется лишь подготовить 4 исполняемых файла, в одном образе могут содержаться сборки компилятора для разных архитектур). Дополнительно предусмотрены варианты c компиляцией всех утилит во время загрузки или поставки готовых сборок (для минимизации размера прошивки все утилиты могут быть собраны в один исполняемый файл, по аналогии с busybox).
Необходимость замены UEFI обусловлена тем, что на современных компьютерах параллельно с основной операционной системой по сути параллельно выполняется ещё несколько неконтролируемых программных окружений (UEFI, SMM, Intel ME), которые формируются на основе проприетарных прошивок. Код UEFI продолжает работать после загрузки основной ОС и выполняется на уровне кольца защиты Ring -2 (https://en.wikipedia.org/wiki/Protection_ring). Данные закрытые окружения создают дополнительные угрозы безопасности. Например, внедрённый в прошивку UEFI вредоносный код может оставаться невидимым из основной ОС, но полностью контролировать всю систему.
В частности, ресурс WikiLeaks в этом году раскрыл (https://wikileaks.org/vault7/) сведения о разработке в ЦРУ имплантов (https://wikileaks.org/ciav7p1/cms/page_13763820.html) для контроля за системой, внедряемых в прошивки UEFI. Современные прошивки сильно усложнены и включают многие атрибуты обычных ОС, включая TCP-стек, http-сервер, DHCP, драйверы, файловые системы и web-интерфейс. С учётом значительного размера кодовой базы прошивок UEFI, которая составляет около 2 млн строк кода, и недоступностью кода прошивок для независимого аудита, также возникают опасения о наличии в прошивках большого количества неисправленных уязвимостей (https://www.opennet.ru/opennews/art.shtml?num=44740).
URL: https://news.ycombinator.com/item?id=15579592
Новость: http://www.opennet.ru/opennews/art.shtml?num=47469