应用随机化制造技术

技术编号:11766103 阅读:63 留言:0更新日期:2015-07-23 17:47
在一个实现中,应用随机化系统访问应用的带注释的中间表示,识别带注释的中间表示内的第一指令块,并随机选择用于第一指令块的第一修改。应用随机化系统然后识别带注释的中间表示内的第二指令块并随机选择用于第二指令块的不同于第一修改的第二修改。应用随机化系统然后生成应用的本机代码表示,其中第一修改被应用于第一指令块并且第二修改被应用于第二指令块。

【技术实现步骤摘要】
【国外来华专利技术】【专利说明】
技术介绍
应用(或软件程序)典型地针对特定环境(例如操作系统和硬件平台)而编译且在诸如实现该环境的计算系统之类的主机处执行。因此,应用的特定构造或版本的一个实例与应用的该构造或版本的其它实例相同。应用的实例之间的这样的类似性可以是安全风险,因为攻击者可以通过观察应用的一个实例来知悉关于该应用的许多或全部实例的各种运行时特性。一些环境对应用或由应用访问的库的地址空间布局(或存储器空间占用)进行随机化以使应用数据和可执行代码的位置发生变化来减轻这样的安全风险。【附图说明】图1是根据实现的应用随机化系统的操作的图示。图2是根据实现的生成应用的带注释的中间表示的过程的流程图。图3是根据实现的应用的带注释的中间表示的图示。图4是根据另一实现的应用的带注释的中间表示的图示。图5是根据实现的将随机修改应用于应用的过程的流程图。图6是根据实现的随机修改过程的流程图。图7是根据实现的应用随机化系统的示意性框图。图8是根据实现的托管应用随机化系统的计算系统的示意性框图。【具体实施方式】攻击者通常试图通过与应用交互来知悉应用的内部操作和结构。也就是说,攻击者可以通过向应用提供输入并观察输出来知悉应用。作为具体实例,攻击者可以通过经由应用的接口提供随机输入和/或有针对性的输入(例如,包括利用特定安全漏洞或安全漏洞类的值或符号的输入)并观察应用的输出来研宄基于Web的或网络使能的应用。这样的技术可以称为模糊处理(fuzzing)。作为具体实例,攻击者可以向应用的接口提供被精心制作成利用结构化查询语言(SQL)漏洞(例如,被嵌入在输入中的SQL查询)、缓冲器溢出漏洞(例如,输入中的大容量数据)或任意代码执行漏洞(例如,被嵌入在输入中的shell代码)的输入。基于响应或对应于输入的输出,攻击者可以确定在应用内是否和在哪里存在安全漏洞。攻击者还使用诸如反汇编和汇编代码分析之类的反向工程技术来研宄应用。例如,攻击者可以反汇编应用的本机代码(或对象-代码)表示并分析所得到的汇编指令以知悉应用的结构和操作。因为许多应用作为那些应用的特定构造的拷贝而被分发,所以应用的一个拷贝中的漏洞很可能也存在于该应用的其它拷贝中。换言之,应用的特定版本或构造的每一个拷贝共享应用的该版本或构造的其它拷贝的结构、操作和漏洞。因此,攻击者从研宄应用的一个实例(或执行拷贝)知悉的信息适用于该应用的许多其它实例。地址空间布局随机化(ASLR)已被用于更改应用的加载时实例的存储器布局。更具体地,ASLR对诸如数据、代码、库、堆和/或栈之类的应用组件的存储器中的定位或位置进行随机化。应用的实例是指在运行时处应用的表示。例如,应用的实例可以是指定义应用且由处理器执行的存储在存储器(例如随机存取存储器(RAM))处的指令组。ASLR使一些安全漏洞的利用变得复杂,因为该技术迫使攻击者动态地识别正在执行的实例的这些应用组件的存储器位置。然而,ASLR不改变应用自身的操作或结构。而是,ASLR移动在加载时和/或运行时处一些应用组件的存储器内位置。换句话说,应用的一个实例的所有漏洞存在于该应用的其它实例中,但仅仅已被重定位在存储器中。因此,在攻击者能够动态地识别漏洞的位置之后,可以一致地利用漏洞。本文所讨论的实现在应用在主机处被实例化之前随机修改应用。应用的实例化是指生成应用的实例。例如,实例化可以包括:将表示应用的指令或程序代码加载到存储器(例如RAM)中,以及在应用的进入点(例如进入地址)处开始由处理器执行。在一些实现中,应用的实例化可以包括:在存储器内重定位应用的部分以实现ASLR。换言之,本文所讨论的实现可以与ASLR方法组合。本文所讨论的随机修改可以被应用于应用的每一个实例(S卩,每当应用被实例化或执行时)以更改应用的结构和操作而不更改应用的功能性。换言之,随机修改改变应用如何执行任务,但不改变应用执行什么任务。换句话说,应用的每一个实例执行相同功能性,但使用不同内部结构和/或操作来这样做。也就是说,每一个实例中的不同的结构和/或操作的结果是等效的。由此,漏洞跨应用的示例而不一致。因此,应用的一个实例中的漏洞的研宄提供了极少或不提供对应用的其它实例中的漏洞的洞悉。而且,因为应用的结构和操作对于每一个实例而言是不同的,所以漏洞不会跨应用的实例而一致地表现。例如,应用的一个实例中的成功代码注入将很可能导致应用的另一实例的异常或过早终止。图1是根据实现的应用随机化系统的操作的图示。更具体地,图1图示了通过应用随机化系统的组件(例如模块)的应用(或应用的不同表示)的流。如本文所使用的,术语“应用”是指可在环境内执行(或托管)以执行一个或多个功能性的软件。作为示例,诸如web或超文本传输协议服务器、web应用服务器、office产品(例如文字处理)软件、便携式文档格式(PDF)解释器、电子邮件客户端或服务器之类的网络服务和诸如网络协议栈之类的中间件是应用的示例。如图1中图示的,向中间表示生成器120提供应用的源代码表示111。应用的源代码表示是使用人类可读编程语言定义的指令的集合。例如,源代码表示111可以是以诸如本机编程语言之类的编程语言定义应用的文件或文件组。编程语言的示例包括:c,C++,C#, Objective-C, Java?, Haskell,Erlang,Scala,Lua 和 Python。在一些实现中,源代码表示111可以参考源代码表示111外部的功能性或资源,诸如在应用的编译时期间(例如,在中间表示生成器120或本机代码生成器160处)或在应用的运行时处可访问的库或环境服务(例如操作系统服务)。中间表示生成器120是基于源代码表示111生成应用的中间表示112的模块。例如,中间表示生成器120可以是执行词汇、句法、语义和优化分析且输出应用的中间表示的编译器或诸如编译器组件之类的编译器的一部分。作为中间表示生成器120的具体示例,中间表示112可以是低级虚拟机(LLVM)位码中间表示,源代码表示111可以是C源代码文件的组,并且中间表示生成器120可以包括输出中间表示112的诸如clang之类的LLVM编译器。可以以多种形式描述LLVM中间表示。典型地,以位码形式或符号文本形式描述LLVM中间表示,并且LLVM系统包括用于在这些形式之间转换的实用程序。因此,本文参考LLVM位码中间表示所讨论的实现是本专利技术的具体示例实现。与这样的示例实现有关地讨论的方法和系统可以适用于其它实现,诸如利用诸如具有符号形式的LLVM中间表示之类的其它中间表示的实现。如本文所使用的,术语“中间表示”是指使用中间语言指定的应用的表示,所述中间语言是除诸如抽象机之类的应用的主机外的机器的语言。也就是说,以中间表示而表示的指令不可由应用的主机(即,将执行应用的机器或虚拟机)直接执行。作为示例,可以以寄存器传送语言(RTL)、字节码语言、诸如LLVM位码之类的静态单赋值(SSA)语言、诸如公共中间语言之类的基于栈的中间语言、一些其它中间语言或其组合指定中间表示。在一些实现中,应用的中间表示不可由应用的主机直接执行。因此,在不使用例如如本文更加详细讨论的随机修改模块和本机代码生成器来生成应用的本机代码表示的情况下,中间表示不由主机执行。因此,每当应用被实例化或执行本文档来自技高网...

【技术保护点】
一种存储表示指令的代码的处理器可读介质,所述指令当在处理器处执行时使处理器:访问应用的带注释的中间表示;识别带注释的中间表示内的第一指令块;随机选择用于第一指令块的第一修改;识别带注释的中间表示内的第二指令块;随机选择与第一修改不同的用于第二指令块的第二修改;以及生成应用的本机代码表示,其中第一修改被应用于第一指令块并且第二修改被应用于第二指令块。

【技术特征摘要】
【国外来华专利技术】

【专利技术属性】
技术研发人员:BQ莫纳罕K哈里森
申请(专利权)人:惠普发展公司有限责任合伙企业
类型:发明
国别省市:美国;US

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1