Управление загрузчиками EFI в Linux: режим безопасной загрузки Secure BootИсточник: rus-linux Roderick W. Smith
Кроме реализации нового протокола загрузки, в UEFI добавлена новая функция, которая потенциально может вызвать много путаницы и проблем, но она также может улучшить безопасность системы: режим безопасной загрузки Secure Boot . Как следует из названия, режим Secure Boot является средством обеспечения безопасности. Его потенциал повышения безопасности системы будет наибольшим в системах Windows. Но, режим Secure Boot, из-за из своих особенностей, может усложнить загрузку Linux. В статье описывается, что представляет собой режим Secure Boot и как на него реагирует сообщество Linux. Имейте в виду, что ситуация меняется быстро, так что если вы читаете текст через несколько месяцев после его обновления, то положение дел уже могло измениться! Что такое режим безопасной загрузки Secure Boot?В течение десятилетий персональные компьютеры страдали от вирусов, червей и других вредоносных программ. Некоторые из самых ранних вирусов для персональных компьютеров распространялись как вирусы загрузочного сектора : Они размещались в виде кода в загрузочных секторах дискет и, когда пользователи загружали свои компьютеры с помощью зараженных дискет DOS, передавались от одного компьютера к другому. Несмотря на то, как дискеты потеряли свою важность, и широкую известность приобрели другие пути передачи вирусов, а обычным делом стало подключение к сети Интернет, вредоносный код, попадающий в компьютер во время начальной загрузки, всегда среди приоритетных интересов у авторов вредоносных программ. За счет того, что он выполняется раньше, чем ядро ОС возьмет управление над компьютером, вредоносная программа может "спрятаться" такими способами, которыми не удастся воспользоваться после того, как операционная система берет на себя управление. Предварительно загруженная вредоносная программа может стать невидимой для операционной системы, и антивирусным сканерам практически не удается обнаружить вредоносные программы, по крайней мере, без перезагрузки в спасательную систему, которая не заражена. В BIOS совсем мало возможностей защиты от инфицирования предварительно загружаемыми вредоносными программами; когда происходит загрузка BIOS, ОС неявно доверяет всему, что выполняется в качестве загрузчика. До конца 2012 года это утверждение также было справедливо для большинства промышленных реализаций EFI. И для того, чтобы в процесс загрузки добавить дополнительный слой защиты был создан режим Secure Boot. При включенном режиме Secure Boot для любой программы EFI, которая запускается прошивкой, в прошивке проверяется наличие криптографической подписи. Если криптографическая подпись отсутствует, не соответствует ключу, хранящемуся в энергонезависимой памяти компьютера, или указана в энергонезависимой памяти в черном списке, то прошивка отказывается выполнять программу. Конечно, это просто начало процесса; надежный загрузчик EFI должен продолжить процесс загрузки в безопасном режиме, что в конечном счете приведет тому, что безопасной будет сама операционная система. Автору вирусов потребовалось бы создать подписанный вирус, что более трудно в случае, если пользователи контролируют работу с системными клавишами. Таким образом, предварительно загружаемая вредоносная программа может быть заблокирована. Есть масса способов чтобы затем сделать что-нибудь не так, как надо, но режим Secure Boot обеспечивает, по меньшей мере, основу, на которой можно будет создать в целом безопасный компьютер, по крайней мере, в теории! В описании режима Secure Boot в спецификациях UEFI не предлагается никаких механизмов создания доверительной сети для ключей этого режима. Если исходить только из спецификаций UEFI, то можно решить, что режим Secure Boot будет активироваться непосредственно там, где компьютеры будут использоваться; администраторам на местах следует подписывать загрузчики, которые они используют, защищаясь тем самым от авторов вредоносных программ. Но, фирма Microsoft включила в свою сертификационную программу Windows 8 требование, которое обязывает продавцов поставлять компьютеры с включенным режимом Secure Boot. На практике это означает, что производители должны добавлять на свои компьютеры ключи от фирмы Microsoft, и если производители не будут добавлять другие ключи, то работать будут только загрузчики, подписанные Microsoft. К счастью, все не так плохо, как это может показаться. Microsoft имеет партнерские отношения с фирмой Verisign, регулирующей подписывание загрузчиков. Любой может заплатить $99 фирме Verisign для того, чтобы получить средства, позволяющие подписывать неограниченное количество двоичных файлов таким образом, что они будут работать, используя ключ Microsoft, или, точнее, ключ, который фирма Microsoft использует для подписывать сторонних двоичных файлов. Кроме того, фирма Microsoft требует, чтобы на компьютерах x86 и x86-64 предоставлялись средства, позволяющие полностью отключить режим Secure Boot, давая пользователям контроль над процессом загрузки. Пользователям ARM не так повезло, Microsoft требует, чтобы на системах ARM, на которых есть логотип Windows 8, режим Secure Boot нельзя было отключать. Затравкой первоначального публичного обсуждения этих вопросов был в сентябре 2011 года Отключение режима Secure BootЕсли вы не уверены, что режим Secure Boot улучшит безопасность вашей системы, вы можете полностью его отключить. Учитывая тот факт, что большинство вредоносных программ нацелено на Windows, этот подход является наиболее разумным на компьютерах, на которых не работают системы Windows. Для того, чтобы сделать это, вы должны хорошо ориентироваться в экранах настройки, имеющихся в вашей прошивке. К сожалению, место, где должны находиться параметры режима Secure Boot, или способ, как их можно вызывать, не стандартизованы; поэтому я не могу предоставить процедуру, которая будет работать на любом компьютере. Однако я могу описать параметры на одном компьютере, который у меня есть и в котором поддерживается режим Secure Boot: материнская плата ASUS P8H77-I. Эта плата поставляется с отключенным режимом Secure Boot, но, основываясь на моем практическом опыте, я могу представить, как эта плата будет поставляться в случае, если бы она использовалась на компьютере с предварительно установленной системой Windows 8. Исходя из этих предположений, вам для того, чтобы отключить режим Secure Boot, потребуется выполнить следующее:
Конечно, прошивка вашего компьютера, скорее всего, будет отличаться от моей. Лучше всего, если вы хотите отключить режим Secure Boot, вам следует изучить параметры прошивки (настроек setup-а) вашей собственной системы. В вашей инструкции эта информация может присутствовать, либо ее там может не быть. В случае с моей материнкой ASUS P8H77-I, в руководстве не упоминалось о параметрах режима Secure Boot; я должен был разобраться с этим методом проб и ошибок. Я слышал о ситуациях, которые как лучше, так и хуже, чем с моей материнкой ASUS. В "лучшей" ситуации был пункт меню, снабженный довольно очевидным названием Secure Boot и варианты настройки Enabled (Включить) и Disabled (Выключить). В "худшей" ситуации, о которой я слышал от других, при попытке отключить режим Secure Boot красным цветом выдавались страшные сообщения, либо прежде, чем вы смогли бы получить доступ к прошивке, требовалось загрузится в Windows, и запускать программу, работающую под Windows. Использование подписанного загрузчикаИспользование загрузчика, подписанного с ключом от Microsoft, является наиболее простым и прямым подходом к работе с режимом Secure Boot; однако, это также и самый ограничивающий подход. В зависимости от того, каким подписанным загрузчиком вы пользуетесь, вам всякий раз, когда вы пытаетесь загрузить не подписанный загрузчик, нужно вводить подтверждение, либо вы будет ограничены тем, какие операционные системы и ядра вы сможете загружать. По состоянию на начало 2013 года я знаю два подписанных загрузчика, предназначенных для использования с Linux: Использование программы Shim из системы FedoraЧтобы соответствовать целям режима Secure Boot, загрузчик Linux должен обеспечивать аутентификацию ядра Linux, а дистрибутив Linux должен обеспечить дополнительные меры безопасности в тех ядрах, которые им предлагаются. К сожалению, эти цели не в ладах с философией свободы открытого исходного кода и свободой пользователей, позволяющей управлять своими компьютерами. Поэтому решение Secure Boot для Linux должно балансировать между этими двумя целями. Это именно то, что делает программа shim, созданная в системе Fedora. Она делает это с помощью поддержки использования следующих трех различных типов ключей: Примечание: Вы можете спросить, почему эти возможности нельзя добавить в существующий загрузчик, например, в GRUB 2. Против этого есть несколько причин. Одна из них относится непосредственно к вопросам договоренностей: Как
Весь смысл режима Secure Boot состоит в том, чтобы предотвратить попытки вредоносной программы получить контроль над компьютером. Поэтому, когда загрузка происходит с включенным режимом Secure Boot, система Fedora 18 ограничивает действия, которые некоторые пользователи Linux считают само собой разумеющимися. Например, должны быть подписаны модули ядра Linux, что затрудняет использование драйверов ядра сторонних производителей, таких как те, которые необходимы проприетарным видеодрайверам фирм Nvidia и AMD/ATI. Чтобы запустить локально-скомпилированное ядро, вы должны подписать его ключом МОК и зарегистрировать этот ключ МОК в системе. Общий объем подобных ограничений полностью зависит от тех, кто разработал и подписал загрузчик, запускаемый с помощью программы shim, и ядра, запускаемого с помощью этого загрузчика. Скорее всего, что в некоторых дистрибутивах будут поставляться ядра, которые будут сравнительно не сильно обременены добавлением ограничений безопасности. В добавок к дистрибутиву Fedora (и, вероятно, в конце концов, дистрибутиву Red Hat Enterprise Linux), для дистрибутивов SuSE и Ubuntu было объявлено, что в них будет использоваться загрузчик him - на самом деле, в Ubuntu 12.10 уже используется ранняя версия, в которой не поддерживаются ключи MOK. (Анализ работы этой версии смотрите в Примечание: Описанная здесь процедура утомительна, т.к. она требует самостоятельного подписывания загрузчиков и ядер. Как только в дистрибутивах появится программа shim, трудность этого процесса резко снизится. Если вам повезет, вы сможете использовать Ubuntu 12.10 или Fedora 18 с включенным режимом Secure Boot и не замечать отличие от установки без использования режима Secure Boot. Если вы хотите сейчас использовать программу shim, то с практической точки зрения у вас есть три варианта: Вы можете запустить Ubuntu 12.10; вы можете запустить Fedora 18, или вы можете запустить подписанную версию, созданную Мэтью Гарретт (Matthew Garrett), добавить свой собственный ключ MOK и подписать любой двоичный файл, который захотите. К сожалению, прямо сейчас этот процесс все еще немного утомителен. Вкратце, он выглядит следующим образом:
После этого компьютер может загрузить свою используемую умолчанию ОС, может перезагрузиться или, возможно, даже может зависнуть. Тем не менее, когда вы перезагрузите компьютер, загрузчик, который вы установили с именем grubx64.efi, должен запуститься в режиме Secure Boot. В зависимости от своих возможностей, он может загрузить любое ядро, которое он бы загрузил в случае, если бы режим Secure Boot был бы отключен, запустить только те загрузчики, которые подписаны ключами Secure Boot данной платформы, или запустить программы EFI или ядра, подписанные с обычными ключами Secure Boot или вашим собственным ключом МОК. В будущем, использовать программу shim будет легче, поскольку в дистрибутивах будут поставляться предварительно подписанные загрузчики, что устранит необходимость выполнения большинства этих шагов. Тем не менее, если вы хотите подписать свои собственные двоичные модули, вы все равно должны установить программное обеспечение, позволяющее подписывать программы, добавить свой собственный ключ через программу MokManager, и подписать двоичные файлы, которые вы создали самостоятельно или получили из другого источника. Проверка ваших загрузчиковСамый простой способ убедиться, что ваши загрузчики подписаны должным образом, это попытаться с их помощью загрузиться. Тем не менее, вы, возможно, захотите проверить их перед перезагрузкой хотя бы просто для того, чтобы убедиться, что они будут загружаться. Чтобы сделать это, вам нужна копия открытого ключа, который вы создали ранее с помощью программы openssl. Если двоичный модуль был подписан разработчиком вашего дистрибутива, вам нужна копия открытого ключа для этого дистрибутива. Если у вас есть ключ в виде сертификата X509 (обычно с расширением .crt), то вы можете проверить двоичный модуль с помощью команды sbverify: $ sbverify --cert keys/refind.crt refind_x64.efi Signature verification OK В этом примере показана успешная проверка двоичного файла refind_x64.efi с помощью открытого ключа keys/refind.crt. Неудачи, как правило, сопровождаются сообщениями, в которых указывается, что что-то пошло не так, при этом часто используются технические термины. Как правило, двоичные модули либо не подписаны, либо они подписаны ключом, отличным от того, открытую копию которого вы пытались использовать. Если вы пытаетесь проверить двоичный модуль, который был подписан поставщиками дистрибутива, вам нужна их копия открытого ключа. Эти ключи часто представляются в составе исходного кода их копий программы shim, так что поищите ключи там. Я также предоставляю несколько ключей в подкаталоге refind/keys вместе с моем менеджером загрузки $ openssl x509 -in fedora-ca.cer -inform der -out fedora-ca.crt В этом примере файл fedora-ca.cer преобразуется в файл fedora-ca.crt, который вы можете использовать для проверки подлинности двоичных файлов, подписанных поставщиками дистрибутива Fedora. Использование загрузчика PreLoader от Linux FoundationПредложенное фондом Linux Foundation решение проблемы режима Secure Boot, известное как
С практической точки зрения, у PreLoader есть преимущество в случае, если вы хотите запустить не подписанный загрузчик (например, со старого дистрибутива Linux), либо если вы хотите распространять загрузочный образ системы, но у вас нет средств для оплаты вашего собственного ключа для подписи. Если вы не сильны с технической точки зрения, то в таких случаях загрузчик PreLoader особенно полезен, поскольку вам не нужно иметь дело с подписыванием ключей так, как это описано для случая применения программы shim. Если в вашем дистрибутиве подписаны загрузчики и/или ядра, то вам лучше отказаться от использования shim. Если загрузчики вашей системы (возможно, в том числе ее ядра) меняются редко и если вы готовы подписывать ключи, то любая из программ будет работать одинаково хорошо. Чтобы использовать загрузчик PreLoader, выполните следующие действия:
В этот момент ваш компьютер должен перезагрузиться в ваш обычный загрузчик и, если вы зарегистрировали ядра и последующие загрузчики с помощью HashTool, то у вас у должна быть возможность запускать эти двоичные файлы так, как если бы они были подписаны ключом Secure Boot вашей платформы. Такая регистрация является важным пунктом. Если вы для запуска ядер Linux пользуетесь загрузчиком rEFInd или gummiboot, то вам необходимо регистрировать каждое новое ядро, когда вы (или системы пакетов вашего дистрибутива) его устанавливаете. Этот факт также означает, что у вас должна быть возможность запуска HashTool. ELILO это сделать не может, но вы можете для того, чтобы иметь возможность запускать программу HashTool, настроить rEFIt, rEFInd, gummiboot, GRUB Legacy и GRUB 2. На самом деле, загрузчик rEFInd версии 0.6.7 и последующих версий распознает двоичным модуль HashTool.efi и предоставляет на главном экране для него тег. На самом деле загрузчик PreLoader использует за кулисами тот же список ключей MOK, что и программа shim; просто PreLoader использует его для хранения хэш-значений программ, а не их ключей. Вполне возможно, что в будущем программа shim и PreLoader будут приобретать черты друг друга. Однако на данный момент, если вы хотите использовать ключи, вы должны пользоваться программой shim, а если вы хотите использовать хэши не подписанных двоичных файлов, вы должны пользоваться загрузчиком PreLoader. Теоретически вам должно быть достаточно иметь возможность использовать один из этих инструментов с тем, чтобы запустить другой для последующего запуска вашего загрузчик, и это должно позволить вам использовать для проверки подлинности либо ключи, либо хэш-значения. Однако, я эту возможность не пробовал. |