CN201410619045.7
2014.11.05
CN104700026A
2015.06.10
实审
审中
实质审查的生效IPC(主分类):G06F 21/53申请日:20141105|||公开
G06F21/53(2013.01)I; G06F21/55(2013.01)I
G06F21/53
迈克菲股份有限公司
B·孙; X·陈; C·徐; H·约瑟夫
美国加利福尼亚州
14/098,299 2013.12.05 US
上海专利商标事务所有限公司31100
姬利永
通过将字节码注入到沙箱环境的预定方法中,可以检测使用利用来尝试从沙箱环境逃逸的应用,而无需知晓应用或用于尝试从沙箱环境逃逸的利用。在指示应用从沙箱逃逸后,可以结束应用,或可以报告逃逸,允许进一步对应用进行监视。
权利要求书1. 一种可编程设备,包括: 处理元件,被配置成提供沙箱环境; 存储器,耦合到所述处理元件,在其上存储了指令,所述指令在由所述处 理元件执行时使所述处理元件: 在所述可编程设备上实例化所述沙箱环境;以及 将代码注入到所述沙箱环境中,所述代码包括指令,所述指令在由 所述处理元件执行时插桩所述沙箱的方法以使所述处理元件独立于应用 检测所述应用从所述沙箱环境逃逸的尝试。 2. 如权利要求1所述的可编程设备,其特征在于,所述方法是提供对安全 性管理器对象的引用的方法。 3. 如权利要求2所述的可编程设备,其特征在于,所述指令在被执行时插 桩所述沙箱的方法以使所述可编程设备独立于应用检测所述应用从所述沙箱 环境逃逸的尝试,包括在被执行时使所述沙箱的所述方法执行下列各项的指 令: 响应于对所述方法的调用返回指示不存在安全性管理器对象的值,指示发 生了逃逸尝试。 4. 如权利要求2所述的可编程设备,其特征在于,所述指令,在被执行时 插桩所述沙箱的方法以使所述可编程设备独立于应用检测所述应用从所述沙 箱环境逃逸的尝试,包括在被执行时使所述沙箱的所述方法执行下列各项的指 令: 如果对所述方法的调用返回指示所述安全性管理器对象已经被禁用的值, 则指示发生了逃逸尝试。 5. 如权利要求1所述的可编程设备,其特征在于,所述方法是在所述可编 程设备上的单独进程中执行指定命令的方法。 6. 如权利要求5所述的可编程设备,其特征在于,所述指令在被执行时插 桩所述沙箱的方法以使所述可编程设备独立于应用检测所述应用从所述沙箱 环境逃逸的尝试,包括在被执行时使所述沙箱的所述方法执行下列各项的指 令: 检查所述应用的权限状态;以及 响应于所述应用具有预定的权限集合,指示逃逸尝试。 7. 如权利要求5所述的可编程设备,其特征在于,所述指令在被执行时插 桩所述沙箱的方法以使所述可编程设备独立于应用检测所述应用从所述沙箱 环境逃逸的尝试,包括在被执行时使所述沙箱的所述方法执行下列各项的指 令: 检查所述应用的权限状态;以及 响应于所述应用具有预定的权限,指示逃逸尝试。 8. 如权利求1-7中的任何一项所述的可编程设备,其特征在于,在由所述 可编程设备执行时使所述可编程设备将代码注入到所述沙箱环境中的所述指 令包括在执行时使所述可编程设备在所述沙箱环境启动之后将代码注入到所 述沙箱环境的指令。 9. 如权利要求1-7中的任何一项所述的可编程设备,其特征在于,所述指 令还包括在执行时使所述可编程设备结束尝试从所述沙箱环境逃逸的应用的 指令。 10. 如权利要求1-7中的任何一项所述的可编程设备,其特征在于,所 述指令还包括在执行时使所述可编程设备报告尝试从所述沙箱环境逃逸的应 用的指令。 11. 一种检测从可编程设备的基于字节码的沙箱环境逃逸的尝试的方 法,包括: 在所述可编程设备上实例化所述沙箱环境;以及 将字节码注入到所述沙箱环境的预定方法; 在由应用调用所述方法时,执行所述预定方法中的所述字节码;以及 指示所述应用从所述沙箱逃逸的尝试,而无需依赖于知晓所述应用尝试从 所述沙箱逃逸所使用的利用。 12. 如权利要求11所述的方法,其特征在于,所述沙箱环境的所述预 定方法是提供对安全性管理器对象的引用的方法。 13. 如权利要求12所述的方法,其特征在于,指示所述应用从所述沙 箱逃逸的尝试包括: 响应于所述方法指示不存在安全性管理器对象,指示从所述沙箱逃逸的尝 试。 14. 如权利要求11所述的方法,其特征在于,所述沙箱环境的所述预 定方法是允许所述应用在所述可编程设备上的单独进程中执行命令的方法。 15. 如权利要求14所述的方法, 其中执行所述预定方法中的所述字节码包括: 检查所述应用的权限状态;以及 其中指示逃逸尝试包括: 响应于所述应用具有预定的权限状态,指示从所述沙箱逃逸的尝试。 16. 一种用于允许应用在沙箱环境中运行的系统,包括: 处理器; 耦合到所述处理器的存储器; 存储在所述存储器上的沙箱指令,包括在由所述处理器执行时使所述处理 器实例化沙箱环境的指令;以及 存储在所述存储器上的沙箱插桩指令,包括在由所述处理器执行时使所述 处理器执行下列操作的指令: 执行所述沙箱指令以实例化所述沙箱环境;以及 将代码注入到所述沙箱环境的预定方法,所述代码包括指令,所述 指令在由所述处理器执行时,使所述处理器插桩所述沙箱的方法以检测 在所述沙箱环境中执行的应用尝试从所述沙箱环境逃逸,而无需依赖于 知晓尝试从所述沙箱环境逃逸所使用的利用。 17. 如权利要求16所述的系统,其特征在于,被注入到所述预定方法 中的所述代码包括字节码。 18. 如权利要求16所述的系统,其特征在于,所述预定方法是提供对 安全性管理器对象的引用的方法。 19. 如权利要求18所述的系统,其特征在于,被注入到所述沙箱环境 的所述预定方法的所述代码包括指令,所述指令在由所述处理器执行时,使所 述预定方法响应于对所述方法的调用返回不存在安全性管理器的值,指示发生 了逃逸尝试。 20. 如权利要求16所述的系统,其特征在于,所述预定方法是在所述 处理器上的单独进程中执行命令的方法。 21. 如权利要求20所述的系统,其特征在于,被注入到所述预定方法 中的所述代码包括指令,所述指令在由所述处理器执行时,使所述预定方法: 检查所述应用的权限状态;以及 响应于所述应用具有预定的权限集合,指示发生了逃逸尝试。 22. 如权利要求20所述的系统,其特征在于,被注入到所述预定方法 中的所述代码包括指令,所述指令在由所述处理器执行时,使所述预定方法: 检查所述应用的权限状态;以及 响应于所述应用具有预定的权限,指示发生了逃逸尝试。 23. 如权利求16–22中的任何一项所述的系统,其特征在于,在由所述 处理器执行时使所述处理器将代码注入到所述沙箱环境的所述预定方法中的 所述指令包括在由所述处理器执行时使所述处理器在所述沙箱环境启动之后 将所述代码注入到所述沙箱环境的所述预定方法中的指令。 24. 如权利要求16–22中的任何一项所述的系统,其特征在于,被注入 到所述沙箱环境的所述预定方法中的代码包括指令,所述指令在由所述处理器 执行时使所述处理器结束尝试从所述沙箱环境逃逸的应用。 25. 一种包括代码的机器可读介质,所述代码在被执行时使机器执行如 权利要求11–15中的任一项所述的方法。
说明书基于JAVA字节码插桩和JAVA方法挂钩检测JAVA沙箱逃逸攻击 技术领域 此处所描述的实施例一般涉及计算机安全领域,具体而言,涉及用于 检测从沙箱环境逃逸的应用的技术。 背景 沙箱是一种受限的环境,其中不受信任的软件可能以如下方式执行: 限制不受信任的软件执行可能被恶意软件利用的动作的能力。沙箱可以被 用作开发环境,限制可能会损坏未受保护环境的错误的影响。类似地,沙 箱可以用于测试不受信任的软件,诸如从不受信任的源获取的软件。基本 上,程序员必须编写只在沙箱内“活动”的代码,如同儿童被允许在现实 沙箱的约束限制内做他们希望做的事情,但是不允许独立地从沙箱逃逸。 某些编程环境,诸如Oracle America公司所提供的平台,提供 沙箱环境,作为它们的开发环境的一部分。(“JAVA”是Oracle America 公司的注册商标)。在JAVA开发环境中,沙箱是建立规则集合的安全措 施,例如,当创建在其作为网页的一部分发送时防止特定功能的小程序时, 使用该组规则。当浏览器请求带有小程序的网页时,自动地发送小程序, 一旦页面到达浏览器,小程序就可以执行。如果小程序被允许对存储器和 操作系统资源进行无限的访问,则如果小程序是恶意软件,它会带来危害。 沙箱创建一种环境,在该环境中,对小程序可以请求或访问哪些系统资源 有严格的限制。除规则之外,JAVA语言还提供代码检测器以保证遵守沙箱 的限制。 然而,如在每个安全性环境中,一旦被发现从沙箱逃逸并访问处于沙 箱中的软件不应该能够访问的资源,安全性环境中的弱点或瑕疵可能会被 利用。入侵预防系统尝试防止操作系统、应用或开发环境中的允许这样的 利用(exploit)成功的漏洞。通常,这样的入侵预防系统使用定制沙箱或 虚拟机来监视利用行为和对沙箱利用的基于签名的检测,类似于传统的防 恶意软件的软件。然而,入侵预防系统常常不能检测利用,诸如还没有被 分析的利用(常常被称为0日利用)。或者,某些常规方法产生假阳性指 示,将不是利用的某种东西称为利用。更好的方法将有所帮助。 附图简述 图1是示出了根据一个实施例的提供沙箱环境的可编程设备的框图。 图2是示出了根据一个实施例的用于插桩(instrument)沙箱的技术的 流程图。 图3是示出了根据一个实施例的用于插桩JAVA沙箱的技术的流程图。 图4是示出了根据一个实施例的用于插桩JAVA沙箱的技术的框图。 图5是示出了根据一个实施例的与本文所描述的技术一起使用的可编 程设备的框图。 图6是示出了根据另一实施例的与本文所描述的技术一起使用的可编 程设备的框图。 图7是其中可以实现本文所描述的技术的可编程设备的网络的框图。 具体实施方式 在下面的描述中,为了进行说明,阐述了很多具体细节以便提供对本 发明的透彻理解。然而,对本领域技术人员将显而易见的是,本发明可以 在没有这些具体细节的情况下实施。在其他情况下,以框图形式示出结构 和设备,以便不至于使本发明变得模糊。对没有下标或后缀的标号的引用 被理解为引用对应于所引用标号的全部下标和后缀实例。此外,本公开中 所使用的语言主要用于可读性和指导目的,可能并非用于描绘或限定发明 的主题,而是借助于确定发明主题所必需的权利要求。说明书中对“一个 实施例”、“实施例”的引用意味着结合该实施例所描述的特定特征、结 构或特性被包括本发明的至少一个实施例中,对“一个实施例”或“实施 例”的多个引用不应该被理解为一定都引用同一个实施例。 如此处所使用的,术语“可编程设备”可以是指单个可编程设备或一 起协作以执行描述为在可编程设备上执行或由可编程设备执行的功能的多 个可编程设备。 虽然下面是就JAVA沙箱环境描述的,但是,下面所描述的技术不仅 限于这样的实施例,而是可以用于任何沙箱环境中,其中通用沙箱可以在 运行时被修改,以检测对操纵允许在该环境中从沙箱逃逸的某些沙箱功能 的尝试。尽管下面的描述是就由JAVA沙箱所提供的JAVA SecurityManager()方法和EXEC()方法而言给出的,但是,也可以插桩可以 被确定为可能被尝试从沙箱逃逸的利用所使用的其他方法,以提供对利用 的附加检测。 下面的有关的利用是尝试逃逸由沙箱环境施加的限制的利用。还可以 使用类似的技术来检测可能利用沙箱环境的其他弱点但是不尝试从沙箱逃 逸的恶意软件,不管利用的本质如何,在该技术中,沙箱实现大多数这样 的利用会使用的功能。然而,不管用于逃逸尝试的技术如何,寻求从沙箱 逃逸的恶意软件都可能需要利用特许的方法来在沙箱之外运行代码。因此, 下面所描述的技术插桩恶意软件所使用的方法,以获取由沙箱限制的特权, 并被证明在检测并允许结束所有这样的逃逸尝试方面是有效的。 沙箱通常是用于保护在其上实现沙箱的系统的资源的规则集合。沙箱 可以实现不同级别的保护,其中不同级别允许访问不同资源集合。最小的 沙箱允许刚刚够程序运行的资源,而开放的沙箱可能允许访问主机系统通 常可以访问的所有资源。典型的沙箱可能允许在沙箱中运行的程序访问处 理器、其自己的存储器,并访问该程序加载而来的web服务器。 应用可以使用此处被称为利用(exploit)的技术,以获得或修改被给 予应用的权限或特权,或者修改、关闭、或禁用其他安全控制。沙箱使用 权限、特权以及安全控制来控制对资源的访问,并且通常限制对在沙箱中 运行的应用可用的权限、特权以及安全控制。利用通常利用沙箱环境中的 弱点或瑕疵。获得或修改权限、特权或安全控制是利用的一部分。从沙箱 逃逸的尝试被定义为如下尝试:使用那些权限、特权或安全控制来执行被 沙箱环境阻止的动作。当应用执行动作成功时,诸如在沙箱环境之外执行 代码,实际的逃逸发生。下面所描述的技术提供了检测从沙箱环境逃逸的 尝试的方式,允许沙箱环境防止那些动作被执行。 图1是示出了根据一个实施例的在移动设备100上运行的JAVA环境 的框图,其中下面所描述的监视技术被用来检测和防止JAVA程序从沙箱 逃逸。JAVA虚拟机(JVM)140提供运行时环境,其中可以执行JAVA字 节码。JVM 140通常与JAVA类库一起分布,JAVA类库是实现JAVA应 用编程接口(API)152的标准类库集合(以JAVA字节码表示)。这些库, 与JVM 140绑定,形成JAVA运行时环境(JRE)150。 打算在JVM上运行的源代码文件110中的JAVA源代码程序,以标准 化可移植二进制格式(通常采用.class文件的形式(JAVA类文件))被编 译为Java字节码文件120。程序可以在不同的文件中包括许多类。为了更 加容易分发大型程序,多个类文件可以以.jar文件(JAVA档案)封装在一 起。然后,由JVM 140中的字节码验证器144,验证这些字节码文件120。 虽然被示为实际文件,但是源代码文件和字节码文件中的任何一种或两种 可以不是可编程设备100的文件系统的文件,而可以是作为输入提供到 JAVA编译器或JVM 140的存储器中表示。 JVM 140通常包括执行无用单元收集(garbage collection)的存储器管 理器142、字节码验证器144,以及解释器/即时(just-in-time,JIT)编译 器146。JVM 140运行时执行.class或.jar文件120,通过解释JVM指令集 或使用即时编译器(JIT)来模拟JVM指令集。当今,JIT编译(而非解释) 用于大多数JVM 140中,以实现更快的速度。还有允许开发人员将类文件 预编译为针对特定平台的本机代码的“提前”编译器。 由字节码验证器144验证字节码文件120,以确定字节码是安全的, 以便没有在JVM 140中运行的程序能使可编程设备100崩溃或以其它方式 不适当地干扰可编程设备100上的其他操作。防止属于受信任代码的某些 方法和数据结构被在同一个JVM 140内执行的不受信任代码访问或损坏。 此外,还不允许常常会导致数据损坏或不可预测行为的常见程序员错误(诸 如在阵列的末端之外访问或使用未初始化的指针)发生。 JVM验证器144在字节码被执行之前验证全部字节码。此验证主要包 括三种类型的检查:(a)分支总是通向有效位置;(b)数据总是被初始化, 引用总是是类型安全的;以及,(c)严格地控制对私有的或封装私有的数据 和方法的访问。这些检查中的头两个主要在验证步骤过程中发生,验证步 骤在加载类并使其适于使用时发生。第三个主要在一类数据项或方法首次 被另一类访问时动态地执行。 验证器144只允许有效程序中的某些字节码序列,例如,跳跃(分支) 指令只能指向同一个方法内的指令。 虽然在图1中示出了移动设备100,但是能够支持JVM 140的任何类 型的可编程设备都可以支持此环境,包括,例如,个人计算机、服务器、 大型机以及嵌入式设备。另外,虽然图1中的JRE 150在操作系统130下 运行,但是也可以实现直接在硬件上运行而无需基础操作系统的JRE。虽 然一般而言JRE 150运行最初以JAVA语言编写的程序,但是也可以将其 他编程语言编译为用于在JVM 140上运行的字节码。 由JVM 140所创建的沙箱可以用于监视小程序(applet)(嵌入在网页 中的JAVA程序)或独立JAVA应用的行为。如在下面的描述中所使用的, 术语“应用”旨在包括小程序和独立应用两者。 图2是示出了根据一个实施例的用于动态地修改沙箱以检测从沙箱环 境逃逸的尝试的一般技术200的流程图。在框210中,创建或实例化沙箱 环境。在框220中,可以将监视代码注入到沙箱环境中。监视代码修改沙 箱对象的一个或多个预定方法,插桩方法以检测从沙箱逃逸的尝试,而无 需依赖于知晓尝试从沙箱逃逸的利用或逃逸后行为。如此,例如,监视代 码不使用或依赖于利用的签名。在框230中,如果监视代码确定从沙箱逃 逸的尝试已经被作出,则可以结束沙箱;可另选地,可以允许沙箱继续执 行,但是结束该应用或在沙箱中运行的应用。在图2中未示出的再一个替 代方案中,可以允许作出逃逸尝试的应用继续,但是可以报告或存储有关 逃逸的信息,供以后分析。如果没有检测到逃逸尝试,则沙箱可以允许该 应用的执行。 图3是示出了一般技术200的JAVA特定实施例的流程图。JAVA特 定技术300插桩JAVA沙箱环境。在框310中,启动JVM 140,在JVM 140 中创建沙箱环境,该沙箱环境限制在沙箱中运行的应用可以请求访问哪些 系统资源,允许不受信任的可执行代码安全地运行。在某些实施例中,技 术300使用在JVM 140被初始化之后但在启动JVM 140之前调用的premain 方法来插桩JVM 140。在其他实施例中,技术300使用在启动JVM 140之 后调用的agentmain方法或某种其他方法来插桩JVM 140。 在框320中,将利用检测代码注入到JVM中,插桩提供沙箱的JVM。 可以以不同的方式插桩JVM的不同版本。例如,由Oracle公司所提供的 JVM的版本1.7,一种比较常见的JVM,引入了可以被JVM的插桩使用的 SecurityManager类,而不提供SecurityManager类的版本1.6和以前的版 本可以使用涉及被称为EXEC的运行时方法的不同插桩技术。因此,在一 个实施例中,在框330中,可以检查JVM的版本,并根据该检查,使用不 同的处理技术。 在JVM版本1.7或更大的系统中,当应用在JVM 140内运行时,几 乎每个应用都实例化SecurityManager类的SecurityManager对象。此对象 被用来定义应用的安全策略:通常包括checkRead、checkWrite、 checkConnect等等方法。每当危险的操作即将执行时,都由JAVA库中的 代码咨询SecurityManager对象。由此,通过引发安全性异常, SecurityManager对象被给予防止操作完成的机会。 为了成功地在JAVA沙箱之外运行代码,利用必须在利用可以运行从 JAVA沙箱逃逸所需的特许JAVA代码之前禁用SecurityManager对象。在 一个实施例中,通过检测逻辑在java.lang.System类中挂钩(hook) System.getSecurityManager和System.setSecurityManager方法。框340和360 中所示出的检测逻辑检查原始SecurityManager对象是否已经更改或禁用, 在框340中,在沙箱的初始化时挂钩setSecurityManager方法以存储原始 SecurityManager对象,然后,在框360中,利用getSecurityManager方法 来检查SecurityManager对象是否为空或被禁用。如果SecurityManager对 象已经被禁用或是空,则表明已经发生了逃逸尝试,可以结束尝试从沙箱 逃逸的应用。 如上所述,JAVA环境的一些实施例,诸如JRE 1.6以及更早版本,不 使用SecurityManager类或对象。在这样的实施例中,可以通过检测逻辑来 挂钩Java.lang.Runtime类的EXEC方法。除SecurityManager检测逻辑之外 或代替SecurityManager检测逻辑,此检测逻辑还可以用于使用 SecurityManager类的JAVA环境的各实施例中。 JRE 1.6.x实施例的检测逻辑有点不同,因为攻击者无需禁用 SecurityManager对象以在沙箱之外运行代码。相反,攻击者会只更改权限。 如果JAVA应用试图调用诸如ClassLoader之类的特许方法,则应用将得到 下列“权限被拒绝”的错误: java.security.AccessControlException:access denied ("java.lang.RuntimePermission""createClassLoader") at java.security.AccessControlContext.checkPermission(Unknown Source) at java.security.AccessController.checkPermission(Unknown Source) at java.lang.SecurityManager.checkPermission(Unknown Source) at java.lang.SecurityManager.checkCreateClassLoader(Unknown Source) at java.lang.ClassLoader.checkCreateClassLoader(Unknown Source) at java.lang.ClassLoader.<init>(Unknown Source) … 在攻击应用能够回避JAVA沙箱之后,应用可以简单地调用类似于下 列代码的代码,以获取完全权限: URL localURL=new URL("file:///"); Certificate[]arrayOfCertificate=new Certificate[0]; Permissions localPermissions=new Permissions(); localPermissions.add(new AllPermission()); ProtectionDomainlocalProtectionDomain=new ProtectionDomain(new CodeSource(localURL,arrayOfCertificate),localPermissions); 因此,在一个实施例中,JRE 1.6.x环境的检测逻辑可以挂钩总是在尝 试在沙箱之外运行代码的JAVA利用中使用的某些方法,例如, Runtime.getRuntime().Exec()。在沙箱中运行的不包含尝试从沙箱逃逸的利 用的应用一般不调用EXEC方法。通过将代码注入到JVM 140中以挂钩 EXEC方法,每当在框350中调用EXEC方法时,都可以检查权限状态。 通常,不认为JAVA应用在JAVA沙箱内具有完全权限。如果在框370中 权限处于沙箱的合适级别,则可以允许执行由EXEC方法执行的代码;否 则,可以结束看起来试图从沙箱逃逸的应用。虽然在图3中EXEC方法被 标识为被挂钩,但是根据需要,代替EXEC或作为EXEC的补充,还可以 挂钩其他方法。 任何预定的权限集合都可以被用作应用尝试使用利用来从沙箱逃逸的 指示。尽管在很多情况下,利用可以将应用设置为具有完全权限,但是在 某些情况下,利用只将应用设置为具有执行利用所试图的任何动作所需的 权限。在某些实施例中,如果应用具有预定的特定权限,则应用可以被指 示为尝试从沙箱逃逸。 在某些实施例中,代替只是结束看起来尝试从沙箱逃逸的应用,如果 需要,可以结束整个沙箱或Java虚拟机140本身。可另选地,代替关闭应 用、沙箱或JVM 140,检测逻辑可以简单地报告逃逸尝试。 在一个实施例中,为允许JVM 140的插桩,将代理部署为JAR文件。 JAR文件manifest中的属性指定将被加载以启动代理的代理类。代理可以 通过命令行界面,通过向命令行添加-javaagent:jarpath[=options]开关来 加载,其中“jarpath”是到代理JAR文件的路径且“options”是代理选项。 如果需要,可以在同一个命令行上多次使用javaagent开关,允许创建多个 代理。可以有一个以上的代理使用同一个jarpath。可另选地,JVM 140可 以实现使用动态加载来在JVM 140启动之后启动代理的机制,允许工具将 代理附加于正在运行的JVM 140。 如图4所示,在初始化JVM之后,JVM组件410使用系统ClassLoader 方法420来加载代理类430,该代理类430包含要被注入到JVM 140中的 字节码。然后,JVM 140实例化插桩(Instrumentation)接口实现,并给出 上下文,调用通过代理类430来实现的方法。代理类430注册 ClassFileTransformer接口440,该接口440变换JVM 140的类文件,注入 检测逻辑的字节码。 现在参考图5,框图示出了根据一个实施例的可以使用沙箱环境的可 编程设备500。图5中所示出的可编程设备是包括第一处理元件570和第二 处理元件580的多处理器可编程设备500。尽管示出了两个处理元件570 和580,但是可编程设备500的实施例还可以只包括一个这样的处理元件。 可编程设备500被示为点对点互连系统,其中第一处理元件570和第 二处理元件580通过点对点互连550耦合。图5中所示出的任何或全部互 连都可以实现为多点分支总线,而并非点对点互连。 如图5所示,处理元件570和580中的每一个都可以是多核处理器, 包括第一和第二处理器核(即,处理器核574a和574b和处理器核584a和 584b)。这样的核574a、574b、584a、584b可以被配置成以类似于上文参 考图1–3所讨论的方式执行指令代码。然而,根据需要,其他实施例可以 使用是单核处理器的处理元件。在带有多个处理元件570、580的各实施例 中,根据需要,每一处理元件都可以利用不同数量的核来实现。 每一处理元件570,580都可以包括至少一个共享高速缓存546。共享 高速缓存546a,546b可以存储分别被处理元件的一个或多个组件(诸如核 574a、574b以及584a,584b)使用的数据(例如,指令)。例如,共享高 速缓存可以本地高速缓存存储在存储器532,534中的数据,用于被处理元 件570,580的组件更快的访问。在一个或多个实施例中,共享高速缓存 546a,546b可以包括一个或多个中级高速缓存,诸如2级(L2)、3级(L3)、 4级(L4),或其他级别的高速缓存,末级高速缓存(LLC),或其组合。 尽管为清楚起见,图5示出了带有两个处理元件570,580的可编程设 备,但是本发明的范围不如此受限,可以存在任意数量的处理元件。可另 选地,处理元件570、580中的一个或多个可以是不同于处理器的元件,诸 如图形处理单元(GPU)、数字信号处理(DSP)单元、现场可编程门阵列 或任何其他可编程处理元件。处理元件580可以是与处理元件570异质的 或非对称的。就包括架构、微架构、热,功耗特征等等的一系列优点的度 量而言,在处理元件570,580之间可能会有各种差异。这些差异可能有效 地将其本身表现为处理元件570,580之间的不对称性和异质性。在某些实 施例中,各种处理元件570,580可以驻留在相同管芯封装中。 第一处理元件570还可以包括存储器控制器逻辑(MC)572和点对点 (P–P)互连576和578。类似地,第二处理元件580可以包括MC 582和 P–P互连586和588。如图5所示,MC 572和582将处理元件570,580耦 合到相应的存储器,即,存储器532和存储器534,这些存储器可以是本地 附接到相应的处理器的主存储器的部分。尽管MC逻辑572和582被示为 集成到处理元件570,580中,但是在某些实施例中,MC逻辑可以是处理 元件570,580之外的单独逻辑,而并非集成在其中。 处理元件570和处理元件580可以分别通过P–P互连576,586和584 耦合到I/O子系统590。如图5所示,I/O子系统590包括P–P互连594和 598。此外,I/O子系统590还包括将I/O子系统590与高性能图形引擎538 耦合的接口592。在一个实施例中,总线549可以被用来将图形引擎538 耦合到I/O子系统590。交替地,点对点互连539可以将这些组件耦合。 I/O子系统590又可以通过接口596耦合到第一链路516。在一个实施 例中,第一链路516可以是外围组件互连(PCI)总线,或诸如PCI Express 总线之类的总线,或另一I/O互连总线,但是本发明的范围不仅限于此。 如图5所示,各种I/O设备514可以与桥518一起耦合到第一链路516, 桥518可以将第一链路516耦合到第二链路510。在一个实施例中,第二链 路520可以是低引脚数(LPC)总线。在一个实施例中,各种设备可以耦 合到第二链路520,包括,例如,键盘/鼠标512、通信设备526(它们又可 以与计算机网络503进行通信)以及数据存储单元528,诸如磁盘驱动器或 可以包括代码530的其他大容量存储设备。代码530可以包括用于执行上 文所描述的技术中的一个或多个的实施例的指令。进一步地,音频I/O 524 可以耦合到第二总线520。 请注意,还可以构想其他实施例。例如,代替图5的点对点架构,系 统可以实现多点分支总线或另一这样的通信拓朴。虽然链路516和520在 图5中被示为总线,但是也可以使用任何所需类型的链路。此外,还可以 使用比图5中所示出的多一些或少一些的集成芯片,来分区图5的元件。 现在参考图6,框图示出了根据另一实施例的可编程设备600。从图6 中省略了图5的某些方面,以便避免模糊图6的其他方面。 图6示出了处理元件670,680可以分别包括集成存储器和I/O控制逻 辑(“CL”)672和682。在某些实施例中,CL 672、682可以包括诸如 上文参考图5所描述的存储器控制逻辑(MC)。另外,CL 672,682还可 以包括I/O控制逻辑。图6示出了不仅可以将存储器632、634耦合到CL 672,682,而且,还可以将该I/O设备614耦合到控制逻辑672,682。传 统I/O设备615可以耦合到I/O子系统690。 在图5和6中所描绘的可编程设备是可以被用来实现此处所讨论的各 实施例的可编程设备实施例的示意图。可以理解,图5和6中所描绘的可 编程设备的各种组件可以组合在片上系统(SoC)架构中。 现在参考图7,示意地示出了示例基础结构700。基础结构700包含计 算机网络702。计算机网络702可以包括当今可用的许多不同类型的计算机 网络,诸如因特网、企业网络或局域网(LAN)。这些网络中的每一个都 可以包含有线或无线设备,并使用任意数量的网络协议(例如,TCP/IP) 来进行操作。网络702可以连接到网关和路由器(通过708来表示)、终 端用户计算机706、以及计算机服务器704。基础结构700还包括与移动通 信设备一起使用的蜂窝网络703。移动蜂窝网络支持移动电话以及许多其他 类型的设备(例如,平板电脑,未示出)。基础结构700中的移动设备被 示为移动电话710。 在基础结构(诸如图7中所示出的)中,使用沙箱环境的系统可以连 接到各种网络702或703中的任何一种。这些系统可以包括任何类型的连 网设备,包括移动设备710以及嵌入式可编程设备(未示出)。另外,非 连网可编程设备也可以使用沙箱。如此,上文所描述的技术可以用于各种 设备中。 通过修改沙箱环境以监视用于沙箱环境中的少量的预定方法,可以高 效地并有效地检测允许应用从沙箱逃逸的利用,很少或没有假阳性,而无 需依赖于基于签名的技术或监视利用后行为。如此,可以检测到未知的利 用和不生成可疑行为的强指示的利用。 下列示例涉及进一步的实施例。 示例1是在其上存储了指令的机器可读介质,包括在由可编程设备执 行时使可编程设备执行下列操作的指令:在所述可编程设备上实例化沙箱 环境;以及将代码注入到所述沙箱环境中,所述代码包括指令,当由所述 可编程设备执行时,所述指令插桩所述沙箱的方法以使所述可编程设备检 测从所述沙箱环境逃逸的尝试,而无需依赖于知晓尝试从所述沙箱环境逃 逸所使用的利用。 示例2包括示例1的主题,其中所述方法是提供对安全性管理器对象 的引用的方法。 示例3包括示例2的主题,其中所述指令在被执行时插桩所述沙箱的 方法以使所述可编程设备检测从所述沙箱环境逃逸的尝试而无需依赖于知 晓尝试从所述沙箱环境逃逸所使用的利用,包括在被执行时使所述沙箱的 方法执行下列各项的指令:响应于对所述方法的调用返回指示不存在安全 性管理器对象的值,指示发生了逃逸尝试。 示例4包括示例2的主题,其中所述指令在被执行时插桩所述沙箱的 方法以使所述可编程设备检测从所述沙箱环境逃逸的尝试而无需依赖于知 晓尝试从所述沙箱环境逃逸所使用的利用,包括在被执行时使所述沙箱的 方法执行下列各项的指令:如果对所述方法的调用返回指示所述安全性管 理器对象已经被禁用的值,则指示发生了逃逸尝试。 示例5包括示例1的主题,其中所述方法是在所述可编程设备上的单 独进程中执行指定命令的方法。 示例6包括示例5的主题,其中所述指令在被执行时插桩所述沙箱的 方法以使所述可编程设备检测从所述沙箱环境逃逸的尝试而无需依赖于知 晓尝试从所述沙箱环境逃逸所使用的利用,包括在被执行时使所述沙箱的 方法执行下列各项的指令:检查调用方法的应用的权限状态;以及,响应 于所述应用具有预定的权限集合,指示逃逸尝试。 示例7包括示例5的主题,其中所述指令在被执行时插桩所述沙箱的 方法以使所述可编程设备检测从所述沙箱环境逃逸的尝试而无需依赖于知 晓尝试从所述沙箱环境逃逸所使用的利用,包括在被执行时使所述沙箱的 方法执行下列各项的指令:检查调用方法的应用的权限状态;以及,响应 于所述应用具有一个或多个预定权限,指示逃逸尝试。 示例8包括示例5的主题,其中所述指令在被执行时插桩所述沙箱的 方法以使所述可编程设备检测从所述沙箱环境逃逸的尝试而无需依赖于知 晓尝试从所述沙箱环境逃逸所使用的利用,包括在被执行时使所述沙箱的 方法执行下列各项的指令:检查调用方法的应用的权限状态;以及,响应 于所述应用具有预定的权限,指示逃逸尝试。 示例9包括示例1–8中的任何一个的主题,其中在由所述可编程设备 执行时使所述可编程设备将代码注入到所述沙箱环境中的所述指令包括在 执行时使所述可编程设备在所述沙箱环境启动之后将代码注入到所述沙箱 环境的指令。 示例10包括示例1–8中的任何一个的主题,其中所述指令还包括在执 行时使所述可编程设备结束尝试从所述沙箱环境逃逸的应用的指令。 示例11包括示例1–8中的任何一个的主题,其中所述指令还包括在执 行时使所述可编程设备报告尝试从所述沙箱环境逃逸的应用的指令。 示例12包括示例1–8中的任何一个的主题,其中所述指令还包括在执 行时使所述可编程设备结束或报告尝试从所述沙箱环境逃逸的应用的指 令。 示例13是一种检测从可编程设备的基于字节码的沙箱环境逃逸的尝 试的方法,包括:在所述可编程设备上实例化所述沙箱环境;将字节码注 入到所述沙箱环境的预定方法;在由应用调用所述方法时,执行所述预定 方法中的所述字节码;以及,指示所述应用从所述沙箱逃逸的尝试,而无 需依赖于知晓所述应用尝试从所述沙箱逃逸所使用的利用。 示例14包括示例13的主题,其中所述沙箱环境的所述预定方法是提 供对安全性管理器对象的引用的方法。 示例15包括示例14的主题,其中指示由所述应用从所述沙箱逃逸的 尝试包括:响应于所述方法指示不存在安全性管理器对象,指示从所述沙 箱逃逸的尝试。 示例16包括示例13的主题,其中所述沙箱环境的所述预定方法是允 许所述应用在所述可编程设备上的单独进程中执行命令的方法。 示例17包括示例16的主题,其中在所述预定方法中执行所述字节码 包括:检查所述应用的权限状态;以及,其中指示逃逸尝试包括:响应于 所述应用具有预定的权限状态,指示从所述沙箱逃逸的尝试。 示例18包括示例13的主题,其中所述沙箱环境的所述预定方法是提 供对安全性管理器对象的引用的方法;以及,其中指示由所述应用从所述 沙箱逃逸的尝试包括:响应于所述方法指示不存在安全性管理器对象或所 述安全性管理器对象已经被禁用,指示从所述沙箱逃逸的尝试。 示例19包括示例13的主题,其中所述沙箱环境的所述预定方法是允 许所述应用在所述可编程设备上的单独进程中执行命令的方法;以及,其 中执行所述预定方法中的所述字节码包括:检查所述应用的权限状态;以 及,其中指示逃逸尝试包括:响应于所述应用具有预定的权限状态,指示 从所述沙箱逃逸的尝试。 示例20是包括执行在示例13–19中的任何一个中阐述的方法的装置的 设备。 示例21是一种用于允许应用在沙箱环境中运行的系统,包括:可编程 设备;用于所述可编程设备的操作系统;被配置成在所述操作系统下执行 的虚拟机环境,所述虚拟机环境在由所述可编程设备执行时创建沙箱环境; 检测逻辑,所述检测逻辑插桩所述沙箱环境的方法以检测在所述沙箱环境 中执行的应用尝试从所述沙箱环境逃逸,而无需依赖于知晓尝试从所述沙 箱环境逃逸所使用的利用,其中所述虚拟机环境包括:代理类对象;以及, 被配置成在所述虚拟机环境的初始化时加载所述代理类对象的所述虚拟机 环境的类加载器方法,以及,其中所述代理类对象被配置成将所述检测逻 辑注入到所述沙箱环境的预定方法中。 示例22包括示例21的主题,其中所述检测逻辑包括字节码。 示例23包括示例21的主题,其中所述预定方法是提供对安全性管理 器对象的引用的方法。 示例24包括示例23的主题,其中所述检测逻辑当被所述代理类对象 注入到所述沙箱环境的预定方法中时被配置成使所述预定方法:响应于对 所述方法的调用返回指示不存在安全性管理器对象的值,指示发生了逃逸 尝试。 示例25包括示例21的主题,其中所述沙箱环境的所述预定方法是提 供对安全性管理器对象的引用的方法;以及,其中指示由所述应用从所述 沙箱逃逸的尝试包括:响应于所述方法指示不存在安全性管理器对象或所 述安全性管理器对象已经被禁用,指示从所述沙箱逃逸的尝试。 示例26包括示例21的主题,其中所述沙箱环境的所述预定方法是允 许所述应用在所述可编程设备上的单独进程中执行命令的方法;以及,其 中执行所述预定方法中的所述字节码包括:检查所述应用的权限状态;以 及,其中指示逃逸尝试包括:响应于所述应用具有预定的权限状态,指示 从所述沙箱逃逸的尝试。 示例27包括示例21的主题,其中所述预定方法是在执行时使命令在 所述可编程设备上作为单独的进程来执行的方法。 示例28包括示例27的主题,其中所述检测逻辑当被所述代理类对象 注入到所述沙箱环境的所述预定方法中时被配置成使所述预定方法:检查 所述应用的权限状态;以及,响应于所述应用具有预定的权限集合,指示 发生了逃逸尝试。 示例29包括示例27的主题,其中所述检测逻辑当被所述代理类对象 注入到所述沙箱环境的所述预定方法中时被配置成使所述预定方法:检查 所述应用的权限状态;以及,响应于所述应用具有预定的权限,指示发生 了逃逸尝试。 示例30包括示例21–29中的任何一个的主题,其中所述检测逻辑被配 置成结束尝试从所述沙箱逃逸的所述应用。 示例31包括示例21–29中的任何一个的主题,其中代理类对象被配置 成在所述沙箱环境启动之后将所述检测逻辑注入到所述沙箱环境的所述预 定方法中。 示例32是可编程设备,包括:处理元件,其被配置成提供沙箱环境; 存储器,耦合到所述处理元件,在其上存储了指令,所述指令在由所述处 理元件执行时使所述处理元件:在所述可编程设备上实例化所述沙箱环境; 以及,将代码注入到所述沙箱环境中,所述代码包括指令,所述指令在由 所述处理元件执行时插桩所述沙箱的方法以使所述处理元件独立于应用检 测所述应用从所述沙箱环境逃逸的尝试。 示例33包括示例32的主题,其中所述方法是提供对安全性管理器对 象的引用的方法。 示例34包括示例33的主题,其中所述指令在被执行时插桩所述沙箱 的方法以使所述可编程设备独立于应用检测应用从所述沙箱环境逃逸的尝 试,包括在被执行时使所述沙箱的所述方法执行下列各项的指令:响应于 对所述方法的调用返回指示不存在安全性管理器对象的值,指示发生了逃 逸尝试。 示例35包括示例33的主题,其中所述指令在被执行时插桩所述沙箱 的方法以使所述可编程设备独立于应用检测应用从所述沙箱环境逃逸的尝 试,包括在被执行时使所述沙箱的所述方法执行下列各项的指令:如果对 所述方法的调用返回指示所述安全性管理器对象已经被禁用的值,则指示 发生了逃逸尝试。 示例36包括示例32的主题,其中所述方法是在所述可编程设备上的 单独进程中执行指定命令的方法。 示例37包括示例36的主题,其中所述指令在被执行时插桩所述沙箱 的方法以使所述可编程设备独立于应用检测应用从所述沙箱环境逃逸的尝 试,包括在被执行时使所述沙箱的所述方法执行下列各项的指令:检查所 述应用的权限状态;以及,响应于所述应用具有预定的权限集合,指示逃 逸尝试。 示例38包括示例36的主题,其中所述指令在被执行时插桩所述沙箱 的方法以使所述可编程设备独立于应用检测应用从所述沙箱环境逃逸的尝 试,包括在被执行时使所述沙箱的所述方法执行下列各项的指令:检查所 述应用的权限状态;以及,响应于所述应用具有预定的权限,指示逃逸尝 试。 示例39包括示例32–38中的任何一个的主题,其中在由所述可编程设 备执行时使所述可编程设备将代码注入到所述沙箱环境中的所述指令包括 在执行时使所述可编程设备在所述沙箱环境启动之后将代码注入到所述沙 箱环境的指令。 示例40包括示例32–38中的任何一个的主题,其中所述指令还包括在 执行时使所述可编程设备结束尝试从所述沙箱环境逃逸的所述应用的指 令。 示例41包括示例32–38中的任何一个的主题,其中所述指令还包括在 执行时使所述可编程设备报告尝试从所述沙箱环境逃逸的应用的指令。 示例42是一种用于检测从可编程设备的基于字节码的沙箱环境逃逸 的尝试的设备,包括:用于在所述可编程设备上实例化所述沙箱环境的装 置;以及,用于将字节码注入到所述沙箱环境的预定方法的装置;用于在 由应用调用所述方法时,执行所述预定方法中的所述字节码的装置;以及, 用于指示所述应用从所述沙箱逃逸的尝试,而无需依赖于知晓所述应用尝 试从所述沙箱逃逸所使用的利用的装置。 上文的描述只是说明性的,而不是限制性的。例如,上文所描述的各 实施例可以彼此相结合地使用。在审阅上面的描述之后,许多其他实施例 对本领域的技术人员是显而易见的。
《基于JAVA字节码插桩和JAVA方法挂钩检测JAVA沙箱逃逸攻击.pdf》由会员分享,可在线阅读,更多相关《基于JAVA字节码插桩和JAVA方法挂钩检测JAVA沙箱逃逸攻击.pdf(22页珍藏版)》请在专利查询网上搜索。
通过将字节码注入到沙箱环境的预定方法中,可以检测使用利用来尝试从沙箱环境逃逸的应用,而无需知晓应用或用于尝试从沙箱环境逃逸的利用。在指示应用从沙箱逃逸后,可以结束应用,或可以报告逃逸,允许进一步对应用进行监视。。
copyright@ 2017-2020 zhuanlichaxun.net网站版权所有经营许可证编号:粤ICP备2021068784号-1