Селективное обеспечение соблюдения целостности кода, обеспечиваемое менеджером виртуальной машины

Иллюстрации

Показать все

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

Реферат

УРОВЕНЬ ТЕХНИКИ

[0001] Так как вычислительная техника совершенствуется, вычислительные устройства становятся во все возрастающей степени взаимосвязанными. Хотя эта взаимосвязанность обеспечивает многочисленные преимущества, она не без проблем. Одной такой проблемой является то, что вычислительные устройства во все возрастающей степени подвергаются воздействию вредоносных программ. Вредоносные программы могут действовать разными путями, такими как похищение информации с вычислительного устройства, блокирование вычислительного устройства, использование вычислительного устройства для запуска атак против других вычислительных устройств и т.п. Хотя были разработаны некоторые методы для защиты вычислительного устройства от вредоносных программ, такие вредоносные программы остаются и могут привести к разочарованию в опыте взаимодействия пользователя, когда они инфицируют компьютер пользователя.

СУЩНОСТЬ ИЗОБРЕТЕНИЯ

[0002] Этот раздел «Сущность изобретения» предусматривается для выбора идей в упрощенном виде, которые дополнительно описываются ниже в разделе «Подробное описание». Этот раздел «Сущность изобретения» не предназначен ни для определения ключевых признаков или существенных признаков заявленного объекта, ни для использования для ограничения объема заявленного объекта.

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

[0004] В соответствии с одним или несколькими аспектами, вычислительное устройство включает в себя операционную систему, менеджер виртуальной машины и процессор. Процессор выполнен с возможностью предоставления возможности менеджеру виртуальной машины ограничивать исполнение в режиме ядра страниц памяти страницами памяти, имеющими код, целостность которого была верифицирована более привилегированным объектом, который является более привилегированным, чем операционная система, но предоставления возможности исполнения в пользовательском режиме страниц памяти, не учитывая, была ли верифицирована целостность кода на страницах памяти более привилегированным объектом.

КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ

[0005] Одинаковые позиции используются на чертежах для ссылки на подобные признаки.

[0006] Фиг. 1 представляет собой блок-схему, иллюстрирующую примерное вычислительное устройство, реализующее методы, описанные в данном документе, согласно одному или нескольким вариантам осуществления.

[0007] Фиг. 2 иллюстрирует примерную систему, реализующую методы селективного обеспечения соблюдения целостности кода, обеспечиваемого менеджером виртуальной машины, описанные в данном документе, согласно одному или нескольким вариантам осуществления.

[0008] Фиг. 3 представляет собой блок-схему последовательности операций, иллюстрирующую примерный процесс для реализации селективного обеспечения соблюдения целостности кода, обеспечиваемого менеджером виртуальной машины, согласно одному или нескольким вариантам осуществления.

[0009] Фиг. 4 иллюстрирует другую примерную систему, реализующую селективное обеспечение соблюдения целостности кода, обеспечиваемое менеджером виртуальной машины, согласно одному или нескольким вариантам осуществления.

[0010] Фиг. 5 иллюстрирует примерную систему, которая включает в себя примерное вычислительное устройство, которое является представителем одной или нескольких систем и/или устройств, которые могут реализовать различные методы, описанные в данном документе.

ПОДРОБНОЕ ОПИСАНИЕ

[0011] В данном документе описывается селективное обеспечение соблюдения целостности кода, обеспечиваемое менеджером виртуальной машины. Виртуальная машина представляет собой программную реализацию физического устройства, которая может выполнять программы, аналогично физическому устройству. Виртуальная машина, и доступ к аппаратным средствам физического устройства, управляется менеджером виртуальной машины на физическом устройстве. Виртуальная машина и менеджер виртуальной машины обращаются к памяти, которая состоит из многочисленных блоков или участков, упоминаемых как страницы памяти (или просто страницы). Целостность кода используется для того, чтобы способствовать защите от вредоносного кода на физическом устройстве. Целостность кода ссылается на целостность кода (например, двоичного), верифицируемого на основе политики целостности кода. Если код верифицируется на основе политики целостности кода, тогда целостность кода верифицируется, и предоставляется возможность исполнения кода; в противном случае, целостность кода не верифицируется, и не предоставляется возможность исполнения кода.

[0012] Процессор может исполнять код в режиме ядра или в пользовательском режиме. Когда виртуальный процессор виртуальной машины выполняет в режиме ядра, виртуальный процессор выполняет только код, целостность которого верифицируется менеджером виртуальной машины (или другим объектом, более привилегированным, чем операционная система, выполняющаяся на виртуальном процессоре). Целостность кода страниц памяти, включающих код, верифицируется, и виртуальный процессор, выполняющий в режиме ядра, может исполнять код на странице памяти, если только менеджер виртуальной машины (или другой более привилегированный объект) верифицировал целостность кода у кода на странице памяти. Однако когда виртуальный процессор выполняет в пользовательском режиме, операционная система, выполняющаяся на виртуальном процессоре, определяет, может ли код исполняться. Операционная система может применять любую из разнообразных политик (например, может выполнять любую из всевозможных разных проверок или верификаций кода) для определения, может ли код исполняться в пользовательском режиме, включая, необязательно, исполнение кода в пользовательском режиме без выполнения каких-либо проверок или верификаций кода.

[0013] Фиг. 1 представляет собой блок-схему, иллюстрирующую примерное вычислительное устройство 100, реализующее методы, описанные в данном документе, согласно одному или нескольким вариантам осуществления. Вычислительным устройством 100 может быть любое из всевозможных разных типов устройств. Например, вычислительным устройством 100 может быть настольный компьютер, серверный компьютер, портативный компьютер или компьютер-нетбук, планшет или компьютер в виде записной книжки, мобильная станция, развлекательное устройство, телевизионная приставка, соединенная с возможностью связи с устройством отображения, телевизор или другое устройство отображения, сотовый или другой беспроводный телефон, игровая консоль, автомобильный компьютер, носимый компьютер и т.п.

[0014] Вычислительное устройство 100 включает в себя менеджер 102 виртуальной машины, также упоминаемый как гипервизор, и один или несколько компонентов 104. Менеджер 102 виртуальной машины управляет доступом к функциональной возможности, обеспечиваемой компонентами 104. Альтернативно, менеджер 102 виртуальной машины может выполняться на главной операционной системе (не показана), в этом случае главная операционная система управляет доступом к функциональной возможности, обеспечиваемой компонентами 104.

[0015] Компоненты 104 могут представлять собой всевозможные разные процессорные компоненты, компоненты ввода/вывода (I/O) и/или другие компоненты или устройства. Например, компоненты 104 могут включать в себя один или несколько процессоров или процессорных ядер, один или несколько компонентов памяти (например, энергозависимую и/или энергонезависимую память), одно или несколько запоминающих устройств (например, оптических и/или магнитных дисков, накопителей флэш-памяти), один или несколько компонентов связи (например, адаптеры проводной и/или беспроводной сети), их комбинации и т.п. Хотя изображены как часть вычислительного устройства 100, один или несколько из компонентов 104 (например, одно или несколько запоминающих устройств) могут быть реализованы внешними для вычислительного устройства 100. Различные компоненты или модули, выполняющиеся на вычислительном устройстве 100, включая менеджер 102 виртуальной машины, могут выполнять доступ к этой функциональной возможности, обеспечиваемой компонентами 104 прямо и/или косвенно посредством других компонентов или модулей.

[0016] Менеджер 102 виртуальной машины предоставляет возможность виртуальной машине 106 выполняться на вычислительном устройстве 100. Единственная виртуальная машина 106 изображена в вычислительном устройстве 100, хотя, альтернативно, многочисленные виртуальные машины могут выполняться на вычислительном устройстве 100. Виртуальная машина ссылается на программную реализацию физического вычислительного устройства (или другой машины или системы), которое может выполнять программы, аналогично физическому вычислительному устройству. Виртуальная машина включает в себя один или несколько виртуальных компонентов, которые подобны компонентам 104 (но являются их программными реализациями). Операционная система, а также другие приложения, могут исполнять использование виртуальных компонентов, так как они будут использовать компоненты 104, включая выполнение на виртуальных процессорах или виртуальных процессорных ядрах, обращение к виртуальной памяти и т.п. Операционной системе и другим приложениям, исполняющимся в виртуальной машине 106, нет необходимости иметь сведения, и обычно они не имеют сведения, что они исполняются в виртуальной машине.

[0017] Виртуальная машина 106 включает в себя операционную систему 112, одно или несколько приложений 114 и один или несколько виртуальных компонентов 116. Операционная система 112 выполняется или исполняется на одном или нескольких виртуальных процессорах или процессорных ядрах, включенных в виде одного или нескольких компонентов 116, и управляет исполнением приложений 114.

[0018] Менеджер 102 виртуальной машины включает в себя модуль 122 управления виртуальной машиной (VM) и модуль 124 управления страницами. Модуль 122 управления виртуальной машиной управляет отображением виртуальных компонентов 116 на компоненты 104, включая планирование виртуальных процессоров или процессорных ядер для исполнения на физических процессорах или процессорных ядрах. Модуль 124 управления страницами идентифицирует, какие страницы являются исполняемыми в режиме ядра, и может, необязательно, выполнять проверки целостности кода на коде для страниц памяти, подлежащих исполнению в режиме ядра, как описано более подробно ниже. Хотя они изображены в виде двух отдельных модулей, следует отметить, что функциональная возможность модулей 122 и 124 может быть объединена в единственный модуль (например, функциональная возможность модуля 124 управления страницами может быть включена в модуль 122 управления VM).

[0019] Операционная система 112 и менеджер 102 виртуальной машины управляют хранением и доступом к памяти, которая состоит из многочисленных блоков или участков, которые упоминаются как страницы памяти (или просто страницы). Память, например, может быть памятью любого типа, адресуемой центральным блоком обработки (CPU), такой как энергозависимая память (например, оперативное запоминающее устройство (RAM)) или энергонезависимая память (например, флэш-память). Разные программы могут распределяться страницам памяти, и этими программами могут быть приложения 114, программы операционной системы 112 или другие компоненты или модули.

[0020] Операционная система 112 и менеджер 102 виртуальной машины могут предоставлять возможность выполнения разного типа доступа к страницам памяти программой, такого как доступ для чтения, доступ для записи и доступ для исполнения. Если доступ для чтения (также упоминаемый как разрешение чтения) предоставляется странице памяти, тогда предоставляется возможность считывания содержимого страницы памяти (например, конкретной одной или нескольким программам). Если доступ для записи (также упоминаемый как разрешение записи) предоставляется странице памяти, тогда предоставляется возможность запись содержимого в страницу памяти (например, конкретной одной или несколькими программами). Если доступ для исполнения (также упоминаемый как разрешение исполнения) предоставляется странице памяти, предоставляется возможность исполнение кода, хранимого в (также упоминаемого как хранимого на) странице памяти.

[0021] Операционная система 112 и/или объект, более привилегированный, чем операционная система 112 (например, менеджер 102 виртуальной машины), могут определить, предоставлять ли разрешение исполнения странице памяти, основываясь, по меньшей мере частично, на верификации целостности кода для кода на странице памяти. Верификация целостности кода ссылается на верификацию целостности кода (например, двоичного кода или его частей), основываясь на политике целостности кода. Могут использоваться всевозможные разные политики целостности кода, и целостность кода, таким образом, может верифицироваться всевозможными разными способами. Если целостность кода верифицируется на основе политики целостности кода, тогда целостность кода верифицируется и коду предоставляется возможность исполнения. Однако если целостность кода не верифицируется на основе политики целостности кода, тогда целостность кода не верифицируется и коду не предоставляется возможность исполнения.

[0022] В одном или нескольких вариантах осуществления политика целостности кода указывает, что целостность кода верифицируется на основе кода, подписанного с использованием цифровых сертификатов, которые идентифицируют источник кода (например, объект, который цифровым образом подписал код) и устанавливает цепочку сертификатов для кода. Код подписывается посредством генерирования цифровой подписи на основе кода и криптографического ключа. Без криптографического ключа (или соответствующего ключа, такого как секретный ключ из пары открытого/секретного ключа) очень трудно из-за громадного объема вычислений создать подпись, которая может быть верифицирована с использованием криптографического ключа. Однако любой объект с криптографическим ключом (или соответствующим ключом, таким как открытый ключ из пары открытого/секретного ключа) может использовать ключ для верификации цифровой подписи посредством исполнения подходящего алгоритма верификации цифровой подписи по ключу, подписи и коду, который был подписан. Так как цифровая подпись основывается на коде, любое изменение кода приводит к неверифицируемой цифровой подписи. Таким образом, цифровой сертификат предоставляет возможность объекту, верифицирующему код, верифицировать, что код не был изменен после того, как код был подписан цифровым образом.

[0023] Объект, верифицирующий код (например, операционная система 112 или менеджер 102 виртуальной машины), идентифицирует один или несколько доверяемых объектов. Эти доверяемые объекты могут идентифицироваться разным образом, таким как предварительное конфигурирование в верифицирующем объекте, предоставление администратором вычислительного устройства 100 или получение иным образом. Может устанавливаться цепочка сертификатов, которая идентифицирует доверяемый объект, а также один или несколько других объектов. Цепочка сертификатов ссылается на ряд объектов, начинающийся с объекта, который подписал цифровым образом код, и заканчивающийся объектом, который доверяется объектом, верифицирующим код. Любое количество дополнительных объектов может быть включено в цепочку, причем каждый объект верифицирует, что он доверяет предыдущему объекту в цепочке. Например, изобретатели предполагают, что код подписывается объектом A, который не доверяется объектом, верифицирующим код, но что объект D доверяется объектом, верифицирующим код. Цепочка сертификатов может включать в себя объект A, который подписал цифровым образом код, объект B, обеспечивающий цифровой сертификат, верифицирующий, что объект B доверяет объекту A, объект C, обеспечивающий цифровой сертификат, верифицирующий, что объект Cдоверяет объекту B, и объект D, обеспечивающий цифровой сертификат, верифицирующий, что объект D доверяет объекту C.

[0024] Если цепочка сертификатов верифицируется, и код не был модифицирован, тогда проверка целостности кода завершается успешно – целостность кода верифицируется и коду предоставляется возможность исполнения. Однако если цепочка сертификатов не верифицируется, и/или код был модифицирован, тогда проверка целостности кода завершается неуспешно – целостность кода не верифицируется и коду не предоставляется возможность исполнения.

[0025] Альтернативно, целостность кода может верифицироваться другими методами. Например, код может генерироваться посредством объекта, или под его управлением, который верифицирует код. Политика целостности кода может указывать, что такой код автоматически рассматривается как верифицированный объектом, и проверка целостности кода для такого кода завершается успешно (целостность кода верифицируется и коду предоставляется возможность исполнения). В качестве другого примера, код может верифицироваться посредством анализирования в соответствии с различными другими правилами или критериями, указанными политикой целостности кода. Если анализ кода определяет, что была выполнена политика целостности кода, тогда код верифицируется, и проверка целостности кода завершается успешно (целостность кода верифицируется, и коду предоставляется возможность исполнения). Однако если анализ кода определяет, что политика целостности кода не была выполнена, тогда код не верифицируется, и проверка целостности кода завершается неуспешно (целостность кода не верифицируется, и коду не предоставляется возможность исполнения).

[0026] В одном или нескольких вариантах осуществления код программы может храниться на многочисленных страницах памяти, и проверка целостности кода для таких многочисленных страниц выполняется в целом. Проверка целостности кода для кода программы выполняется, и, если проверка целостности кода завершается успешно, тогда разрешение исполнения предоставляется всем многочисленным страницам памяти, в которых хранится код. Однако если проверка целостности кода завершается неуспешно, тогда разрешение исполнения не предоставляется никакой из многочисленных страниц памяти, в которых хранится код.

[0027] Альтернативно, проверка целостности кода для каждой из многочисленных страниц, в которой хранится код программы, может выполняться индивидуально и независимо от проверки целостности кода для кода, хранимого в других из многочисленных страниц. Например, в ответ на попытку исполнения кода в одной из многочисленных страниц памяти, проверка целостности кода выполняется для по меньшей мере кода на этой странице памяти, и разрешение исполнения предоставляется или не предоставляется этой странице памяти, основываясь на том, завершается ли проверка целостности кода неуспешно или успешно.

[0028] Один или несколько процессоров вычислительного устройства 100 поддерживают исполнение кода в многочисленных разных режимах, упоминаемых как режим ядра (также упоминаемый как режим ядра, супервизорский режим или режим супервизора) и пользовательский режим (также упоминаемый как режим пользователя). Приложения 114 обычно выполняются в пользовательском режиме, и операционная система 112 может включать в себя некоторые компоненты ядра, которые выполняются в режиме ядра, и другие компоненты, которые выполняются в пользовательском режиме. Пользовательский режим является менее привилегированным (т.е. более ограниченным), чем режим ядра. Драйверы, установленные в или иным образом включенные в операционную систему 112, чтобы способствовать выполнению связи с виртуальными компонентами 116, могут выполняться в пользовательском режиме или в режиме ядра. Использование режима ядра и пользовательского режима обеспечивает дополнительную защиту для кода, который выполняется в режиме ядра, например, процессором, исполняющим код, предотвращающий обращение кода, выполняющегося в пользовательском режиме, к памяти, используемой кодом, выполняющимся в режиме ядра.

[0029] Хотя упоминаемые в данном документе как режим ядра и пользовательский режим, альтернативно, один или несколько дополнительных режимов могут поддерживаться процессорами вычислительного устройства 100. В таких ситуациях, режимы, описанные в данном документе, могут упоминаться как режим ядра и режим не ядра, причем режимы, кроме режима ядра, рассматриваются аналогично пользовательскому режиму, описанному в данном документе. Альтернативно, режимы, описанные в данном документе, могут упоминаться как пользовательский режим и непользовательский режим, причем режимы, кроме пользовательского режима, рассматриваются аналогично режиму ядра, описанному в данном документе.

[0030] Фиг. 2 иллюстрирует примерную систему 200, реализующую методы селективного обеспечения соблюдения целостности кода, обеспечиваемого менеджером виртуальной машины, описанные в данном документе. Система 200 включает в себя операционную систему 112, выполняющуюся в виртуальной машине 106, и модуль 202 верификации целостности кода, который является частью более привилегированного объекта 204. Модуль 202 верификации целостности кода может, необязательно, быть включен в модуль 124 управления страницами, выполняющийся в менеджере 102 виртуальной машины по фиг. 1. Модуль 202 верификации целостности кода выполняет верификацию целостности кода для кода, который виртуальный процессор собирается исполнить, когда виртуальный процессор работает в режиме ядра, обеспечивая результаты 206 верификации кода в режиме ядра, указывающие, завершается ли верификация целостности кода для кода успешно или неуспешно. Если верификация целостности кода завершается успешно, тогда код может исполняться в режиме ядра, и, если верификация целостности кода завершается неуспешно, тогда код не может исполняться с режиме ядра.

[0031] Более привилегированный объект 204 ссылается на объект, который является более привилегированным (менее ограниченным), чем операционная система 112. Более привилегированным объектом 204 может быть менеджер 102 виртуальной машины по фиг. 1. Более привилегированным объектом 204, альтернативно, может быть один или несколько других объектов, таких как виртуальный процессор, работающий в защищенном режиме, который имеет более высокую привилегию, чем режим ядра операционной системы 112 (например, защищенный режим, управляемый менеджером 102 виртуальной машины). Более привилегированный объект может быть реализован в виде программного обеспечения, аппаратно-программного обеспечения и/или аппаратного обеспечения. В ситуациях, в которых более привилегированным объектом 204 является объект, кроме менеджера виртуальной машины, результаты 206 верификации кода в режиме ядра могут предоставляться менеджеру виртуальной машины, позволяющие менеджеру виртуальной машины сохранять запись, идентифицирующую код, целостность которого была верифицирована, и, таким образом, может исполняться в режиме ядра.

[0032] Операционная система 112 включает в себя модуль 208 обеспечения соблюдения политики, который реализует одну или несколько политик для определения, может ли исполняться код, который виртуальный процессор собирается исполнить, когда виртуальный процессор работает в пользовательском режиме. Всевозможные разные политики могут быть реализованы модулем 208 обеспечения соблюдения политики, такие как выполнение верификации целостности кода, аналогично модулю 202 верификации целостности кода, проверка других характеристик кода или операционной системы 112 и т.п. Политикой, реализуемой модулем 208 обеспечения соблюдения политики, также может быть исполнение всего кода в пользовательском режиме (например, исполнение кода в пользовательском режиме без выполнения каких-либо проверок целостности кода или других верификаций). Модуль 208 обеспечения соблюдения политики применяет политику для кода, когда виртуальный процессор работает в пользовательском режиме, обеспечивая результаты 210 оценки политики, указывающие, выполняется ли политика (проверка политики завершается успешно) или не выполняется (проверка политики завершается неуспешно). Если проверка политики завершается успешно, тогда код может исполняться в пользовательском режиме, и, если проверка политики завершается неуспешно, тогда код не может исполняться в пользовательском режиме.

0033] Таким образом, более привилегированный объект 204 выполняет верификацию целостности кода (обеспечивает соблюдение целостности кода) для страниц в режиме ядра, тогда как операционная система 112 в виртуальной машине 106 выполняет проверки политики (обеспечивает соблюдение политики) для страниц в пользовательском режиме. В одном или нескольких вариантах осуществления модуль 208 обеспечения соблюдения политики реализуется в коде в режиме ядра операционной системы 112. Таким образом, проверки политики для кода, выполняющегося в пользовательском режиме, выполняются кодом, выполняющимся в режиме ядра, причем целостность кода для кода, выполняющегося в режиме ядра, верифицировалась менеджером 102 виртуальной машины или другим более привилегированным объектом.

[0034] Таким образом, менеджер 102 виртуальной машины способен ограничить исполнение кода в режиме ядра до кода, который был верифицирован более привилегированным объектом 204, но исполнение кода в пользовательском режиме управляется отдельно операционной системой 112, выполняющейся на виртуальной машине 106. Операционная система 112 выполняет любую верификацию кода и/или другие проверки политики, основываясь на конфигурации модуля 208 обеспечения соблюдения политики и независимо от верификации целостности кода, выполняемой более привилегированным объектом 204.

[0035] Методы, описанные в данном документе, таким образом, обеспечивают дополнительный уровень безопасности вследствие менеджера виртуальной машины, предотвращающего исполнение скомпрометированного кода операционной системы 112 в режиме ядра. Одновременно, однако, методы, описанные в данном документе, позволяют верифицировать целостность кода для кода, исполняющегося в пользовательском режиме, и/или других политик, реализованных операционной системой 112 при необходимости. Операционная система 112 устанавливает политики для кода, исполняющегося в пользовательском режиме, позволяя операционной системе 112 поддерживать ситуации, где не выполняется верификация кода. Например, операционной системе 112 может потребоваться предоставить возможность исполнения некоторого кода в пользовательском режиме без верификации, или предоставить возможность выполнения динамического генерирования кода для некоторого кода, исполняющегося в пользовательском режиме. Такие определения могут быть сделаны операционной системой 112, при этом все это время пользователь вычислительного устройства 100 уверен, что операционная система 112 не была скомпрометирована, так как целостность кода операционной системы 112 верифицировалась менеджером 102 виртуальной машины (или другим более привилегированным объектом).

[0036] Фиг. 3 представляет собой блок-схему последовательности операций, иллюстрирующую примерный процесс 300 для реализации селективного обеспечения соблюдения целостности кода, обеспечиваемого менеджером виртуальной машины, согласно одному или нескольким вариантам осуществления. Процесс 300 выполняется, по меньшей мере частично, менеджером виртуальной машины, таким как менеджер 102 виртуальной машины по фиг. 1 и 2, и может быть реализован программным обеспечением, аппаратно-программным обеспечением, аппаратным обеспечением или их комбинацией. Процесс 300 показан как набор действий и не ограничивается порядком, показанным для выполнения операций различных действий. Процесс 300 представляет собой примерный процесс для реализации селективного обеспечения соблюдения целостности кода, обеспечиваемого менеджером виртуальной машины; дополнительные описания реализации селективного обеспечения соблюдения целостности кода, обеспечиваемого менеджером виртуальной машины, включены в данный документ с ссылкой на разные фигуры.

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

[0038] Определение выполняется в отношение того, должна ли страница памяти быть исполняемой в режиме ядра (действие 304). Это определение может выполняться различным образом, таким как идентифицирование виртуальной машиной или операционной системой при выполнении запроса на то, чтобы сделать страницу памяти исполняемой.

[0039] В ответ на определение, что страница памяти должна быть исполняемой в режиме ядра, выполняется проверка целостности кода исполняемого кода более привилегированным объектом (действие 306). Более привилегированным объектом является объект, более привилегированный, чем операционная система, управляемая виртуальной машиной, как описано выше. Более привилегированным объектом может быть менеджер виртуальной машины, или другой объект, как описано выше. Проверка целостности кода выполняется посредством верификации целостности кода, основываясь на политике целостности кода, различным образом, как описано выше, например, посредством верификации кода, основываясь на верифицируемой цепочке сертификатов и цифровой подписи, верифицирующей, что код не был модифицирован. Предоставляется возможность исполнения исполняемого кода в странице памяти, если только проверка целостности кода верифицирует исполняемый код (действие 308). Может предоставляться возможность исполнения исполняемого кода в странице памяти, например, менеджером виртуальной машины, выдающим разрешение исполнения странице памяти, идентифицированной в действии 302.

[0040] Возвращаясь к действию 304, в ответ на определение, что страница памяти не должна быть исполняемой в режиме ядра, операционной системе виртуальной машины, управляемой менеджером виртуальной машины, предоставляется возможность определения, предоставить ли возможность исполнения исполняемого кода на основе политики операционной системы (действие 310). Операционная система может реализовать всевозможные разные политики для определения, исполнять ли код, включая проверку целостности кода, как описано выше.

[0041] Запрос на то, чтобы сделать страницу памяти исполняемой, в действии 302, может направляться менеджеру виртуальной машины, или, альтернативно, более привилегированному объекту (например, более привилегированному объекту 204 на фиг. 2). В одном или нескольких вариантах осуществления, если менеджер виртуальной машины является более привилегированным объектом, тогда запрос направляется менеджеру виртуальной машины, и менеджер виртуальной машины выполняет проверку целостности кода в действии 306. Однако если другой объект является более привилегированным объектом, тогда запрос направляется более привилегированному объекту (например, непосредственно или посредством менеджера виртуальной машины), более привилегированный объект выполняет проверку целостности кода в действии 306, и, если проверка целостности кода в действии 306 верифицирует исполняемый код, тогда более привилегированный объект уведомляет менеджера виртуальной машины сделать страницу памяти исполняемой в режиме ядра. Менеджер виртуальной машины может сделать страницу памяти исполняемой в режиме ядра, например, посредством обновления таблицы преобразования адресов второго уровня, как описано более подробно ниже.

[0042] Таким образом, менеджер виртуальной машины способствует селективному обеспечению соблюдения целостности кода. Соблюдение целостности кода для кода в режиме ядра обеспечивается менеджером виртуальной машины (или другим более привилегированным объектом, который по-новому применяет менеджер виртуальной машины), тогда как обеспечение соблюдения целостности кода для кода в пользовательском режиме остается для операционной системы, выполняющейся в виртуальной машине, управляемой менеджером виртуальной машины.

[0043] Возвращаясь к фиг. 1, в одном или нескольких вариантах осуществления вычислительное устройство 100 применяет виртуальную память. Виртуальная память ссылается на адресное пространство, которое отображается на другое адресное пространство (например, физическую память). Приложению назначается пространство виртуальной памяти, в котором исполняется код приложения, и хранятся данные. Менеджер памяти (например, процессор) управляет отображением адресов виртуальной памяти в пространство виртуальной памяти для адресования в пространстве другой памяти. При отображении адресов виртуальной памяти из адресного пространства виртуальной памяти в пространство другой памяти, выполняется преобразование адресов. Таблица преобразования адресов используется для выполнения этого отображения и может применяться по-новому для реализации методов, описанных в данном документе.

[0044] В одном или нескольких вариантах осуществления таблица преобразования адресов реализуется аппаратным обеспечением, таким как физический процессор, т.е. компонент 104 вычислительного устройства 100. Таблица преобразования адресов предоставляет возможность менеджеру 102 виртуальной машины селективно обеспечивать соблюдение целостности кода, как описано более подробно ниже. Альтернативно, аппаратное обеспечение вычислительного устройства 100 (например, физический процессор, т.е. компонент 104) может использовать различные другие таблицы, списки, записи, структуры и т.п., чтобы предоставить возможность менеджеру 102 виртуальной машины селективно обеспечивать соблюдение целостности кода. Альтернативно, различные другие таблицы, списки, записи, структуры и т.п., реализованные программным обеспечением (например, как часть менеджера 102 виртуальной машины, или как часть другого компонента или модуля вычислительного устройства 100) могут использоваться для того, чтобы предоставить возможность менеджеру 102 виртуальной машины селективно обеспечивать соблюдение целостности кода.

[0045] Фиг. 4 иллюстрирует примерную систему 400, реализующую селективное обеспечение соблюдения целостности кода, обеспечиваемое менеджером виртуальной машины, согласно одному или нескольким вариантам осуществления. Системой 400, например, может быть вычислительное устройство 100 по фиг. 1. Система 400 включает в себя физический процессор 402, пространство 404 физической памяти, виртуальный процессор 406 и программу 408. Физическим процессором 402 может быть компонент 104 на фиг. 1, пространством 404 физической памяти может быть компонент 104 на фиг. 1, виртуальным процессором 406 может быть виртуальный компонент 116 на фиг. 1, и программой 408 может быть приложение 114 или часть операционной системы 112 на фиг. 1. Физический процессор 402 включает в себя менеджер 410 памяти, который управляет доступом к пространству 404 физической памяти. Пространством 404 физической памяти могут быть различные энергозависимые и/или энергонезависимые памяти, такие как RAM, флэш-память и т.п.

[0046] Физический процессор 402