RU2439665C2 - Компиляция исполняемого кода в менее доверяемом адресном пространстве - Google Patents

Компиляция исполняемого кода в менее доверяемом адресном пространстве Download PDF

Info

Publication number
RU2439665C2
RU2439665C2 RU2009120207/08A RU2009120207A RU2439665C2 RU 2439665 C2 RU2439665 C2 RU 2439665C2 RU 2009120207/08 A RU2009120207/08 A RU 2009120207/08A RU 2009120207 A RU2009120207 A RU 2009120207A RU 2439665 C2 RU2439665 C2 RU 2439665C2
Authority
RU
Russia
Prior art keywords
code
address space
mode
dynamically allocated
jit compiler
Prior art date
Application number
RU2009120207/08A
Other languages
English (en)
Other versions
RU2009120207A (ru
Inventor
Дэвид Чарльз РАЙТОН (US)
Дэвид Чарльз РАЙТОН
Роберт Садао ЮНОКИ (US)
Роберт Садао ЮНОКИ
Original Assignee
Майкрософт Корпорейшн
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Майкрософт Корпорейшн filed Critical Майкрософт Корпорейшн
Publication of RU2009120207A publication Critical patent/RU2009120207A/ru
Application granted granted Critical
Publication of RU2439665C2 publication Critical patent/RU2439665C2/ru

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/53Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/54Link editing before load time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/436Semantic checking
    • G06F8/437Type checking

Abstract

Изобретение относится к средствам компиляции программного кода. Технический результат заключается в повышении безопасности операционной системы при компиляции небезопасного программного кода. Выполняют прикладную программу из первого адресного пространства, заданного с первым набором разрешений для доступа к совместно используемой динамически распределяемой памяти. Получают один или более запросов от прикладной программы на компиляцию одного или более множеств команд на промежуточном языке. Компилируют одно или более множеств команд на промежуточном языке в заново скомпилированный код с использованием JIТ-компилятора, работающего во втором адресном пространстве, которое обладает вторым набором разрешений для доступа к совместно используемой динамически распределяемой памяти. Передают заново скомпилированный код в совместно используемую динамически распределяемую память, в которой прикладная программа может извлечь и выполнить заново скомпилированный код из первого адресного пространства. 3 н. и 17 з.п. ф-лы, 4 ил.

Description

УРОВЕНЬ ТЕХНИКИ
Увеличилась популярность как компьютеризированных систем, так и различных прикладных программ, используемых на компьютеризированных системах. В частности, сейчас существует широкий диапазон прикладных программ, сконфигурированных для любого количества назначений, чтобы функционировать либо в качестве комплексных операционных систем, баз данных и так далее, либо в качестве простого вычислителя. Во многих случаях разработчики программного обеспечения будут писать новые прикладные программы, подразумевая конкретную операционную систему, с использованием любого количества подходящих языков. Как только программное обеспечение завершено, разработчик будет компилировать приложение в исполняемый компьютером код, который затем может устанавливаться на компьютерную систему с подходящей операционной системой.
Поэтому признаем, что имеется некоторое количество соображений, которое часто должно продумываться разработчиками операционных систем, а также отдельных прикладных программ. Многие из этих интересов могут быть даже конкурирующими. Например, многие разработчики прикладных программ могут иметь интересы, относящиеся к быстрой работе, тогда как многие разработчики операционных систем могут иметь интересы, относящиеся к безопасности и стабильности. В некоторых случаях требования безопасности и стабильности могут вызвать более медленное исполнение у некоторых прикладных программ и/или более низкую производительность.
Например, операционная система может быть сконфигурирована для работы прикладных программ на менее доверяемом "пользовательском" уровне, но другие системные компоненты работают на доверяемом уровне "ядра". В результате прикладная программа, работающая на пользовательском уровне, может иметь возможность выполнять только некоторые типы функций путем запроса заданной функции через промежуточный доверяемый компонент. Промежуточный компонент может затем проверить достоверность запроса и затем передать запрос на функцию компоненту уровня ядра, который может затем выполнить запрос.
Другими путями управления безопасностью являются ограничение различных приложений и компонентов конкретными доступными для чтения, записи и/или исполнения пространствами разрешений. Например, операционная система могла бы разрешить некоторым прикладным программам работать только в адресном пространстве чтения/выполнения. Это могло бы позволить прикладным программам выполнять любые существующие команды, но препятствовало бы приложению выполнять любые операции записи. В отличие от этого, операционная система могла бы разрешить другим чувствительным системным компонентам работать только в адресном пространстве чтения/записи. Это могло бы позволить чувствительным компонентам делать новые записи, но запретило бы выполнение тех записей.
В еще одних случаях операционная система могла бы разрешить только некоторым типам прикладных программ, соответствующим определенным стандартам кода, работать в пространстве, которое доступно для чтения, записи и выполнения. Например, операционная система могла бы разрешить только приложениям "с типовой безопасностью" работать в адресном пространстве чтения/записи/выполнения. Одним примером правила типовой безопасности могло бы быть требование сложения целочисленного значения только с другими целочисленными значениями, а не значениями с плавающей запятой. Тогда мог бы использоваться компилятор с типовой безопасностью, чтобы компилировать только тот исполняемый программный код, который обладает типовой безопасностью, и соответственно является доверяемым операционной системой.
К сожалению, некоторые последние направления в разработке прикладных программ усложняют различные стороны вышеупомянутых подходов к управлению безопасностью. Например, широкий диапазон разработчиков приложений создают сейчас прикладные программы видеоигр с использованием "управляемого кода". Вообще, управляемый код включает в себя исполняемый программный код, а также код на промежуточном языке, который может компилироваться по мере необходимости. Например, разработчик прикладной программы мог бы включить одну или более ссылок (в скомпилированный исполняемый код) на промежуточный код. Таким образом, когда исполняемый код подходит к точке, где ему нужно использовать функцию, которая доступна только в коде на промежуточном языке, используется JIT-компилятор (Just-In-Time, динамический) для компилирования некоторого кода на промежуточном языке в исполняемые команды.
Поэтому можно признать, что операционные системы иногда будут ограничивать использование управляемого кода приложениями с типовой безопасностью. В частности, поскольку JIT-компилятору потребуется запись, и поскольку приложению потребуется выполнение, и еще потому что прикладной программе потребуется обращаться к скомпилированному коду, записанному JIT-компилятором, JIT-компилятор и исполняемая прикладная программа, как правило, будут работать в одном адресном пространстве, которое доступно для чтения, записи и выполнения. Таким образом, если код на промежуточном языке был небезопасным по типу (или соответствующим другим ограничениям программного кода), то злоумышленник мог обманом заставить JIT-компилятор сформировать вредоносные команды, которые выполняются.
К сожалению, ограничения программного кода, такие как типовая безопасность, часто считают противоречащими соображениям скорости и производительности. Это, в частности, может быть проблематичным для приложений видеоигр, где соображения скорости и производительности ставятся на первое место. Поэтому в некоторых случаях разработчики приложений видеоигр могут обнаружить, что лучше или эффективнее игнорировать определенные спецификации кода, например, типовую безопасность.
КРАТКАЯ СУЩНОСТЬ ИЗОБРЕТЕНИЯ
Реализации настоящего изобретения предоставляют системы, способы и компьютерные программные продукты, сконфигурированные для допущения использования управляемого кода в операционной системе, где управляемый код необязательно может соответствовать какому-нибудь отдельному стандарту кода. Например, в одной реализации операционная система обеспечивает доступ к ячейке памяти в двух разных адресных пространствах, и задает разрешения в адресных пространствах из условия, чтобы ячейка памяти была доступна с разными разрешениями из двух разных адресных пространств. В одной реализации JIT-компилятор, работающий в одном адресном пространстве, передает скомпилированный код в совместно используемую динамически распределяемую память. Исполняемый программный код, в свою очередь, обращается к скомпилированному коду из динамически распределяемой памяти и выполняет его в другом адресном пространстве в памяти.
Например, способ выполнения управляемого кода, чтобы недоверяемый программный код мог компилироваться и выполняться способом, который не представляет опасности или иным образом подвергает риску безопасность системы, может включать в себя выполнение прикладной программы в первом адресном пространстве ячейки памяти. Способ также может включать в себя получение одного или более запросов от прикладной программы на компиляцию одного или более множеств команд на промежуточном языке. К тому же, способ может включать в себя компиляцию одного или более множеств команд на промежуточном языке в заново скомпилированный код с использованием JIT-компилятора, работающего во втором адресном пространстве ячейки памяти. Кроме того, способ может включать в себя передачу заново скомпилированного кода в совместно используемую динамически распределяемую память. Прикладная программа может затем извлечь заново скомпилированный код из совместно используемой динамически распределяемой памяти в первое адресное пространство.
Аналогичным образом, другой способ формирования исполняемого компьютером программного кода способом, который использует JIT-компиляцию наряду с предотвращением нарушений безопасности, может включать в себя получение кода прикладной программы, который включает в себя исполняемый код и код, который необходимо компилировать. Способ также может включать в себя выполнение исполняемого кода в режиме с меньшими привилегиями и в первом адресном пространстве. К тому же, способ может включать в себя идентификацию одного или более указателей в исполняемом коде по меньшей мере для некоторого кода, который необходимо компилировать. Кроме того, способ может включать в себя переключение в режим с большими привилегиями. Более того, способ может включать в себя компиляцию по меньшей мере некоторого кода в другом адресном пространстве, используя компилятор, работающий в режиме с большими привилегиями.
Данная сущность изобретения предоставляется, чтобы представить набор идей в упрощенном виде, которые дополнительно описываются ниже в подробном описании. Данная сущность изобретения не предназначена для определения ключевых признаков или существенных признаков заявленного предмета изобретения, и также не предназначена для использования в качестве содействия в определении объема заявленного предмета изобретения.
Дополнительные признаки и преимущества изобретения будут изложены в последующем описании и частично будут очевидны из этого описания, либо могут быть изучены при применении изобретения на практике. Признаки и преимущества изобретения могут быть реализованы и получены посредством инструментов и сочетаний, подробно указанных в прилагаемой формуле изобретения. Эти и другие признаки настоящего изобретения станут более очевидными из нижеследующего описания и прилагаемой формулы изобретения, либо могут быть изучены при применении изобретения на практике, как изложено далее.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
Чтобы описать способ, которым могут быть получены вышеупомянутые и другие преимущества и признаки изобретения, более конкретное описание изобретения, кратко описанного выше, будет представлено посредством ссылки на его конкретные варианты осуществления, которые иллюстрируются на прилагаемых чертежах. Предполагая, что эти чертежи изображают только типичные варианты осуществления изобретения и поэтому не должны рассматриваться как ограничивающие его объем, изобретение будет описываться и объясняться с помощью дополнительной специфики и подробностей посредством использования прилагаемых чертежей, на которых:
Фиг. 1А иллюстрирует обзорную принципиальную схему реализации в соответствии с настоящим изобретением, в которой прикладная программа, работающая в менее доверяемом режиме безопасности, вызывает управляемый код, который компилируется с помощью JIT-компилятора в доверяемом режиме безопасности;
Фиг. 1В иллюстрирует принципиальную схему, в которой ячейка памяти, управляемая операционной системой, является доступной с помощью компонентов в двух разных адресных пространствах, которые обладают разными разрешениями для доступа к ячейке памяти;
Фиг. 2 иллюстрирует блок-схему последовательности действий в соответствии с реализацией настоящего изобретения, в которой JIT-компилятор получает и обрабатывает один или более запросов для команд на промежуточном языке; и
Фиг. 3 иллюстрирует блок-схему общей последовательности действий, в которой операционная система получает прикладную программу, которая включает в себя одну или более ссылок на управляемый код, и выполняет прикладную программу в соответствии с одним или более механизмами безопасности.
ПОДРОБНОЕ ОПИСАНИЕ
Реализации настоящего изобретения распространяются на системы, способы и компьютерные программные продукты, сконфигурированные для допуска использования управляемого кода в операционной системе, где управляемый код необязательно может соответствовать какому-нибудь отдельному стандарту кода. Например, в одной реализации операционная система обеспечивает доступ к ячейке памяти в двух разных адресных пространствах, и задает разрешения в адресных пространствах из условия, чтобы ячейка памяти была доступна с разными разрешениями из двух разных адресных пространств. В одной реализации JIT-компилятор, работающий в одном адресном пространстве, передает скомпилированный код в совместно используемую динамически распределяемую память. Исполняемый программный код, в свою очередь, обращается к скомпилированному коду из динамически распределяемой памяти и выполняет его в другом адресном пространстве в памяти.
Как будет в полной мере понятно в этом документе, реализации настоящего изобретения могут предоставить надежную систему без обязательной необходимости в проверке того, что сформированный код не нарушает ограничения в безопасности у системы. Это может быть выполнено, по меньшей мере частично, путем "помещения в песочницу" скомпилированного кода, а также любого другого кода, который выполняется. В частности, реализации настоящего изобретения могут определить "песочницу", которая по существу является предопределенным множеством границ, в котором может выполняться любой тип кода. В частности, границы песочницы, описываемые в этом документе, приведут к тому, что злоумышленный запрос(ы), сделанный путем выполнения кода, будет либо отклонен операционной системой (как поступающий от компонента пользовательского режима), либо ограничен в действиях или функциями только в рамках предопределенных разрешений (например, запрет записи в адресное пространство чтения/выполнения).
В результате код, который компилируется JIT-компилятором (например, 105), или даже прикладная программа (например, 110), в конечном счете вызывающая JIT-компилятор, может выполняться в "песочнице" без необходимости быть "безопасной по типу" или соответствовать каким-нибудь другим соображениям безопасности. Признаем, что это может дать свободу данному разработчику в написании кода прикладной программы способом, который теоретически менее ограничен и теоретически быстрее и производительнее, нежели ранее возможный.
В дополнение к обеспечению того, что код выполняется должным образом, реализации настоящего изобретения также предоставляют механизмы, которые гарантируют, что сам JIT-компилятор не может быть "захвачен", например, при получении и компиляции кода на промежуточном языке. В частности, реализации настоящего изобретения включают в себя JIT-компилятор, который конфигурируется для выполнения с типовой безопасностью вместо обязательной проверки входящего кода на типовую безопасность или компиляции только кода, безопасного по типу. По существу, JIT-компилятор в соответствии с реализациями настоящего изобретения может быть защищен от запросов, которые заставили бы сам JIT-компилятор нарушить определения безопасности (например, определения типовой безопасности).
Например, в одной реализации JIT-компилятор может быть сконфигурирован с определениями типовой безопасности, которые ограничивают JIT-компилятор от доступа за пределы его собственных структур данных, или структур данных, которые определены как часть периода выполнения системы 100. Например, JIT-компилятор может быть сконфигурирован для выполнения серий проверок, чтобы гарантировать, что выполняются только допустимые приведения, всякий раз при выполнении приведений из одного типа в другой. Аналогичным образом, JIT-компилятор может быть сконфигурирован так, что всякий раз при запросе чтения из массивов JIT-компилятор выполняет одну или более проверок границ, чтобы гарантировать, что JIT-компилятор находится в пределах границ массива. Относительно использования в рамках языка программирования С, например, JIT-компилятор также может конфигурировать для гарантии того, что всякий раз при использовании "объединения" JIT-компилятор считывает или записывает в надлежащую часть объединения. Кроме того, JIT-компилятор может быть сконфигурирован для гарантии того, что JIT-компилятор никогда не переполнит или опустошит во время чтения или записи стека типов (стека типов внутри JIT-компилятора).
Вообще, стек типов JIT-компилятора является внутренней структурой данных, которая обычно важна для поддержки правильности и т.д. Например, код на промежуточном языке, как правило, является системой на основе стека, в которой JIT-компилятор работает над объектами в стеке по порядку и помещает результаты обратно в стек по порядку. JIT-компилятор в соответствии с реализациями настоящего изобретения соответственно конфигурируется для имитации стека, чтобы обеспечить ожидаемую работу JIT-компилятора. Например, JIT-компилятор может выполнять имитацию стека при компиляции кода на промежуточном языке. Если имитируемый стек значительно отклоняется от того, что подается в JIT-компилятор, то JIT-компилятор может завершить компиляцию или сформировать ошибку. Это помогает JIT-компилятору гарантировать то, что он работает в предписанных границах и соответственно защищен от нарушения одного или более правил безопасности.
Фиг. 1А иллюстрирует обзорную принципиальную схему компьютеризированной системы 100 (например, операционной системы видеоигры), в которой выполняется прикладная программа (то есть 110). В одной реализации прикладная программа 110 является приложением видеоигр, однако примем во внимание, что эта прикладная программа 110 может быть любым типом исполняемого программного кода. В любом случае фиг. 1А также показывает, что прикладная программа 110 содержит одно или более множеств исполняемых команд, таких как скомпилированный код 135, который включает в себя указатель 140 на код 120 на промежуточном языке ("IL"). Аналогичным образом, фиг. 1А показывает, что прикладная программа 110 содержит скомпилированный код 145, который включает в себя указатель 150 на код 125 на промежуточном языке. Код 125 на промежуточном языке, в свою очередь, содержит несколько разных компонентов или модулей, таких как код 120, 125 и 130, которые нуждаются в дополнительной компиляции перед тем, как они могут быть выполнены.
Имеется любое количество разных способов, которыми прикладная программа 110 будет или может выполняться на компьютерной системе 100. Например, пользователь может загрузить устройство хранения в другое устройство, на котором установлена система 100. Устройство хранения может включать в себя двоичный исполняемый код для прикладной программы 110, а также управляемый код в виде кода 115 на промежуточном языке. Как исполняемый код, так и код на промежуточном языке в прикладной программе 110 затем могли бы быть загружены в компьютеризированную систему 100. В иных случаях пользователь, например, разработчик, может загрузить прикладную программу 110, включая код 115 на промежуточном языке, посредством сетевого соединения. В таком случае пользователь мог бы выполнять прикладную программу 110 для тестирования недавно разработанных прикладных программ (например, 110).
В любом случае фиг. 1А также иллюстрирует, что прикладная программа 110 выполняется в режиме с меньшими привилегиями (например, "пользовательском" режиме), тогда как JIT-компилятор 105 работает в режиме с большими привилегиями (например, режиме "ядра"). Например, фиг. 1А показывает, что прикладная программа 110 работает в режиме пользователя 113 с пользовательскими привилегиями, тогда как JIT-компилятор 105 работает в режиме ядра 103 с соответствующими привилегиями ядра. К тому же, фиг. 1А показывает, что к коду 115 на промежуточном языке обращается один или более компонентов с привилегиями уровня ядра 103. Наоборот, и как будет в полной мере понятно в этом документе, исполняемый код будет выполняться только с помощью компонентов, работающих с уровнями привилегий пользователя 113.
Соответственно, так как рабочий цикл для прикладной программы 110 выполняет каждую из скомпилированных команд 135, 145 в режиме пользователя 113, рабочий цикл столкнется с любым из одного или более указателей на код на промежуточном языке. Например, во время выполнения, рабочий цикл для прикладной программы 110 встретит указатель 140 на код 120 на промежуточном языке. Поскольку указатель 140 ссылается на код, к которому можно обратиться только в режиме ядра 103, рабочий цикл выйдет из режима пользователя, и система 100 переключится на режим ядра 103.
Затем будет обрабатываться запрос 143 с помощью компонента 155 безопасности, который работает в режиме ядра 103. Вообще, компонент 155 безопасности может содержать любое число или тип компонентов или модулей, сконфигурированных для получения запроса компонентов в режиме пользователя 113 (например, 143) и последующей проверки, является ли этот запрос подходящим. Это выполняется, потому что режим пользователя 113 является недоверяемым, и потому что прикладная программа 110 может представлять собой или не представлять (или иным образом включать в себя) опасный или вредоносный код.
Таким образом, для гарантии того, что запросы из выполнения в режиме 113 пользователя не повредят систему 100, компонент 155 безопасности может выполнять любое количество или любой тип функций проверки достоверности. Например, компонент 155 безопасности может проанализировать сообщение 143 на любое количество дескрипторов, маркеров или т.п. Кроме того, компонент 155 безопасности может проанализировать запрос 143 на команды приложения, которые могли бы использоваться для компрометации системы 100, например, запросы к особым адресам в памяти или запросы, которые могли бы привести к переполнению буфера, и т.д. После проверки достоверности запроса 143 компонент 155 безопасности может запустить JIT-компилятор 105 в режиме ядра.
При работе в режиме ядра JIT-компилятору может подаваться запрошенный код (то есть 120), и он может начинать компиляцию. Например, фиг. 1А показывает, что компонент 155 безопасности выполняет один или более запросов 147, которые заставляют JIT-компилятор 105 получить и компилировать код 120 на промежуточном языке. После компиляции кода 120 в исполняемые двоичные команды (то есть скомпилированный код 123), фиг. 1А также показывает, что JIT-компилятор 105 может затем передать код 123 в динамически распределяемую память 160.
Как будет в полной мере понятно по отношению к фиг. 1В, динамически распределяемая память 160 охватывает границу между операциями режима пользователя 113 и режима ядра 103. На самом деле, динамически распределяемая память 160 действует как межразрешительное/межграничное хранилище, которое доступно компонентам, работающим в режиме ядра 103 и/или режиме 113 пользователя. Как только завершена компиляция, система 100 может переключиться обратно в режим пользователя и продолжить выполнение прикладной программы 110. В частности, приложение 110 - работающее в режиме пользователя - может извлечь скомпилированный код 123, как только он будет доступен, и начать его выполнение в режиме 113 пользователя. Поэтому примем во внимание, что динамически распределяемая память 160 может использоваться для помощи в обеспечении границ безопасности между двумя уровнями безопасности путем разрешения JIT-компилятору 105 и пользователю 113 функционировать независимо, в разных режимах привилегий без прямого взаимодействия.
Фиг. 1В иллюстрирует дополнительные подробности о том, как может достигаться или иным образом поддерживаться граница безопасности между JIT-компилятором 105 и прикладной программой 110. В частности, фиг. 1В иллюстрирует реализацию, в которой JIT-компилятор 105 и прикладная программа 110 работают относительно конкретной одинаковой ячейки памяти, хотя и с разными наборами разрешений. В частности, фиг. 1В иллюстрирует реализацию, в которой к одной и той же ячейке памяти можно обращаться с помощью компонентов в одном адресном пространстве с одним набором разрешений в одном адресном пространстве, и обращаться с помощью разных компонентов в другом адресном пространстве с другим набором разрешений. Например, фиг. 1В показывает, что ячейка 160 памяти доступна в адресном пространстве 170 с разрешениями чтения/записи, и в адресном пространстве 175 с разрешениями чтения/выполнения.
Вообще, один или более компонентов уровня ядра 103 в операционной системе 100 будут поддерживать таблицу 180 страниц памяти для любого заданного адресного расположения и соответствующих адресных пространств. Например, фиг. 1В показывает, что таблица 180 страниц памяти поддерживается на уровне ядра 103 (то есть одного или более компонентов в режиме ядра) в системе 100. Одной из причин того, что это поддерживается компонентом в режиме ядра 103, является гарантия, что недоверяемая прикладная программа (то есть работающая в режиме пользователя) не может обращаться или иным образом неправильно манипулировать таблицей страниц.
В любом случае фиг. 1В показывает, что таблица 180 страниц соотносит ячейки 160 и 165 памяти с адресными пространствами 170, 175, 190 и 195. Например, ячейка 160 памяти является совместно используемой динамически распределяемой памятью, тогда как ячейка 165 памяти является расположением, в которое загружается для выполнения прикладная программа 110. К тому же, таблица 180 страниц устанавливает соответствие разрешений доступа у ячеек 160 и 165 памяти, так что адресные пространства 170 и 190 обладают доступом "чтения/записи" к ячейкам 160 или 165 соответственно. Аналогичным образом, таблица 180 страниц устанавливает соответствие разрешений у ячеек 160 и 165 памяти для адресных пространств 175 или 195 в виде "чтения/выполнения" соответственно. Соответственно, когда компонент 155 безопасности (фиг. 1А) получает запрос (например, 143) от компонента в режиме пользователя 113, компонент 155 безопасности может сопоставить адресные пространства у компонента, создающего запрос (например, 143), с адресным пространством для выходных данных JIT-компилятора (например, 123).
Как упоминалось ранее, одним из способов, которыми система 100 может усилить границы уровня безопасности и разрешения, является динамически распределяемая память 160, которая охватывает описываемые границы безопасности/разрешения. Вообще, "динамически распределяемая память" содержит множество адресов памяти, заданных отдельно системой 100 во время или непосредственно перед рабочим циклом. В этом конкретном примере система 100 может выделить и сконфигурировать динамически распределяемую память 160, чтобы только компоненты уровня ядра (например, JIT-компилятор 105) могли записывать в динамически распределяемую память 160 (например, посредством таблицы 180 страниц), тогда как компоненты уровня пользователя могли только считывать из динамически распределяемой памяти 160. В результате прикладная программа 110 не может выполнить никакой скомпилированный код от JIT-компилятора 105 в динамически распределяемой памяти 160, а вместо этого должна делать это только в адресном пространстве 175.
Поэтому примем во внимание, что "песочница" может быть задана путем требования работы приложения только в режиме пользователя и путем требования, чтобы приложение и JIT-компилятор обращались к определенным компонентам или структурам данных из адреса памяти, ассоциированного с разными наборами разрешений. Соответственно, фиг. 1А-1В и соответствующий текст иллюстрируют некоторое количество разных архитектурных компонентов, которые могут использоваться для доступа и/или выполнения практически любого типа исполняемого кода, включая управляемый код, безопасным способом. В частности, фиг. 1А-1В и соответствующий текст иллюстрируют, как приложение может выполнить в режиме пользователя 113 и обратиться к динамически распределяемой памяти только с разрешениями чтения или чтения/выполнения для JIT-компилированного кода. К тому же чертежи и соответствующий текст иллюстрируют, как приложение может вызвать один или более компонентов уровня ядра в другом адресном пространстве 170, которое обладает разрешениями чтения/записи на динамически распределяемую память 160, и может соответственно скомпилировать и передать управляемый код в динамически распределяемую память 160, но не выполнить его.
Как упоминалось ранее, этот тип распределенной конфигурации адресного пространства может обеспечить некоторое количество различных преимуществ для выполнения и разработки программ. Вначале, например, разработчик прикладной программы может написать практически любой тип кода, не беспокоясь о соображениях безопасности (например, типовой безопасности). Кроме того, разработчику операционной системы не нужны тратящие скорость ресурсы при разработке кода проверки в рабочем цикле, который заставит весь выполняющийся программный код стать безопасным (например, безопасным по типу).
В дополнение к вышеупомянутому реализации настоящего изобретения также могут описываться на основе блок-схем алгоритмов, имеющих одно или более действий в способе для достижения конкретного результата. В частности, фиг. 2 и 3 и соответствующий текст иллюстрируют блок-схемы алгоритмов одного или более действий для выполнения управляемого кода, чтобы безопасный и небезопасный код прикладной программы мог выполняться без угрозы или подвергания риску безопасности. Способы, проиллюстрированные на фиг. 2 и 3, описываются ниже со ссылкой на компоненты и схемы из фиг. 1А-1В.
Соответственно, фиг. 2 показывает, что способ из перспективной клиентской компьютерной системы может содержать действие 200 выполнения приложения в первом адресном пространстве. Действие 200 включает в себя выполнение прикладной программы в первом адресном пространстве ячейки памяти. Например, фиг. 1В показывает, что прикладная программа 110 выполняется из адресного пространства 175, которое обладает разрешениями чтения/выполнения для доступа к ячейке 160 памяти (то есть, где JIT-скомпилированный код будет размещаться и соответственно обозначаться как чтение/выполнение).
Фиг. 2 также показывает, что способ может содержать действие 210 получения запроса от приложения на команды на промежуточном языке. Действие 210 может включать в себя получение одного или более запросов от прикладной программы на компиляцию одного или более множеств команд на промежуточном языке. Например, рабочий цикл для прикладной программы 110 встречает указатель 140 на код 120 на промежуточном языке, к которому можно обращаться только в режиме ядра 103. По существу, рабочий цикл передает указатель 120 в виде сообщения 143 компоненту 155 безопасности, который обрабатывает запрос в режиме ядра.
К тому же фиг. 2 показывает, что способ может содержать действие 220 компиляции команд на промежуточном языке во втором адресном пространстве. Действие 220 включает в себя компиляцию одного или более множеств команд на промежуточном языке в заново скомпилированный код с использованием JIT-компилятора, работающего во втором адресном пространстве. Например, после проверки достоверности запроса 143 компонент 155 безопасности готовит и выполняет один или более запросов 147 для передачи запрошенного кода на промежуточном языке в JIT-компилятор 105. JIT-компилятор 105 затем компилирует код 120 на промежуточном языке во втором адресном пространстве 170, которое в этой иллюстрации снабжается разрешениями чтения/записи на совместно используемую динамически распределяемую память 160.
Кроме того, фиг. 2 показывает, что способ может содержать действие 230 передачи скомпилированного кода в совместно используемую динамически распределяемую память. Действие 230 включает в себя передачу заново скомпилированного кода в совместно используемую динамически распределяемую память, в которой прикладная программа может извлечь заново скомпилированный код в первое адресное пространство. Например, фиг. 1А и 1В показывают, что JIT-компилятор 105, а также прикладная программа 110, имеют доступ к динамически распределяемой памяти 160. В частности, JIT-компилятор 105 может записывать (но не выполнять) в динамически распределяемую память 160, тогда как прикладная программа 110 может только считывать и выполнять из динамически распределяемой памяти 160. Таким образом, когда JIT-компилятор 105 компилирует и создает код 123, рабочий цикл для прикладной программы 110 может извлечь скомпилированный код 123 в адресное пространство 175 и выполнить код в режиме пользователя.
В дополнение к вышеупомянутому, фиг. 3 показывает, что способ в соответствии с реализацией настоящего изобретения, состоящий из формирования выполняемого компьютером программного кода для компьютерной системы способом, который использует JIT-компиляцию наряду с предотвращением нарушений безопасности, может содержать действие 300 получения исполняемого кода и кода, который необходимо компилировать. Действие 300 включает в себя получение программного кода, который включает в себя исполняемый код и код, который необходимо компилировать. Например, операционная система 100 получает один или более носителей информации и/или получает загрузку по сети прикладной программы 110. Прикладная программа 110 включает в себя исполняемый программный код, а также код 115 на промежуточном языке, к которому обращаются отдельно с помощью одного или более компонентов уровня ядра 103.
Фиг. 3 также показывает, что способ может содержать действие 310 выполнения исполняемого кода в режиме с меньшими привилегиями. Действие 310 включает в себя выполнение исполняемого кода в режиме с меньшими привилегиями и в первом адресном пространстве. Например, фиг. 1А показывает, что к исполняемой части прикладной программы 110 обращаются или иным образом выполняют только в режиме пользователя 113, тогда как к коду 115 на промежуточном языке обращаются только компоненты в режиме ядра.
К тому же, фиг. 3 показывает, что способ может содержать действие 310 получения указателя на код, который необходимо компилировать. Действие 310 включает в себя получение одного или более указателей в исполняемом коде по меньшей мере на некоторый код, который необходимо компилировать. Например, фиг. 1А-1В показывают прикладную программу 110, которая работает в режиме пользователя 113 и в/из адресного пространства 175, содержит скомпилированный код 135, указатель 140 на код 120 на промежуточном языке, скомпилированный код 145 и указатель 150 на код 125 на промежуточном языке. Несмотря на выполнение прикладной программы 110 в режиме пользователя, указатели 140 и/или 150 будут идентифицироваться по очереди.
Кроме того, фиг. 3 показывает, что способ может содержать действие 330 переключения в более привилегированный режим. Например, рабочий цикл для прикладной программы 110 идентифицирует указатель 140 во время выполнения и идентифицирует, что нужно будет запустить JIT-компилятор 105. Поскольку JIT-компилятору 105 необходимо работать в режиме ядра, система 100 мгновенно останавливает выполнение приложения 110, переключается из режима пользователя в режим ядра и затем запускает JIT-компилятор 105 в качестве компонента режима ядра 103. Сообщение 143, которое включает в себя указатель 140, передается затем компоненту 155 безопасности в режиме ядра 103. Компонент 155 безопасности, работающий в режиме ядра, затем оценивает запрос, чтобы удостовериться в том, что запрос 143 сформирован должным образом и/или включает в себя подходящие дескрипторы, идентификаторы безопасности и т.д.
Более того, фиг. 3 показывает, что способ может содержать действие 340 компиляции запрошенного кода в режиме с большими привилегиями. Действие 340 включает в себя компиляцию запрошенного кода в другом адресном пространстве, используя компилятор, работающий в режиме с большими привилегиями. Например, фиг. 1А и 1В показывают, что JIT-компилятор 105, который работает на уровне ядра 103 с большими привилегиями, может компилировать код 120 в одном адресном пространстве (адресном пространстве 170) и затем передать скомпилированный код 123 в динамически распределяемую память 160, где JIT-компилятор обладает доступом чтения/записи. При переключении обратно в режим пользователя прикладная программа 110 может затем обратиться к скомпилированному коду 123 и выполнить этот код из другого адресного пространства (адресного пространства 175), которое обладает разрешениями чтения/выполнения на динамически распределяемую память 160.
По существу, фиг. 1А-2 и соответствующий текст предоставляют некоторое количество компонентов, модулей и механизмов, которые могут использоваться для выполнения недоверяемого кода, включая управляемый код, без принесения в жертву важных гарантий безопасности. Как описывалось ранее, это может быть по меньшей мере частично достигнуто путем разделения компиляции кода на промежуточном языке и выполнения двоичного кода в отдельных адресных пространствах для одной и той же программы. К тому же, это может быть достигнуто с помощью JIT-компилятора с типовой безопасностью, который компилирует промежуточный код и передает скомпилированный код в совместно используемую динамически распределяемую память. JIT-компилятор с типовой безопасностью конфигурируется таким образом, что несмотря на то, что он может принимать и компилировать код, который не обладает типовой безопасностью, сам JIT-компилятор ограничивается от работы вне определенных предписанных границ типовой безопасности. Более того, это может быть достигнуто путем гарантии, что к исполняемому коду обращаются только компоненты, работающие в режиме пользователя, и что к коду на промежуточном языке обращаются только компоненты, работающие в режиме ядра в адресном пространстве чтения/записи.
Варианты осуществления настоящего изобретения могут содержать специализированный или универсальный компьютер, включающий в себя различные аппаратные средства, которые обсуждаются подробнее ниже. Варианты осуществления в рамках объема настоящего изобретения также включают в себя компьютерночитаемые носители для передачи или хранения на них выполняемых компьютером команд или структур данных. Такие компьютерночитаемые носители могут быть любыми доступными носителями, к которым можно обращаться посредством универсального или специализированного компьютера.
В качестве примера, а не ограничения, такие компьютерночитаемые носители могут содержать RAM, ROM, EEPROM, компакт-диск или другой накопитель на оптических дисках, накопитель на магнитных дисках или другие магнитные устройства хранения, либо любой другой носитель, который может использоваться для перемещения или хранения необходимого средства программного кода в виде выполняемых компьютером команд или структур данных, и к которому можно обращаться посредством универсального или специализированного компьютера. Когда информация предается или предоставляется компьютеру по сети или другому соединению связи (одному из проводного, беспроводного или сочетания проводного или беспроводного), компьютер по существу рассматривает соединение как компьютерночитаемый носитель. Таким образом, любое такое соединение корректно называть компьютерночитаемым носителем. Сочетания вышеперечисленного также следует включить в область компьютерночитаемых носителей.
Выполняемые компьютером команды содержат, например, команды и данные, которые заставляют универсальный компьютер, специализированный компьютер или специализированное устройство обработки выполнять определенную функцию или группу функций. Несмотря на то, что предмет изобретения описан на языке, характерном для структурных особенностей и/или методологических действий, необходимо понимать, что предмет изобретения, определенный в прилагаемой формуле, не обязательно ограничивается описанными выше конкретными особенностями или действиями. Скорее, описанные выше конкретные признаки и действия раскрываются в качестве примеров реализации формулы изобретения.
Настоящее изобретение может быть реализовано в других конкретных видах без отклонения от его сущности или неотъемлемых характеристик. Описанные варианты осуществления должны рассматриваться во всех отношениях только как пояснительные, а не ограничительные. Следовательно, объем изобретения указывается прилагаемой формулой изобретения, а не предшествующим описанием. Все изменения, которые подпадают под смысл и диапазон эквивалентности формулы изобретения, должны включаться в ее объем.

Claims (20)

1. В компьютеризированной среде, содержащей память, а также JIТ-компилятор и одну или более прикладных программ, загруженных в память, способ выполнения управляемого кода, чтобы недоверяемый программный код мог компилироваться и выполняться способом, который не представляет опасности или иным образом подвергает риску безопасность системы, содержащий этапы, на которых:
выполняют прикладную программу из первого адресного пространства, заданного с первым набором разрешений для доступа к совместно используемой динамически распределяемой памяти;
получают один или более запросов от прикладной программы на компиляцию одного или более множеств команд на промежуточном языке; компилируют одно или более множеств команд на промежуточном языке в заново скомпилированный код с использованием JIТ-компилятора, работающего во втором адресном пространстве, которое обладает вторым набором разрешений для доступа к совместно используемой динамически распределяемой памяти; и
передают заново скомпилированный код в совместно используемую динамически распределяемую память, в которой прикладная программа может извлечь и выполнить заново скомпилированный код из первого адресного пространства.
2. Способ по п.1, дополнительно содержащий действие, в котором, при получении указания, что заново скомпилированный код передан в совместно используемую динамически распределяемую память, переключают уровень операций из режима ядра в режим пользователя.
3. Способ по п.2, дополнительно содержащий действие, в котором прикладная программа извлекает скомпилированный код и выполняет скомпилированный код из первого адресного пространства.
4. Способ по п.1, в котором первое адресное пространство конфигурируется с разрешениями чтения/выполнения относительно доступа к совместно используемой динамически распределяемой памяти, так что никакой компонент, работающий в первом адресном пространстве, не может записывать в совместно используемую динамически распределяемую память.
5. Способ по п.1, в котором второе адресное пространство конфигурируется для доступа к динамически распределяемой памяти с разрешениями чтения/записи, так что никакой компонент, работающий во втором адресном пространстве, не может выполнять код в динамически распределяемой памяти.
6. Способ по п.1, в котором JIТ-компилятор работает в режиме с большими привилегиями, а прикладная программа работает в режиме с меньшими привилегиями.
7. Способ по п.1, в котором JIТ-компилятор ограничивается выполнением в рамках одного или более ограничений типовой безопасности, но конфигурируется для получения и компиляции кода на промежуточном языке, который не обладает типовой безопасностью.
8. Способ по п.7, в котором JIТ-компилятор выполняет действия, в которых:
получают один или более запросов на выполнение функции, которая нарушает ограничение безопасности для JIТ-компилятора; и
отклоняют один или более запросов на выполнение функции или прекращают компиляцию одного или более множеств команд на промежуточном языке.
9. Способ по п.1, дополнительно содержащий действие, в котором, при получении одного или более запросов от прикладной программы, активизируют уровень операций режима ядра.
10. Способ по п.9, в котором действие, при котором активизируют уровень операций режима ядра, включает в себя действие, при котором инициируют компонент безопасности в режиме ядра.
11. Способ по п.10, в котором один или более запросов от прикладной программы принимаются компонентом безопасности в режиме ядра.
12. Способ по п.11, дополнительно содержащий действие компонента безопасности в режиме ядра, при котором проверяют достоверность одного или более запросов от прикладной программы.
13. Способ по п.12, в котором действие, при котором проверяют достоверность одного или более запросов, содержит действие, при котором определяют, допустим ли дескриптор, включенный в один или более запросов.
14. В компьютеризированной среде, содержащей память, JIТ-компилятор и одну или более прикладных программ, загруженных в память, способ формирования исполняемого компьютером программного кода способом, который использует JIТ-компиляцию наряду с предотвращением нарушений безопасности, содержащий этапы, на которых:
получают код прикладной программы, который включает в себя исполняемый код и код, который необходимо компилировать;
выполняют исполняемый код в режиме с меньшими привилегиями и в первом адресном пространстве;
идентифицируют один или более указателей в исполняемом коде по меньшей мере на некоторый код, который необходимо компилировать;
переключаются в режим с большими привилегиями; и
компилируют по меньшей мере некоторый код в другом адресном пространстве, используя компилятор, работающий в режиме с большими привилегиями.
15. Способ по п.14, в котором код прикладной программы содержит часть приложения видеоигр, которое принимается из хранения в операционную систему видеоигр.
16. Способ по п.14, в котором компилятор является JIТ-компилятором с типовой безопасностью, сконфигурированным для обработки только запросов с типовой безопасностью, но иным образом сконфигурированным для компиляции кода на промежуточном языке с типовой безопасностью или без типовой безопасности.
17. Способ по п.14, в котором режим с большими привилегиями является уровнем операций режима ядра, и режим с меньшими привилегиями является пользовательским уровнем операций.
18. Способ по п.14, в котором первое адресное пространство конфигурируется для доступа к динамически распределяемой памяти с разрешениями чтения/выполнения, а второе адресное пространство конфигурируется для доступа к динамически распределяемой памяти с разрешениями чтения/записи.
19. Способ по п.14, дополнительно содержащий действия, в которых:
переключаются в режим с меньшими привилегиями после определения, что по меньшей мере некоторый код скомпилирован; и
выполняют скомпилированный по меньшей мере некоторый код в первом адресном пространстве.
20. В компьютеризированной среде, содержащей память, JIТ-компилятор и одну или более прикладных программ, загруженных в память, изделие хранения компьютерной программы, имеющее записанные на нем исполняемые компьютером команды, которые при выполнении заставляют один или более процессоров выполнять способ, содержащий:
выполнение прикладной программы из первого адресного пространства, заданного с первым набором разрешений для доступа к совместно используемой динамически распределяемой памяти;
получение одного или более запросов от прикладной программы на компиляцию одного или более множеств команд на промежуточном языке;
компиляцию одного или более множеств команд на промежуточном языке в заново скомпилированный код с использованием JIТ-компилятора, работающего во втором адресном пространстве, которое обладает вторым набором разрешений для доступа к совместно используемой динамически распределяемой памяти; и
передачу заново скомпилированного кода в совместно используемую динамически распределяемую память, в которой прикладная программа может извлечь и выполнить заново скомпилированный код из первого адресного пространства.
RU2009120207/08A 2006-11-28 2007-11-27 Компиляция исполняемого кода в менее доверяемом адресном пространстве RU2439665C2 (ru)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/564,249 US20080127142A1 (en) 2006-11-28 2006-11-28 Compiling executable code into a less-trusted address space
US11/564,249 2006-11-28

Publications (2)

Publication Number Publication Date
RU2009120207A RU2009120207A (ru) 2010-12-10
RU2439665C2 true RU2439665C2 (ru) 2012-01-10

Family

ID=39469533

Family Applications (1)

Application Number Title Priority Date Filing Date
RU2009120207/08A RU2439665C2 (ru) 2006-11-28 2007-11-27 Компиляция исполняемого кода в менее доверяемом адресном пространстве

Country Status (13)

Country Link
US (2) US20080127142A1 (ru)
EP (1) EP2115580A4 (ru)
JP (1) JP2010511227A (ru)
KR (1) KR20090093967A (ru)
CN (1) CN101553784A (ru)
AU (1) AU2007325237B2 (ru)
BR (1) BRPI0719800A2 (ru)
CA (1) CA2665027A1 (ru)
IL (1) IL198058A0 (ru)
MX (1) MX2009004893A (ru)
RU (1) RU2439665C2 (ru)
TW (1) TW200830184A (ru)
WO (1) WO2008067329A1 (ru)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
RU2676454C2 (ru) * 2012-12-21 2018-12-28 Конинклейке Филипс Н.В. Вычислительное устройство, содержащее сеть таблиц

Families Citing this family (44)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080127142A1 (en) * 2006-11-28 2008-05-29 Microsoft Corporation Compiling executable code into a less-trusted address space
US8281293B2 (en) * 2007-07-24 2012-10-02 International Business Machines Corporation Copy-on-write optimization of immutable objects for objects oriented languages
US8296730B2 (en) * 2008-03-12 2012-10-23 Microsoft Corporation Using extension methods to extend COM objects
US20090319991A1 (en) * 2008-06-20 2009-12-24 Microsoft Corporation Managed code type equivalence
US20100058016A1 (en) * 2008-08-26 2010-03-04 Jari Nikara Method, apparatus and software product for multi-channel memory sandbox
US8180986B2 (en) * 2008-09-17 2012-05-15 Microsoft Corporation Memory conflict detection via mapping of the physical heap to control access permissions to the memory
US8190636B2 (en) * 2008-09-30 2012-05-29 Nokia Corporation Method, apparatus and computer program product for providing object privilege modification
US8276111B2 (en) * 2008-12-19 2012-09-25 Microsoft Corporation Providing access to a dataset in a type-safe manner
US20100199357A1 (en) * 2009-02-02 2010-08-05 Microsoft Corporation Secure hosting for untrusted code
US9117071B2 (en) 2009-06-03 2015-08-25 Apple Inc. Methods and apparatuses for secure compilation
US8677329B2 (en) 2009-06-03 2014-03-18 Apple Inc. Methods and apparatuses for a compiler server
US8850573B1 (en) * 2010-04-14 2014-09-30 Google Inc. Computing device with untrusted user execution mode
US8495750B2 (en) 2010-08-31 2013-07-23 International Business Machines Corporation Filesystem management and security system
US9147085B2 (en) * 2010-09-24 2015-09-29 Blackberry Limited Method for establishing a plurality of modes of operation on a mobile device
KR20120031756A (ko) * 2010-09-27 2012-04-04 삼성전자주식회사 Cpu와 gpu를 사용하는 이종 시스템에서 가상화를 이용한 어플리케이션 컴파일 및 실행 방법 및 장치
US20120159193A1 (en) * 2010-12-18 2012-06-21 Microsoft Corporation Security through opcode randomization
AU2013202876B2 (en) * 2011-01-18 2016-07-07 Apple Inc. System and method for supporting JIT in a secure system with randomly allocated memory ranges
US8646050B2 (en) * 2011-01-18 2014-02-04 Apple Inc. System and method for supporting JIT in a secure system with randomly allocated memory ranges
WO2012103359A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Hardware acceleration components for translating guest instructions to native instructions
EP2668565B1 (en) * 2011-01-27 2019-11-06 Intel Corporation Guest instruction to native instruction range based mapping using a conversion look aside buffer of a processor
KR101895453B1 (ko) 2011-11-09 2018-10-25 삼성전자주식회사 이기종 컴퓨팅 환경에서 보안 강화 방법 및 장치
US9128732B2 (en) * 2012-02-03 2015-09-08 Apple Inc. Selective randomization for non-deterministically compiled code
WO2013151454A1 (en) * 2012-04-06 2013-10-10 Google Inc. Hosted application sandboxing
CN103377120B (zh) * 2012-04-24 2017-06-30 财付通支付科技有限公司 一种应用程序测试方法及装置
MX2015005621A (es) 2012-11-07 2015-08-20 Koninkl Philips Nv Compilador libre de operadores.
JP6129702B2 (ja) * 2013-09-24 2017-05-17 株式会社東芝 情報処理装置、情報処理システム、プログラム
US9336413B2 (en) * 2013-11-22 2016-05-10 Oracle International Corporation Method and system for fast permission changes for virtual addresses
CN105723377B (zh) * 2013-12-17 2019-06-04 英特尔公司 供内核模式应用使用的安全区域
US10311228B2 (en) 2014-09-30 2019-06-04 Apple Inc. Using a fine-grained address space layout randomization to mitigate potential security exploits
US10311227B2 (en) * 2014-09-30 2019-06-04 Apple Inc. Obfuscation of an address space layout randomization mapping in a data processing system
US9930050B2 (en) * 2015-04-01 2018-03-27 Hand Held Products, Inc. Device management proxy for secure devices
JP6589505B2 (ja) * 2015-09-24 2019-10-16 ヤマハ株式会社 ルータ
FR3047587B1 (fr) * 2016-02-10 2023-01-13 Dolphin Integration Sa Dispositif de traitement muni d'un mode d'acces a des donnees sensibles.
US10303885B2 (en) 2016-03-02 2019-05-28 Apple Inc. Methods and systems for securely executing untrusted software
US10795989B2 (en) * 2017-03-05 2020-10-06 Fortinet, Inc. Secure just-in-time (JIT) code generation
US10572275B2 (en) * 2017-06-15 2020-02-25 Microsoft Technology Licensing, Llc Compatible dictionary layout
US10579520B2 (en) 2017-11-30 2020-03-03 Webroot Inc. Multi-ring shared, traversable, and dynamic advanced database
US10846211B2 (en) * 2018-03-21 2020-11-24 Microsoft Technology Licensing, Llc Testing kernel mode computer code by executing the computer code in user mode
US10754796B2 (en) 2018-08-29 2020-08-25 Red Hat, Inc. Efficient user space driver isolation by CPU page table switching
US10983926B2 (en) 2018-08-29 2021-04-20 Red Hat, Inc. Efficient userspace driver isolation for virtual machines
US11029968B1 (en) * 2019-07-31 2021-06-08 Facebook Technologies, Llc Operating system with a single kernel stack per processor
CN113268349B (zh) * 2021-06-04 2022-02-18 科东(广州)软件科技有限公司 一种计算机内存管理方法、装置、设备及存储介质
US11816203B2 (en) * 2021-11-23 2023-11-14 Malwarebytes Inc. Stack execution detection in a sandbox environment
CN115842927B (zh) * 2023-02-24 2023-06-06 湖北芯擎科技有限公司 一种视频流的安全显示方法、装置和电子设备

Family Cites Families (41)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4926476A (en) * 1989-02-03 1990-05-15 Motorola, Inc. Method and apparatus for secure execution of untrusted software
US5761477A (en) * 1995-12-04 1998-06-02 Microsoft Corporation Methods for safe and efficient implementations of virtual machines
US6151703A (en) * 1996-05-20 2000-11-21 Inprise Corporation Development system with methods for just-in-time compilation of programs
US6092147A (en) * 1997-04-15 2000-07-18 Sun Microsystems, Inc. Virtual machine with securely distributed bytecode verification
US6275938B1 (en) * 1997-08-28 2001-08-14 Microsoft Corporation Security enhancement for untrusted executable code
US6081665A (en) * 1997-12-19 2000-06-27 Newmonics Inc. Method for efficient soft real-time execution of portable byte code computer programs
US6505300B2 (en) * 1998-06-12 2003-01-07 Microsoft Corporation Method and system for secure running of untrusted content
US6412053B2 (en) * 1998-08-26 2002-06-25 Compaq Computer Corporation System method and apparatus for providing linearly scalable dynamic memory management in a multiprocessing system
US7409694B2 (en) * 1998-09-09 2008-08-05 Microsoft Corporation Highly componentized system architecture with loadable virtual memory manager
US6651171B1 (en) * 1999-04-06 2003-11-18 Microsoft Corporation Secure execution of program code
US6775779B1 (en) * 1999-04-06 2004-08-10 Microsoft Corporation Hierarchical trusted code for content protection in computers
US6622300B1 (en) * 1999-04-21 2003-09-16 Hewlett-Packard Development Company, L.P. Dynamic optimization of computer programs using code-rewriting kernal module
US6560774B1 (en) * 1999-09-01 2003-05-06 Microsoft Corporation Verifier to check intermediate language
US7111307B1 (en) * 1999-11-23 2006-09-19 Microsoft Corporation Method and system for monitoring and verifying software drivers using system resources including memory allocation and access
US6883098B1 (en) * 2000-09-20 2005-04-19 International Business Machines Corporation Method and computer system for controlling access by applications to this and other computer systems
US6978018B2 (en) * 2001-09-28 2005-12-20 Intel Corporation Technique to support co-location and certification of executable content from a pre-boot space into an operating system runtime environment
US7690023B2 (en) * 2001-12-13 2010-03-30 Japan Science And Technology Agency Software safety execution system
US7346901B2 (en) * 2001-12-18 2008-03-18 Microsoft Corporation Efficient generic code in a dynamic execution environment
US7234144B2 (en) * 2002-01-04 2007-06-19 Microsoft Corporation Methods and system for managing computational resources of a coprocessor in a computing system
US6952722B1 (en) * 2002-01-22 2005-10-04 Cisco Technology, Inc. Method and system using peer mapping system call to map changes in shared memory to all users of the shared memory
US7124445B2 (en) * 2002-06-21 2006-10-17 Pace Anti-Piracy, Inc. Protecting software from unauthorized use by converting source code modules to byte codes
US7296154B2 (en) * 2002-06-24 2007-11-13 Microsoft Corporation Secure media path methods, systems, and architectures
US20040025009A1 (en) * 2002-07-31 2004-02-05 Camber August A. Method and apparatus for acceleration of multimedia content
US7216341B2 (en) * 2003-05-09 2007-05-08 Microsoft Corporation Instrumenting software for enhanced diagnosability
US7219329B2 (en) * 2003-06-13 2007-05-15 Microsoft Corporation Systems and methods providing lightweight runtime code generation
DE10335989B4 (de) * 2003-08-01 2019-07-11 Kw-Software Gmbh Online-Änderungen von CIL-Code-Programmen für die Industrieautomatisierung
US7162626B2 (en) * 2003-09-25 2007-01-09 Intel Corporation Use of common language infrastructure for sharing drivers and executable content across execution environments
US7549145B2 (en) * 2003-09-25 2009-06-16 International Business Machines Corporation Processor dedicated code handling in a multi-processor environment
JP4652680B2 (ja) * 2003-12-22 2011-03-16 パナソニック株式会社 コンパイル方法および装置、ならびにコンパイラ
US7647629B2 (en) * 2004-02-03 2010-01-12 Microsoft Corporation Hosted code runtime protection
US7743423B2 (en) * 2004-02-03 2010-06-22 Microsoft Corporation Security requirement determination
JP2007233426A (ja) * 2004-04-05 2007-09-13 Matsushita Electric Ind Co Ltd アプリケーション実行装置
US8607299B2 (en) * 2004-04-27 2013-12-10 Microsoft Corporation Method and system for enforcing a security policy via a security virtual machine
US7380276B2 (en) * 2004-05-20 2008-05-27 Intel Corporation Processor extensions and software verification to support type-safe language environments running with untrusted code
JP2006048186A (ja) * 2004-08-02 2006-02-16 Hitachi Ltd 動的コンパイラの生成コードを保護する言語処理系
US7665077B2 (en) * 2004-10-18 2010-02-16 Microsoft Corporation System and method for sharing objects between applications in a virtual runtime environment
DE102004057490B4 (de) * 2004-11-29 2007-02-22 Infineon Technologies Ag Vorrichtung und Verfahren zum Verarbeiten eines Programmcodes
US7587724B2 (en) * 2005-07-13 2009-09-08 Symantec Corporation Kernel validation layer
JP4519738B2 (ja) * 2005-08-26 2010-08-04 株式会社東芝 メモリアクセス制御装置
US8769672B2 (en) * 2006-08-03 2014-07-01 Symantec Corporation Code injection prevention
US20080127142A1 (en) * 2006-11-28 2008-05-29 Microsoft Corporation Compiling executable code into a less-trusted address space

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
RU2676454C2 (ru) * 2012-12-21 2018-12-28 Конинклейке Филипс Н.В. Вычислительное устройство, содержащее сеть таблиц

Also Published As

Publication number Publication date
US7673109B2 (en) 2010-03-02
BRPI0719800A2 (pt) 2014-04-22
WO2008067329A1 (en) 2008-06-05
TW200830184A (en) 2008-07-16
US20080127142A1 (en) 2008-05-29
US20080126740A1 (en) 2008-05-29
CN101553784A (zh) 2009-10-07
AU2007325237A1 (en) 2008-06-05
EP2115580A4 (en) 2012-03-07
MX2009004893A (es) 2009-05-19
JP2010511227A (ja) 2010-04-08
KR20090093967A (ko) 2009-09-02
RU2009120207A (ru) 2010-12-10
EP2115580A1 (en) 2009-11-11
IL198058A0 (en) 2009-12-24
CA2665027A1 (en) 2008-06-05
AU2007325237B2 (en) 2011-10-27

Similar Documents

Publication Publication Date Title
RU2439665C2 (ru) Компиляция исполняемого кода в менее доверяемом адресном пространстве
JP6248153B2 (ja) 信頼レベルのアクティブ化
KR102255767B1 (ko) 가상 머신 감사를 위한 시스템 및 방법들
CN107771335B (zh) 受保护区域
US8516589B2 (en) Apparatus and method for preventing virus code execution
US8646050B2 (en) System and method for supporting JIT in a secure system with randomly allocated memory ranges
CN109840410A (zh) 一种进程内数据隔离与保护的方法和系统
RU2584507C1 (ru) Способ обеспечения безопасного выполнения файла сценария
Sensaoui et al. An in-depth study of MPU-based isolation techniques
WO2019231685A1 (en) Memory assignment for guest operating systems
CN115422554B (zh) 请求处理方法、编译方法和可信计算系统
Bouffard et al. Hardening a Java Card Virtual Machine Implementation with the MPU
EP3926470B1 (en) Emulator and emulation method
US8321668B2 (en) Control of data access by dynamically verifying legal references
AU2011239288A1 (en) Compiling executable code into a less-trusted address space
CN114638004B (zh) 一种数据保护方法、装置及存储介质
CN111625784B (zh) 一种应用的反调试方法、相关装置及存储介质
US20240045679A1 (en) Method for control flow isolation with protection keys and indirect branch tracking
US20230139429A1 (en) Privilege Metric for Evaluating the Security of a Library
Cude Wayless: a Capability-Based Microkernel
US20210397708A1 (en) Emulator and emulation method
Brookes Mitigating Privilege Escalation
AU2013202876B2 (en) System and method for supporting JIT in a secure system with randomly allocated memory ranges
CN114168936A (zh) 一种基于Intel MPK与单步模式的Enclave沙盒系统
CN114579254A (zh) 一种微内核虚拟化操作系统的系统调用方法及装置

Legal Events

Date Code Title Description
MM4A The patent is invalid due to non-payment of fees

Effective date: 20121128