首页> 中国专利> 通过安全虚拟机器实施安全政策的方法和系统

通过安全虚拟机器实施安全政策的方法和系统

摘要

提供了一种用于实施以安全虚拟机器的指令集编码的安全政策的方法和系统。安全系统提供了执行以安全虚拟机器的指令集表达的安全程序的安全虚拟机器。安全系统将安全程序储存在安全虚拟机器的指令存储中。当发生安全实施事件时,安全虚拟机器使用安全实施事件的数据执行其指令存储的指令,以实施安全政策。

著录项

  • 公开/公告号CN1690957A

    专利类型发明专利

  • 公开/公告日2005-11-02

    原文格式PDF

  • 申请/专利权人 微软公司;

    申请/专利号CN200510062645.9

  • 发明设计人 A·H·贝克;

    申请日2005-03-29

  • 分类号G06F9/44;G06F1/00;

  • 代理机构31100 上海专利商标事务所有限公司;

  • 代理人钱慰民

  • 地址 美国华盛顿州

  • 入库时间 2023-12-17 16:38:09

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2015-05-20

    专利权的转移 IPC(主分类):G06F9/44 变更前: 变更后: 登记生效日:20150429 申请日:20050329

    专利申请权、专利权的转移

  • 2010-06-09

    授权

    授权

  • 2007-05-23

    实质审查的生效

    实质审查的生效

  • 2005-11-02

    公开

    公开

说明书

技术领域

所描述的技术一般涉及实施安全政策来阻挡计算机程序的不合需要的行为。

背景技术

诸如操作系统和文件系统等软件系统提供了应用编程接口,应用程序通过其能够访问软件系统的服务。应用程序接口可向函数提供用于执行制定服务的参数。例如,文件系统可具有用于创建文件的函数(也称为“系统调用”)。该函数可具有指定要创建的文件的文件位置、文件名、文件类型、文件大小等的参数。当应用程序调用一函数时,它传递对应于为该函数定义的形式参数的实际参数。函数可在实际参数上执行某些核查,以确保它们是有效的。例如,创建文件函数可确保指定的文件类型是有效的。如果参数无效,则函数向应用程序返回一出错。

由于各种原因,软件系统可以极其复杂。软件系统可寻求与该软件系统的所有现有版本后向兼容。在这一情况下,软件系统可能需要支持现有版本的应用程序接口的所有函数。由于通常向每一版本添加新函数,因此函数的数量可能相当大,并且其交互十分复杂。某些软件系统也可包括由同一公司的不同部门或不同的公司开发的软件组件。这些组件的交互也可以相当复杂。

对软件系统越来越重要的是确保其应用编程接口对无意的误用或有意的攻击都不是易破坏的。软件系统的一个易破坏性可以通过其应用编程接口的参数。当现有版本的函数与较新版本的函数组合时,并且当集成来自不同开发者的组件时,由函数执行的现有参数确认可能不足以确保函数的正确行为。例如,由一个公司开发的文件系统的应用编程接口可以与由另一公司开发的文件服务器集成、应用编程接口的最大文件大小参数可以大于文件服务器支持的参数。在这一情况下,应用编程接口可接受的文件大小可导致文件服务器的问题。作为另一示例,系统管理员可能希望进一步限制最大文件大小,但是系统管理员可能没有可用的手段来实施该限制。

需要的是一种用于实施安全政策,尤其是为应用程序接口的参数指定有效条件的安全政策的机制。

发明内容

用于实施安全政策的方法和系统是由一安全虚拟机器提供的。该安全虚拟机器包括处理器引擎、指令存储、数据存储和指令指针。该安全虚拟引擎执行使用从安全政策的高级语言表示所编译的中间语言指定的安全程序。该安全程序被加载到指令存储用于执行。当出现安全实施事件时,诸如调用应用编程接口的函数,将来自安全实施事件的数据储存在数据存储中,并且处理器引擎开始从指令存储中取出并执行用于安全程序的指令。指令指定了要采取的行动,以基于安全实施事件的数据实施安全政策。

附图说明

图1所示是一个实施例中安全系统的组件的框图。

图2所示是一个实施例中数据存储的数据结构的框图。

图3所示是一个实施例中安全虚拟机器的指令的布局的图示。

图4所示是一个实施例中加载程序组件的处理的流程图。

图5所示是一个实施例中系统调用截取组件的处理的流程图。

图6所示是一个实施例中安全虚拟机器的处理器引擎的处理的流程图。

图7所示是一个实施例中安全虚拟机器的解除引用(dereference)组件的处理的流程图。

图8所示是一个实施例中安全虚拟机器的求值测试组件的处理的流程图。

图9所示是一个实施例中安全虚拟机器的测试组件的处理的流程图。

图10所示是一个实施例中安全虚拟机器的匹配字符串组件的处理的流程图。

图11所示是一个实施例中安全虚拟机器的非测试(nontest)组件的处理的流程图。

具体实施方式

提供了一种在计算机系统中用于实施以安全虚拟机器的指令集编码的安全政策的方法和系统。在一个实施例中,安全系统提供了一安全虚拟机器,它执行以安全虚拟机器的指令集(即,中间语言)表达的安全程序。安全系统可包括一编译器,它接受以高级语言表示的安全政策,并生成以安全虚拟机器的中间语言表达的安全政策表示的安全程序。安全系统在安全虚拟机器的指令存储中储存安全程序。当发生安全实施事件时(即,需要核查一行动来确保它遵循安全政策),则安全虚拟机器使用来自安全实施事件的数据执行来自其指令存储的安全程序的指令,以实施该安全政策。如果安全实施事件表明正在试图执行不合需要的行为(如,可能会恶意利用操作系统的易破坏性的行动),则安全程序可阻挡该尝试。在一个实施例中,安全系统的安全虚拟机器在操作系统的内核模式中执行,以标识并防止应用程序和外部系统对执行安全系统的计算机系统执行不合需要的行为的尝试。

在一个实施例中,安全系统标识由应用程序向系统服务(如,文件系统和存储器管理系统)发出的系统调用的参数何时可能导致不合需要的行为。安全政策包含规则,其每一个规则都指定了基于系统调用的参数的条件,以及当满足该条件时要采取的行动。例如,当用指定大于1GB的文件大小的参数发出一文件创建系统调用时,可满足规则的条件。与该规则相关联的行动可阻挡文件的创建。高级语言可以是基于XML的语言,并且每一规则可以由规则条件和行动标签来标识。当编译以高级语言表示的安全政策规则时,将每一规则转换成中间语言的指令以形成安全程序。例如,规则可被转换成一系列指令。一个指令将系统调用与表明函数是“文件创建”的值进行比较,一个指令将文件大小参数与其值为1GB的常量进行比较,一个指令输出指示来阻挡系统调用。

在一个实施例中,安全虚拟机器包括处理器引擎、指令存储、指令指针和数据存储。当初始化安全虚拟机器来实施安全政策时,安全系统用实现安全政策的安全程序加载指令存储。安全系统也将安全程序的数据加载到数据存储中。当接收系统调用时,安全系统将系统调用的参数(包括标识系统调用的值)储存在数据存储中。安全系统也可将发出系统调用的进程的进程控制信息储存在数据存储中。安全系统初始化指令指针以指向安全程序的起始指令。处理器引擎通过取出并执行由指令指针指向的起始指令来开始安全程序。所执行的每一指令修改指令指针以指向要执行的下一指令。指令引用数据存储中的数据以实施安全政策。安全程序的执行生成一输出行动集,它指定了为实施安全政策而要采取的行动(如,阻挡系统调用)。

在一个实施例中,安全政策可包括要对其核查参数的每一系统调用的子政策。安全系统可将每一子政策编译成一单独的安全子程序,它可与其它安全子程序无关地加载到指令存储中。每一子政策可对应于单个系统调用的安全实施。安全系统可维护每一系统调用到指令存储中的指令指针以及指向对应的安全子程序的数据存储中的数据的起始数据指针的映射。当在系统调用上实施安全政策时,安全系统将指令指针初始化成对应的起始指令指针,并将数据指针初始化成对应的起始数据指针。安全子程序可使用与指令指针和数据指针有关的指令和数据引用技术。以这一方式,每一安全子程序的指令和数据都是可重定位的。在以下描述中,单个安全程序通过解码每一系统调用并跳转到适当的指令位置以处理该系统调用,来处理所有的系统调用。本领域的技术人员可以理解,所描述的系统可适用于支持每一系统调用的子程序。

图1所示是一个实施例中安全系统的组件的框图。该安全系统包括在用户模式100中执行的某些组件,以及在内核模式120中执行的其它组件。政策编译器102是在用户模式中执行的组件,以将政策存储103的安全政策编译成可由安全虚拟机器执行的安全程序。内核模式组件包括系统调用截取组件121、加载程序组件122和安全虚拟机器125。安全虚拟机器包括指令指针126、处理器引擎127、指令存储128和数据存储129。加载程序组件将由政策编译器编译的安全程序加载到安全虚拟机器的指令存储中、将程序数据储存到数据存储中、并设置起始指令指针。系统调用截取组件截取由应用程序101发出的系统调用,并将每一系统调用的参数和应用程序的进程控制信息储存到数据存储中。在截取了系统调用并储存了其参数之后,系统调用截取组件指令处理器引擎执行指令存储的安全程序。处理器引擎通过取出由指令指针指向的指令并执行由指令指定的操作来执行安全程序。操作包括将为实施安全政策而采取的行动储存在数据存储的输出行动集中。在完成了安全程序的执行以后,系统调用截取组件执行输出行动集的行动。

实现安全系统的计算装置可包括中央处理单元、存储器、输入设备(如,键盘和定位设备)、输出设备(如,显示设备)和存储设备(如,盘驱动器)。存储器和存储设备是可包含实现安全系统的指令的计算机可读介质。另外,数据结构和消息结构可通过诸如通信链路上的信号等数据传输介质来储存或发送。可使用各种通信链路,如因特网、局域网、广域网或点对点拨号连接。

图1示出了其中可实现安全系统的合适的操作环境的一个示例。该操作环境仅是合适的操作环境的一个示例,并非暗示对安全系统的使用范围或功能的任何局限。适合使用的其它众所周知的计算系统、环境和配置包括个人计算机、服务器计算机、手持式或膝上设备、多处理器系统、基于微处理器的系统、可编程消费者电子设备、网络PC、小型机、大型机、包括上述系统或设备的任一个的分布式计算环境等等。

安全系统可以在诸如由一个或多个其它设备执行的程序模块等计算机可执行指令的一般上下文环境中描述。一般而言,程序模块包括例程、程序、对象、组件、数据结构等等,执行特定的任务或实现特定的抽象数据类型。通常,如各个实施例中所需要的,程序模块的功能可以组合或分布。

图2所示是一个实施例中数据存储的数据结构的框图。该数据结构包括文字数据结构201、动态数据结构211、系统调用参数数据结构221、进程控制块数据接口231以及行动输出集241。文字数据结构包括文字数据表202和文字数据存储203。文字数据表包含引用储存在文字数据存储中的文字数据的固定大小的条目。“文字数据”指对于当前加载的安全政策的生命周期恒定不变的安全程序的数据。文字数据只能通过加载新的安全政策来改变。动态数据结构具有与文字数据结构相似的组织,但是它储存“动态”数据而非“文字数据”。“动态数据”指可在不加载新安全政策的情况下修改的安全程序的数据。例如,动态数据可包括免除安全政策的应用程序名。文字和动态数据表的每一条目指向对应的数据存储中的数据。文字和动态数据存储的数据以自描述格式来表示。该格式包括数据类型和数据大小信息。在一个实施例中,安全虚拟机器支持布尔型、整型、字符串和原始二进制(也称为“二进制大对象(blob)”)数据类型,以及整型、字符串和二进制大对象的数组。指令使用对文字和动态表的索引而引用文字和动态数据。当执行指令时,安全虚拟机器通过检索索引的条目并使用其值作为指向文字或动态数据存储中的数据项的起始的指针,来对到文字和动态表的索引解除引用。由于数据是自描述的,因此可确定数据的类型和大小。系统调用参数数据结构包括字符串表222、整型表223和原始二进制表224。系统调用的参数依照其数据类型储存在这些表中。进程控制块数据结构是包含了对安全虚拟机器可用的每一条进程控制信息的条目的表。在一个实施例中,进程控制信息包括应用程序标识符和线程标识符。行动输出集可以是一组行动标记,它在执行安全程序的过程中生成,并表明为在系统调用上实施安全政策而采取的行动。行动可包括阻挡系统调用和通知用户。

图3所示是一个实施例中安全虚拟机器的指令的布局的图示。每一指令包括操作字段310、参数1字段320、真分支字段330、假分支字段340和参数2字段350。参数1字段引用与系统调用相关联的数据(即,储存在系统调用数据结构中或进程控制数据结构中),参数2字段引用与安全程序相关联的数据(即,直接数据或储存在文字或动态数据结构中的数据)。操作字段包括参数2描述符311(“m”)和操作码312。参数2描述符指定了如何解释参数2。参数2可包含直接数据、对动态数据的引用或对文字数据的引用。当指定引用时,安全虚拟机器在执行指令的操作之前对参数2解除引用。操作码标识了如下文更详细定义的指令的操作。参数1字段包含参数1描述符321(“s”)和索引322。参数1描述符表明参数1是涉及系统调用参数还是涉及进程控制信息。如果参数1描述符指示系统调用参数,则索引的较高位指定了是要索引系统调用参数数据结构的字符串表、整型表还是原始二进制表,而较低位指示了表的索引的条目。如果参数1描述符指示进程控制信息,则索引指示特定的进程控制信息。真分支字段和假分支字段包含偏移,它根据该指令的条件码被求值为真还是为假来指定要执行的下一指令。该偏移被添加到当前指令指针,以指向要执行的下一指令。

表1和2示出了一个实施例中安全虚拟机器的指令。指令可被分类为在数据上执行测试的指令和不执行测试的指令。表1示出了非测试指令。

                             表1

  操作码  描述  参数  HALT  停止处理  p2:状态码  ACTION  将行动码添加到输出行动集  p2:行动码  JMP  跳转到新的指令  p2:从当前位置的跳转偏移  RESET  将输出行动集清零  p2:忽略

表2示出了测试指令。该模式指令可定义用于比较两个字符串的正则表达式,它可用于文件名的通配符类型比较(如,“*.DAT”)。

               表2

  操作码  描述  TEST  布尔型:测试p2是否为TRUE  CMPEQ  整型:比较p1==p2  CMPNE  整型:比较p1!=p1  CMPLT  整型:比较p1<p2  CMPLE  整型:比较p1<=p2  CMPGE  整型:比较p1>=p2  CMPGT  整型:比较p1>p2
  BLOB_MATCH二进制大对象:p1==p2  STRING_MATCH字符串:p1==p2  PATTERN_MATCH字符串:p1与p2匹配通配符模式  BLOB_MEMBEROF二进制大对象:p1==p2[i]  INT_MEMBEROF整型:p1==p2[i]  STRING_MEMBEROF字符串:p1==p2[i]  PATTERN_MEMBEROF字符串:p1与p2[i]匹配通配符模式

图4所示是一个实施例中加载程序组件的处理的流程图。当要将安全程序加载到安全虚拟机器中时,调用该组件。安全程序包含虚拟指令、文字数据块和动态数据块。文字数据块包括文字数据表的信息,后面跟随文字数据存储的信息。组件将文字数据块复制到在起始位置处开始的文字存储中。组件然后将该基本位置添加到文字数据表中的每一偏移,以将偏移转换成指针。组件以类似的方式处理动态数据块。虚拟指令包含与文字存储和动态存储有关的偏移。在块401,组件识别文字存储内的起始位置,并复制在该起始位置开始的安全程序的文字数据块。在块402,组件将起始位置添加到文字数据表的每一偏移,以将安全程序的偏移转换成指针。在块403,组件标识动态存储内的起始位置,并复制在该起始位置处开始的安全程序的动态数据块。在块404,组件将起始位置添加到动态数据表的每一偏移,以将安全程序的偏移转换成指针。在块405,组件将安全程序的虚拟指令复制到指令存储,然后完成。

图5所示是一个实施例中系统调用截取组件的处理的流程图。当系统调用被截取时调用该组件。该组件初始化系统调用参数数据结构以及进程控制数据结构,然后启动安全虚拟机器。该组件也可提供一指令的指令指针,该指令用于启动执行来处理系统调用。当使用安全子程序时,该组件可具有系统调用到起始指令指针和指向该系统调用的文字和动态数据结构的起始数据指针的映射。加载程序组件可被多次调用,以加载安全程序的不同子程序用于处理不同的系统调用。由于指令和数据是基于偏移的,指令和数据可被储存在指令存储和数据存储的下一可用位置。在块501,组件将当前指令指针设为安全程序的起始指令指针,并将行动输出集复位成初始状态(如,空)。在块502-504,组件循环将系统调用的参数储存到系统调用参数数据结构中。在块502,组件选择系统调用的下一参数。在判别块503,如果已选择了系统调用的所有参数,则组件在块505继续,否则组件在块504继续。在块504,组件将所选择的参数储存在系统调用参数数据结构的适当表中,然后循环到块502以选择系统调用的下一参数。在块505-507,组件循环将进程控制信息储存在进程控制数据结构中。在块505,组件为发出系统调用的进程选择下一进程控制信息。在判别块506,如果已选择了所有的进程控制信息,则组件在块508继续,否则组件在块507继续。在块507,组件将所选择的进程控制信息储存到进程控制数据结构中,然后循环到块505以选择下一进程控制信息。或者,与使用并初始化内部进程控制数据结构相反,安全系统可在需要时直接从进程控制块检索进程控制信息。本领域的技术人员可以理解,进程控制块由操作系统在创建进程时创建。在块508,组件启动安全虚拟机器以在截取的系统调用上实施安全政策。在由安全虚拟机器完成了安全程序的执行之后,组件执行行动输出集的行动。

图6所示是一个实施例中安全虚拟机器的处理器引擎的处理的流程图。处理器引擎基于截取的系统调用而初始化系统调用参数存储、运行安全虚拟机器、并执行输出行动集的行动。在块601-607,处理器引擎循环加载并执行储存在指令存储中的安全程序的指令,直到执行了停止指令。在一个实施例中,安全政策可定义为,只要满足一规则的条件,就不测试其它规则。在块601,处理器引擎取出由当前指令指针指向的指令。在块602,处理器引擎调用组件以对参数1和参数2解除引用。在判别块603,如果指令的操作码是测试操作,则处理器引擎在块604继续。如果指令的操作码是非测试操作(除停止操作之外),则处理器引擎在块608继续。如果指令的操作码是停止操作,则处理器引擎在块609继续。在块604,处理器引擎调用求值测试组件来确定测试操作是求值为真还是假。调用的组件将条件码标志设为真或假。在判别块605,如果条件码为真,则处理器引擎在块607继续,否则处理器引擎在块606继续。在块606,处理器引擎将假分支字段的偏移添加到当前指令指针,然后循环到块601以取出下一指令。在块607,处理器引擎将真分支字段的偏移添加到当前指令指针,然后循环到块601以取出下一指令。在块608,处理器引擎调用执行非测试组件,然后循环到块601以取出下一指令。执行非测试组件执行指令的操作,并将当前指令指针设为指向要执行的下一指令。执行非测试组件将指令的真分支的偏移(或在跳转指令的情况下为参数2)添加到指令指针。在块609,组件执行停止指令,然后完成。

图7所示是一个实施例中安全虚拟机器的解除引用组件的处理的流程图。该组件对取出的指令的参数1和参数2解除引用。在块701-708,组件对参数1解除引用。在判别块701,如果参数1是如由参数1描述符指示的系统调用参数,则组件在块703继续,否则组件在块702继续。在块702,组件将解除引用的参数1设为由参数1的索引指定的进程控制信息,然后在块709继续。在判别块703,如果参数1的索引指示该系统调用参数是整型,则组件在块704继续,否则组件在块705继续。在块704,组件将解除引用的参数1设为由索引指定的整型,并在块709继续。在判别块705,如果参数1的索引指示系统调用参数是字符串,则组件在块706继续,否则组件在块707继续。在块706,组件将解除引用的参数1设为由索引指定的字符串,并在块709继续。在判别块707,如果参数1的索引指示系统调用参数是原始二进制,则组件在块708继续,否则发生错误。在块708,组件将解除引用的参数1设为由索引指定的原始二进制,并在块709继续。在块709-714,组件对参数2解除引用。在判别块709,如果参数2描述符指示直接数据,则组件在块710继续,否则组件在块711继续。在块710,组件将解除引用的参数2设为取出的指令中的参数2的值,然后返回。在判别块711,如果参数2描述符指示文字数据,则组件在块712继续,否则组件在块713继续。在块712,组件将解除引用的参数2设为由取出的指令中的参数2指示的文字数据,然后返回。在判别块713,如果参数2描述符指示动态数据,则组件在块714继续,否则发生错误。在块714,组件将解除引用的参数2设为由取出的指令中的参数2指定的动态数据,然后返回。

图8所示是一个实施例中安全虚拟机器的求值测试组件的处理的流程图。该组件对加载的指令的操作码进行解码,并调用一组件实现对该操作码的测试。调用的组件将条件码设为真或假。在判别块801-803,组件对加载的指令的操作码进行解码。在块804-806,该组件调用实现该经解码的操作码的组件,然后返回。

图9所示是一个实施例中安全虚拟机器的测试组件的处理的流程图。测试组件实现测试操作码。在901,组件将条件码设为解除引用的参数2的值,然后返回。

图10所示是一个实施例中的安全虚拟机器的匹配字符串组件的处理的流程图。该组件确定解除引用的参数1是否与解除引用的参数2相匹配。在一个实施例中,安全虚拟机器可使用模式匹配。例如,参数可包括“通配符”规范或更一般地包括正则表达式。在判别块1001,如果参数1和参数2的长度相匹配,则组件在块1003继续,否则解除引用的参数不能匹配,并且组件在块1002继续。在块1002,组件将条件码设为假然后返回。在块1003-1006,组件循环核查解除引用参数的字符串的每一字符。在块1003,组件选择每一字符串的下一字符。在判别块1004,如果已选择了该字符串的所有字符,则组件在块1008继续,否则组件在块1005继续。在块1005,组件归一化所选择的字符。例如,组件可将每一字符设为小写以实现大小写不敏感比较。在判别块1006,如果所选择的字符相匹配,则组件循环到块1003以选择该字符串的下一字符,否则组件在块1007继续。在块1007,组件将条件码设为假然后返回。在块1008,该字符串的所有字符相匹配,组件将条件码设为真然后返回。

图11所示是一个实施例中安全虚拟机器的非测试组件的处理的流程图。该组件执行取出的指令的非测试操作码的操作,包括将当前指令指针设为指向要执行的下一指令。在判别块1101,如果操作码是行动操作,则组件在块1102继续,否则组件在块1103继续。在块1102,组件将取出的指令的参数2添加到行动输出集,然后在块1107继续。在判别块1103,如果操作码是复位操作,则组件在块1104继续,否则组件在块1105继续。在块1104,组件将行动输出集清零,然后在块1107继续。在判别块1105,如果操作码是跳转操作,则组件在块1106继续,否则组件继续解码更多的操作码。在块1106,组件将参数2添加到当前指令指针,然后返回。在块1107,组件将真分支字段的值添加到当前指令指针,然后返回。

本领域的技术人员可以理解,尽管此处为说明目的描述了安全系统的特定实施例,然而可在不脱离本发明的精神和范围的情况下作出各种修改。本领域的技术人员可以理解,使用安全虚拟机器的安全系统可用于实施各种各样的安全政策。例如,安全系统可用于实施通过网络接收的消息、由交易处理器接收的交易、以及更一般地提供应用编程接口的任何应用程序的安全。另外,本发明不受权利要求书以外的任何内容的限制。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号