CN107077356A - 存储器特权 - Google Patents
存储器特权 Download PDFInfo
- Publication number
- CN107077356A CN107077356A CN201480083306.6A CN201480083306A CN107077356A CN 107077356 A CN107077356 A CN 107077356A CN 201480083306 A CN201480083306 A CN 201480083306A CN 107077356 A CN107077356 A CN 107077356A
- Authority
- CN
- China
- Prior art keywords
- memory
- franchise
- type
- kernel
- request
- Prior art date
- Legal status (The legal status 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 status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/14—Protection against unauthorised use of memory or access to memory
- G06F12/1458—Protection against unauthorised use of memory or access to memory by checking the subject access rights
- G06F12/1491—Protection against unauthorised use of memory or access to memory by checking the subject access rights in a hierarchical protection system, e.g. privilege levels, memory rings
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/14—Protection against unauthorised use of memory or access to memory
- G06F12/1458—Protection against unauthorised use of memory or access to memory by checking the subject access rights
- G06F12/1483—Protection against unauthorised use of memory or access to memory by checking the subject access rights using an access-table, e.g. matrix or list
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring 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/54—Monitoring 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 adding security routines or objects to programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime code conversion or optimisation
- G06F9/4552—Involving translation to a different instruction set architecture, e.g. just-in-time translation in a JVM
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/545—Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/14—Protection against unauthorised use of memory or access to memory
- G06F12/1416—Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
- G06F12/1425—Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block
- G06F12/1441—Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block for a range
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45583—Memory management, e.g. access or allocation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1052—Security improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/21—Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/2141—Access rights, e.g. capability lists, access control lists, access tables, access matrices
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Health & Medical Sciences (AREA)
- Bioethics (AREA)
- Health & Medical Sciences (AREA)
- Databases & Information Systems (AREA)
- Mathematical Physics (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
一种用于在装置上执行进程的方法,所述装置包括用于执行所述进程的一个或多个处理器和存储器,其中所述进程具有关联的第一特权类型,所述方法包括:获得用于供所述进程使用或用于供由所述进程创建的另一进程使用的存储器的一部分,其中存储器的所述部分被标识为可写入并且可执行存储器,其中存储器的所述部分具有不同于第一特权类型的关联的第二特权类型。
Description
技术领域
本发明涉及用于在装置上执行进程的方法、用于实现进程在装置上执行的方法、用于执行任何这种方法的设备和用于执行这种方法的计算机程序。
背景技术
已知攻击者发起针对软件应用的攻击。这种攻击能够具有非常广泛的延伸和损害结果(在金融损失、名誉损失、时间损失、数据损失和数据泄露方面)。软件和系统开发者与攻击者处于永久斗争中,由此开发者尝试开发用于阻止攻击者可能发起的攻击的措施,并且攻击者尝试开发克服或绕过由开发者采取的措施的新的攻击。
发明内容
根据本发明的第一方面,提供一种用于在装置上执行进程的方法,所述装置包括用于执行所述进程的一个或多个处理器和存储器,其中所述进程具有关联的第一特权类型,所述方法包括:获得用于供所述进程使用或用于供由所述进程创建的另一进程使用的存储器的一部分,其中存储器的所述部分被标识为可写入并且可执行存储器,其中存储器的所述部分具有不同于第一特权类型的关联的第二特权类型。
在一些实施例中,在所述进程的运行时间执行所述获得。
在一些实施例中,所述获得包括请求在所述一个或多个处理器上执行的内核执行动态存储器分配。所述请求可为内核指定第二特权类型,内核随后被布置为分配存储器的所述部分并且将指定的第二特权类型与存储器的所述部分关联。替代地,所述请求可不为内核指定第二特权类型,内核随后被布置为分配存储器的所述部分,并且如果所述请求发生在所述进程的运行时间,则将第二特权类型与存储器的所述部分关联。
在一些实施例中,作为即时编译器将所述进程的代码编译成即时编译器在存储器的所述部分中存储的一个或多个机器语言指令的一部分,执行所述获得。
根据本发明的第二方面,提供一种用于实现进程在装置上执行的方法,所述装置包括用于执行所述进程的一个或多个处理器和存储器,其中所述进程具有关联的第一特权类型,所述方法包括:接收对用于供所述进程使用或用于供由所述进程创建的另一进程使用的存储器的一部分的请求;以及响应于所述请求,提供标识为可写入并且可执行存储器的所述存储器的一部分,其中所述存储器的所述一部分具有不同于第一特权类型的关联的第二特权类型。
在一些实施例中,在所述进程的运行时间接收所述请求。
在一些实施例中,所述请求是动态存储器分配请求。所述动态存储器分配请求可指定第二特权类型。
在一些实施例中,所述接收和提供由在所述一个或多个处理器上执行的内核执行。
在一些实施例中,当即时编译器将所述进程的代码编译成即时编译器在请求的存储器的所述部分中存储的一个或多个机器语言指令时,从即时编译器接收所述请求。
在本发明的第一或第二方面的一些实施例中,所述第一特权类型和/或第二特权类型允许下面各个操作中的一个或多个操作:(a)打开文件;(b)执行一个或多个预定系统调用;(c)读取文件;(d)对文件写入;(e)创建通信连接。
在本发明的第一或第二方面的一些实施例中,所述第一特权类型和/或第二特权类型禁止下面各个操作中的一个或多个操作:(a)打开文件;(b)执行一个或多个预定系统调用;(c)读取文件;(d)对文件写入;(e)创建通信连接。
在本发明的第一或第二方面的一些实施例中,与第一特权类型相比,第二特权类型是更加禁止性的。
在本发明的第一或第二方面的一些实施例中,所述第二特权类型是预定特权类型。替代地,本发明的第一或第二方面的一些实施例包括:至少部分地基于第一特权类型确定第二特权类型。
在本发明的第一或第二方面的一些实施例中,所述进程的执行由在所述一个或多个处理器上运行的虚拟机执行。替代地,所述进程的执行可由在所述一个或多个处理器上运行的解释器执行。
根据本发明的第三方面,提供一种设备,所述设备被布置为执行根据以上第一和第二方面中的任何一个方面的方法或任何它们的实施例。
根据本发明的第四方面,提供一种计算机程序,当所述计算机程序由一个或多个处理器执行时,所述计算机程序使所述一个或多个处理器执行根据以上第一和第二方面中的任何一个方面的方法或任何它们的实施例。计算机程序可被存储在计算机可读介质上。
附图说明
现在将参照附图仅作为示例描述本发明的实施例,其中:
图1示意性地图示计算机系统的示例;和
图2示意性地图示根据本发明的一些实施例的图1的系统的替代视图。
具体实施方式
在下面的描述中并且在附图中,描述本发明的某些实施例。然而,将会理解,本发明不限于描述的实施例,并且一些实施例可不包括以下描述的所有特征。然而,将会清楚的是,可在不脱离所附权利要求中所阐述的本发明的更广泛的精神和范围的情况下在其中进行各种修改和改变。
图1示意性地图示计算机系统100的示例。系统100包括计算机102。计算机102包括:存储介质104、存储器106、处理器108、接口110、用户输出接口112、用户输入接口114和网络接口116,这些装置全部经一个或多个通信总线118链接在一起。
存储介质104可以是任何形式的非易失性数据存储装置,诸如硬盘驱动器、磁盘、光盘、ROM等中的一个或多个。存储介质104可存储处理器108执行的操作系统以便使计算机102工作。存储介质104还可存储一个或多个计算机程序(或软件或指令或代码)。
存储器106可以是适合存储数据和/或计算机程序(或软件或指令或代码)的任何随机存取存储器(存储单元或易失性存储介质)。
处理器108可以是适合执行一个或多个计算机程序(诸如,存储在存储介质104上和/或存储在存储器106中的那些计算机程序)的任何数据处理单元,一些计算机程序可以是根据本发明的实施例的计算机程序或者是如下计算机程序:当由处理器108执行该计算机程序时使处理器108执行根据本发明的实施例的方法并且将系统100配置为根据本发明的实施例的系统。处理器108可包括单个数据处理单元或者并行操作、分开操作或彼此合作操作的多个数据处理单元。在执行本发明的实施例的数据处理操作时,处理器108可将数据存储到存储介质104和/或存储器106,和/或从存储介质104和/或存储器106读取数据。
接口110可以是用于为位于计算机102外部或可从计算机102移除的装置122提供接口的任何单元。装置122可以是数据存储装置,例如光盘、磁盘、固态存储装置等中的一个或多个。装置122可具有处理能力 - 例如,所述装置可以是智能卡。接口110可因此根据它从处理器108接收的一个或多个命令从装置122访问数据,或向装置122提供数据,或与装置122连接。
用户输入接口114被布置为从系统100的用户或操作人员接收输入。用户可经系统100的一个或多个输入装置(诸如,连接到用户输入接口114或与用户输入接口114通信的鼠标(或其它指示装置)126和/或键盘124)提供这种输入。然而,将会理解,用户可经一个或多个附加或替代的输入装置(诸如,触摸屏幕)向计算机102提供输入。计算机102可在存储器106中存储经用户输入接口114从输入装置接收的输入以用于处理器108随后访问和处理,或者可将所述输入直接传送给处理器108,从而处理器108能够相应地对用户输入做出响应。
用户输出接口112被布置为向系统100的用户或操作人员提供图形/视觉和/或音频输出。如此,处理器108可被布置为指令用户输出接口112形成表示预期图形输出的图像/视频信号,并且将这个信号提供给系统100的监视器(或屏幕或显示单元)120,监视器120连接到用户输出接口112。附加或者替代地,处理器108可被布置为指令用户输出接口112形成表示预期音频输出的音频信号,并且将这个信号提供给系统100的一个或多个扬声器121,扬声器121连接到用户输出接口112。
最后,网络接口116提供用于使计算机102从一个或多个数据通信网络下载数据和/或将数据上传到一个或多个数据通信网络的功能。
将会理解,图1中图示并且以上描述的系统100的架构仅是示例性的,并且具有不同架构(例如,具有比图1中示出的部件少的部件或相对于图1中示出的部件具有附加和/或替代的部件)的其它计算机系统100可被用于本发明的实施例中。作为示例,计算机系统100能够包括下述各项中的一项或多项:个人计算机;服务器计算机;移动电话;平板计算机;膝上型计算机;电视机;机顶盒;游戏控制台;其它移动装置或消费电子装置等。
图2示意性地图示根据本发明的一些实施例的图1的系统100的替代视图。如图2中所示,图2的系统100包括所述一个或多个处理器108和进程存储器201(进程存储器201能够是图1的存储介质104的一部分和/或存储器106的一部分)。进程存储器201是用于当由处理器108加载和执行进程时由所述进程使用的存储器。进程存储器201可包括可由一个或多个对应存储器地址来标识的图1的存储介质104和/或存储器106的一个或多个区段或范围,并且可被静态地分配给所述进程和/或动态地分配给所述进程。将会理解,图1的系统100的其它部件未被再一次示出在图2中以便清楚。
处理器108被布置为执行操作系统(诸如,Windows操作系统、Linux操作系统、安卓(Android)操作系统、Apple操作系统等之一)。已知的是,操作系统提供内核212(或具有内核212作为部件或模块)。内核212是由处理器108执行的计算机程序,所述计算机程序接收和处理/管理来自正在由处理器108执行的软件进程的系统调用。来自软件进程的系统调用可包括例如软件进程使用处理器108的功能的请求(诸如为了创建新进程)、存储器相关请求(诸如,存储器访问、存储器分配、存储器解除分配)、存储装置相关请求(诸如,访问盘或其它存储介质、文件打开/读取/写入/等)、与耦合到计算机102的外围装置交互的请求等。因此,内核212有效地提供软件进程和软件进程希望使用其功能或软件进程希望与之交互的系统100的部件(诸如,处理器108、存储器106、存储介质104、外围装置等)之间的接口或连接。内核212可执行这个技术领域中公知的各种安全处理或访问控制,并且可因此在调用软件进程有权享有所请求的功能/交互的情况下执行针对调用软件进程的系统调用,并且类似地,可在调用软件进程无权享有所请求的功能/交互的情况下决定不执行针对调用软件进程的系统调用。
已知提供内核代理,诸如图2的代理214 - 代理214是计算机程序,所述计算机程序是已有/默认/标准内核212的延伸或修改。遍及本说明书,将会提及由内核212执行的功能(即,系统调用的处理) - 然而,将会理解,这种功能可由一个或多个内核代理214执行和/或由内核212和一个或多个内核代理214共同执行。因为内核212和内核代理214是公知的,所以将不会在这里对其进行更详细的描述。
由处理器108作为一个或多个进程执行的软件应用可具有各种类型。一些软件应用是所谓的“本机”应用 - 本机软件应用已被编写为如下代码:该代码已随后考虑到机器/计算机/平台的特定目标类型(诸如,具体针对计算机102的类型和/或具体针对处理器108的特定类型和/或具体针对正在执行的操作系统的特定类型)而被编译、链接和绑定。这种本机软件应用的示例在图2中被示出为应用210(但将会理解的是,通过以下的描述将会清楚的是,并非本发明的所有实施例都与这种本机软件应用210相关或涉及这种本机软件应用210)。处理器108可执行应用210作为一个或多个进程,并且如图2中所示,所述一个或多个进程可与内核212连接(或与内核212通信或对内核212进行系统调用)。本机软件应用的示例将会包括例如以C或C++编写的软件应用,该软件应用已被随后编译、链接和绑定以产生一个或多个对应可执行文件,该可执行文件具有用于由处理器108执行的机器语言指令(或操作码)。(一个或多个)可执行文件(和任何关联的资源)可例如被存储在存储介质104或存储器106中。
这种本机应用的问题之一当然在于:它们可能无法跨已有的多个计算机/平台类型执行 - 诸如,不同类别的操作系统和计算装置(诸如,移动电话、个人计算机、平板计算机等)。以前,人们本来需要为应用编写初始代码,可能针对特定计算机/平台类型做出代码修改,并且执行相关编译、链接和绑定操作以针对特定计算机/平台类型产生特定可执行文件。随着计算机/平台类型的激增,对于应用开发者而言,这种方案迅速变得难以管理。因此,现在可以产生独立于平台的代码(诸如,图2的代码216)。这种代码216可包括一个或多个指令,并且可例如是已被编译为字节码的以JavaScript编写的程序或以Java编写的程序。代码216可例如被存储在存储介质104或存储器106中。然后经虚拟机200作为一个或多个进程执行这种代码216。代码216可以是针对web应用(或web app - 即,在web浏览器中运行的软件)的代码,使得web浏览器能够执行代码216(其中web浏览器是由处理器108执行的软件应用,web浏览器使用虚拟机200以便实现web app代码216的执行)。将会理解,通过以下的描述将会清楚的是,并非本发明的所有实施例都与这种代码216和虚拟机200相关或涉及这种代码216和虚拟机200。
虚拟机200是由处理器108执行的计算机程序。虚拟机200及其部件/模块是公知的,并且因此,除了理解使用虚拟机200的本发明的那些实施例所需的程度之外,将不会在这里对其进行详细描述。通常,虚拟机200包括许多模块,包括加载器202、即时(JIT)编译器204、解释器206和存储器管理器208。然而,将会理解,用于虚拟机200的其它结构是可能的,并且图2中图示的虚拟机200仅是示例。
为了作为进程执行应用代码216,加载器202(或类加载器)负责将代码(例如,一个或多个特定类和/或数据和/或指令的字节码)加载到进程存储器201中 - 即,从存储在存储介质104或存储器106中的应用代码216获取一些或全部代码并且将所述代码复制到已为这个进程分配的进程存储器201中。经常按需动态地执行这种操作(从而进程存储器201可根据需要而增加)。加载器202可对待加载的代码216执行核验和/或验证处理(诸如,使用一个或多个数字证书来检查已被应用于代码216的一个或多个数字签名)。
一旦已由加载器202加载代码(即,一旦加载时间结束),代码可由虚拟机200的执行功能元件(也就是说,JIT编译器204和/或解释器206)执行(即,在运行时间)。解释器206可解释所加载的代码中的一些或全部指令以便执行所加载的代码。相比之下,JIT编译器204可将所加载的代码中的一些或全部指令编译成用于由处理器108执行的一个或多个机器语言指令或操作码(诸如,x86操作码)。使用JIT编译器204的一个不利方面是不得不执行将所加载的代码中的指令编译成一个或多个机器语言指令的开销或延迟;然而,一旦被编译,与解释器206能够解释所加载的代码中的对应指令的情况相比,能够更快地执行机器语言指令。另外,由JIT编译器204执行编译而获得的机器语言指令可被存储在进程存储器201中,使得它们可用于随后的执行而不必再次执行编译。虚拟机200(或虚拟机200的运行时间)可决定来自所加载的代码的哪些指令应该由解释器206解释并且哪些指令应该由JIT编译器204编译以用于执行。
并非所有虚拟机200都具有JIT编译器204,并且即使虚拟机200的确具有JIT编译器204,虚拟机200也可在处理来自应用代码216的一个或多个特定指令时决定不使用JIT编译器204。
存储器管理器208帮助执行针对虚拟机200的存储器管理(例如,动态存储器分配和对数据结构的访问)。
由JIT编译器204按照定义执行的JIT编译产生代码(也就是说,机器语言指令)作为它的输出数据。自然地,这种输出数据需要是可执行的(因为所述输出数据毕竟是用于由处理器108执行的机器语言指令)。因此,由JIT编译器204产生的机器语言指令需要被存储在进程存储器201的一部分218(可由一个或多个存储器地址来标识的一个或多个区段或部分或区域)中,所述部分218被标识为(a)可写入(因为JIT编译器204需要将所述指令写入到进程存储器201的这个部分218)和(b)可执行(因为处理器108将会需要能够执行已被写入到进程存储器201的这个部分218的指令)。因此,由JIT编译器204执行的JIT编译是可被执行以能够产生可执行数据并且在存储器中存储可执行数据的少数操作之一。特别地,当JIT编译器204希望对来自所加载的代码216的指令执行JIT编译时,JIT编译器204发出请求以便被分配进程存储器201的一部分,JIT编译器204能够将它将要产生(或刚刚产生)的机器语言指令写入到进程存储器201的所述一部分。通过向内核212发出系统调用,虚拟机200处理这个请求(可能经存储器管理器208)。响应于所述系统调用,内核212将会把进程存储器201的一部分218分配给虚拟机200,并且将会通过为虚拟机200提供针对进程存储器201的所分配的部分218的存储器地址来对所述系统调用做出响应。进程存储器201的部分218由内核212标识为可写入并且可执行的 - 用于设置和存储存储器的一部分的可写入/可执行状态的方法是公知的。所述部分218可包括已经存在(但未分配)的进程存储器201的一个或多个区段;附加或者替代地,内核212可响应于系统调用而扩展/增加进程存储器201,以获得更多存储器,一些或全部的附加存储器被用于所述部分218。
所谓的JIT 溅射攻击(spray attack)是公知的。利用JIT溅射攻击,攻击者尝试将程序执行位置/地址改变到已被用于存储由JIT编译器204产生的机器语言指令的进程存储器201的部分218内的地址。附加或者替代地,攻击者尝试将新的机器语言指令引入到已被用于存储由JIT编译器204产生的机器语言指令的进程存储器201的部分218中,或在进程存储器201的部分218中利用替代机器语言指令替换已有机器语言指令。因为进程存储器201的所述部分218是可写入并且可执行的,所以攻击者能够改变进程执行。JIT 溅射攻击是公知的 - 参见例如:http://en.wikipedia.org/wiki/JIT_spraying;Dion Blazakis的“Interpreter Exploitation: Pointer Interference and JIT spraying” (http://www.semantiscope.com/research/BHDC2010/BHDC-2010-Paper.pdf);和Chris Leary的“Understanding JIT spray”,http://blog.cdleary.com/2011/08/understanding-jit-spray(这些文章的全部内容通过引用包含于此)。本发明的实施例可帮助减轻或减小JIT溅射攻击的影响或效果。
将会理解,攻击者可发起其它类型的攻击,其中那些其它类型的攻击可尝试使用进程存储器201的可写入并且可执行部分中的数据。
众做周知,进程将会具有它自己的特权“类型”或特权级别(所述特权“类型”或特权级别可被视为一个或多个个体特权和/或权利和/或限制和/或许可的汇集或集合)。特权类型可包括某些权利和/或限制关联或对应的一个或多个特定数字或其它标识符,或者特权类型可以是权利和/或限制的明确列表或集合和/或这种权利和/或限制的指示。进程的特权类型可例如指示所述进程被允许或许可(经内核212)执行下述操作中的一个或多个:(a)打开文件;(b)执行一个或多个预定系统调用;(c)读取文件;(d)对文件写入;(e)创建通信连接(诸如,TCP/IP连接)。类似地,进程的特权类型可例如指示所述进程被禁止或拒绝(经内核212)执行下述操作中的一个或多个:(a)打开文件;(b)执行一个或多个预定系统调用;(c)读取文件;(d)对文件写入;(e)创建通信连接(诸如,TCP/IP连接)。每个进程具有它自己的关联的进程标识(例如,进程编号或名称),当创建所述进程时(通常由内核212)设置所述进程标识。内核212可将特权类型与进程关联,并且存储这种关联(例如,在可由内核212访问的表中,其中进程标识与特权的对应类型的指示关联地存储)。以这种方式,在从进程接收到系统调用时,内核212能够确定与调用进程关联的特权类型(通过在所述表中查找与调用进程的标识关联的特权类型),并且基于确定的特权类型决定是否应该执行所述系统调用(或决定应该执行所述系统调用的方式)。
当前内核212(诸如,具有其Linux安全模块的Linux内核)在“进程级别”应用安全。特别地,进程的上述特权类型适用于整个进程。因此,进程存储器201的可写入并且可执行部分218的内容将会与所加载的应用代码(诸如,由解释器206解释的进程的代码216)具有相同的特权类型。因此,存储在进程存储器201的部分218中的机器语言指令能够利用与进程的其它应用代码相同的特权类型进行执行。因此,如果攻击者发起使用进程存储器201的部分218中的数据的攻击,则攻击者的攻击能够利用与最初预期用于合法/未受攻击的进程的特权类型(或级别)相同的特权类型(或在相同特权级别)进行操作。
作为进程的特权可如何工作的示例,内核212可具有(或者可存储)数据结构的阵列或列表,其中每个数据结构对应于相应进程并且包含关于所述进程的信息。在进程的数据结构中存储的关于进程的各条数据可以是分别与创建所述进程的用户和/或组(或当所述进程被创建时登入的人)关联的“用户ID”和/或“组ID”。在典型Linux系统中,例如,内核212具有指定具有给定的关联“用户ID”的进程被允许做什么动作以及具有给定的关联“组ID”的进程被允许做什么动作的一组表(但将会理解的是,附加或者替代地,内核212能够在这种表中存储指定具有给定的关联“用户ID”的进程不被允许做什么动作和/或具有给定的关联“组ID”的进程不被允许做什么动作的数据)。这些动作可包括(以上讨论的)各种类型的一个或多个系统调用。这些动作能够包括例如关于文件的一组许可。例如,某个文件可被标记为:“拥有者可读并且可写入、组可读以及任何其他人不许访问” - 假设所述文件由具有组ID “B”的用户ID “A”拥有,则:(a)当具有用户ID “A”的进程请求访问所述文件时,它被允许读取所述文件和对所述文件写入;(b)当具有不同于“A”的用户ID但具有组ID “B”的进程请求访问所述文件时,它将会仅被允许读取所述文件,即它将不会被允许对所述文件写入;和(c)当具有用户ID “J”和组ID “K”的进程请求访问所述文件时,它将不会被允许访问所述文件,因为它的用户ID和组ID都不与所述文件的用户ID或组ID匹配,并且针对“任何其他人”的许可是“不许访问”。在Linux下,各种装置(例如,硬盘、键盘、帧缓冲器)被视为好像它们是“文件”并且被分派针对“用户”、“组”和“其他”的许可。
进程的一个或多个个体特权也可至少部分地由代码(例如,应用代码210或216)本身设置。这种特权的使用/执行可以是由标准内核212实现的功能或作为基于标准内核212的(例如经内核代理214实现)的定制功能。内核212(或内核代理214)被布置为把由与进程关联的代码210、216设置的特权(如针对内核212或内核代理214所指定)与设想的操作(即,如系统调用中所指定/请求的)进行比较。作为加载代码210、216的一部分,内核212或内核代理214可在与所获得的进程关联的表中存储针对所获得的进程的由所述代码210、216指定的特权的列表。作为示例,在从进程接收到所述进程请求另一进程的执行/创建的系统调用时,内核212或内核代理214可被布置为检查所述调用进程是否具有执行/创建另一进程的特权/许可。如果调用进程的代码/可执行210、216指定指示“这个进程能够执行/创建其它进程”的特权,则内核212或内核代理214将会允许所述系统调用(并且将会因此执行所述系统调用);另一方面,如果调用进程的代码/可执行210、216未指定指示“这个进程能够执行/创建其它进程”的特权或者明确地指定指示“这个进程不能执行/创建其它进程”的特权,则内核212或内核代理214将会拒绝所述系统调用(并且将会因此不执行所述系统调用)。
因此,对于本发明的一些实施例,可如上所述那样由计算机102的处理器108执行进程。例如,通过处理器108执行本机应用210和/或使用虚拟机200执行非本机应用代码216,可得到这个进程。所述进程具有关联的第一特权类型。可经一个或多个上述技术(和/或经任何其它已知的技术)确定/设置/指定这个第一特权类型。本发明的一些实施例提供一种方法,所述方法包括获得用于由所述进程使用的存储器的一部分(例如,进程存储器201的部分218),其中存储器的这个部分被标识为可写入并且可执行存储器,其中存储器的所述一部分具有不同于第一特权类型的关联的第二特权类型。
类似地,为了使得这种进程能够由计算机102的处理器108执行,本发明的一些实施例提供一种方法,所述方法包括:接收对用于由所述进程使用的存储器的一部分(例如,进程存储器201的部分218)的请求;并且响应于所述请求,提供标识为可写入并且可执行存储器的所述存储器的一部分,其中所述存储器的所述一部分具有不同于第一特权类型的关联的第二特权类型。
以下阐述本发明的这些实施例的示例。然而,将会理解,提供这些示例仅用于帮助理解本发明的实施例,并且本发明的其它实施例可按照与以下的示例不同的方式工作。
示例1
作为第一示例,在运行时间,虚拟机200可使用它的JIT编译器204执行一些或全部所加载的应用代码216的JIT编译。为了这个编译,JIT编译器204可被布置为对内核212做出系统调用(可经存储器管理器208)以请求用于由所述进程(其中所述进程对应于加载的代码216)使用的存储器的一部分(例如,进程存储器201的部分218)。例如,作为JIT编译器204将所述进程的一些或全部代码216编译成一个或多个机器语言指令的一部分,可产生这个请求,JIT编译器204希望在所请求的存储器的所述一部分中存储所述一个或多个机器语言指令。因此,这个请求是对分配进程存储器201的可写入并且可执行部分218的请求。因此,这种请求是动态存储器分配请求。当然,将会理解,JIT编译器204可做出其它动态存储器分配请求,并非所有动态存储器分配请求都针对进程存储器201的可写入并且可执行部分,并且JIT编译器204也可由于其它原因而做出针对进程存储器201的可写入并且可执行部分的动态存储器分配请求。
在接收到基于对存储器的所述部分的请求的系统调用时,内核212可被布置为向所述进程分配进程存储器201的所述部分218并且向虚拟机200(或JIT编译器204)返回所分配的存储器的地址。考虑到系统调用的性质(即,系统调用是对存储器的可写入并且可执行部分的请求),分配的进程存储器201的部分218是标识为存储器的可写入并且可执行部分的部分。特别地,可存在内核212以前已标识为可写入并且可执行存储器的进程存储器201的一部分,从而内核212随后响应于接收到的请求而选择分配这个已经标识的可写入并且可执行存储器的当前未分配的部分。替代地,响应于所述请求,内核212可分配进程存储器201的当前未分配的部分并且设置存储器的该部分以便被标识为可写入并且可执行的。如上所述,动态存储器分配可涉及增加或扩展已有进程存储器201,使得附加存储器可用于满足所述请求。
以这种方式,JIT编译器204(或虚拟机200)可获得(或接收或分配/提供)存储器的所述部分218(通过发出请求并且接收存储器的所述部分218的地址)。类似地,以这种方式,内核212可向所述进程提供存储器的所述部分218(或将存储器的所述部分218分派给所述进程,或把存储器的所述部分218标识给所述进程,或指定存储器的所述部分218由所述进程使用)(通过接收请求并且提供内核212分配给所述进程的存储器的所述部分218的地址)。
在这个示例中,内核212被布置为:当在运行时间接收到针对分配可写入并且可执行存储器的系统调用或请求时,内核212将会把进程存储器201的所分配部分的特权设置为具有不同于第一特权类型的第二特权类型。如果内核212未在运行时间(例如,在加载时间,加载器202在所述加载时间将代码加载到进程存储器201中,使得加载器202需要来自进程存储器201的可写入并且可执行存储器的一部分,加载器202能够将一些或全部代码216加载到可写入并且可执行存储器的所述一部分中)接收到针对分配可写入并且可执行存储器的系统调用或请求,则内核212可被布置为分配具有第一特权类型的来自进程存储器201的可写入并且可执行存储器的一部分。
这里,第二特权类型可以是预定特权类型。替代地,内核212可被布置为例如通过设置与第一特权类型相同的第二特权类型但去除一个或多个特定许可或特权和/或添加一个或多个特定限制来基于所述进程的第一特权类型指定或设置第二特权类型,以由此限制或改进第一特权类型(并且由此帮助保护进程存储器201的已分配部分218或帮助防止进程存储器201的已分配部分218的误用)。
示例2
作为第二示例,虚拟机200的JIT编译器204可被布置为对内核212做出系统调用(可经存储器管理器208)以请求用于由所述进程(其中所述进程对应于加载的代码216)使用的存储器的一部分(例如,进程存储器201的部分218)。例如,作为JIT编译器204将所述进程的一些或全部代码216编译成JIT编译器204希望在存储器的所请求部分中存储的一个或多个机器语言指令的一部分,可产生这个请求。因此,这个请求是对分配进程存储器201的可写入并且可执行部分218的请求。因此,这种请求是动态存储器分配请求。当然,将会理解,JIT编译器204可做出其它动态存储器分配请求,并非所有动态存储器分配请求都针对进程存储器201的可写入并且可执行部分,并且JIT编译器204也可由于其它原因而做出针对进程存储器201的可写入并且可执行部分的动态存储器分配请求。
在这个示例中,JIT编译器204被布置为:针对分配可写入并且可执行存储器的请求本身标识不同于第一特权类型的第二特权类型。这不同于以上的示例1,在示例1中,来自JIT编译器204的请求不标识第二特权类型。
例如,在C编程语言中,可通过从stdlib库调用malloc函数(例如,ptr = malloc(num),ptr = malloc (num)使内核212分配num字节大小的存储器的一部分,其中变量ptr被设置为malloc的返回值,所述返回值是存储器的动态分配部分的指针)来做出针对分配存储器的请求。本发明的一些实施例可使用新版本的malloc函数(以下被称为malloc_new),所述新版本的malloc函数具有指示待分配的存储器的特权类型的附加参数(例如,ptr = malloc_new (num, priv),ptr = malloc_new (num, priv)使内核212分配num字节大小并且具有由priv的值指示的特权类型的存储器的一部分,其中变量ptr被设置为malloc_new的返回值,所述返回值是存储器的动态分配部分的指针)。JIT编译器204和内核212可能已被编写为使用新版本的malloc函数,即malloc_new。如果未指定priv的值,则内核212可假设priv采用与第一特权类型对应的值。例如,利用C++中的new函数或不同语言中的类似存储器分配函数,能够执行相同的操作。
在接收到基于对存储器的所述部分的请求的系统调用时,内核212可被布置为向所述进程分配进程存储器201的部分218并且向虚拟机200(或JIT编译器204)返回已分配存储器的地址。考虑到系统调用的性质(即,系统调用是对存储器的可写入并且可执行部分的请求),被分配的进程存储器201的所述部分218是被标识为存储器的可写入并且可执行部分的一部分。特别地,可存在内核212以前已标识为可写入并且可执行存储器的进程存储器201的一部分,使得内核212随后响应于接收到的请求而选择分配这个已经标识的可写入并且可执行存储器的当前未分配部分。替代地,响应于所述请求,内核212可分配进程存储器201的当前未分配部分并且设置存储器的该部分以便被标识为可写入并且可执行。如上所述,动态存储器分配可涉及增加或扩展已有进程存储器201,使得附加存储器可用于满足所述请求。
以这种方式,JIT编译器204(或虚拟机200)可获得(或接收或分配/提供)存储器的所述部分218(通过发出请求并且接收存储器的所述部分218的地址)。类似地,以这种方式,内核212可向所述进程提供存储器的所述部分218(或将存储器的所述部分218分派给所述进程,或把存储器的所述部分218标识给所述进程,或指定存储器的所述部分218由所述进程使用)(通过接收请求并且提供内核212分配给所述进程的存储器的所述部分218的地址)。
在这个示例中,内核212被布置为:在接收到对可写入并且可执行存储器的请求时,内核212将会把进程存储器201的已分配部分的特权设置为具有在接收到的请求中标识的第二特权类型。
这里,第二特权类型可以是预定特权类型。替代地,JIT编译器204可被布置为例如通过设置与第一特权类型相同的第二特权类型但去除一个或多个特定许可或特权和/或添加一个或多个特定限制来基于针对所述进程的第一特权类型指定或设置第二特权类型,以由此限制或改进第一特权类型(并且由此帮助保护进程存储器201的已分配部分218或帮助防止进程存储器201的已分配部分218的误用)。
在示例2中,需要定制JIT编译器204(即,被布置为发出对可写入并且可执行存储器的各部分的请求的JIT编译器204,其中这种请求标识第二特权类型)以及定制内核212(或内核代理214)(即,被布置为接收和处理对可写入并且可执行存储器的各部分的请求的内核212(或内核代理214),其中这种请求可标识第二特权类型)。相比之下,示例1不需要定制JIT编译器204 - 替代地,示例1需要定制内核212(或内核代理214)(即,被布置为接收和处理对可写入并且可执行存储器的各部分的请求并且如上所述处理这种请求的内核212(或内核代理214),其中这种请求不标识第二特权类型)。示例1因此利用已有/传统虚拟机200和它们的JIT编译器204工作;相比之下,示例2可提供更多灵活性,因为可编写不同JIT编译器204,这使它们能够以不同方式设置第二特权类型。
示例3
作为第三示例,系统100可被布置为使得:
(1)在进程的加载时间期间(即,在所述进程的运行时间之前,当加载器202正在加载一些或全部应用代码216时)对内核212做出的、请求用于由所述进程使用的存储器的可写入并且可执行部分218(例如,进程存储器201的部分218)的、来自所述进程的(或由所述进程做出的)对虚拟机200(或其任何部件)的系统调用被处理,使得所获得的分配的存储器具有第一特权类型作为它的关联特权类型;和
(2)在进程的运行时间期间对内核212做出的、请求用于由所述进程使用的存储器的可写入并且可执行部分218(例如,进程存储器201的部分218)的、来自所述进程的(或由所述进程做出的)对虚拟机200(或其任何部件)的系统调用被处理,使得所获得的分配的存储器具有不同于第一特权类型的第二特权类型作为它的关联特权类型。
可按照与以上示例1和/或示例2中阐述的示例类似的方式实现存储器的各部分的获得和提供。例如:
(i)对分配存储器的可写入并且可执行部分218的请求可不指定第二特权类型(按照与示例1相同的方式)。在这种情况下,内核212被布置为:在运行时间接收到针对分配可写入并且可执行存储器的系统调用或请求时,内核212将会把进程存储器201的已分配部分的特权设置为具有不同于第一特权类型的第二特权类型。如果内核212未在运行时间(例如,在加载时间,加载器202在所述加载时间将代码加载到进程存储器201中,从而加载器202需要来自进程存储器201的可写入并且可执行存储器的一部分,加载器202能够将一些或全部代码216加载到来自进程存储器201的可写入并且可执行存储器的所述部分中)接收到针对分配可写入并且可执行存储器的系统调用或请求,则内核212可被布置为分配具有第一特权类型的来自进程存储器201的可写入并且可执行存储器的一部分。与示例1一样,第二特权类型可以是预定特权类型。替代地,内核212可被布置为例如通过设置与第一特权类型相同的第二特权类型但去除一个或多个特定许可或特权和/或添加一个或多个特定限制来基于所述进程的第一特权类型指定或设置第二特权类型,以由此限制或改进第一特权类型(并且由此帮助保护进程存储器201的已分配部分218 或帮助防止进程存储器201的已分配部分218的误用)。
(ii)对分配存储器的可写入并且可执行部分218的请求可指定第二特权类型(按照与示例2相同的方式)。可按照与以上针对示例2阐述的方式相同的方式实现这一点。在这种情况下,内核212被布置为:在接收到对可写入并且可执行存储器的请求时,内核212将会把进程存储器201的已分配部分的特权设置为具有在接收到的请求中标识的第二特权类型。以这种方式,例如,虚拟机200的存储器管理器208可被布置使得它代表虚拟机200的部件发出存储器分配请求如下:(a)由加载器202对可写入并且可执行存储器的动态分配的任何请求针对具有第一特权类型的存储器,从而(b)由JIT编译器204和/或解释器206对可写入并且可执行存储器的动态分配的任何请求针对具有不同于第一特权类型的第二特权类型的存储器。这里,第二特权类型可以是预定特权类型。替代地,虚拟机200(或虚拟机200的相关调用部件)可被布置为例如通过设置与第一特权类型相同的第二特权类型但去除一个或多个特定许可或特权和/或添加一个或多个特定限制来基于所述进程的第一特权类型指定或设置第二特权类型,以由此限制或改进第一特权类型(并且由此帮助保护进程存储器201的已分配部分218或帮助防止进程存储器201的已分配部分218的误用)。
与以上示例1和2一样,在以上示例3的(ii)中,需要定制虚拟机200(即,被布置为发出对可写入并且可执行存储器的各部分的请求的虚拟机200,其中这种请求标识第二特权类型)以及定制内核212(或内核代理214)(即,被布置为接收和处理对可写入并且可执行存储器的各部分的请求的内核212(或内核代理214),其中这种请求可标识第二特权类型)。相比之下,示例3的(i)不需要定制虚拟机200 - 替代地,示例3的(i)需要定制内核212(或内核代理214)(即,被布置为接收和处理对可写入并且可执行存储器的各部分的请求并且如上所述处理这种请求的内核212(或内核代理214),其中这种请求不标识第二特权类型)。示例3的(i)因此利用已有/传统虚拟机200进行工作;相比之下,示例3的(ii)可提供更多灵活性,因为可编写不同虚拟机200(或它们的部件),这使它们能够以不同方式设置第二特权类型。
示例4
作为第四示例,系统100可被布置为使得:
(1)在进程的加载时间期间(即,在所述进程的运行时间之前)对内核212做出的、请求用于由所述进程使用的存储器的可写入并且可执行部分218(例如,进程存储器201的部分218)的、来自所述进程的(或由所述进程做出的)对执行本机应用210的系统调用被处理,从而所获得的分配的存储器具有第一特权类型作为它的关联特权类型。
(2)在进程的运行时间期间对内核212做出的、请求用于由所述进程使用的存储器的可写入并且可执行部分218(例如,进程存储器201的部分218)的、来自所述进程的(或由所述进程做出的)对执行本机应用210的系统调用被处理,从而所获得的分配的存储器具有不同于第一特权类型的第二特权类型作为它的关联特权类型。
这个示例类似于以上示例3,并且可被按照与以上示例3相同的方式实现。实际上,示例3可被视为示例4的特定情况,示例4中本机应用210是执行虚拟机200的应用。
以上示例和描述已提及分配进程存储器201的所述部分218,其中这个部分218用于由所述进程使用。然而,在本发明的一些实施例中,所述存储器的待分配部分不由所述进程本身使用。替代地,在一些实施例中,进程可对内核212做出系统调用以创建新进程。在这种情况下,新进程将会具有它自己的所分配的进程存储器。在一些实施例中,内核212被布置为:在接收到创建新进程的系统调用或请求时,分配给新创建进程的进程存储器具有不同于调用进程的特权类型的第二特权类型的关联特权。可按照与以上示例1和2类似的方式获得和提供所述新进程的这个进程存储器。具体来说:
(i)创建新进程的请求可不指定第二特权类型(按照与示例1相同的方式)。在这种情况下,内核212被布置为:当在运行时间从已经执行的进程接收到创建新进程的系统调用或请求时,内核212将会把针对新创建进程的进程存储器的特权类型设置为具有不同于第一特权类型的第二特权类型。与示例1一样,第二特权类型可以是预定特权类型。替代地,内核212可被布置为例如通过设置与第一特权类型相同的第二特权类型但去除一个或多个特定许可或特权和/或添加一个或多个特定限制来基于所述进程的第一特权类型指定或设置第二特权类型,以由此限制或改进第一特权类型(并且由此帮助保护针对新创建进程的已分配进程存储器或帮助防止针对新创建进程的已分配进程存储器的误用)。
(ii)创建新进程的请求可指定第二特权类型(按照与示例2相同的方式)。可按照与以上针对示例2阐述的方式相同的方式实现这一点。在这种情况下,内核212被布置为:当在运行时间从已经执行的进程接收到创建新进程的系统调用或请求时,内核212将会把针对新创建进程的进程存储器的特权设置为具有在接收到的请求中标识的第二特权类型。这里,第二特权类型可以是预定特权类型。替代地,调用进程可被布置为例如通过设置与第一特权类型相同的第二特权类型但去除一个或多个特定许可或特权和/或添加一个或多个特定限制来基于所述进程的第一特权类型指定或设置第二特权类型,由此限制或改进第一特权类型(并且由此帮助保护针对新创建进程的进程存储器或帮助防止针对新创建进程的进程存储器的误用)。
如上所述,当前内核212(诸如,具有其Linux安全模块的Linux内核)在“进程级别”应用安全。具体来说,在当前系统中,进程的特权类型适用于整个进程。相比之下,本发明的实施例实现改进很多的特权控制,从而可执行存储器可具有与所述进程的主“第一”特权类型不同的特权。这能够帮助减轻攻击者可能已发起的攻击的结果,可能使一些攻击完全无效。例如:
(a)进程的第一特权类型可允许所述进程打开和读取文件。如果与存储器的可执行部分关联的第二特权类型禁止存储器的该部分中的指令打开和读取文件,则攻击者不能使用存储器的该部分中的数据发起涉及打开和读取文件的攻击(并且因此,所述攻击不能访问文件中的调用进程原本可能能够访问的敏感数据)。
(b)进程的第一特权类型可允许所述进程对文件写入。如果与存储器的可执行部分关联的第二特权类型禁止存储器的该部分中的指令对文件写入,则攻击者不能使用存储器的该部分中的数据发起涉及对文件写入的攻击(并且因此,所述攻击不能覆写或删除文件中的调用进程原本可能能够覆写或删除的数据)。
(c)进程的第一特权类型可允许所述进程打开与另一计算机的通信链路(例如,TCP/IP连接)。如果与存储器的可执行部分关联的第二特权类型禁止存储器的该部分中的指令打开与另一计算机的通信链路,则攻击者不能使用存储器的该部分中的数据发起涉及打开与另一计算机的通信链路的攻击(并且因此,所述攻击不能访问来自正在执行所述进程的计算机102的数据并且将该数据传送给另一计算机)。
(d)进程的第一特权类型可允许所述进程创建新进程。如果与存储器的可执行部分关联的第二特权类型禁止存储器的该部分中的指令创建新进程,则攻击者不能使用存储器的该部分中的数据发起涉及创建新进程的攻击(并且因此,所述攻击不能为了恶意目的而启动新进程作为“秘密后台”进程)。替代地,如果做出用于创建新进程的系统调用,则可使用第二特权类型,从而针对新进程的进程存储器具有第二特权类型,该第二特权类型限制某些系统调用(诸如,在以上示例(a)-(c)中) - 在这种情况下,攻击者通过使用针对所述新进程的进程存储器中的数据来发起攻击的能力受到更多限制(如以上示例(a)-(c)中所阐述的)。
第二特权类型可至少部分地由代码(例如,应用代码210或216)本身设置或指定。这种特权的使用/执行可以是由标准内核212实现的功能或作为基于标准内核212(例如经内核代理214实现)的定制功能。在这种实施例中,内核212(或内核代理214)被布置为比较由代码210、216设置的(如针对内核212或内核代理214所指定的)特权与设想的(即,在系统调用中所指定/请求的)操作以及还有导致(或做出/发出)对所述操作(即,系统调用)的请求的(一个或多个)指令在进程存储器201中所在的位置。作为加载代码210、216的一部分,内核212或内核代理214可在与所获得的进程关联的表中存储由所述代码210、216为针对所获得的进程的一个或多个存储器区域/部分(即,为进程存储器201的一个或多个部分)指定的特权的列表。这种第二类型的特权可:(a)指定进程存储器201的特定部分,诸如明确地指定一个或多个地址的范围(例如,经开始地址和结束地址或所述部分的大小)和/或指定来自代码210、216的一个或多个指令和/或通过指示存储器区域类型(诸如,“可写入并且可执行的任何存储器)来隐含地指定;和(b)一个或多个许可/权利/限制。存储器的指定部分可以是或者可包括存储器的可写入并且可执行区域218;替代地,存储器的指定部分可以是或者可包括除存储器的可写入并且可执行区域218之外的针对所述进程的全部存储器201或指令。所述一个或多个指定许可可与指定存储器中的指令相关,或者可与除指定存储器之外的针对所述进程的全部存储器201或指令相关。以这种方式,不同于第一特权类型的第二特权类型可与存储器的一部分(诸如,部分218)关联。
作为示例,在从进程接收到所述进程请求另一进程的执行/创建的系统调用时,内核212或内核代理214可被布置为检查做出所述系统调用的指令是否位于存储器201的具有执行/创建另一进程的特权/许可的区域中。除了检查所述进程作为整体是否具有这种特权/许可,或者替代检查所述进程作为整体是否具有这种特权/许可,可实现这一点。如果调用指令来自存储器201的如下区域:针对该区域的指定第二特权类型指示“存储器的这个区域能够执行/创建其它进程”,则内核212或内核代理214将会允许所述系统调用(并且将会因此执行所述系统调用);另一方面,如果调用指令来自存储器的如下区域:针对该区域的指定第二特权类型指示“存储器的这个区域不能执行/创建其它进程”,则核心212或内核代理214将会拒绝所述系统调用(并且将会因此不执行所述系统调用)。
将会理解,可写入并且可执行存储器的不同部分可能已为它们分配不同的关联“第二”特权类型。
在一些实施例中,替代于或附加于源自代码210、216的第二特权类型,虚拟机200(例如,加载器202和/或存储器管理器208)可被布置成:为所述内核提供/指定第二特权类型。以这种方式,代码210、216的编写者/开发者不需要记得将第二特权类型的这种指定包括在代码210、216中,因为虚拟机200能够为他维护第二特权类型。类似地,这种虚拟机200将会随后回溯地将这种第二特权类型应用于传统/已有代码210、216。
将会理解,所描述的方法已被示出为按照特定次序执行的个体步骤。然而,技术人员将会理解,这些步骤可被组合或按照不同次序执行,同时仍然实现预期结果。
将会理解,可使用各种不同的信息处理系统实现本发明的实施例。具体来说,虽然其附图和讨论提供示例性计算系统和方法,但呈现这些仅是为了在讨论本发明的各种方面时提供有用的参考。可在任何合适的数据处理装置(诸如,个人计算机、膝上型计算机、个人数字助手、移动电话、机顶盒、电视、服务器计算机等)上执行本发明的实施例。当然,为了讨论的目的,系统和方法的描述已被简化,并且它们仅是可被用于本发明的实施例的许多不同类型的系统和方法之一。将会理解,逻辑块之间的边界仅是说明性的,并且替代实施例可合并逻辑块或元件,或者可对各种逻辑块或元件施加功能的替代分解。
将会理解,上述功能可被实现为作为硬件和/或软件的一个或多个对应模块。例如,上述功能可被实现为用于由系统的处理器执行的一个或多个软件部件。替代地,上述功能可被实现为硬件,诸如一个或多个现场可编程门阵列(FPGA)和/或一个或多个专用集成电路(ASIC)和/或一个或多个数字信号处理器(DSP)和/或其它硬件装置。实现于这里包含的流程图中或如上所述的方法步骤可各自由对应各模块实现;实现于这里包含的流程图中或如上所述的多个方法步骤可一起由单个模块实现。
将会理解,在本发明的实施例由计算机程序实现的情况下,则存储或承载计算机程序的一个或多个存储介质和/或一个或多个传输介质形成本发明的各方面。计算机程序可具有一个或多个程序指令或程序代码,当由一个或多个处理器(或者一个或多个计算机)执行所述程序指令或程序代码时,所述程序指令或程序代码执行本发明的实施例。如这里所使用,术语“程序”可以是被设计用于在计算机系统上执行的指令序列,并且可包括子例程、函数、过程、模块、对象方法、对象实现、可执行应用、小应用程序、小服务程序、源代码、目标代码、字节码、共享库、动态链接库和/或被设计用于在计算机系统上执行的其它指令序列。存储介质可以是磁盘(诸如,硬盘驱动器或软盘)、光盘(诸如,CD-ROM、DVD-ROM或蓝光盘)或存储器(诸如,ROM、RAM、EEPROM、EPROM、闪存或便携式/可移动存储器装置)等。传输介质可以是通信信号、数据广播、两个或更多个计算机之间的通信链路等。
Claims (22)
1.一种用于在装置上执行进程的方法,所述装置包括用于执行所述进程的一个或多个处理器和存储器,其中所述进程具有关联的第一特权类型,所述方法包括:
获得用于供所述进程使用或用于供由所述进程创建的另一进程使用的存储器的一部分,其中存储器的所述部分被标识为可写入并且可执行存储器,其中存储器的所述部分具有不同于第一特权类型的关联的第二特权类型。
2.如权利要求1所述的方法,其中在所述进程的运行时间执行所述获得。
3.如前面权利要求中任何一项所述的方法,其中所述获得包括:请求在所述一个或多个处理器上执行的内核执行动态存储器分配。
4.如权利要求3所述的方法,其中所述请求为所述内核指定第二特权类型,所述内核被布置为分配存储器的所述部分并且将指定的第二特权类型与存储器的所述部分关联。
5.如权利要求3所述的方法,其中所述请求不为所述内核指定第二特权类型,所述内核被布置为分配存储器的所述部分,并且如果所述请求发生在所述进程的运行时间,则将第二特权类型与存储器的所述部分关联。
6.如前面权利要求中任何一项所述的方法,其中作为即时编译器将所述进程的代码编译成一个或多个机器语言指令的一部分,执行所述获得,所述一个或多个机器语言指令由所述即时编译器存储在存储器的所述部分中。
7.一种用于实现进程在装置上执行的方法,所述装置包括用于执行所述进程的一个或多个处理器和存储器,其中所述进程具有关联的第一特权类型,所述方法包括:
接收对用于供所述进程使用或用于供由所述进程创建的另一进程使用的存储器的一部分的请求;以及
响应于所述请求,提供所述存储器的被标识为可写入并且可执行的一部分,其中所述存储器的所述部分具有不同于第一特权类型的关联的第二特权类型。
8.如权利要求7所述的方法,其中在所述进程的运行时间接收所述请求。
9.如权利要求7和8中任何一项所述的方法,其中所述请求是动态存储器分配请求。
10.如权利要求9所述的方法,其中所述动态存储器分配请求指定第二特权类型。
11.如权利要求7至10中任何一项所述的方法,其中所述接收和提供由在所述一个或多个处理器上执行的内核来执行。
12.如权利要求7至11中任何一项所述的方法,其中当即时编译器将所述进程的代码编译成一个或多个机器语言指令时,从即时编译器接收所述请求,所述一个或多个机器语言指令由所述即时编译器存储在所述存储器的所请求部分中。
13.如前面权利要求中任何一项所述的方法,其中所述第一特权类型和/或第二特权类型允许下述各项中的一项或多项:
(a)打开文件;
(b)执行一个或多个预定系统调用;
(c)读取文件;
(d)对文件写入;
(e)创建通信连接。
14.如前面权利要求中任何一项所述的方法,其中所述第一特权类型和/或第二特权类型禁止下述各项中的一项或多项:
(a)打开文件;
(b)执行一个或多个预定系统调用;
(c)读取文件;
(d)对文件写入;
(e)创建通信连接。
15.如前面权利要求中任何一项所述的方法,其中与第一特权类型相比,第二特权类型是更加禁止性的。
16.如前面权利要求中任何一项所述的方法,其中所述第二特权类型是预定特权类型。
17.如权利要求1至15中任何一项所述的方法,包括:至少部分地基于第一特权类型确定第二特权类型。
18.如前面权利要求中任何一项所述的方法,其中所述进程的执行由在所述一个或多个处理器上运行的虚拟机执行。
19.如权利要求1至17中任何一项所述的方法,其中所述进程的执行由在所述一个或多个处理器上运行的解释器执行。
20.一种设备,被布置为执行如权利要求1至19中任何一项所述的方法。
21.一种计算机程序,当所述计算机程序由一个或多个处理器执行时,所述计算机程序使所述一个或多个处理器执行如权利要求1至19中任何一项所述的方法。
22.一种计算机可读介质,存储如权利要求21所述的计算机程序。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/EP2014/069281 WO2016037650A1 (en) | 2014-09-10 | 2014-09-10 | Memory privilege |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107077356A true CN107077356A (zh) | 2017-08-18 |
Family
ID=51564633
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480083306.6A Pending CN107077356A (zh) | 2014-09-10 | 2014-09-10 | 存储器特权 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10459851B2 (zh) |
EP (1) | EP3191943B1 (zh) |
CN (1) | CN107077356A (zh) |
WO (1) | WO2016037650A1 (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016037650A1 (en) | 2014-09-10 | 2016-03-17 | Irdeto B.V. | Memory privilege |
US11775201B2 (en) * | 2018-08-08 | 2023-10-03 | Huawei Technologies Co., Ltd. | Apparatus and method for providing one time programmable memory features in a hypervisor of a computing device |
US11029968B1 (en) * | 2019-07-31 | 2021-06-08 | Facebook Technologies, Llc | Operating system with a single kernel stack per processor |
US20210092122A1 (en) * | 2019-09-23 | 2021-03-25 | Vmware, Inc. | Centralized capability system for programmable switches |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060047959A1 (en) * | 2004-08-25 | 2006-03-02 | Microsoft Corporation | System and method for secure computing |
US8312249B1 (en) * | 2008-10-10 | 2012-11-13 | Apple Inc. | Dynamic trampoline and structured code generation in a signed code environment |
CN102929802A (zh) * | 2011-08-08 | 2013-02-13 | 国民技术股份有限公司 | 一种存储资源的保护方法及系统 |
CN103080912A (zh) * | 2010-08-26 | 2013-05-01 | 飞思卡尔半导体公司 | 用于微处理器系统的存储器管理单元、微处理器系统及管理存储器的方法 |
US20140245444A1 (en) * | 2013-02-22 | 2014-08-28 | Bitdefender IPR Management Ltd. | Memory Introspection Engine for Integrity Protection of Virtual Machines |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016037650A1 (en) | 2014-09-10 | 2016-03-17 | Irdeto B.V. | Memory privilege |
-
2014
- 2014-09-10 WO PCT/EP2014/069281 patent/WO2016037650A1/en active Application Filing
- 2014-09-10 EP EP14766681.2A patent/EP3191943B1/en active Active
- 2014-09-10 CN CN201480083306.6A patent/CN107077356A/zh active Pending
- 2014-09-10 US US15/510,114 patent/US10459851B2/en active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060047959A1 (en) * | 2004-08-25 | 2006-03-02 | Microsoft Corporation | System and method for secure computing |
US8312249B1 (en) * | 2008-10-10 | 2012-11-13 | Apple Inc. | Dynamic trampoline and structured code generation in a signed code environment |
CN103080912A (zh) * | 2010-08-26 | 2013-05-01 | 飞思卡尔半导体公司 | 用于微处理器系统的存储器管理单元、微处理器系统及管理存储器的方法 |
CN102929802A (zh) * | 2011-08-08 | 2013-02-13 | 国民技术股份有限公司 | 一种存储资源的保护方法及系统 |
US20140245444A1 (en) * | 2013-02-22 | 2014-08-28 | Bitdefender IPR Management Ltd. | Memory Introspection Engine for Integrity Protection of Virtual Machines |
Also Published As
Publication number | Publication date |
---|---|
EP3191943A1 (en) | 2017-07-19 |
WO2016037650A1 (en) | 2016-03-17 |
US10459851B2 (en) | 2019-10-29 |
EP3191943B1 (en) | 2022-08-17 |
US20180165226A1 (en) | 2018-06-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20220109721A1 (en) | Access services in hybrid cloud computing systems | |
CN104885092B (zh) | 用于操作系统的安全系统和方法 | |
CN105190570B (zh) | 用于虚拟机器的完整性保护的存储器自省引擎 | |
JP6397500B2 (ja) | 仮想マシン・マネージャーによって支援される選択的コード完全性強制 | |
US10225253B2 (en) | Usage tracking in hybrid cloud computing systems | |
US7673109B2 (en) | Restricting type access to high-trust components | |
CN101361077B (zh) | 一种用于安全因特网访问的方法和计算机 | |
JP5647360B2 (ja) | メモリ範囲を無作為に割り当てたセキュアシステムにおいてjitをサポートするためのシステム及び方法 | |
US11095648B2 (en) | Dashboard as remote computing services | |
US10354095B2 (en) | Methods and apparatus to initialize enclaves on target processors | |
EP3023903A1 (en) | Sharing data across profiles | |
TW201820131A (zh) | 進程管理方法及裝置 | |
CN107077356A (zh) | 存储器特权 | |
WO2013101034A1 (en) | Software modification for partial secure memory processing | |
CN103514395A (zh) | 插件权限控制方法及系统 | |
US20240311447A1 (en) | Programmable model-driven license management and enforcement in a multi-tenant system | |
US20170255780A1 (en) | Methods and systems for securely executing untrusted software | |
CN107980133A (zh) | 暂时进程特权解除 | |
CN103092769B (zh) | 对移动通信设备进行加速的方法及装置 | |
US11500981B2 (en) | Shadow stack enforcement range for dynamic code | |
CN108171063A (zh) | 访问安全元件的方法、终端及计算机可读存储介质 | |
EP2738709A1 (en) | An improved method and device for enforcing privacy policies | |
CN108205630A (zh) | 一种多用户下基于SeLinux的资源访问方法及装置 | |
US11429412B2 (en) | Guest protection from application code execution in kernel mode | |
US20140280698A1 (en) | Processing a Link on a Device |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20170818 |
|
WD01 | Invention patent application deemed withdrawn after publication |