首页> 中国专利> 保护非本机代码安全的方法

保护非本机代码安全的方法

摘要

一种用以保护非本机应用的方法。处理非本机应用以获得将在虚拟机内被触发的应用存根。非本机应用的处理还提供了本机代码函数,应用存根取决于该本机代码函数。非本机函数是将安全服务从可信模块扩展至虚拟机的可信模块的一部分。可信模块是本机代码应用,其通过非本机应用存根与非本机函数之间的执行使能机制来创建可信区作为扩展至虚拟机的可信任的根。

著录项

  • 公开/公告号CN103827880A

    专利类型发明专利

  • 公开/公告日2014-05-28

    原文格式PDF

  • 申请/专利权人 耶德托公司;

    申请/专利号CN201180071252.8

  • 发明设计人 G.D.亚当斯;Y.X.古;J.J.荣;

    申请日2011-03-31

  • 分类号G06F21/54;G06F9/455;

  • 代理机构中国专利代理(香港)有限公司;

  • 代理人蒋骏

  • 地址 荷兰霍夫多普

  • 入库时间 2023-12-17 00:06:05

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-06-16

    授权

    授权

  • 2015-09-02

    著录事项变更 IPC(主分类):G06F21/54 变更前: 变更后: 申请日:20110331

    著录事项变更

  • 2014-06-25

    实质审查的生效 IPC(主分类):G06F21/54 申请日:20110331

    实质审查的生效

  • 2014-05-28

    公开

    公开

说明书

技术领域

本公开一般地涉及软件应用中的安全。更具体地,本公开涉及保护在虚拟机中执行的非本机应用。

背景技术

虚拟机和脚本解释器是已知的。被设计成用于由过程虚拟机或脚本解释器执行的软件应用针对底层硬件和在其上面运行的计算平台的操作系统被屏蔽。同样地,能够称为非本机应用的这些应用不能访问由计算平台提供的安全资源,并且不能使用可用于本机应用的保护措施。另外,许多建立的软件安全和保护技术不能直接适于处理非本机应用,其被设计成保护本机代码(例如机器代码)。提供非本机应用能够在其内部运行的计算系统(例如,沙箱安全)的有限保护的安全方法甚至可以进一步限制这种适应能力。同样地,过程虚拟机或脚本解释器基本上是不可信的且对于攻击是脆弱的。

近年来,平板计算机和智能电话已经是卓越增长的对象,因为有许多软件应用是它们可用的。许多此类软件应用是几乎不具有计算平台相关性的非本机应用。作为示例,用于平板计算机和智能电话的某些应用能够在不能提供本机环境和可接受安全的网页浏览器内被加载、触发和运行。

因此,在虚拟机和脚本解释器上运行的非本机应用的保护和安全的改善是期望的。

发明内容

在第一方面,本公开提供了一种保护用非本机代码编码的非本机应用的执行的方法。该方法包括:修改非本机应用以获得本机代码函数和应用存根(stub),本机代码功能可在预定义可信模块内执行,该预定义可信模块具有一个或多个本机环境安全函数,该应用存根具有取决于本机代码的至少一个执行相关性,所述至少一个执行相关性包括对本机代码函数的调用。该方法还包括将应用存根与本机代码函数打包。

该方法还可以包括:在非本机环境内加载应用存根;在预定义可信模块内加载本机代码函数;以及在非本机环境中执行应用存根,所述至少一个执行相关性使应用存根调用本机代码函数以使根据所述一个或多个本机环境安全函数中的至少一个在预定义可信模块内执行本机代码函数。

所述非本机应用可以包括非本机代码函数,并且修改非本机应用可以包括将非本机代码函数转换成配对本机代码函数。

所述非本机应用可以包括具有非本机代码函数功能的非本机代码函数;修改非本机应用可以包括将非本机代码函数转换成部分非本机代码函数,并将该部分非本机代码函数安装在非本机应用存根中;以及本机代码函数可以包括一个或多个桥函数以桥接部分非本机代码函数以获得桥接的部分非本机代码函数,该桥接的部分非本机代码函数具有与非本机代码函数等效的功能。

非本机应用可以包括具有非本机代码函数功能的非本机代码函数;修改非本机应用可以包括将非本机代码函数转换成部分非本机代码函数,并将该部分非本机代码函数的第一部分安装在非本机应用存根中,并且将部分非本机代码函数的第二部分安装在应用库中,该应用库被涵盖在预定义可信模块内;并且本机代码函数可以包括一个或多个桥函数以桥接部分非本机代码函数的第一和第二部分以获得桥接的部分非本机代码函数,该桥接的部分非本机代码函数具有与非本机代码函数等效的功能。

非本机应用可以包括具有非本机代码函数功能的非本机代码函数;修改非本机应用可以包括将非本机代码函数转换成至少一个部分非本机代码函数和至少一个部分本机代码函数,所述至少一个部分非本机代码函数是非本机应用存根的一部分;并且所述本机代码函数可以包括一个或多个桥函数以桥接所述至少一个部分非本机代码函数和所述至少一个部分本机代码函数以获得桥接的部分本机和非本机代码函数,桥接的部分本机和非本机代码函数具有与非本机代码函数等效的功能。

非本机应用可以包括具有总体功能的多个飞机本机代码函数;修改非本机应用可以包括将所述多个非本机代码函数安装在非本机应用存根中;以及本机代码函数可以包括一个或多个桥函数以桥接所述多个非本机代码函数以获得桥接的非本机代码函数,桥接的非本机代码函数具有与所述多个非本机代码函数的总体功能等效的功能。

所述非本机应用存根可以包括安全加载程序存根且所述一个或多个本机环境安全函数可以包括安全加载程序处理程序函数。

非本机应用存根可以包括完整性验证存根,并且所述一个或多个本机环境安全函数可以包括完整性验证处理程序函数。

所述一个或多个本机环境安全函数可以反调试处理程序。

所述非本机应用可以包括具有非本机代码函数功能的非本机代码函数;并且修改非本机应用可以包括:将非本机代码函数转换成部分非本机代码函数,部分非本机代码函数具有部分非本机代码函数的第一部分和部分非本机代码函数的第二部分;以及将部分非本机代码函数的第一部分安装在非本机应用存根中;所述方法还可以包括:将部分非本机代码函数的第二部分加密以获得已加密部分非本机代码函数;以及将已加密部分非本机代码函数安装在应用库中,该应用库被涵盖在预定义可信模块内,已加密部分非本机代码函数将在运行时间被解码以获得部分非本机代码函数的已解密第二部分,该部分非本机代码函数的已解密第二部分将被加载在非本机环境中,该本机代码函数包括一个或多个桥函数以桥接部分非本机代码函数的第一部分和部分非本机代码函数的已解密第二部分以获得桥接的部分本机代码函数和桥接的部分非本机代码函数,桥接的部分非本机代码函数具有与非本机代码函数等效的功能。

非本机代码可以包括Java代码、Javascript代码、C#代码、Actionscript代码以及Python代码中的至少一个。

对本机代码函数的调用可以通过Java本机接口来完成。

对本机代码函数的调用可以通过Netscape插件应用编程接口来完成。

在结合附图来仔细阅读本公开的特定实施例的以下描述时,本公开的其他方面和特征将变得对于本领域的技术人员而言显而易见。

附图说明

现在将参考附图仅以示例的方式来描述本公开的实施例,在所述附图中:

图1示出了本公开的提供过程流程的实施例。

图2示出了本公开的互锁工具实施例的功能。

图3示出了本公开的实施例的运行时间表示。

图4示出了根据本公开的软件元件的实施例及其接口。

图5示出了非本机应用中的函数。

图6示出了根据本公开的使用动态加载和桥接执行的部分执行的示例的运行时间表示。

图7示出了根据本公开的使用动态加载和桥接执行的部分执行的另一示例的运行时间表示。

图8示出了根据本公开的使用可信函数和桥接执行的部分执行的示例的运行时间表示。

图9示出了非本机应用中的两个函数。

图10示出了根据本公开的可信函数调用的示例的运行时间表示。

图11示出了以安全加载为特征的本公开的实施例。

图12示出了以安全完整性验证为特征的本公开的实施例。

图13示出了以反调试特征为特征的本公开的实施例。

具体实施方式

一般地,本公开提供了一种保护非本机应用的方法。处理非本机应用以获得将在虚拟机内被触发的应用存根。非本机应用的处理还提供了本机代码函数,应用存根取决于该本机代码函数。在应用存根触发时,应用存根使得函数调用本机代码函数。非本机函数是将安全服务从可信模块扩展至虚拟机的可信模块的一部分。可信模块是本机代码应用,其通过非本机应用存根与非本机函数之间的执行使能机制来创建可信区作为扩展至虚拟机的可信任的根。

为了安全地连接到可信模块,本公开的某些实施例将虚拟机执行环境扩展并使得虚拟机应用能够使用由可信模块提供的安全服务,以及使得可信模块能够访问虚拟机以支持安全相关特征。能够建立虚拟锁以将虚拟机(非本机)应用结合到可信模块。虚拟锁提供在虚拟机和可信模块上运行的应用之间的执行互锁,并且确保应用不能在没有可信模块的情况下运行。一旦建立了互锁,则能够将可信模块的可信任扩展至虚拟机应用。安全特征能够基于虚拟机应用和虚拟机实施方式而变化。

可信模块能够支持大范围的虚拟机实施方式,每个具有潜在不同的指令集架构。可信模块的某些实施例提供了许多基本安全特征,其保护虚拟机中或脚本引擎中的应用。

图1示出了本公开的方法的实施例。图1的方法示出了如何能够通过对一个或不止一个本机代码函数的执行相关性来将非本机应用修改成更安全。要修改的非本机应用被用非本机代码编码,并且可以例如是被设计成在虚拟机上工作的非本机应用。在动作20处,非本机应用被修改成在动作22处获得非本机应用存根并在动作24处获得本机代码函数或不止一个本机代码函数(一个或多个本机代码函数)。如下面将更详细地描述的,非本机应用存根具有取决于一个或多个本机代码函数中的至少一个的至少一个执行相关性;此类执行相关性可以包括对一个或多个本机代码函数的调用。在动作26处,将在动作22处获得的非本机应用存根和在动作26处获得的一个或多个本机代码函数打包以用于分发。如上所述,在动作22处获得的非本机应用存根在执行时取决于在动作24处获得的一个或多个本机代码函数。由于非本机应用存根在执行时取决于一个或多个本机代码函数,所以能够将非本机应用存根和一个或多个本机代码函数说成是互锁的。

图2示出了能够用来执行图1的方法的互锁工具30的实施例。如图2中所示,非本机应用32被输入到互锁工具30,其处理(修改)非本机应用32并输出非本机应用存根34和一个或多个本机代码函数36(一个本机代码函数或不止一个本机代码函数)。非本机应用存根34在执行时取决于一个或多个本机代码函数36。同样地,非本机应用存根34和本机代码函数36是互锁的。可以使得一个或多个本机代码函数36为应用库的一部分,其可以包含本机函数和非本机函数。

非本机应用存根34和一个或多个本机代码函数36将在运行时间具有原始非本机应用32的等效功能。如下面将更详细地描述的,互锁功能30可以将非本机应用函数添加到调用一个或多个本机代码函数36的应用存根34。作为修改本机应用32的结果,非本机应用存根34将不会在没有一个或多个本机代码函数36的情况下提供非本机应用32的完整功能。

图3示出了运行时间的非本机应用存根34和一个或多个本机代码函数36。非本机应用存根34在虚拟机38内示出且一个或多个本机代码函数36在可信模块40内示出。可信模块40还涵盖可信模块应用接口(API)42。对可信模块API 42的调用能够被虚拟机38和被非本机应用存根34触发。可信模块40是预定义的,并且能够用C/C++、汇编语言或用任何其他适当的编程语言来实现。由于能够以此类语言来实现本发明的安全模块的实施方式,所以这使得能够使用本机环境安全函数,其能够保护用那些语言(C/C++、汇编语言或用任何其他适当的编程语言)编写的代码。适当的本机环境安全函数能够访问基于硬件的安全特征以建立可信任的根。此外,适当的本机环境安全函数可以包括例如在包括以下各项的专利文献中公开的那些:在2009年3月17日授予Chow等人且题为TAMPER RESISTANT SOFTWARE ENCODING AND ANALYSIS的的美国专利号7,506,177;在2008年12月9日授予Johnson等人且题为SECURE METHOD AND SYSTEM FOR HANDLING AND DISTRIBUTING DIGITAL MEDIA的美国专利号7,464,269;在2008年7月8日授予Johnson等人且题为SYSTEM AND METHOD FOR PROTECTING COMPUTER SOFTWARE FROM A WHITE BOX ATTACK的美国专利号7,397,916;在2008年7月1日授予Chow等人且题为METHOD AND SYSTEM FOR SUSTAINABLE DIGITAL WATERMARKING的美国专利号7,395,433;在2008年3月25日授予Johnson等人且题为TAMPER RESISTANT SOFTWARE - MASS DATA ENCODING的美国专利号7,350,085;在2008年1月29日授予Chow等人且题为METHOD AND SYSTEM FOR SECURE ACCESS的美国专利号7,325,141; 在2005年1月11日授予Chow等人且题为TAMPER RESISTANT SOFTWARE ENCODING的美国专利号6,842,862;在2004年8月17日授予Chow等人且题为TAMPER RESISTANT SOFTWARE - CONTROL FLOW ENCODING的美国专利号6,779,114;在2003年7月15日授予Chow等人且题为TAMPER RESISTANT SOFTWARE ENCODING的美国专利号6,594,761;在2010年10月5日授予Johnson等人且题为SYSTEM AND METHOD FOR PROTECTING COMPUTER SOFTWARE FROM A WHITE BOX ATTACK的美国专利号7,809,135;在2011年3月17日公开且题为SYSTEM AND METHOD FOR GENERATING WHITE - BOX IMPLEMENTATIONS OF SOFTWARE APPLICATIONS的美国专利申请公开号2011 / 0067012;在2011年11月11日公开且题为INTERLOCKED BINARY PROTECTION USING WHITEBOX CRYPTOGRAPHY的国际专利申请号WO2010/127438;在2005年7月27日授予Zhou等人且题为SYSTEM AND METHOD OF HIDING CRYPTOGRAPHIC PRIVATE KEYS的美国专利号7,634,091;在2010年12月23日公开且题为WHITE - BOX CRYPTOGRAPHIC SYSTEM WITH CONFIGURABLE KEY USING BLOCK SELECTION的国际专利申请号WO2010/0146140;在2010年12月23日公开且题为WHITE - BOX CRYPTOGRAPHIC SYSTEM WITH CONFIGURABLE KEY USING INTERMEDIATE DATA MODIFICATION的国际专利申请号WO2010/146139;在2008年11月27日公开且题为UPDATING CRYPTOGRAPHIC KEY DATA的国际专利申请号WO2008/142612;在2008年10月8日公开的美国专利申请公开号20090254759;在2011年2月1日授予Gorissen等人且题为METHOD AND SYSTEM FOR OBFUSCATING A CRYPTOGRAPHIC FUNCTION的美国专利号7,881,466;在2010年11月25日公开且题为TRACING COPIES OF AN IMPLEMENTATION的美国专利申请号20100299515;在2009年9月11日公开且题为CRYPTOGRAPHIC SYSTEM的国际专利申请号WO2009/109884;在2010年4月1日公开且题为CRYPTOGRAPHIC METHOD FOR A WHITE - BOX IMPLEMENTATION的美国专利申请公开号20100080395;在2009年3月19日公开且题为CRYPTOGRAPHIC PROCESSING OF CONTENT的国际专利申请号WO2009/034504;在2006年7月18日授予Boer且题为CRYPTOGRAPHIC METHOD AND APPARATUS FOR NON - LINEARLY MERGING A DATA BLOCK AND A KEY的美国专利号7,079,651;中国专利文献号200880017068.3;在2011年1月25日授予Gorissen等人且题为BLOCK CIPHERING SYSTEM, USING PERMUTATIONS TO HIDE THE CORE CIPHERING FUNCTION OF EACH ENCRYPTION ROUND的美国专利号7,876,898;在2009年12月17日公开且题为METHOD AND SYSTEM FOR OBFUSCATING A GRYPTOGRAPHIC FUNCTION的美国专利申请公开号20090313480;在2010年9月16日公开且题为WHITE - BOX CRYPTOGRAPHIC SYSTEM WITH INPUT DEPENDENT ENCODINGS的国际专利申请号WO2010/102960;在2009年7月18日公开且题为METHOD AND SYSTEM FOR OBFUSCATING A CRYPTOGRAPHIC FUNCTION的美国专利申请公开号20090158051;在2009年8月6日公开且题为SECURING A SMART CARD的国际专利申请号WO2009/095838;在2009年11月12日公开且题为EXPONENT OBFUSCATION的国际专利申请号WO2009/136361;以及在2009年11月11日公开且题为WHITE - BOX IMPLEMENTATION的国际专利申请号WO2009 / 109880,其被整体地通过引用结合到本文中。

图4示出了各种软件元件的示例及其接口,在计算平台硬件44、操作系统46以及安全模块(安全特征)48上分层。软件层包括可信模块40,其涵盖可信模块API 42以及可以是应用库的一部分的一个或多个本机代码函数36。软件层还包括虚拟机38,在其顶部上,非本机应用存根34被分层。非本机应用存根34可能需要的任何数据50在非本机应用存根34上被分层。虚拟机38在安全模块52的顶部上被分层,其能够通过可信模块API 42与可信模块40建立连接。操作系统46控制虚拟机38对计算平台的资源的访问,诸如,例如硬件44和可能的安全模块(安全特征)48,其可以包括例如智能卡、软件狗、节点锁定电路等,可信模块40使得安全模块52能够保护非本机应用存根34。在本公开的其余部分中,术语非本机应用被用来覆盖虚拟机应用和脚本应用(脚本)。

如上文公开的,可以通过修改非本机应用32以获得具有取决于一个或多个本机代码函数36的执行相关性的非本机应用存根34且通过将非本机应用存根34和一个或多个本机代码函数36打包来保护非本机应用32。如下面将描述的,通过使非本机应用存根34调用对可信模块40的向下调用以执行一个或多个本机代码函数36来实现非本机应用32的功能。执行相关性可以在非本机应用存根34和/或一个或多个本机代码函数内的各种位置处发生,并且可以在任何适当的阶段被触发。可以通过使用配置控制在构建时间定义关于如何、何时和在那里创建、触发和执行相关性的规则,并且在提供时间处个体化。通过一个或多个非本机应用存根34对本机代码函数36的执行相关性来保持非本机应用32的原始功能。

图5示出了被加载到虚拟机38中的非本机应用32。非本机应用32具有非本机代码函数F,其将在动态加载和桥接执行、可信函数执行以及可信函数调用的以下示例中使用。如技术人员将理解的,在本公开的某些实施例中,可以将动态加载和桥接执行、可信函数执行以及可信函数调用的各方面组合。

图6示出了动态加载和桥接执行的示例。在修改非本机应用32时,可以修改非本机应用32的函数F以获得任何数目的部分非本机代码函数,例如两个部分非本机函数F1和F2,以及任何数目的本机代码函数,例如一个本机代码函数B。可以将非本机代码函数F1和F2安装在非本机应用存根34中,并且可以将本机代码函数B安装在可信模块40中(在可信模块API 42中)。替换地,如图7中所示,可以将非本机代码函数F1安装在非本机应用存根32中,并且可以将非本机代码函数F2安装在应用库54中。在图6和7的任一示例中,可以使本机代码函数B成为可信模块API 42(可信模块40)的一部分。本机代码函数B是F1和F2之间的桥函数(接口函数)。在图6和7的示例中,用新的执行相关性:从F1至B至F2来替换函数F的原始执行相关性。也就是说,F1对函数B进行调用,该函数B对函数F2进行调用。由于B是F1与F2之间的执行桥,所以在不执行B的情况下,F1或F2的执行只能导致F的部分功能。F1要求B到达F2且不具有将执行直接从F1传递至F2的所需信息或能力。同样地,用具有由桥函数B提供的执行相关性的新的部分非本机函数F1和F2来替换F。桥接非本机函数F1和F2具有与非本机应用32的非本机函数F等效的功能。

在应用运行时间,对部分非本机函数F1的调用将经由可信模块40来唤起对B的调用。如果F2在应用存根204内(图6的示例),则B将把执行从B传递至F2。如果部分非本机函数F2在应用库54内(图7的示例),则B将使用本机执行机制来动态地检索部分非本机函数F2。一旦部分非本机函数F2被加载到虚拟机38中,则非本机代码函数F2能够被本机代码函数B调用,其在可信模块40中。然后用B将来自F2的返回至委托回部分非本机代码函数F1。

图8示出了与可信模块执行互锁的示例。在修改非本机应用32(在图5处示出)时,可以修改非本机应用32的函数F以获得任何数目的部分非本机代码函数,例如,一个部分非本机函数 F1,以及任何数目的本机代码函数,例如部分本机代码函数F2以及本机代码函数B(桥函数)。在F1和F'2(图6和7的示例)为互补的意义上,F1和F'2可以是互补的。作为示例,部分本机代码函数F'2可以是等效于部分非本机代码函数F2的本机代码。

可以将部分非本机代码函数F1安装在非本机应用存根32中,可以将部分本机代码函数F'2安装在应用库54中,并且可以将本机代码函数B安装在可信模块API 42中。在图8的示例中,用从 F1至B至F'2的新执行相关性来替换函数F的原始执行相关性。也就是说,F1对函数B进行调用,该函数B对函数F'2进行调用。B是F1和F'2之间执行桥。F'2和B在可信模块40中。桥接函数F1和F'2具有与非本机应用32的非本机函数F等效的功能。

非本机函数F已被部分非本机代码函数F1、部分本机代码函数F'2以及桥接本机代码函数B替换。在不执行B和F'2的情况下,F1的执行仅仅是部分执行,并且F并不具有将执行直接从F1传递至F'2的所需信息和能力。

在应用运行时间,对F1的调用经由可信模块40来唤起对B的调用,其在可信模块40的上下文内执行函数F'2。F'2是可以具有非本机函数F的部分(或完整)功能的本机代码函数。来自F'2的函数返回值能够通过本机代码函数B从F'2函数被传递回到F1函数。

图9示出了其中被加载到虚拟机38中的非本机应用32具有非本机代码函数F和G的示例,函数G要求来自函数F的输入。

图10示出了与可信函数调用互锁的示例。在修改非本机应用32时,其在本示例中包括非本机代码函数F和G,修改函数F以获得非本机代码函数F1,并且修改函数G以获得非本机代码函数G1。另外,获得本机代码函数B(桥函数)。F1和G1被安装在非本机应用存根32中,并且本机代码函数B被安装在可信模块API 42中。F1和G1使得本机应用32中的F和G之间的调用关系被从F1和B至G1的调用替换。也就是说,F1对函数B进行调用,函数B对函数G1进行调用。在未从F1执行到B的情况下,将不执行G1。桥接函数F1和G1具有与非本机应用32的函数F和G等效的功能。

在应用运行时间,对函数F1的调用唤起对可信模块40的向下调用B,可信模块40然后唤起向上调用以执行函数G1。可以经由可信模块40中的本机函数B将函数返回值从G1函数传递回到F1

一旦已使用上述锁定方法中的一个或多个将非本机应用锁定到可信模块40,则可以应用附加安全技术。安全技术可以例如基于虚拟机的类型且基于非本机应用。

下面在用Java源代码对非本机应用进行编码的背景下描述动态加载和桥执行、可信函数执行以及可信函数调用的示例。

Java源代码被正常地编译成字节级代码以用于java虚拟机中的部署和执行。Java字节代码的规范被标准化且被Java虚拟机实现者所使用。存在具有用于修改java字节代码的特征的现有开放源和商用工具。

在本公开的某些实施例中,图2的互锁工具30的Java实施方式将需要在部署之前修改Java应用。互锁工具30可以能够修改Java字节代码和/或Java源代码,并且实现这些能力将是互锁工具提供者可用的选项,如本领域的技术人员将认识到的。

Java具有允许Java调用本机模块的特征。Java与本机代码之间的此桥机制被称为Java本机接口,其支持调用本机C代码。Java本机接口桥使得能够实现向下调用(Java调用本机代码)和向上调用(本机代码调用在Java虚拟机运行时间环境内运行的Java代码)。使用Java本机接口能够允许实现上文公开的部分执行技术。

对于动态加载和桥执行技术而言(在图6和7处的示例),可以通过改变现有函数(或类、类方法)以及用经由Java本机接口桥对可信模块40的调用来替换而修改非本机应用的非本机代码。在运行时间执行期间,唤起对可信模块40的调用,并且可信模块40可以将函数字节代码从可信模块安全上下文加载到Java虚拟机并经由Java本机接口桥来执行该代码。

Java本机接口桥的特征还可以允许实现可信函数执行技术(图8的示例)。互锁工具30(在图3处示出)将分析Java应用的Java源代码(或字节代码),并且将用对可信模块40的调用来替换函数代码,其在可信模块40的上下文内执行等效功能。

Java本机接口机制还可应用于可信函数调用(图10的示例)。对函数内的嵌套函数的调用被用对可信模块40的调用替换,如在被应用于Java源代码(或字节代码)时由互锁工具30所确定的。在运行时间期间,Java本机接口桥使得可信模块40能够被调用,其转而确定要调用的适当函数,可信模块40然后将执行对Java虚拟机的向上调用,连同关联自变量等一起调用嵌套函数。

同样地,在本文所述的示例中,Java本机接口是能够使得非本机应用存根能够调用本机代码函数B的机制的示例。

网页应用提供在网页浏览器内运行的用户接口,以用于呈现和用户交互。网页应用通常包括具有被递送至网页浏览器的HTML和Javascript函数的页面,其解释HTML页面,并将该页面变换成内部文档对象模型表示。网页浏览器是软件应用且大多数提供使得网页应用能够调用本机代码模块、并且还使得本机代码模块能够访问内部网页应用的桥机制。常见的桥机制(或网页浏览器插件接口)是在Firefox?、Google Chrome?、Safari?、Opera?网页浏览器中所使用的Netscape插件应用编程接口(NPAPI)。NPAPI允许网页应用唤起对本机模块的向下调用,并且还允许本机模块唤起对网页浏览器应用运行时环境的向上调用。此NPAPI桥机制可以用来使得能够实现本文公开的部分执行技术。

对于动态加载和桥执行技术的某些实施例而言,通过改变现有函数,并经由NPAPI桥用对可信模块40的调用来替换,来可以修改源HTML和Javascript函数。在运行时间执行期间,唤起对可信模块40的调用,并且可信模块40可以经由NPAPI桥例如将Javascript函数代码从可信模块40安全上下文加载到网页应用运行时环境中并执行该代码。

所支持的网页浏览器中的NPAPI桥的特征还允许实现可信函数执行技术。互锁工具30(在图2处示出)能够分析用对可信模块40的调用来替换Javascript函数代码的网页应用源代码,其在可信模块40的上下文内执行等效功能。

该机制还可以应用于可信函数调用(图10的示例),因为可以用对可信模块40的调用来替换对函数内的嵌套Javascript函数的调用,如在应用于网页应用源时由互锁工具30确定的。在运行时间期间,NPAPI桥使得可信模块40能够被调用,其转而将确定要调用的适当函数,可信模块40然后将执行对网页应用的向上调用,连同关联自变量等一起调用嵌套Javascript函数。

在不存在到可信模块的互锁的情况下,当在非本机执行环境中实现安全加载程序的情况下,能够潜在地欺骗调用可信模块以安全地加载应用的应用。也就是说,流氓应用可以模仿发起安全加载程序的原始调用应用。通过将应用与可信模块互锁,能够由可信模块对调用应用进行认证和验证。在没有互锁可信模块的情况下,应用将不能加载。在国际专利申请公开号WO2010/1247438中和国际专利申请号CA2010/001761中能够找到安全加载机制的示例。

再次地,在不存在互锁的情况下,当应用完整性验证技术时,可能的安全攻击可以涉及到用流氓实现来替换虚拟机或应用以便在运行时间期间绕过完整性验证检查。通过将应用与可信模块互锁,能够在启动时以及在运行时间期间由可信模块对调用应用和或虚拟机进行认证和验证。在没有互锁可信模块的情况下,应用将不能启动和或执行。

可以向上文相对于图6、7、8和10的示例所述的互锁执行技术添加附加安全功能以制止诸如下文所述那些的安全侵犯。例如,应用安全模块52(在图4处示出)能够支持如以下的安全功能。A)应用的安全加载,其能够阻止对应用的逆向工程攻击;B)应用的完整性验证,其能够阻止对应用的静态和动态篡改攻击;C)应用的调试阻止,其能够阻止使用诸如调试或模拟器的攻击工具的动态攻击;以及D)应用的动态加密,其能够阻止静态篡改和动态代码盗用攻击。安全函数A—D仅仅是作为示例提供的,并且本领域的技术人员将认识到可以同样地支持其他功能。下面提供安全功能A—D的示例。

除诸如安全功能A—D的安全功能之外,安全模块52能够导出可信模块发现原语和类似通信原语以使得多个虚拟机能够使用可信模块(甚至同时地)。由于可信模块40是本机应用,所以其能够使用由计算平台提供的所有安全功能。可信模块向虚拟机和/或脚本引擎提供这些安全特征的抽象。作为单独模块,能够独立于虚拟机和脚本引擎来替换可信模块40。这使得可以将应用可信管理和由虚拟机提供的特征组分离。

非本机应用的安全加载能够用来在应用被执行之前阻止对应用及其相关数据的动态分析型攻击。图11示出了如何能够通过添加可信模块40将安全加载程序功能扩展至脚本语言环境(或虚拟机执行环境)的示例。

在非本机应用600的部署之前,发生安全加载程序预先提供步骤,其中,非本机应用子组件(例如,函数、类、模块)被识别和加密并存储为受保护一个或多个资源以便输入到安全加载程序启动步骤中。这些资源被加密,使得只有可信附加模块能够将资源解密。

要求安全加载程序存根602到非本机应用600中的集成以便定义用于发起非本机应用子组件从可信模块40到应用运行时间中的安全加载的触发点。安全加载程序存根602是能够调用可信模块40的一个或多个安全加载程序函数的非本机应用子组件。随后,部署非本机应用600以及可信模块40和加密子组件。

在应用启动时,安全加载程序存根602被应用600触发。此触发调用安全加载程序存根602,其转而唤起对可信模块40的向下调用604,用信号通知其加载一个或多个应用子组件。

可信模块40对来自安全加载程序存根602组件的请求进行认证并调用安全加载程序处理程序608,其是本机代码函数。如果可信模块40不能对调用应用进行认证,则应用600不能加载。

可信模块40识别应用子组件并将应用子组件解密。一旦可信模块40已将应用子组件解密,其然后对应用运行时间施以向上调用606,将应用子组件加载到应用上下文。

已解密应用子组件现在可用于非本机应用上下文。一旦完成,可信模块40可以可选地返回安全加载程序存根602向下调用方法调用的状态结果。

完整性验证能够确认非本机应用未被篡改。图12示出了根据本公开的实施例的用于完整性验证的示例性过程。

在非本机应用600的部署之前,发生完整性验证预先提供步骤,其中出于完整性验证目的识别应用子组件。在此步骤期间,对每个子组件计算密码哈希值。子组件哈希值710(例如,SHA-1)被加密,使得只有可信模块40能够检索该值并将其解密。

在预先提供步骤期间,在哈希计算步骤之前,在非本机应用600中定义完整性验证触发点。在完整性验证存根702中定义完整性验证触发点,其又实现对可信模块40的向下调用。可选地,可以将完整性验证触发点与商业逻辑集成,使得在应用运行时间期间要求向下调用704,以便调用某些商业逻辑(与可信模块40链接),其转而可以调用完整性验证检查。

随后,部署非本机应用600、可信模块40和已加密哈希值710。在应用启动时或运行时间期间,如完整性触发点所确定的,完整性验证存根702被非本机应用600调用。完整性验证存根702唤起对可信模块40的向下调用,用信号通知完整性验证检查运行。完整验证存根702可以将应用上下文信息传递至可信模块40,以便被可信模块40用于完整性验证。

此后,可信模块40对来自完整性验证存根702组件的请求进行认证并调用完整性验证处理程序708,其为本机代码函数。如果可信模块40不能对调用应用进行认证,则非本机应用600能够调用应用特定失败策略。

随后,可信模块40根据被向其传递的非本机应用上下文信息来识别应用子组件,并将一个或多个内部应用子组件哈希值710解密。

可信模块40通过对应用600施以向上调用并检索存储器内子组件表示来执行应用子组件的动态完整性验证比较检查。可信模块40然后计算存储器内子组件的哈希值并与用应用部署的已解密哈希值相比较。

如果完整性验证比较检查失败,则可信模块40可能使用在应用预先提供步骤中确定的失败策略而使非本机应用600失败。

一旦完成,可信模块104可以可选地返回完整性验证存根702向下调用方法调用的状态结果。

图13示出了根据本公开的实施例的用于反调试的示例性过程。过程包括以下各项。

在部署非本机应用600之前,针对非本机应用600定义反调试策略。该策略被可信模块40启用,并且能够以各种方式被触发,例如:a)通过指定的向下调用;b)通过指定的完整性验证检查;以及c)通过指定的安全加载程序调用,其全部可被成为被关联至非本机应用600的非本机应用存根的一部分。

在非本机应用执行期间,可以从可信模块104内触发和启动反调试检查。可信模块40内的反调试处理程序806被调用以执行反调试平台和语言特定检查,诸如:a)基于时间的反调制;b)基于例外的反调试;以及c)应用运行时间特定检查。

本公开讨论了能够保护虚拟机应用的可信模块的部署。如本领域的技术人员将认识到的,单个可信模块能够服务于不止一个VM。此外,本公开可以与大范围的广泛使用的计算平台有关。

在先前的描述中,出于说明的目的,阐述了许多细节以便提供对实施例的透彻理解。然而,如本领域的技术人员而言将显而易见的是这些特定细节并不是要求的。在其他实例中,以框图形式示出了众所周知的电结构和电路以便不会使理解混淆。例如,未提供关于本文所述的实施例被实现为软件例程、硬件电路、固件还是其组合的特定细节。

本公开的实施例可以表示为存储在机器可读介质(也被称为计算机可读介质、处理器可读介质或计算机可用介质,在其中体现有计算机可读程序代码)中的计算机程序产品。机器可读介质可以是任何适当的有形、非瞬态介质,包括磁、光或电存储介质,包括磁碟、紧凑盘只读存储器(CD-ROM)、存储器件(易失性或非易失性)或类似存储机制。机器可读介质可以包含指令、代码序列、配置信息或其他数据的各种集合,其在被执行时使处理器执行根据本公开的实施例的方法中的步骤。本领域的技术人员将认识到实现所述实施方式所需的其他指令和操作也可以被存储在机器可读介质上。存储在机器可读介质上的指令能够被处理器或其他适当处理设备执行,并且能够与电路对接以执行所述任务。

上述实施例意图仅仅是示例。在不脱离仅仅由所附权利要求定义的范围的情况下,可以由本领域的技术人员对特定实施例实现替换、修改和变更。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号