СИСТЕМА И СПОСОБ ДЛЯ ЗАЩИЩЕННОЙ НАЧАЛЬНОЙ ЗАГРУЗКИ ОПЕРАЦИОННОЙ СИСТЕМЫ С ИСПОЛЬЗОВАНИЕМ ПРОВЕРКИ СОСТОЯНИЯ
SYSTEM AND METHOD FOR SECURE OPERATING SYSTEM BOOTING USING STATUS CHECKUP

ОБЛАСТЬ ТЕХНИКИ
Данное изобретение относится, в общем случае, к области компьютерной техники. Более конкретно, изобретение предоставляет механизм для обеспечения того, что система продолжает работу из известного безопасного состояния, и этот механизм может использоваться для загрузки системы способом, который до известной степени обеспечивает достаточную гарантию корректного поведения системы. Эта гарантия корректного поведения, в свою очередь, может предотвратить один или более ключей от распределения при несоответствующих обстоятельствах.
УРОВЕНЬ ТЕХНИКИ
Компьютерная безопасность часто зависит от способности предсказать поведение программных компонентов. Вообще, безопасность системы может проистекать из предпосылки того, что известная программа, поведение которой понято, которая продолжает работу из заведомо правильного состояния, будет действовать предсказуемым способом. Наоборот, нарушение защиты, которое может привести компьютерную систему к тому, чтобы вести себя способами, которые находятся вне компетенции его проектировщика, может, в общем случае, реализоваться заменой или изменением известной программы, или выполнением ее в состоянии, в котором ее поведение не согласовано. Таким образом, один аспект обеспечения защиты для компьютерной среды включает в себя проверку того, что известная программа используется и что это происходит из заведомо исправного состояния.
Одной из областей, где предсказуемость поведения особенно важна, является загрузка операционной системы и его компонентов. Хотя сама операционная система может быть разработана для обеспечения некоторого уровня доверия относительно его поведения, время перед тем, когда такая операционная система была загружена, является временем, когда система особенно уязвима для нападений, начиная с инфраструктуры, защищающей операционную систему от нападений, которая, возможно, не была еще установлена (или может находится в процессе установки). Таким образом, гарантируется, что загрузка операционной системы предсказуемым способом является важным для защиты операционной системы от некоторых классов нападений.
Одним из типов нарушения защиты, которая может происходить от небезопасной загрузки операционной системы, является защита ключа (или ключей), которые допускают некоторые ограниченные функциональные возможности. В качестве примера, но не ограничения, операционные системы MICROSOFT WINDOWS используют системный ключ, или "SYSKEY", который используется для защиты различных процессов с помощью правильного (корректного) выполнения тех процессов, которые зависят от доступности SYSKEY. Например, ключ, который требуется для расшифровки секретной информации, которая сохранена операционной системой в зашифрованной форме, может быть получен от SYSKEY.
Традиционно, ключи, требуемые для выполнения ограниченных операций, защищены процедурой входа в систему. Как правило, пользователь должен правильно подтвердить свою подлинность (например, предоставляя правильные мандаты для входа в систему, типа комбинации имени пользователя/пароля) до начала использования системы. Использование ключей допускается, только если пользователь правильно подтверждает подлинность, и система разрешит пользователю только ограниченное число попыток (например, три) перед решением, что пользователь не в состоянии войти в систему должным образом (этот тип ограничения на число попыток подключения препятствует неавторизованным пользователям получить возможность использования защищенных функциональных возможностей, используя нападение «в лоб», предлагая пароль в случае, скажем, украденного портативного компьютера). Однако, использование процедуры входа в систему для защиты доступа к ключам предполагает, что загрузчик операционной системы правильно загрузил операционную систему правильной программой входа в систему, и что использование ключей в противном случае не допускается мошенническим кодом, который может быть выполнен. Если загрузчик мошенника использовался вместо этого, и загрузчик мошенника заставляет мошенническую программу входа в систему быть загруженной операционной системой, то использование ключей может быть разрешено, или ключи могут быть даже разглашены без ввода корректных мандатов. Так как загрузка операционной системы обеспечивает возможность нарушения защиты, защита ключей в такой ситуации требует, чтобы загрузка операционной системы имела место при обстоятельствах, где это может быть проверено на корректность.
Одна из проблем, связанных с проверкой защиты процесса загрузки операционной системы, состоит в том, что законные загрузки операционной системы могут вовлечь много различных программ (например, есть многочисленные различные «опции ПЗУ», которые являются программами, загружаемыми до операционной системы, которые выполняются во время процедуры начальной системной загрузки), и есть многочисленные различные процедуры, которые могут быть выполнены как часть загрузки операционной системы. Таким образом, есть практически бесчисленное число различных законных состояний машины во время загрузки, и идентификация всех таких состояний и проверка того, что машина находится в заведомо правильном состоянии, может оказаться неосуществимой задачей. Однако не все части процедуры загрузки имеют включение защиты. Может быть, более эффективно позволить загрузке происходить без какой-либо попытки оценить ее защиту, но затем установить среду в заведомо правильное состояние перед стартом любой процедуры, которая могла бы затронуть связанную с защитой функцию, такую как распределение ключей. Более широко, произвольной системе можно позволить работать в течение некоторого времени без оценки какого-либо типа защиты до тех пор, пока система не будет установлена в заведомо исправное состояние перед разрешением любых действий, при которых имеет место включение защиты.
Ввиду вышесказанного, есть потребность в механизме, который преодолевает недостатки предшествующего уровня техники.
СУЩНОСТЬ ИЗОБРЕТЕНИЯ
Данное изобретение обеспечивает загрузку операционной системы при обстоятельствах, когда загрузка может быть проверена на правильность выполнения. Когда машина стартовала, выполняется очень ранняя процедура запуска (например, BIOS, опции ПЗУ, главный блок начальной загрузки, загрузочный сектор, и т.д.). После того как эти ранние процедуры выполнены, загрузчик операционной системы стартует и может выполнить различные предварительные задачи. После того как загрузчик операционной системы стартовал и выполнил такие предварительные задачи, проверка правильности загрузчика операционной системы выполнена.
Проверка правильности содержит проведение проверки достоверности непосредственно на загрузчике, или части загрузчика (например, контрольных сумм, или другие проверки, которые нацелены на оценку идентичности и корректности загрузчика), так же, как оценки текущего состояния машины (или принуждение машины к соответствию заведомо правильному состоянию). Если про загрузчик (или его соответствующую часть) известно, что он является корректным, и состояние машины является тем, в котором загрузчик был предварительно проверен на корректность поведения, то поведение загрузчика может быть предсказано. Таким образом, можно быть уверенным, что корректный загрузчик, работающий под правильным машинным состоянием, не будет загружать компонент, который может распределять данные, которые обеспечивают защищенные функции (например, криптографические ключи, такие как системный ключ) при несоответствующих обстоятельствах.
Предпочтительно, проверка правильности выполняется блоком проверки правильности, который выполняется в среде высокой гарантии. Среда высокой гарантии - это среда, в которой возможно обеспечить относительно высокую степень гарантии, что процессы, выполняемые в ней, будут работать ожидаемым от них способом. Таким образом, гарантия того, что блок проверки правильности будет работать корректно, получена из факта, что блок проверки правильности проверяется процессом, который выполняется в среде высокой гарантии (например, проверяя сигнатуру его двоичного кода), и основывается на доверии на то, что процессы в среде высокой гарантии будут выполняться корректно (или, по меньшей мере, есть уровень гарантии того, что среда высокой гарантии не будет влиять или разрешать вмешательство в корректную работу процесса, который оперирует в пределах такой среды; нужно все еще иметь отдельное основание для доверия тому, что программа, которая реализует процесс в среде высокой гарантии, будет корректно выполнена способом, выполнение которого ожидается). Среда высокой гарантии может обеспечить изолированную (отделенную) память, которая является таким средством хранения, в котором данные могут быть изолированы для конкретного объекта (например, конкретной программы), и что среда высокой гарантии управляется таким способом, что изолированные данные не будут разблокированы ни для какого другого объекта чем тот, для которого данные изолированы (что проверяется средой высокой гарантии). Блок проверки правильности может использовать эту изолированную память для изолирования ключа (например, SYSKEY) для себя, и может отказаться снять изоляцию (разблокировать) ключа за исключением корректного объекта, и когда обстоятельства (например, состояние машины) удовлетворяют некоторому стандарту.
Другие признаки изобретения описаны ниже.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
Предшествующее краткое описание, так же как и нижеследующее подробное описание предпочтительных воплощений, лучше понято при чтении вместе с прилагаемыми чертежами. Для иллюстрации изобретения на чертежах приводятся примеры структуры изобретения; однако изобретение не ограничено конкретными способами и раскрытыми средствами. На чертежах:
фиг.1 - блок-схема примерной компьютерной среды, в которой аспекты изобретения могут быть осуществлены;
фиг.2 - блок-схема системы, которая использует процесс, корректная операция которого зависит от системного ключа;
фиг.3 - блок-схема шифрованной файловой системы, которая защищает зашифрованные данные от неавторизованной расшифровки, делая расшифровку зависимой от системного ключа;
фиг.4 - блок-схема примерного процесса загрузки с проверкой правильности, в соответствии с аспектами изобретения;
фиг.5 - блок-схема примера блока проверки правильности в соответствии с аспектами изобретения; и
фиг.6 - блок-схема примерного процесса защиты системного ключа в соответствии с аспектами изобретения.
ПОДРОБНОЕ ОПИСАНИЕ ИЛЛЮСТРАТИВНЫХ ВОПЛОЩЕНИЙ
Краткий обзор
Несколько процессов, которые могут иметь место под управлением операционной системы, зависят от одного или более ключей для их корректной работы. Доступ к ключам может управляться программой аутентификации, например программой входа в систему, которая отказывается разрешить использование ключа(ей), если пользователь не предоставит корректные мандаты, например комбинации имени пользователя/пароля. Таким образом, при отказе программы входа в систему разрешить использование ключей в отсутствии корректных мандатов, некоторые процессы (например, расшифровка зашифрованных файлов) могут быть нарушены (или полностью предотвращены) для пользователей, которые не знают пароль. Поскольку программа входа в систему может быть эффективна при разрешенном доступе к ключам, загрузчик операционной системы может быть обманным путем принужден к загрузке другого компонента, который распределит ключи вне правил аутентификации, наложенных программой входа в систему. Таким образом, когда ключи распределяются этим способом, защита ключей требует защиты процесса загрузки операционной системы. Данное изобретение обеспечивает механизмы, которые могут использоваться для защиты процесса загрузки.
Примерная компьютерная структура
Фиг.1 показывает примерную компьютерную среду, в которой аспекты изобретения могут быть осуществлены. Компьютерная системная среда 100 является только одним примером подходящей компьютерной среды и не предназначена для того, чтобы налагать какое-либо ограничение относительно объема использования или функциональных возможностей изобретения. Никто не должен интерпретировать компьютерную среду 100 как имеющую какую-либо зависимость или требования, касающегося любого или комбинации компонентов, проиллюстрированных в примерной среде 100.
Изобретение оперирует с другими многочисленными универсальными или специализированными компьютерными системными средами или конфигурациями. Примеры известных компьютерных систем, сред и/или конфигураций, которые могут быть подходящими для использования с изобретением, включают, но не ограничены этим, персональные компьютеры, серверные компьютеры, карманные или портативные устройства, многопроцессорные системы, системы на основе микропроцессора, компьютерные приставки к телевизору, программируемую бытовую электронику, сетевые PC, миникомпьютеры, универсальные компьютеры, встроенные системы, распределенные компьютерные среды, которые включают какую-либо из вышеупомянутых систем или устройств, и т.п.
Изобретение может быть описано в общем контексте исполнимых компьютером команд, типа программных модулей, выполняемых компьютером. Вообще, программные модули включают в себя подпрограммы, программы, объекты, компоненты, структуры данных и т.д., которые выполняют конкретные задачи или реализуют конкретные абстрактные типы данных. Изобретение можно также реализовать в распределенных компьютерных средах, где задачи выполняются удаленными устройствами обработки, которые связаны через систему коммуникаций или другую среду передачи данных. В распределенной компьютерной среде программные модули и другие данные могут быть расположены как в локальных, так и в удаленных компьютерных носителях данных, включая запоминающие устройства памяти.
Со ссылкой на фиг.1, примерная система для осуществления изобретения включает в себя универсальное компьютерное устройство в форме компьютера 110. Компоненты компьютера 110 могут включать в себя, но не ограничены этим, процессорный модуль 120, системную память 130 и системную шину 121, которая подсоединяет различные системные компоненты, включая системную память, к процессорному модулю 120. Процессорный модуль 120 может представлять множественные логические процессоры, такие как те, что поддерживаются на многопоточном процессоре. Системная шина 121 может быть любой из нескольких типов шинных структур, включая шину памяти или контроллер памяти, периферийную шину, и локальную шину, использующие любую из множества шинных архитектур. В качестве примера, но не ограничения, такая архитектура включает в себя шину архитектуры промышленного стандарта (ISA), шину микроканальной архитектуры (MCA), усовершенствованную ISA шину (EISA), локальную шину ассоциации видеостандартов электроники (VESA) и шину стандарта PCI (PCI) (также известную как шина Mezzanine). Системная шина 121 может также быть осуществлена как соединение точка-точка, коммутационное подключение или подобное им среди коммуникационных устройств.
Компьютер 110 обычно включает в себя множество читаемых компьютером носителей. Читаемые компьютером носители могут быть любыми доступными носителями, к которым можно обратиться компьютером 110, и включают в себя энергозависимые и энергонезависимые носители, сменные и несменные носители. В качестве примера, но не ограничения, читаемые компьютером носители могут включать в себя компьютерные носители данных и коммуникационные носители. Компьютерные носители данных включают в себя и энергозависимые, и энергонезависимые, сменные и несменные носители, осуществленные любым способом или технологией для хранения информации, типа читаемых компьютером команд, структур данных, программных модулей или других данных. Компьютерные носители данных включают в себя, но не ограничены этим, оперативную память (RAM), постоянное запоминающее устройство (ROM), электрически перепрограммируемое постоянное запоминающее устройство (EEPROM), флэш-память или память другой технологии памяти, CDROM, цифровые универсальные диски (DVD) или другую оптическую память на диске, магнитные кассеты, магнитную ленту, магнитную память на диске или другие магнитные запоминающие устройства, или любую другую среду, которая может использоваться для хранения желательной информации и к которой можно обратиться компьютером 110. Коммуникационные носители обычно воплощают компьютерные читаемые команды, структуры данных, программные модули или другие данные в модулируемом сигнале данных типа несущей или другом транспортном механизме и включают в себя любые информационные носители. Термин «модулированный сигнал данных» означает сигнал, который имеет одну или более из его набора характеристик установленных или измененных таким способом, чтобы кодировать информацию в сигнале. В качестве примера, но не ограничения, коммуникационные носители включают в себя проводные носители типа проводного сетевого или прямого проводного подключения, и беспроводные носители типа акустического, радиочастотного, инфракрасного и других беспроводных носителей. Комбинации любого вышеупомянутого должны также быть включены в объем читаемых компьютерных носителей.
Системная память 130 включает в себя компьютерные носители данных в форме энергозависимой и/или энергонезависимой памяти типа постоянного запоминающего устройства 131 (ROM) и оперативной памяти 132 (RAM). Базовая система 133 ввода-вывода (BIOS), содержащая основные подпрограммы, которые помогают передавать информацию между элементами в компьютере 110, например во время запуска, обычно сохраняется в ROM 131. Оперативная память 132 обычно содержит данные и/или программные модули, которые являются немедленно доступными и/или могут быть позднее обработаны процессорным модулем 120. В качестве примера, но не ограничения, фиг.1 иллюстрирует операционную систему 134, прикладные программы 135, другие программные модули 136 и программные данные 137.
Компьютер 110 может также включать в себя другие сменные/несменные, энергозависимые/энергонезависимые компьютерные носители данных. Только в качестве примера, фиг.1 иллюстрирует накопитель 141 на жестком диске, который читает или записывает на несменные энергонезависимые магнитные носители дисковод 151 магнитных дисков, который читает или записывает на сменный энергонезависимый магнитный диск 152, и дисковод 155 оптических дисков, который читает или записывает на сменный энергонезависимый оптический диск 156, типа CDROM или другие оптические носители. Другие сменные/несменные энергозависимые/энергонезависимые компьютерные носители данных, которые могут использоваться в примерной среде, включают в себя, но не ограничены этим, кассеты магнитной ленты, платы флэш-памяти, цифровые универсальные диски, цифровую видеоленту, твердотельную оперативную память, твердотельную постоянную память и т.п. Жесткий диск 141 обычно подключается к системной шине 121 через интерфейс несменной памяти типа интерфейса 140, и магнитный дисковод 151 и оптический дисковод 155 обычно подключаются к системной шине 121 интерфейсом сменной памяти, типа интерфейса 150.
Накопители на дисках и связанные с ними компьютерные носители данных, описанные выше и проиллюстрированные на фиг.1, обеспечивают хранение читаемых компьютером команд, структур данных, программных модулей и других данных для компьютера 110. На фиг.1, например, накопитель 141 на жестком диске проиллюстрирован как хранилище операционной системы 144, прикладных программ 145, других программных модулей 146 и данных программ 147. Следует заметить, что эти компоненты могут или быть теми же самыми, или отличными от операционной системы 134, прикладных программ 135, других программных модулей 136 и программных данных 137. Операционной системе 144, прикладным программам 145, другим программным модулям 146 и программным данным 147 здесь даны различные номера для иллюстрации того, что они, как минимум, являются различными копиями. Пользователь может ввести команды и информацию в компьютер 110 через устройства ввода данных типа клавиатуры 162 и устройства 161 управления позицией, обычно называемые мышью, координатным шаром или сенсорной клавиатурой. Другие устройства ввода данных (не показанные здесь) могут включать в себя микрофон, джойстик, игровую клавиатуру, спутниковую антенну, сканер или подобные устройства. Эти и другие устройства ввода данных часто подключаются к процессорному модулю 120 через пользовательский входной интерфейс 160, который соединен с системной шиной, но может быть связан другим интерфейсом и шинными структурами, типа параллельного порта, игрового порта или универсальной последовательной шины (USB). Монитор 191 или другой тип устройства отображения также связан с системной шиной 121 через интерфейс, типа видеоинтерфейса 190. В дополнение к монитору, компьютеры могут также включать в себя другие периферийные устройства вывода типа динамиков 197 и принтера 196, которые могут быть связаны через интерфейс 195 внешних периферийных устройств вывода.
Компьютер 110 может работать в сетевой среде, используя логические подключения к одному или более удаленным компьютерам, типа удаленного компьютера 180. Удаленный компьютер 180 может быть персональным компьютером, сервером, маршрутизатором, сетевым PC, одноранговым устройством или другим обычным сетевым узлом и обычно включает в себя многие или все элементы, описанные выше относительно компьютера 110, хотя только запоминающее устройство 181 памяти было проиллюстрировано на фиг.1. Логические подключения, изображенные на фиг.1, включают в себя локальную сеть 171 (LAN) и глобальную сеть 173 (WAN), но могут также включать в себя другие сети. Такие сетевые среды являются обычными в офисах, компьютерных сетях масштаба предприятия, интранет и сети Интернет.
При использовании в среде работы с сетями LAN компьютер 110 связан с LAN 171 через сетевой интерфейс или адаптер 170. При использовании в среде работы с сетями WAN компьютер 110 обычно включает в себя модем 172 или другие средства для установления связи через глобальную сеть 173, типа сети Интернет. Модем 172, который может быть внутренним или внешним, может быть связан с системной шиной 121 через пользовательский входной интерфейс 160 или другой соответствующий механизм. В сетевой среде программные модули, изображенные относительно компьютера 110 или частей его, могут быть сохранены в удаленном запоминающем устройстве хранения. В качестве примера, но не ограничения, фиг.1 иллюстрирует удаленные прикладные программы 185 как постоянно находящиеся на устройстве хранения 181. Необходимо оценить, что показанные сетевые подключения являются примерными, и другие средства установления связи между компьютерами могут использоваться.
Действие, защищенное ключами
Компьютерная среда может использовать ключ, от которого для некоторых процессов, которые имеют место в среде, зависит их корректное функционирование. Системный ключ, или “SYSKEY”, используемый операционными системами MICROSOFT WINDOWS, является одним примером такого ключа, но это не является ограничивающим примером. В предпочтительном варианте осуществления ключ, от которого зависит процесс, является уникальным, криптографическим случайным зависимым от платформы ключом, то есть, взяв две машины, вероятно то, что эти две машины имеют различные ключи. Таким образом, процесс, который зависит от таких ключей, вряд ли будет переносимым от одной платформы на другую - по меньшей мере до той степени, пока используются эффективные механизмы для гарантии того, что ключ платформы недоступен вне этой платформы.
Фиг.2 показывает примерную систему, в которой выполняется процесс, который зависит от ключа. Процесс 202 зависит от ключа 204 для того, чтобы корректно функционировать. Необходимо отметить, что процесс 202 не ограничен традиционным понятием процесса, то есть, модуль выполнения, который может управляться операционной системой и которому назначено адресное пространство, скорее относится, более широко, к любой операции или ряду операций, которые могут быть выполнены на компьютере. Необходимо также отметить, что, в то время как этот пример показывает процесс, который зависит от криптографического ключа, термин «процесс», который используется здесь, не ограничен процессами, которые выполняют криптографические операции.
Как показано на фиг.2, если ключ 204 доступен в качестве входа в процесс 202, то процесс 202 работает корректно. С другой стороны, если ключ 204 недоступен в качестве входа в процесс 202, то процесс 202 не работает корректно. Механизм 206 защиты ключа управляет доступом к ключу 204, то есть механизм 206 или обеспечивает, или не обеспечивает процессу 202 ключ 204 в зависимости от того, были ли соответствующие условия защиты выполнены. Например, пользователю, вероятно, придется войти и предоставить корректный пароль прежде, чем механизм 206 допустит использование ключа 204.
Необходимо отметить, что отказ от ключа 204 для того, чтобы предотвратить процесс 202 от корректной работы, является иногда желательным результатом. Например, кодирование/расшифровка файлов является одним примером процесса 202, который защищен ключом 204. Корректная расшифровка файла может зависеть от доступа к ключу 204. Если пользователь не может корректно войти и себя аутентифицировать, то может быть желательно не переходить к расшифровке файла, так как неспособность пользователя войти в систему может указывать на то, что компьютер используется кем-то другим, а не его предназначенным пользователем (например, в случае украденного портативного компьютера). Таким образом, механизм 206 защиты ключа может давать доступ к ключу 204 в зависимости от выполнения соответствующих условий защиты и может использовать отказ от ключа 204, чтобы прервать процессы, которые должны быть прерваны, когда эти условия защиты не выполнены. Способность механизма 206 прерывать процессы, таким образом, зависит от ключа 204, требуемого для этих процессов для их корректного функционирования, так как это является той зависимостью, которая разрешает действие по отказу от ключа 204 для прерывания процесса.
Фиг.3 показывает конкретный (но неограничивающий) примерный процесс, который зависит от ключа 204. В примере на фиг.3 примерный процесс является шифрованной Файловой системой 302 (EFS), которая хранит файлы в зашифрованной форме, а также расшифровывает зашифрованные файлы. Необходимо отметить, что одна из целей такого шифрования файла состоит в том, чтобы защитить данные на портативном компьютере от восстановления их вором в случае, когда портативный компьютер украден. Когда файл 304 сгенерирован для хранения, файл передается EFS 302. EFS 302 после этого зашифровывает файл 304 и превращает файл 304 в зашифрованный файл 306, который сохраняется на жестком диске 141. Когда делается запрос на получение зашифрованного файла 306, EFS 302 извлекает зашифрованный файл 306 и расшифровывает его для генерации расшифрованного файла 308 (практически, сущность расшифрованного файла 308 является той же самой, что и у оригинального файла 304, хотя для ясности на фиг.3 показаны эти два экземпляра файла отдельно - файл 304 является оригинальным файлом и расшифрованный файл 308 является этим же самым файлом после того, как он был зашифрован, сохранен, извлечен и расшифрован EFS 302).
Отметим, что одним из входных данных в EFS 302 является ключ 310 содержания. Ключ 310 содержания является предпочтительно симметричным ключом, который функционирует как входные данные для криптографического метода. Ключ 310 содержания используется для шифрования файла 304 для того, чтобы создать зашифрованный файл 306, и также используется для расшифровки зашифрованного файла 306 для того, чтобы создать расшифрованный файл 308. Можно оценить, что сохранение ключа 310 в некоторое легкодоступное место может быстро привести к неэффективности EFS 302 в способности защитить данные - если ключ содержимого легко доступен на жестком диске или если он легко получаем из некоторого известного элемента портативного компьютера (например, серийного номера процессора), то нет никакого различия, были ли файлы сохранены в зашифрованной форме, так как вор может легко найти ключ и расшифровать их. Таким образом, желательно защитить ключ, получая его некоторым способом, который может быть выполнен только при взаимодействии с истинным владельцем. Один из способов защищать ключ состоит в том, чтобы использовать модуль 312 генерации ключей, который получает ключ 204 как входные данные и выводит ключ 310 содержания как функцию ключа 204. Таким образом, в той степени, когда ключ 204 будет предоставлен только при соответствующих безопасных условиях, также верно то, что ключ 310 содержания будет получен только при соответствующих условиях. Другими словами, делая получение ключа 310 содержания зависимым от доступности ключа 204, любая защита, предоставленная ключу 204, может быть распространена на ключ 310 содержания. Например, если предоставление ключа 204 требует, чтобы пользователь при входе в систему предоставлял правильный пароль, тогда можно быть уверенным, что ключ 310 содержания не будет доступен, если только пользователь не войдет в систему корректно.
Таким образом, защита ключа 204 от получения при неверных условиях является важной, так как другие процессы могут зависеть от ключа 204, получаемого только тогда, когда присутствует правильный контекст защиты (например, законный, вошедший в систему пользователь, который предлагает корректный пароль). Как описано ниже, один из способов вынудить машину на распространение ключа 204 способом, который может привести к неправильному употреблению, состоит в том, чтобы загрузить машину в незащищенной среде, в которой мошеннические компоненты операционной системы могут заменить корректные компоненты (где корректные компоненты, как предполагается, способны защитить ключ 204). Таким образом, механизмы, описанные ниже, гарантируют, что машина загружается в известной (безопасной) среде прежде, чем ключ 204 может быть выдан.
Процесс загрузки с проверкой состояния
Фиг.4 показывает типичную последовательность событий, которые используются в процедуре начальной загрузки.
Первоначально машину включают. Типичная машина сконфигурирована так, чтобы начать выполнять команды с некоторого фиксированного адреса в момент включения. Команды, обычно содержащиеся по этому адресу, известны как «BIOS» 402, или «базовая система ввода-вывода». В результате выполнения BIOS 402, BIOS 402 выполняет запуски маленьких программ, называемых «опции 404 ROM». Опции ROM (ПЗУ) являются программами, которые исполняют самые основные функции ранней начальной загрузки, типа установки аппаратного пароля для машины или выбора, какая из нескольких операционных систем должна быть загружена. После того как опции 404 ROM выполнены, машине будет дана команда загрузить главный блок 406 начальной загрузки (MBR).
MBR 406 является исполняемой программой. Как правило, MBR 406 постоянно находится на первом секторе жесткого диска компьютера и начинает работу с поиска в таблице разделов того, какой раздел использовать для дальнейшей загрузки (например, диск может быть разделен для использования с различными операционными системами, и каждая операционная система может требовать различной процедуры начальной загрузки). После того как корректный раздел найден, MBR 406 передает управление загрузочному сектору 408, связанному с этим разделом. Загрузочный сектор после этого начинает процесс загрузки загрузчика 410 операционной системы, который в конечном счете загрузит операционную систему. Необходимо отметить, что MBR 406 показан на фиг.4 просто для того, чтобы показать, как такой компонент может вписаться в примерный процесс загрузки, и изобретение не ограничено процедурой загрузки, которая использует MBR 406.
В то время, когда выполняется загрузчик 410 операционной системы, загрузчик и состояние машины проверяются (450) («машина» в этом контексте может относиться или к физической машине или к виртуальной машине). Проверка правильности выполняется доверенным программным компонентом, который работает в среде высокой гарантии (вариант осуществления которой более подробно описано ниже), и поэтому есть некоторая степень гарантии/доверия тому, что проверка правильности загрузчика 410 делается корректно. В сущности, подтверждением правильности соответствующих аспектов состояния машины, в то время как загрузчик операционной системы 410 управляет машиной, и подтверждением правильности загрузчика 410 можно обеспечить некоторый уровень гарантии того, что незаконная версия или мошенническая версии компонентов операционной системы (например, уровня аппаратной абстракции, ядра, драйверов и т.д. (416)) не будут загружены до того, как программа 418 входа в систему будет выполнена. Препятствование мошенническим компонентам, загружаемым до того как программа 418 входа в систему выполнена, важно потому, что одна из первых вещей, которые операционная система сделает после того, как она будет загружена, является выполнение программы 418 входа в систему, которая разрешает доступ к ключу 204, и если мошеннические компоненты могли быть загружены, то эти компоненты могут заставить программу 418 входа в систему вести себя таким способом, который может привести к выдаче ключа 204 при несоответствующих условиях, таким образом компрометируя защиту всех компонентов, которые зависят от защиты ключа 204, как описывалось выше. Таким образом, защита ключа 204 может быть достигнута, приводя в действие жесткий контроль над состоянием машины со времени, когда загрузчик операционной системы 410 выполняется, и до тех пор, пока программа входа в систему не будет завершена.
Проверка 450 правильности имеет место в течение времени, когда выполняется загрузчик 410 операционной системы. Проверка правильности включает в себя проверку достоверности (правильности) загрузчика и состояния машины и может также включать в себя установку состояния машины в заведомо исправное состояние. Основная идея, помимо проверки достоверности и установки состояния машины, состоит в переводе машины в состояние, где, если загрузчик выполняется, пока машина находится в этом состоянии, загрузчик не будет загружать никаких мошеннических компонентов или вести себя иначе способами, которые могут привести к нарушениям защиты. Проверка 450 правильности гарантирует, что код загрузчика является, фактически, кодом, который был предварительно проверен на корректное поведение, и также гарантирует, что машина находится в состоянии, при котором этот известный код будет вести себя корректно(или проверяя, что машина уже находится в этом состоянии, или переводя машину в это состояние). Необходимо оценить, что эта методика способна усилить существующее (безопасное) состояние машины, чтобы гарантировать, что будущие состояния машины также будут безопасны, и это усиление сделано возможным благодаря тому факту, что поведение загрузчика 410 операционной системы не только известно и понято, но также и сильно ограничено. Основываясь на этом наблюдении, следует отметить, что проверка 450 правильности не должна иметь место слишком рано (например, в то время, когда выполняются опции 404 ROM, или MBR 406), поскольку из-за широкого разнообразия кода из многочисленных различных источников и огромного разнообразия состояний, в которые машина может быть переведена в результате выполнения такого кода, становится трудным, если не невозможным, определить поведение машины при выполнении всех этих различных модулей кода. Таким образом, предпочтительно не беспокоиться о том, в каких состояниях машина находится до выполнения загрузчика 410, до тех пор, пока машина не будет переведена в законное состояние в то время, когда загрузчик 410 выполняется.
В предпочтительном варианте осуществления, выполнение загрузчика 410 разделено на две стадии - стадия 1 (412) и стадия 2 (414). Предпочтительно, перед входом на стадию 2 проверяется (450) код, который осуществляет стадию 2, и доверительный код, который производит проверку 450 правильности, после этого переходит на стадию 2 в четко определенную точку входа («доверительным кодом», который выполняет проверку правильности, является вышеупомянутая программа, которая выполняется в среде высокой гарантии. Специалистам в данной области техники понятно, что «доверие» не подразумевает абсолютную непогрешимость, но просто означает, что есть некоторое основание для предположения, что код сделает эту работу корректно. Так как поведение программы может быть затронуто средой, в которой она выполняется, выполнение доверенного кода в среде высокой гарантии означает, что доверенный код будет работать корректно: (1) доверенному коду можно доверять для выполнения его функции корректно в среде, которая соответствует некоторым ожиданиям, и (2) среде высокой гарантии можно доверять для корректного обеспечения среды, которая соответствует таким ожиданиям). Стадия 2 может затем проверить правильность (согласно некоторому определенному стандарту) любой информации, которую она получила от стадии 1. Разделительная линия между стадией 1 и стадией 2 отражает тот факт, что могут иметь место некоторые аспекты процедуры начальной загрузки, которые могут быть выполнены без какой-либо проверки защиты, и это не будет иметь каких-либо последствий для некоторой связанной с защитой задачи (типа выдачи ключа 204), пока соответствующие программы и состояния не будут проверенны в некоторый момент прежде, чем эти события могут быть приведены в движение, что может заставить такую связанную с защитой задачу быть выполненной некорректно. Кроме того, могут быть проблемы с попыткой проверить правильность состояния слишком рано в процессе загрузки - фактический путь выполнения, который законная процедура начальной загрузки может принять, является весьма переменным, так что становится трудно определить различие между допустимыми или недопустимыми машинными состояниями при таких переменных обстоятельствах. Может иметь смысл просто позволить загрузке перейти через любое из этих переменных состояний, не пробуя определить, любое ли состояние, через которое машина проходит, допустимо. Стадия 1, таким образом, представляет часть загрузки, которая происходит без какой-либо проверки правильности. В конце стадии 1 загрузчик и состояние машины проверяются, и начинается стадия 2. Допущением такой разделительной линии является то, что процессы могут выполняться без каких-либо ограничений защиты, вплоть до некоторой точки - в этой точке все соответствующие факторы о машине проверены, и машина переведена в заведомо хорошее состояние, которое по существу устраняет влияние каких-либо предшествующих действий, которые, возможно, перевели машину в состояние, которое является недопустимым с точки зрения защиты. Точная точка в процессе загрузки, куда проведена разделительная линия между стадией 1 и стадией 2, является очень зависимой от обстоятельств (например, чему подобен код загрузчика? Какие задачи должны быть выполнены в качестве части загрузки?) и представляет своего рода сделку: с одной стороны, разделительная линия должна быть достаточно поздней, чтобы для будущих действий количество разновидностей в законном поведении загрузки являлось достаточно малым, чтобы законное поведение можно было бы надежно отличить от незаконного поведения (как отмечалось выше, в ранней процедуре загрузки большое количество опций ROM и других переменных делает число возможных путей исполнения настолько большим, что трудно отличить законные поведения от незаконных.) С другой стороны, разделительная линия должна быть достаточно ранней, чтобы она предшествовала любым событиям (например, загрузке программы входа в систему), которые могут затрагивать защиту, например привести к неправильному распространению ключей. Вообще, разделительная линия между стадией 1 и стадией 2 позволяет запускать произвольную систему в «сыром» (или «открытом», или «непроверенном») состоянии в течение некоторого времени, а затем запускать любые компоненты, необходимые для проверки поведения (например, среду высокой гарантии), и затем использовать такие компоненты, чтобы проверить правильность текущего состояния машины (или перевести машину в заведомо исправное состояние), в такой точке, в которой может быть разрешен процесс выполнения чего-нибудь, что может позже затронуть защиту (например, распространение (выдачу) ключей).
Проверка 450 правильности
Проверка 450 правильности является, в сущности, действием по проверке того, что загрузчик 410 операционной системы (или, более конкретно, в предпочтительном варианте осуществления, по проверке того, что стадия 2 загрузчика) является известной доверенной программой и гарантирующей, что машина, на которой она выполняется, находится в заведомо «хорошем» состоянии. Таким образом, проверка правильности имеет две части: (1) исследование программы загрузчика (или стадия 2 программы загрузчика), чтобы гарантировать, что она является известной доверенной программой, которой ей полагается быть, и (2) изменение соответствующего состояния машины в заведомо исправное состояние, в котором загрузчик, как известно, ведет себя корректно. Предпосылкой выполнения (1) и (2) является то, что известная программа, работающая в известном машинном состоянии, будет вести себя известным способом.
Первая часть проверки правильности - то есть исследование загрузчика - может быть выполнена разнообразными способами. В самом простом примере это может быть хэш-функция известной программы (которая может быть криптографически подписана для создания цифровой подписи, или иначе сохраненный некоторым способом, защищающим от имитации), с которой можно сравнить фактическую выполняемую программу. Проблема с получением хэш-функции по всей программе состоит в том, что различные экземпляры законной программы могут иметь немного различные образы, так что хэш-функция, которая вычислена способом, который требует полного тождества между известной программой и образцом выполняемой программы, может быть слишком ограниченной. Предпочтительно, чтобы проверка правильности выполнялась способом, который гарантирует, что программа является тем, чем ей полагается быть, но не чрезмерно ограниченно, например, процесс проверки правильности может сравнить хэш-функции компонентов программы, про которые известно, что они будут неизменными, и могут выполнить другие тесты в отношении компонентов программы, которые могут изменятся со временем. Компонент, который выполняет проверку правильности, должен быть приспособлен к специфике программы, которая проверяется; изобретение не ограничено никакой специфической методикой для проверки правильности программы.
Вторая часть проверки правильности - то есть, проверка/установка состояния машины - является предпочтительным выполнением, устанавливающим все соответствующие «источники» состояния в известные значения. Как правило, соответствующее состояние, которое может затронуть операционную программу, исходит из трех источников: центральный процессор, набор микросхем (чипсет) и память. Таким образом, эти элементы могут быть переведены в заведомо правильное состояние во время проверки правильности, например, центральный процессор может быть переведен в известное состояние - например, кольцевой регистр 0, со счетчиком программы указывающим на известное местоположение, все регистры данных установлены в нуль, и вся другая память кроме памяти, в которой сохранена программа загрузчика, будет установлена в нуль. Если загрузчик был проверен на корректное поведение, когда он выполняется машиной в этом состоянии, то комбинация проверки загрузчика и перевода машины в заведомо правильное состояние должно гарантировать корректное поведению до момента, когда запущена программа 418 входа в систему. Как описано выше, одной из выгод (хотя не единственная выгода) корректного поведения до выполнения программы 418 входа в систему является то, что мошеннические компоненты не будут загружены, что заставило бы распространить ключ 204 при несоответствующих условиях.
Необходимо отметить, что для того, чтобы процесс проверки правильности защитил загрузчик операционной системы от мошеннических компонентов, должна быть достаточная гарантия, что процесс самой проверки правильности выполняется корректно. Корректность процесса проверки правильности может быть обеспечена, воплощая блок проверки правильности в качестве доверенного агента, который выполняется на или в компьютерной среде высокой гарантии. Например, может иметь место маленькая операционная система, которая выполняет ограниченный набор функций, но которая обеспечивает высокую степень гарантии того, что такая операционная система выполнится согласно ее спецификациям. Такая операционная система может выполняться вместе с другими операционными системами на единственной машине, и изоляция такой операционной системы высокой гарантии от другой (менее безопасной) среды на системе может быть предписана компонентом супервизора, типа гипервизора или монитора виртуальной машины (в одном варианте осуществления гипервизор обеспечивает (управление) разделами, которые является средами, которые гипервизор поддерживает в некотором состоянии взаимной изоляции друг от друга, и в котором операционная система может выполняться). Кроме того, компонент высокой гарантии может иметь монопольный доступ к корню доверия, например аппаратному модулю, который применяет и строго защищает платформенные криптографические ключи. Блок проверки правильности может быть программой (или «агентом»), который выполняется в такой среде высокой гарантии, которая должна обеспечить гарантию, что - до той степени, что самой среде высокой гарантии можно доверять для сопротивления нападениям - блок проверки правильности не является предметом нападений извне среды высокой гарантии, что заставит его вести себя некорректно. Дополнительно, как отмечалось выше, среда высокой гарантии может обеспечить изолированную память (то есть, способность хранить некоторую данную величину и выдавать эту данную величину только конкретному объекту, для которого данная величина была изолирована), и блок проверки правильности может использовать эту изолированную память для хранения любых ключей, которые должны быть выданы. Необходимо отметить, что блок проверки правильности может быть неотъемлемой частью среды высокой гарантии, но может также быть отдельным компонентом, который выполняется в среде высокой гарантии.
Фиг.5 показывает пример блока 550 проверки правильности, который выполняет проверку правильности в соответствии с процедурой, описанной выше. Блок 550 проверки правильности имеет возможность оценить загрузчик 410 на корректность и/или соответствие некоторому набору известных стандартов. Дополнительно, блок 550 проверки правильности имеет возможность оценить и/или затронуть состояние 502 машины. Используя комбинацию этих возможностей, блок 550 проверки правильности может гарантировать, что загрузчик 410 будет вести себя корректно, гарантируя, что загрузчик 410 является тем загрузчиком, который выполнится так как ожидается, и гарантируя, что машина, на которой он выполняется, находится в состоянии, в котором загрузчик 410, как известно, ведет себя корректно.
Структурно, блок 550 проверки правильности может содержать два компонента: общую часть 504 и зависящую от загрузчика часть 506. «Общая часть» 504 содержит код, который является обычным для широкого разнообразия блоков проверки правильности (или всех блоков проверки правильности). Зависящая от загрузчика часть 506 является кодом, который, в частности, относится к проверке правильности конкретного загрузчика 410 то есть код, который понимает то, на что корректный образец загрузчика 410 (или стадия 2 загрузчика 410) похож, и после этого выполняет тесты для обеспечения гарантии того, что загрузчик 410 соответствует этому пониманию. Таким образом, зависящая от загрузчика часть 506 может быть объединена с общей частью 504 для формирования законченного блока проверки правильности.
Блок 550 проверки правильности является компонентом, который в конечном счете решает, будет ли ключ 204 передан загрузчику (который позднее передаст его операционной системе для использования операционной системой в соответствии со способом, разрешенным в соответствии с программой входа в систему, как описывалось выше). Блок 550 проверки правильности может защитить ключ 204, изолируя ключ 204 для блока 550 проверки правильности в изолированной области 508 памяти. Изолированная область 508 памяти может быть особенностью компьютерной среды высокой гарантии. Изолированная область 508 памяти может разрешить компонентам, выполняющимся в среде высокой гарантии, изолировать произвольные данные для себя так, чтобы никакой другой компонент не смог извлечь данные. Например, зависящая от загрузчика часть 506 блока 550 проверки правильности может изолировать ключ 204 для себя. Изолированная область 508 памяти предотвратит любой другой компонент, за исключением зависящей от загрузчика части 506, от снятия изоляции (разблокирования) с ключа 204. Таким образом, ключ 204 защищен, потому что он может быть получен только из зависящей от загрузчика части 506, и только зависящая от загрузчика часть 506 будет выдавать ключ 204 загрузчику, когда зависящая от загрузчика часть 506 полагает, что ключ 204 не будет выдан неправильно. В другом варианте осуществления ключ изолируется, основываясь на комбинации компонентов, которая включает в себя блок проверки правильности и стадию 2 загрузчика 410. В таком варианте осуществления зависящая от загрузчика часть 506 блока 550 проверки правильности может быть устранена, потому что механизм изоляции памяти сам, по существу, гарантирует присутствие корректной стадии 2 загрузчика прежде, чем с ключа может быть снята изоляция, так как бинарный код для известной правильной стадии 2 загрузчика является частью метрики, которая входит в изоляцию.
Примерный процесс защиты SYSKEY
Фиг.6 показывает примерный процесс защиты ключа в соответствии с аспектами изобретения, описанными выше. В некоторый момент после того, как машина стартовала, загрузчик операционной системы выполняется (602). Во время выполнения загрузчика операционной системы загрузчик и состояние машины проверяются (604), гарантируя таким образом, что загрузчик будет вести себя предсказуемым способом по причинам, описанным выше. После того, как загрузчик и состояние машины были проверены, загрузчик используется для загрузки операционной системы при препятствовании загрузки мошеннических компонентов (606) (как описано выше, проверка правильности загрузчика и состояния машины означает, что известно, что будущее поведение загрузчика не приводит к загрузке мошеннических компонентов). После того как операционная система загружена, программа входа в систему выполняется, что разрешает доступ к ключу.
Другие примерные воплощения
Необходимо отметить, что механизмы данного изобретения могут использоваться не просто для выполнения загрузки операционной системы, но могут использоваться вообще, чтобы позволить системе выполнять некоторую функцию в сыром (непроверенном) состоянии, требуя проверки правильности для продолжения работы с некоторыми функциями. Например, компьютер может выполнить некоторые функции, которые могут быть выполнены без какого-либо вида проверки правильности (например, компьютер может работать как радио), но проверку правильности, вероятно, придется выполнить прежде, чем компьютер сможет выполнить более чувствительные функции (например, считывание файлов с жесткого диска). Вообще, машина может рассматриваться и как устройство, и как обычный PC, и так, что часть устройства не требует проверки правильности/входа в систему, а обычная часть ПК требует.
Кроме того, блок проверки правильности не ограничен одной выдачей/невыдачей конкретного набора ключей программе входа в систему, но может быть более широко сконфигурированным для выдачи конкретных наборов ключей конкретным программным стекам (комплектам), например, есть один программный стек, который может получить первый ключ, но блок проверки правильности может выдать второй ключ только «более досконально проверенному» программному стеку.
Дополнительно, ключи не обязательно должны быть выданы через процедуру входа в систему, а вместо этого могут быть предоставлены через произвольные процедуры проверки правильности. Например, бинарный код DVD проигрывателя может получить, скажем, функциональные клавиши DVD после того, как блок проверки правильности определит, что проигрыватель имеет корректный бинарный код, но не требуя входа в систему.
Дополнительно, некоторые программы могут работать в некоторой форме без проверки правильности, но потом требовать типа проверки правильности прежде, чем потребуется раскрыть некоторые функциональные возможности. Например, приложение телефонии может начаться без требования входа в систему, но может потребовать входа в систему прежде, чем ключи могут быть выданы, что разрешит работать криптографическим функциям приложения.
Следует отметить, что предшествующие примеры были предоставлены просто ради объяснения и никоим образом не должны рассматриваться как ограничение данного изобретения. В то время как изобретение было описано со ссылкой на различные варианты осуществления, необходимо понимать, что слова, которые использовались здесь, являются словами описания и иллюстрации, а не словами ограничений. Далее, хотя изобретение было описано здесь со ссылкой на конкретные средства, материалы и воплощения, изобретение не предназначено, чтобы быть ограниченным подробными сведениями, раскрытыми здесь; скорее, изобретение охватывает все функционально эквивалентные структуры, способы и использования, те, что попадают в объем прилагаемой формулы изобретения. Специалисты в данной области техники, имея выгоду от изучения этой спецификации, могут произвести многочисленные модификации к нему, и могут быть сделаны изменения, не отступая от объема и формы изобретения в его аспектах.