用于修复应用程序的方法和系统的制作方法

文档序号:6568170阅读:316来源:国知局
专利名称:用于修复应用程序的方法和系统的制作方法
技术领域
本发明总体上涉及用于对多种软件错误做出反应的方法。更具体 地,本发明涉及用于从软件故障和攻击自动恢复的方法和系统。
背景技术
应用程序可能会由于任意数量的威胁、程序错误、软件故障、攻 击或任何合适的软件错误而终止。计算机病毒、蠕虫、木马、黑客、 密钥恢复攻击、恶意可执行程序、探测器等等是对连接到公共计算机 网络(例如互联网)和/或专用网络(例如公司计算机网)上的计算机 的用户的持续威胁。响应于这些威胁,许多计算机被防病毒软件和防 火墙保护起来。但是,这些保护措施并不总是足够的。例如,许多服 务在面临远程攻击、大量事件(例如,快速散播的蠕虫例如Slammer 和Blaster)、或简单的应用层的拒绝服务(DoS )攻击必须保持高的 可用性。
除了这些威胁之外,应用程序通常包含操作期间的错误,该错误 通常由程序员错误产生。不管应用程序是被一个上述威胁攻击还是包 含操作期间的错误,这些软件故障和错误都会导致非法存储器访问错 误、被零除错误、緩冲溢出攻击等等。这些错误导致应用程序终止其 执行或"崩溃"。
已经提出例如实现提前主动方法的解决方案,该提前主动方法试 图通过使用安全语言、库和编译器、代码分析工具和开发方法使该代码尽可能地可靠。还提出了试图使后续故障分析和恢复对于程序员尽
可能容易的调试帮助。已经提出Byzantine容错方案,该方法在多个 服务实例中使用投票来选择正确的答案。但是,这些容错方案在仅有 少量副本将表现出故障行为的假设下操作。实际上,解决此问题的许 多这些方法通常是提前主动的,但是这些策略不会产生无错误代码。 这些解决方案通常是有问题的,例如系统性能降低、单调和麻烦的用 户互动、以及自发的拒绝服务(即,当检测到溢出时,唯一的可选择 方案是终止应用程序)。另外,对于服务器应用程序,由于服务器应 用程序通常长期运行(累积了相当多的状态量),并且通常包含服务 于许多远程用户的多个线程,服务器应用程序往往不能被简单地重 启。重启服务器将拒绝对其他用户的服务。结果,软件糟糕地保持了 很多缺陷多并且很容易崩溃。此外,这些解决方案不适合于高性能、 高可用性环境例如被频繁访问的电子商务网络服务器。
另外,这些应用程序可安装在多种平台,例如个人数字助理 (PDA)、移动电话或汽车个人电脑上。例如,开放式平台操作系统 已被用于汽车个人电脑,以允许用户安装已经为该平台设计的第三方 应用程序。这些应用程序也容易遭受软件错误。尽管目前为这些平台 开发出了防病毒程序以保护应用程序不受这种错误影响,但是它们通 常需要用户交互(例如,下栽补丁或者另一种应用程序,将该设备连 接到个人计算机,等等),并且由于占用了平台的已经很有限的空间、 存储器和传输带宽而降低了系统性能。
因此,本领域中需要提供一种用于处理多种软件错误的反应性更 高的和自动的方法,以便应用程序可从这种错误中恢复而无需用户干 涉,并且不会降低系统性能。
因此,希望提供克服现有技术的这些以及其他缺点的方法和系统。

发明内容
根据本发明的一些实施例,提供了 一种使应用程序可从软件错误和攻击中自动恢复的自愈式系统和方法。通过选择性地模拟应用程序 代码的全部或一部分,或者检测到已经发生故障,如对于该故障类型 适当地,系统立即围绕检测到的故障使操作数对于机器指令有效。系 统通过纠错模拟应用程序代码的 一部分。这可通过更新应用程序代码 或者通过非入侵的手段(例如,通过包装或调试器类型的过程控制) 实现。这增加了在存在一般软件错误、软件错误和攻击(例如,计算 机病毒、蠕虫、木马、黑客、密钥恢复攻击、恶意可执行程序、探测 器、拒绝服务攻击、资源消耗攻击、緩冲溢出、緩冲下溢、非法存储
器访问、被零除、检查时间到使用时间(TOCTTOU)违规和/或程序 设计错误的情况下的服务可用性。
在一些实施例中,提供了 一种用于检测应用程序并且从软件错误 中修复应用程序的方法和系统。使用一个或多个传感器(例如,基于 主机的传感器、无源传感器、蜜罐(honeypot)等等)监控该应用程 序的故障情况。根据本发明的一些实施例,传感器可以是在模拟该应 用程序的单独服务器上实现的蜜罐。
响应于检测到错误,导致该错误的应用程序代码部分被隔离。使 用导致该错误的输入向量、关于该错误的信息(例如,错误类型)、 核心转储文件(例如,堆栈跟踪)等等,构造修复该错误的基于仿真 器的免疫程序。响应于验证到该免疫程序已修复该错误,使用该基于 仿真器的免疫程序更新该应用程序。
可选地,该传感器可分析应用程序的代码,并且预测代码的哪一 部分易发生影响,或者代码的哪一部分具有较高的表现出某一特定错 误的可能性。
根据本发明的 一 些实施例,提供了 一种创建应用程序组以有效地 使用软件单一系统内的可用资源的系统和方法。这些组合的资源可被 用于为应用程序组的每个成员提供保护,同时在组的所有成员之间分 摊检测和分析错误的(例如,计算、存储、磁盘等等)成本。
在一些实施例中,可定义包含多个设备(例如,工作站、服务器 等等)的应用程序组。应用程序的代码可被划分成较小的代码部分,其被指定用于监控多个设备中的每一个。应注意,该代码部分可被静 态分配、随机分配、加权分配、自愿分配和交易型分配指定。还应注 意,用于指定进行监控的代码部分的其它合适的方法也可与上述方法 一起使用或者代替上述方法。可选地,不是指定代码部分,而是可为 多个设备中的每一个指定特定错误。
响应于接收到指定的代码部分,每个设备在应用程序的本地实例 中监控应用程序的代码的指定部分的错误情况,响应于检测到该错误 分析该代码的指定部分,并且构造修复该错误的基于仿真器的免疫程 序。响应于验证到该免疫程序已修复该错误的情况,每个设备用该基 于仿真器的免疫程序更新该应用程序,并且将该错误告知其它设备。
已经概述而不是广泛地说明本发明的较主要的特征,以便下文对 本发明的详细说明可被更好地理解,并且对本领域的贡献可被更好地 理解。当然,存在下文将说明的并且将形成所附权利要求的主旨的本 发明的附加特征。
在此方面,在详细说明本发明的至少一个实施例之前,应理解, 本发明在应用中并不局限于下文说明书内阐述的或附图中示出的构 造的细节和部件的设置。本发明能够具有其它实施例,并且以多种方 式实践和实现。另外,还应理解,文中使用的用语和术语是为了说明 而不应被认为是限制性的。
因此,本领域技术人员应理解,作为公开内容的基础的概念可被 容易地实现为用于实现本发明的一些目的的其它结构、方法和系统的 设计基础。因此,重要地是,权利要求被认为包含不背离本发明的精 神和范围的等同构造。
这些以及本发明的其它目标和作为本发明的特征的多种新颖特 征在所附的并且形成此公开的 一部分的权利要求内被具体指出。为了 更好地理解本发明、其操作优点和通过其使用获得的特定目标,应参 考示出本发明的优选实施例的附图和描述内容。


结合附图参照下文对本发明的详细说明可更充分地理解本发明 的各种目标、特征和优点,在附图中类似的标号指示类似的元件。
图1是根据本发明的一些实施例的适合于监控其它应用程序并 且保护这些应用程序免于发生错误的应用程序的实现的示例性系统 的示意图。
图2是可根据本发明的一些实施例使用的图1的服务器和工作站 之一的详细示例。
图3示出根据本发明的一些实施例的修复应用程序中的故障并 且更新该应用程序的简化流程图。
图4是示出根据本发明的一些实施例的响应于故障发生进行检 测并修复应用程序的简化流程图。
图5示出根据本发明的一些实施例的集成在已有应用程序内的 仿真代码的示例性示例。
图6是示出根据本发明的一些实施例的使用应用程序组检测和 修复应用程序的简化流程图。
图7是示出根据本发明的一些实施例的可被用于分布式投标的 多个应用程序组计算出的表的示例性示例。
具体实施例方式
在下文将说明关于本发明的方法和系统以及这种方法和系统可 在其中操作的环境等等的许多特定细节,以便更透彻地理解本发明。 但是,对于本领域技术人员来说很明显的是,本发明可被实现为不具 有这些特定细节,并且没有详细说明本领域内公知的一些特征以避免 使本发明的主题复杂化。另外,应理解,下文提供的示例仅是示例性 的,并且可想到,在本发明的范围内存在其他的方法和系统。
图l是适合于实现根据本发明的一些实施例的用于监控、修复和 更新其他应用程序的应用程序的示例性系统100的示意图。参照图1, 示出用于实现本发明的示例性系统100。如图所示,系统100可包括 一个或多个工作站102。工作站102可相互是本地的,或者相互远离,并且通过一个或多个通信链路104连接到通信网络106,该通信网络 106通过通信链路108连接到服务器110。
在系统100中,服务器110可以是任何适合于执行应用程序的服 务器例如处理器、计算机、数据处理设备或这些设备的组合。通信网 络106可以是任何合适的计算机网络,包括互联网、内联网、广域网 (WAN)、局域网(LAN)、无线网络、数字用户线(DSL)网络、 帧中继网络、异步传送模式(ATM)网络、虚拟专用网络(VPN)或 它们的任何组合。通信链路104和108可以是适合于在工作站102和 服务器UO之间传输数据的任何通信链路,如网络链路、拨号链路、 无线链路、硬连线链路等等。工作站102可以是个人计算机、膝上型 计算机、主计算机、哑终端、数据显示器、互联网浏览器、个人数字 助理(PDA)、双向式寻呼机、无线终端、便携电话等等或者它们的 任何组合。工作站102和服务器110可被设置在任何合适的位置。在 一个实施例中,工作站102和服务器IIO可被设置在一个机构内。可 选地,工作站102和服务器IIO可被安置在多个机构内。
图1内所示的服务器和一个工作站在图2内被更详细地示出。参 照图2,工作站102可包括处理器202、显示器204、输入设备206和 存储器208,它们可互连。在一个优选实施例中,存储器208包含存 储用于控制处理器202的工作站程序的存储设备。存储器208还可包 括用于检测应用程序并从错误中修复应用程序的应用程序。在一些实 施例中,该应用程序可位于工作站102或服务器110的存储器内。
在一个具体实施例中,该应用程序可包括客户端一侧的软件、硬 件或这二者。例如,应用程序可包含一个或多个网页或网页部分(例 如经由任何合适的编码,如超文本链接标记语言(HTML)、动态超 文本链接标记语言(DHTML)、可扩展标记语言(XML) 、 Java服 务器端网页(JSP)、动态服务器网页(ASP)、冷融合或任何其他 合适的方法)。
尽管应用程序在文中被描述为在工作站上实现,但是这仅是示例 性的。应用程序可在任何合适的平台(例如个人计算机(PC)、主机计算机、哑终端、数据显示器、双路寻呼机、无线终端、便携式电话、
便携式计算机、掌上型电脑、H/PC、汽车计算机、膝上型计算机、个 人数字助理(PDA)、组合的蜂窝式电话和PDA等等)上实现以提 供这种特征。
处理器202可使用工作站程序在显示器204上显示该应用程序、 通过通信链路104接收到的数据、以及工作站102的用户发送的命令 和数值。应注意,通过通信链路10或任何其它通信链路接收到的数 据可从任何合适的源例如网络服务接收到。输入设备206可以是计算 机键盘、光标控制器、拨号盘、转换开关组、杠杆或可被输入系统或 处理控制系统的设计者使用的任何其它合适的输入设备。
服务器110可包括处理器220、显示器222、输入设备224和存 储器226,它们可互连。在一个优选实施例中,存储器226包含用于 存储通过通信链路108或通过其他链路接收到的数据的存储设备,并 且还接收由一个或多个用户所发送的命令和数值。该存储设备还包括 用于控制控制器220的服务器程序。
一般来说,本发明涉及用于检测应用程序内的故障,并且在检测 到故障时禁止和/或防止该故障在该应用程序未来的执行中发生的方 法和系统。应注意,术语"应用程序,,和"服务,,在文中可相互交换地使 用。例如,如下文所述,可使用一个或多个针对特定类型故障的软件 监视程序监控应用程序或服务。应注意,术语"故障"、"攻击"和"错 误,,在文中可相互交换地使用。例如,如下文所述,系统用于对多种 软件错误、故障和攻击做出反应。这些软件错误和攻击包括例如非法 存储器访问、被零除和緩冲溢出(更一般地说,control hijacking)攻 击。
根据本发明的一些实施例,提供了使应用程序能够从软件错误和 攻击中自动恢复的自愈系统。通过当系统检测到发生故障时选择性地 模拟应用程序代码的一部分或全部,对于该故障类型合适地,系统围 绕检测到的故障使操作数对于机器指令有效。该系统通过纠错模拟应 用程序代码的一部分,并且更新该应用程序。这增加了在存在普通软件缺陷、软件错误、攻击的情况下的服务可用性。
转到图3和4,提供了示出根据本发明的一些实施例的检测应用 程序内的故障并纠错该应用程序时执行的各个步骤的简化流程图。它 们是概括性的流程图。应当理解,图3和图4中所示的步骤可以以适 当的顺序执行,某些步骤可以被去除,也可以添加其它步骤。
通常,过程300从在步骤310中检测一个或多个应用程序内的各 种类型的错误开始。在一些实施例中,故障错误可包括监控一个或多 个应用程序的错误情况。在一些实施例中,可在步骤310中使用一个 或多个传感器执行对错误的监控或检测。如前文所述的,错误包括程 序设计错误、异常、软件故障(例如,非法存储器访问、被零除、援 沖溢出攻击、检查时间到使用时间(TOCTTOU)违规等等)、威胁 (例如,计算机病毒、蠕虫、木马、黑客、密钥恢复攻击、恶意可执 行程序、探测器等等)、以及会导致异常的应用程序终止或对一个或 多个应用程序产生不利影响的任何其它合适的故障。例如, 一组传感 器可监控在网络服务器上运行的应用程序的错误情况。
任何合适的传感器可用于检测错误或监控一个或多个应用程序。 在一些实施例中,可使用监控被部署的应用程序和服务器的行为的基 于主机的传感器。在另一个合适的实施例中,可使用防火墙上的无源 传感器偷听或监听行进到和离开服务器(例如图1的服务器110)的 流量。在一些实施例中,还可使用模拟目标应用程序的行为并且捕荻 任何通信的蜜罐。蜜罐可以是例如用作诱斜的单独的服务器,其引诱 潜在的黑客同时仅为潜在的黑客提供有限地访问网络的权限,从而允 许蜜罐监控黑客,并且确定黑客如何能够侵入系统。蜜罐可安装在防 火墙内。但是,应注意,蜜罐也能够安装在防火墙外部。应注意,可 同时使用传感器的任何组合。这些传感器可相互通信、与服务器通信 或者与一个或多个工作站通信。
在步骤320 ,可使用来自传感器的反馈来预测给定应用程序代码 的哪一部分易受到特定类型的攻击(例如,可远程利用的緩沖溢出)。 在一些实施例中,传感器还可检测到已经发生故障。在预测到可能发生故障或者检测到已经发生故障时,在步骤330隔离具有故障指令或 者易受攻击的函数的应用程序代码部分,从而将所预测的故障限制在 局部。
可选地,如图4所示和说明的, 一个或多个传感器可一直监控应 用程序,直到该应用程序被异常终止。系统可检测到已经发生的故障, 从而导致实际应用程序终止。如图4所示,在步骤410,系统迫使行 为不当的应用程序异常中止。响应于应用程序终止,在步骤420,系 统生成一个核心转储文件或产生其它与错误相关的信息。当发生错误 时,核心转储文件可包括例如错误类型以及堆栈跟踪。至少部分地基 于该核心转储文件,在步骤430,系统隔离应用程序代码的包含故障 指令的部分。使用核心转储文件,系统可对该应用程序的被隔离部分 或片段应用选择性的仿真。例如,系统可从堆栈跟踪内的最顶部的函 数开始。
返回图3,在一些实施例中,系统可生成应用程序的被探测的版 本(步骤340)。例如,应用程序的被探测的版本可以是应用程序代 码的 一部分或全部的副本。系统可观察到应用程序的被探测的部分。
可基于对特定类型的攻击的脆弱性选择应用程序的这些部分。被探测 的应用程序可在目前运行一个或多个应用程序的服务器、单独服务 器、工作站或任何其它合适的设备上执行。
应注意,隔离应用程序代码的一部分并且对该部分使用仿真器允 许系统减少和/或最小化对被免疫应用程序的性能影响。但是,尽管此 实施例隔离了应用程序代码的一部分或片段,但是也可模仿整个应用 程序。仿真器可完全用软件实现,或者利用系统处理器或体系结构的 硬件特征或者操作系统提供的其它资源,以减小和/或最小化监控或仿 真的性能影响,并且提高处理错误的准确性和有效性。
利用这种脆弱性的尝试暴露了攻击或输入向量以及其他相关信 息(例如,被攻击的緩冲器、易受攻击的函数、堆栈跟踪等等)。然 后在步骤350,使用攻击或输入向量和其他相关信息以构建实现在机 器指令级进行检查的数组界的基于仿真器的免疫程序或纠错,或者适合于检测到的错误类型的其它纠错。然后,使用指令级仿真器(例如,
libtasvm x86仿真器,STEM x86仿真器等等)在被探测的应用程序内测试该免疫程序,以确定故障是否被纠错和纠错是否影响任何其它功能(例如,关键功能性)。
通过使用指令级仿真器连续测试不同的免疫程序,系统可验证是否通过相对于导致特定故障的事件顺序(例如,输入向量)运行被探测应用程序已经修复了特定故障。例如,为了验证纠错的有效性,应用程序可在能够进行探测的测试环境或者沙盒内重新开始,并且被供给导致该错误的一个或多个输入向量。沙盒通常创建其中存在严格限制的环境,在该限制上可请求或访问系统资源、被探测应用程序或者应用程序的函数。
在步骤360,为应用程序代码的区段选择性地调用指令级仿真器,从而使该系统可在同 一代码执行内混合被模拟和未被模拟的代码。仿真器可用于例如在执行指令之前检测和/或监控特定类型的故障,记录在指令执行期间的存储器改变(例如,全局变量、库内部状
态、库标准i/o结构等等)和初始值,使存储器堆栈返回其初始状态,
并且模拟从该应用程序的函数返回的错误。即,在进入应用程序代码的易受攻击部分时,指令级仿真器捕获并存储程序状态,并且在为仿真指定的区域内处理所有指令,包括函数调用。当程序计数器引用在仿真界限外部的第一指令时,虚拟处理器将其内部状态复制回设备处理器寄存器中。当寄存器被更新时,还通过仿真的执行来进行存储器更新。不管虛拟处理器执行的指令如何,程序继续在实际处理器上正常执行。
在一些实施例中,指令级仿真器可预先与应用程序链接。可选地,响应于检测到的错误,指令级仿真器可在代码内被编译。在另一个合适的实施例中,当执行特定程序指令时,指令级仿真器可以通过和现代调试器类似的方式被调用。这可利用系统处理器和体系结构具有的断点寄存器和/或其他程序调试手段,或者其可以是适合于本发明在其上实现的设备的操作系统和硬件的纯软件方法。使用仿真器使得系统可检测和/或监控许多不同的系统错误,例 如非法存储器解除引用、緩沖溢出和緩沖下溢、以及更一般的故障, 例如被零除。仿真器检查其将至少部分地使用由检测故障的一个或多 个传感器所提供的向量和相关信息模拟的指令的操作数。例如,在被 零除的情况下,仿真器检查div指令的操作数的值。在另一个示例中, 在非法存储器解除引用的情况下,仿真器验证任何存储器访问(或指
令提取的程序计数器)的源和目的地址是否指向使用mincore ()系 统调用被映射到的过程地址空间的页面,或者操作系统提供的适当的 资源。在另一个示例中,在緩冲溢出检测的情况下,围绕如被一个或 多个传感器识别的易受攻击緩冲器的存储器被填充一个字节。仿真器 然后观察对这些存储位置的存储器写入。应注意,这要求源代码可用, 以便插入特定变量(例如自己周期性地启动并执行一些典型的用户事 务以能够围绕时钟进行事务延时评估的canary变量)。还应注意,
仿真器在其重写存储器堆栈内的剩余位置并恢复执行之前防止溢出。 用于检测这些错误的其它方法可以模块化方式结合到系统中,而不会 影响系统的高级别操作和特性。
例如,指令级仿真器可被实现为静态链接C库,其定义了标记 选择性仿真的开始和结束的专用标签(例如,宏和函数调用的组合)。
图5内示出围绕用于被指令级仿真器仿真的应用程序代码的区段放置 的标签示例。如图5所示,C宏emulate—init()将程序状态(一般是区 段、eflag和FPU寄存器)移入仿真器可访问的全局数据结构,以便 在仿真器获得控制之前即刻捕获状态。该数据结构被用于初始化虛拟 寄存器。emulatejbegin()获得在对自身的调用之后的第一个指令的存 储位置。指令地址与返回地址相同,并且可在emulatej)egin()的激活 记录内在其基堆栈指针之上四个字节处找到。指令的提取/解码/执行/ 回收循环继续进行,直到达到emulate一end()或者仿真器检测到控制返 回父函数。如果仿真器在其执行期间没有遇到错误,则仿真器的指令 指针在完成时引用emulatejerm()宏。为了使被探测的应用程序能够 在这个地址继续执行,用指令指针的当前值代替emulate一begiii()激活记录的返回地址。通过执行emulate—term(),仿真器的环境被复制到 程序寄存器中,并且执行在正常状况下继续进行。
应注意,尽管本发明的实施例说明了仿真器与易受攻击的应用程 序相链接,和/或易受攻击的应用程序的源代码可用,但是本发明还可 使用处理器的可编程断点寄存器来调用仿真器,而返回过程甚至不能 检测到其现在在仿真器下运行。
除了监控在执行指令之前的错误,并且回复当错误发生时特定函 数导致的存储器变化(例如,通过使仿真器存储在其执行期间发生的 存储器改变),仿真器还模拟该函数的出错返回。利用本发明,系统 可生成在应用程序执行期间可能发生的 一组错误和被应用程序的代 码明确处理的有限的一组错误之间的映射(有时在文中被称为"错误 虚拟化")。如下文所述,本发明的错误虚拟化特征可基于启发法。 但是,可使用用于确定函数的返回值的任何合适的方法。例如,可使 用确定适合于函数的返回值的侵入源代码分析技术。在另一个实施例 中,特定函数的代码的一部分可被标记为故障安全,并且当强制出错 返回时可返回特定值(例如,检查用户许可的代码)。在另一个示例 中,可使用程序员、系统管理员或任何其它合适的用户提供的信息确 定已经发生错误的函数返回的错误值。
即使程序员最初没有预测到的边界条件使得故障发生,这些错误 虚拟化特征仍使得应用程序可继续执行。具体来说,对于程序员不曾 预料到的故障,错误虚拟化特征允许用异常捕获机制改进应用程序的 代码。应注意,错误虚拟化与通过一些编程语言实现的传统异常处理 不同,在传统异常处理中程序员必须在程序代码内故意创建异常情 况,并且还添加代码以处理这些异常情况。在错误虚拟化下,本发明 捕获例如程序员不曾预料到的错误和异常,并且本发明利用已有的应 用程序代码来处理它们。在本发明的一些实施例中,错误虚拟化可通 过指令级仿真器实现。可选地,错误虛拟化可通过直接插入应用程序 的源代码的附加源代码来实现。这种附加源代码的插入可在如前文所 述的检测到错误之后或者在预测到错误之后自动执行,或者其可在程序员、系统操作员或可对应用程序的源代码具有访问权限的其它合适 的用户的指导下进行。
利用错误虚拟化,当在仿真期间发生异常时或者如果系统检测到 已经发生故障,则系统可使程序状态返回其初始设置,并且强制从当 前执行的函数返回错误。为了确定合适的错误值,系统分析所声明的
函数类型。在一些实施例中,系统可使用例如TXL脚本来分析所声 明的函数类型。总的来说,TXL是可用于执行源到源变换并且迅速确 定新语言和语言处理器的原语的混合函数和基于规则的语言。基于所 声明的函数类型,系统确定合适的错误值并且将其放置在返回函数的 堆栈帧内。合适的错误值可至少部分地基于启发法确定。例如,如果 返回类型是整数,则返回值-1。如果返回类型是无符号整数,则系统 返回0。如果函数返回一个指针,则系统判断返回的指针是否进一步 被父函数解除引用。如果返回的指针被进一步解除引用,则系统将仿 真范围扩展到包括父函数。在另一个示例中,返回出错代码可使用嵌 入到应用程序的源代码中的信息来确定,或者通过应用程序的程序 员、系统管理员或第三方提供给系统的附加信息来确定。
在一些实施例中,emulate—end()被定位并且仿真终止。由于仿 真器保存了在开始之前的应用程序的状态,并且持续跟踪在应用程序 的执行期间的存储器改变,系统能够通过使其中发生故障的代码函数 导致的任何存储器改变返回其初始设置而颠倒该存储器改变,从而抵 消通过仿真被处理的指令的影响。即,代码的被仿真部分被切除,并 且代码的执行连同其在存储器改变方面的副作用 一起被返回。
例如,仿真器可能不能不经核心级许可而直接执行系统调用。因 此,当仿真器使用中间值0x80对中断解码时,仿真器将控制释放给 内核。但是,在内核执行系统调用之前,仿真器备份实际寄存器并且 用其自己的值替换它们。仿真器发出INT0x80,并且核心程序处理系 统调用。 一旦控制返回仿真器,则仿真器更新其寄存器,并且在应用 程序的寄存器内恢复初始值。
如果被探测的应用程序没有在强制返回之后崩溃,则系统已经成功地发现用于特定故障的免疫程序,该免疫程序可用于在服务器上运
行的实际应用程序中。在步骤370,系统至少部分地基于仿真更新该 应用程序。
根据本发明的一些实施例,可提供人工多样性特征以减轻软件单 一系统的安全性风险。
软件单一 系统已被认为联网计算环境的问题。单一系统用作攻击
者的放大器,使得攻击者可在相同应用程序的许多实例(例如,成千 或数百万个实例)之间利用相同的脆弱性。如近来一些事件证明的, 这种攻击可能会迅速造成广泛混乱。
尽管许多其他系统试图引入人工多样性,但是可利用已有软件单 一系统的好处来减轻软件单一系统的安全性风险。在一些实施例中, 可创建应用程序组来有效地使用大的单一系统内可用的资源,以保护 每个应用程序组成员。如这里所使用的,应用程序组是相同应用程序 的独立实例的集合,这些实例共同监控它们的执行的缺陷和攻击情 况,并且当检测到这种事件时告知所述的组。例如,在上迷系统中, 在广域网(例如,互联网)上运行一个或多个应用程序的一个或多个 工作站和服务器可以是应用程序组的成员。每个工作站可通过监控应 用程序的不同部分来合作,从而分配被用于监控该应用程序的每个工 作站所分配的存储器。在另一个合适的实施例中,每个工作站可通过 监控应用程序的不同错误而合作。响应于检测到代码的被监控部分易 发生错误,或者响应于检测到在应用程序代码的被监控部分内出现错 误,工作站可将该错误告知其它工作站和服务器。
图6是示出根据本发明的一些实施例的在使用应用程序组监控 应用程序的故障情况和修复该应用程序时执行的各种步骤的简化流 程图。这是一个概括的流程图。应理解的是,图6内所示的步骤可以 以任何合适的顺序执行, 一些步骤可被删除,并且可以添加其它步骤。
一般来说,在步骤610,系统可将应用程序代码分割成多个代码 部分。应用程序代码的每个部分或片段可例如被分配给应用程序组的 一个成员(例如工作站、服务器等等)。在步骤620,应用程序组的每个成员可监控该代码部分的不同类型的错误。如前文已说明的,所 述错误包括程序设计错误、异常、软件故障(例如,非法存储器访问、
被零除、緩沖溢出攻击、违反TOCTTOU等等)、威胁(例如,计 算机病毒、蠕虫、木马、黑客、密钥恢复攻击、恶意可执行程序、探 测器等等)、以及会导致异常应用程序终止或对一个或多个应用程序 产生不利影响的任何其它合适的故障。
例如,系统可基于应用程序的大小和应用程序组内的成员数目 (即,应用程序/应用程序组内的成员的规模)划分代码部分。可选地, 系统可基于应用程序组的每个成员内的可用存储量划分代码的部分。 可使用适于确定如何划分应用程序代码的任何合适的方法。下文将说 明一些合适的方法。
例如,系统可通过检验执行应用程序代码的离散片段的成本,检 验应用程序组内的全部工作W。假设包含应用程序的调用图的一组函 数F, F的第i个成员被表示为fi。执行每个fi的成本是fi内存在的计
算量(即,Xi)和fi内的危险量(即,Vi)的函数。Xi的计算被至少两
个量度推动即作为fi的一部分被执行的机器指令的数量Oi,和执行 fi所花费的时间量ti。 Oi和ti可根据应用程序的内部逻辑作为时间或应 用程序工作量的函数而改变。例如,应用程序可在该应用程序经过阈 值数量的请求之后执行记录或清除任务。
在一些实施例中,可分两个阶段提供成本函数。第一阶段计算由 每个fi的计算量导致的成本。第二阶段使此成本归一化,并且应用危
险因数Vi以确定每个fi的最终成本以及系统内的工作总量。例如,假

如果C(fi, Xi)= Xi/T*100,则通过将F的子集分组以代表一个工 作单位将每个成本归一化。
在一些实施例中,系统可解决函数的脆弱性的测量问题。例如, 系统将Vi当作具有值a的离散变量对待,其中a具有根据危险量的一 定范围的值,从而=^ (如果/;易受攻击) "1i(如果/;不易受攻击)
给定每个函数的Vj,系统可确定监控所需的系统中的工作总量和
成员总数
在系统(例如,控制器)或者每个应用程序组成员已经计算出系 统内的工作量之后,分配工作单位。在一个示例中,中央控制器或一
个工作站可为每个节点分配大约W/N个工作单位。在另一个合适的 示例中,应用程序组的每个成员可确定其自己的工作集合。每个成员 可通过抛掷用值Vi*ri加权的硬币的方式迭代通过工作单位列表。因 此,如果抛掷结果为"真",则然后该成员将该工作单位添加到其工作 集合中。
可选地,系统可生成具有WW个空位的列表。每个函数用该列 表上的多个项(例如,v,rj表示。应用程序组的每个成员例如通过 抛掷硬币迭代通过该列表。如果硬币是"人头"或者"真",应用程序组 成员在给定的时间片上监控应用程序的函数。由于权重较大的函数在 该列表内具有更多的项,则可分配更多数量的用户以覆盖该应用程 序。当成员的全部工作达到W/N时该成员可停止。这种方法提供了 应用程序的统计覆盖范围。
在一些实施例中,可使用分布式投标方法分配监控和修复应用程 序的工作量。调用图G内的每个节点具有权值v^n。为每个应用程序 组成员分配F内的节点的一些子集,使得每个成员的工作不会多于 W/N的工作量。阈值在W/N的一些范围e内是松弛的,其中e是系 统公平性的量度。在计算工作W/N的全局公平量时,每个应用程序 组成员可通过使用分布式投标方法与其它成员商议调节其工作负荷。
有两种考虑会影响到工作单位向应用程序组成员的分配。首先, 系统优先分配具有较高权重的工作单位,因为这些工作单位可能由于 高Vi而具有较大的权重。即使权重仅由性能成本得到,将具有较高权 重的工作单位分配给更多的成员是有益的,因为这些成员可循环监控任务以便任何一个成员不必承担全部成分。其次,在一些情况下, 可大于工作的平均量W/N。实现公平是指定义了被分配给应用程序组 成员的量,并且这些量的总和定义了应用程序组内的成员的最小数 目。
在一些实施例中,每个应用程序组成员计算出一个表。图7内示 出这种表的示例。在生成该表时,应用程序组成员可投标以调节它们 各自的工作量。例如,系统可使用用于投标的令牌。令牌可直接映射 到应用程序组成员负责监控工作单位或应用程序的函数的时间量子 的数目。系统确保每个节点不会累加多于e的选择所允许的令牌的总
量的令牌。
如果应用程序组成员监控多于其份额的内容,则系统增加覆盖范 围,并且确保故障被尽可能快地检测出来。如步骤630和640内所示, 每个应用程序组成员可预测到在代码的指定部分内可能发生故障,或 者可检测到已经发生导致应用程序异常中止的故障,其中代码的被指 定部分是故障源。当故障被检测到时,每个应用程序成员可提前主动 监控包含该故障的代码的指定部分,以保护应用程序不受其它错误影 响。如前文讨论的,应用程序组成员可隔离代码的导致该故障的部分, 并且使用仿真器测试免疫程序或纠错。在步骤650,检测或预测到该 故障的应用程序组成员可通知其他应用程序组成员。可通过由检测到 该故障的应用程序成员所生成的保护机制或纠错重新开始遭遇该故 障的其它应用程序成员。
假设新故障在应用程序组成员中分配均匀地随机分配,故障在成 员k处发生的概率是P(故障)-l/N。因此,k检测到新故障的概 率是故障在k处发生和k检测到该故障的概率P (k处故障A检测) =1/N*kj,其中ki是在k处的覆盖百分比。应用程序组检测到该故障 的概率是
<formula>formula see original document page 24</formula>
当每个Ki趋近100%时,上述等式变为2^+或者N/N,当其首 次发生时该故障被检测到的概率为1。根据本发明,提供了用于监控应用程序和从多种软件错误中修复 应用程序的方法和系统。
应理解,文中的详细说明可在计算机或计算机网络上执行的程序 过程方面被表示。这些程序说明和表示是被本领域技术人员用于最有 效地将其工作实例传送给本领域其他技术人员的方法。
过程在此通常被设想为是导致希望的结果的自给序列。这些步骤 是要求物理量的物理操纵的那些步骤。通常但不是必要的,这些量表 现为能够被存储、传递、组合、比较和操纵的电信号或磁信号。主要 出于公共使用的原因,证明有时将这些信号称作位、值、元件、符号、 字符、术语、号码等等是方便的。但是,应注意,所有这些以及类似 的术语将与合适的物理量相关联,并且仅是应用于这些量的方便标 记。
此外,执行的操作常常用术语例如添加或比较提及,其通常与操 作人员执行的智力操作相关联。在形成本发明的一部分的文中所述的 任何操作中,操作员的这种能力并不是必需的或者在大多数情况不合
乎需要;该操作是机器操作。可用于执行本发明的操作的机器包括通 用数字计算机或类似设备。
本发明还涉及用于执行这些操作的装置。此装置可为所需的用途 被专门构造,或者其可包括通用计算机,该通用计算机被该计算机内 存储的计算机程序选择性地激活或重新配置。文中给出的过程本质上 与具体计算机或其他装置不相关。各种通用机器可与根据文中的指导
写成的程序一起使用,或者可证明构造更专用的装置来执行所需的方 法步骤更加方便。多种这些机器的所需结构从文中给出的说明中显而 易见。
根据本发明的系统可包括通用计算机或者被特别编程的专用计
算机。用户可经由例如个人计算机或PDA在例如互联网、内联网等 等上与该系统相互作用。它们中的任何一个都可被实现为分布式计算 机系统而不是单个计算机。类似地,通信链路可以是专用链路、在 POTS线路上的调制解调器、互联网和/或在计算机和/或用户之间通信的任何其它方法。此外,该处理可被一个或多个计算机系统或处理 器上的软件程序控制,或者甚至可部分或完全用硬件实现。
尽管可使用单个计算机,但是根据本发明的一个或多个实施例的 系统任选地适当配备多个处理器或存储设备或它们的组合。例如,计 算机可被根据本发明的实施例的概念操作的任何合适的处理系统,例 如复杂计算器、手提式、膝上型电脑/笔记本电脑、迷你计算机、主计 算机和超级计算机,以及它们的处理系统网络组合代替或与它们组 合。另外,该系统的部分可以任何合适的电子格式被提供,包括例如
在通信线路上作为电子信号被提供,在CD和/或DVD上被提供,在 光盘存储器上被提供等等。
本发明的这些实施例中可使用任何目前可用的或者未来开发的 计算机软件语言和/或硬件部件。例如,上文提及的功能性中的至少一 些可使用Visual Basic、 C、 C+十或任何汇编语言实现。其还可在面向 对象和/或解释性环境例如Java内被编写,并且被传输给多个目的地、 多个用户。
应理解,本发明在其应用方面并不局限于下文说明内阐述的或者 附图内示出的构造的细节和部件的设置。本发明能够表现为其他实施 例,并且用多种方式实施和实现。另外,应理解,文中使用的用语和 术语是用于说明而不应被看作是限制性的。
因而,本领域技术人员应理解,作为此公开的基础的概念可被容
易地实现为用于实现本发明的一些目的的其它结构、方法和系统的设 计基础。因此,重要地是,权利要求被认为包含不背离本发明的精神 和范围的这种等同的构造。
尽管已经在前文的示例性实施例中说明和示出了本发明,但是应 理解,本公开仅作为示例,并且可对本发明的实现细节作出多种改变
而不会背离本发明的精神和范围,该精神和范围仅被下文的权利要求 限制。下文的参考文献全文并入此作为参考文献
CERT Advisory CA-2003-21: W32/Baster Worm, http:〃www.cert,org/advisories/ CA、2003-20.html, August 2003.
The Spread of也e Sapphire/Slammer Worm, http:〃www,silicondefense.com/ research/worms/slammer.php, February 2003.
A. Avizienis. The n-version approach to feult-tolerant software.正EB Transactions on Software Engineering, U(12):1491fl1501, 1985.
A. Baratloo, N. Singh, and T. Tsai. Transparent Run-Time Defense Against Stack Smashing Attacks, In Proceedings of the USENIX Annual Technical Conference, June 2000.
A. Baratloo, N. Singfe and T. Tsai, Transparent Run-Time Defense Against Stack Smashing Attacks. In Proceedings of the USENIX Annual Technical Conference, June 2000.
E. G. Barrantes, D. H. Ackley, S. Forrest, T. S. Palmer, D. Stef咖vic, and D. D. Zovi, Randomized Instruction Set Emulation to Disrupt Binary Code Injection Attacks. In 10th AGM Conference on Computer and Communications Security (GCS), October 2003.
S. Bhatkar, D. C. DuVaraey, and R. Sekar. Address Obfiiscation: an Efficient Approach to Combat a Broad Range of Memory Error Exploits. In Proceedings of the 12th USENIX Security Symposium, pages 105fil20, August 2003.
S. Brilliant, J. C. Knight, and N. G. Leveson. Analysis of Faults in an N-Version Software Experiment,迈EE Tran幼ctions on Software Engineering, 16(2), Februaiy 1990.
D. Bruening, T, Garnett, and S. Amarasinghe. An Infrastructure for Adaptive Dynamic Optimization. In Proceedings of the International Symposium on Code Generation and Optimization, pages 265-275,2003.
G. Candea and A. Fox. Crash-Only Software, In Proceedings of the她Workshop on Hot Topics in Operating Systems, May 2003.H, Chen and D. "Wagner. MOPS: an Infirastructure for Examining Security Properties of Software. In Proceedings of the ACM Computer and Coiramraications Security (CCS) Conference, pages 235-244, November 2002.
M. Chew and D. Song. Mitigating Buffer Overflows by Operatijig System Randomization. Technical Report CMU-CS-02-197, Carnegie Mellon University, December
2002.
S. A. Crosby and D. S. Wallach. Denial of Service via Algorithmic Complexity Attacks. In Proceedings of the 12th USENDC Security Symposium, pages 29-44, August
2003.
B. De咖ky and M, C. Rinard. Automatic Detection and Repair of Errors in Data Structures. In Proceedings of the l她Annual ACM SIGPLAN Conference on Object Oriented Programmingj Systems, Languages, and Applications, October 2003.
E. Duestetwald and S. P. Amarsinghe. On the Run - Building Dynamic Program Modifiers for Optimization, Introspection, and Security. In Conference on Programming Language Design and Implementation (PLDI), 2002.
G, W. Dunlap, S. King, S. Cinar' M, A. Basrai, and P. M. Chen. ReVirt: Enabling Intrusion Analysis Through Virtual-Machine Logging and Replay, In Proceedings of the Symposium on Operating Systems Design and In^)l咖entation (OSDI), February 2002.
C. C. et al. StackGuard: Automatic Adaptive Detection and Prevention of Buffer-Overflow Attacks. In Proceedings of the 7th USENDC Security Symposium January 1998.
T. Garfinkel and M. Rosenbhrai. A Virtual Machine Introspection Based Architecture for Intrusion Detection. In 10th ISOC Symposium on Network and Distributed Systems Security (SNDSS), February 2003.
D. B, Geer, Monopoly Considered HarmfW.正EE Security & Privacy, 1(6): 14 & 17, November/December 2003.
G. Goth. Addressing the Monoculture. IEEE Security & Privacy, l(6):8-0, November/December 2003.
T. Jim, G. Monisett, D. Grossm叫M. Hicks, J. Cheney, and Y.Wang. Cyclone: A safe dialect of C. In Proceedings of the USENDC Anmial Technical Conference, pages 275-288, June 2002.
G. S. Kc, A. D. Keromytis, and V. Prevelakis. Countering Code-Injection Attacks With Instruction-Set Randomization. In 10th ACM Conference on Computer and Communications Security (CCS), October 2003.S. T. King and P. M, CbeiL Backtrackkg Intrusions. In 19ih ACM Symposium cm Operating Systems Principles (SOSP), October 2003.
S. T. Kingj G. Dunlap, and P. Chen, Operating System Support for Virtual Machines. In Proceedings of the USENIX Annual Technical Conference, June 2003.
V. Kiri咖ky, D. Bruening, and S. Amarasinghe. Secure Execution Via Prograni Shepherding.Proceedings of the 11th USENIX Security Symposium, August 2002.
D. Mosberger and T, Jin. httperf: A tool for measuring web server performance. In First Workshop on Internet Server Performance, pages 59-67. ACM, June 1998.
N. Netbercote and J. Seward. Valgrind: A Program Supervision Fraraewo汰.In Electronic Notes in Theoretical Computer Science, volume 89, 2003.
J. Newsome and D. Dong. Dynamic Taint Analysis for Automatic Detection, Analysis, and Signature Generation of Exploits on Commodity Software. In The〗2th Annual Network and Distributed System Security Symposium, Februaiy 2005.
J. Oplinger and M S. Lam. Enhancing Software Reliability with Speculative Threads. In Proceedings of the 10th International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS X), October 2002.
V, Prevelakis. A Secure Station for Network Monitoring and Control. In Proceedings of the 8th USENIX Security Symposium, August 1999.
N. Provos. Improving Host Security w他System Call Policies. In Proceedings of the 12th USENIX Security Symposium, pages 257-272, August 2003.
J. C, Reynolds, J. Just> L. Clough^ and K Maglich. On-Line Intrusion Detection and Attack Prevention Using Diversity, Generate-and-Test, and Generalization. In Proceedings of
the 36th Annual Hawaii International Conference on System Sciences (HICSS), January 2003.
M. Ri加rd, C. Cadar, D. Dumitran, D. Roy, and T. Leu. A Dynamic Technique for Eliminating Buffer Overflow Vulnerabilities (and Other Memory Errors). In Proceedings 20th Annual Computer Security Applications Conference (ACSAC), December 2004.
M. Rinard, C. Cadar, D. Dumitr叫D. Roy, T. Leu, and J. W Beebee. Enhancing Server Availability and Security Throu缺Failure-Oblivious Computing. In Proceedings 6th Symposium on Operating Systems Design and Implementation (OSDI), Deceiriber 2004.
A. Rudys and D. S, Wallach. Transactional Rollback for Language-Based Systems. In ISOC Symposium on Network and Distributed Systems Security (SNDSS), February 2001.S. T. King加d P. M. Chen. Backtracking Intrusions. In l她ACM Symposium on Operating Systems Principles (SOSP), October 2003.
S, T. Kingj G. Dunlap, and P, Chen. Operating System Support for Virtual Machines. In Proceedings of the USENIX Annual Technical Conference, June 2003.
V. Kiria加ky, D. Bruening, and S, Amarasinghe. Secure Execution Via Program Shepherding. In Proceedings of the 11th USENIX Security Symposium, August 2002.
D. Mosbetger and T, Jin. httperf: A tool for measuring web server performance. In First Workshop on Internet Server Performance, pages 59-67. ACM, June 1998.
N. Nethercote and J. Seward. Valgrind: A Program Supervision Framework. In Electronic Notes in Theoretical Computer Science, volume 89, 2003.
J. Newsorae and D. Dong. Dynamic Taint Analysis for Automatic Detection, Analysis, and Signature Generation of Exploits on Commodity Software. In The 12th Annual Network and Distributed System Security Symposium, February 2005.
J. Oplinger and M. S. Lam. Enhancing Software Reliability with Speculative Threads. In Proceedings of the 10th加e咖tional Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS X), October 2002.
V, Preve!akis, A Secure Station for Network Monitoring and Control. In Proceedings of tiie 8th USENIX Security Symposium, August 1999.
N. Provos. Improving Host Security with System Call Policies. In Proceedings of the 12th USENDC Security Symposium, pages 257-272, August 2003.
J. C. Reynolds, J. Jus仁L. Ckm^h, and R Maglich. On-Line Intrusion Detection and Attack Prevention Using Diversity, Generate-and-Tes^ and Generalization. In Proceedings of
the 36th Annual Hawaii International Conference on System Sciences (HICSS), January 2003.
M. Rinard, C. Cadar, D, Dumitran, D. Roy, and T. Leu. A Dynamic Technique for Eliminating Buffer Overflow Vulnerabilities (and Other Memory Errors). In Proceedings 20th Annual Computer Security Applications Conference (ACSAC), December 2004.
M Rinard, C. Cadar, D. Dumitran, D. Roy, T. Leu, and J. W Beebee. Enhancing Server Availability and Security Through Failure-Oblivious Computing. In Proceedings她 Symposium on Operating Systems Design and Implementation (OSDI), December 2004.
A. Rudys and D. S. Wallach. Transactional Rollback for Language-Based Systems. In ISOC Symposium on Network and Distributed Systems Security (SNDSS), February 2001.
权利要求
1.一种用于从软件错误中修复应用程序的方法,其中该应用程序包含代码,所述方法包括检测该应用程序中的错误;响应于检测到该错误,隔离导致该错误的代码部分;构造修复该错误的基于仿真器的免疫程序;使用指令级仿真器在该被隔离的代码部分的被探测版本内测试基于仿真器的免疫程序;并且响应于验证到该免疫程序已修复该错误,用该基于仿真器的免疫程序更新该应用程序。
2. 根据权利要求l的方法,其中所述错误是以下情况中的至少 一个计算机病毒、蠕虫、木马、恶意可执行程序、探测器、拒绝服 务攻击、资源消耗攻击、緩冲溢出、緩冲下溢、非法存储器访问、被 零除、检查时间到使用时间违规和程序设计错误。
3. 根据权利要求l的方法,其中所述检测使用至少一个传感器 来执行,并且其中该至少一个传感器包括基于主机的传感器、基于网 络的传感器和蜜罐中的一种。
4. 根据权利要求1的方法,其中所述应用程序在服务器上执行, 并且其中所述检测还包括在模拟该应用程序的单独服务器上实现蜜
5. 根据权利要求l的方法,其中该方法还包括响应于导致该应 用程序终止的错误生成核心转储文件或其他^l告信息。
6. 根据权利要求5的方法,其中所述核心转储文件或其他信息 包括发生的错误的类型、堆栈跟踪和有助于根据脆弱的应用程序代码 部分定位该错误的其他信息。
7. 根据权利要求5的方法,其中所述隔离导致该错误的代码部 分的步骤至少部分地基于响应于检测到该错误而生成的所述核心转 储文件或其他信息。
8. 根据权利要求l的方法,其中所述错误暴露了输入向量。
9. 根据权利要求8的方法,其中所述基于仿真器的免疫程序至 少部分地基于所述输入向量和/或其对应用程序执行的影响而被构造。
10. 根据权利要求8的方法,其中所述测试所述基于仿真器的免 疫程序还包括将所述输入向量输入到代码的被隔离部分的被探测版 本中。
11. 根据权利要求1的方法,其中该方法还包括记录在代码的被 隔离部分的被探测版本的执行期间的存储器变化。
12. 根据权利要求l的方法,其中所述被隔离部分的被探测版本 包括具有初始状态的存储器堆栈,并且该方法还包括使该存储器堆栈 返回该初始状态并且生成出错返回。
13. 根据权利要求l的方法,其中该方法还包括返回模拟该错误 的出错代码。
14. 根据权利要求1的方法,其中该方法还包括从代码的被隔离部分模拟出错代码。
15. 根据权利要求l的方法,其中该方法还包括在应用程序的执 行期间可能发生的错误和该应用程序被编程所处理的一组错误之间 进行映射。
16. 根据权利要求l的方法,其中所述更新应用程序的步骤还包 括将附加代码自动插入到代码的被隔离部分中。
17. —种用于从软件错误中修复应用程序的方法,该方法包括 使用至少一个传感器监控该应用程序的错误,其中该应用程序包含代码;识别该代码哪里易受该错误影响;至少部分地基于该识别来隔离该代码的一部分; 生成该代码部分的被探测版本; 至少部分地基于预测和该代码部分构造免疫程序; 用该免疫程序模拟该被探测版本的片段;并且 至少部分地基于该模拟更新该应用程序。
18. —种用于从软件错误中修复应用程序的系统,该系统包括 传感器,该传感器监控该应用程序以及错误的对应代码,并且响应于检测到该错误隔离导致该错误的代码部分;被选择性地调用以模拟该代码部分的指令级仿真器; 测试系统,该测试系统^f皮配置为使用仿真器在该代码部分上评价一个或多个潜在的免疫程序,其 中该测试系统在该代码部分上应用导致该错误的一个或多个输入变 量;并且响应于修复该代码部分来更新该应用程序,而无需用户输入。
19. 根据权利要求18的系统,其中所述错误是以下情况中的至 少一个计算机病毒、蠕虫、木马、恶意可执行程序、探测器、拒绝 服务攻击、资源消耗攻击、緩冲溢出、緩冲下溢、非法存储器访问、 被零除、检查时间到使用时间违规和程序设计错误。
20. 根据权利要求18的系统,其中所述传感器包括基于主机的 传感器、基于网络的传感器和蜜罐中的一种。
21. 根据权利要求18的系统,其中所述应用程序在服务器上实 现,并且该系统还包括在模拟该应用程序的单独服务器上实现的蜜
22. 根据权利要求18的系统,其中所述测试系统还被配置为记 录在该代码的被隔离部分的评价期间的存储器变化。
23. 根据权利要求18的系统,其中所述测试系统还被配置为生 成模拟该错误的出错返回。
24. 根据权利要求18的系统,其中所述测试系统还被配置为在 应用程序的执行期间可能发生的错误和该应用程序被编程所处理的 一组错误之间生成映射。
25. 根据权利要求18的系统,其中所述指令级仿真器还被配置 为将附加代码自动插入到所述代码部分中。
26. —种用于从软件错误中修复应用程序的方法,该方法包括 定义包含多个设备的应用程序組;为该多个设备中的每一个指定该应用程序的一部分; 接收该多个设备之一已经检测到错误的指示;并且 响应于接收到该多个设备之一 已经检测到错误的指示,将该错误 告知该应用程序组。
27. 根据权利要求26的方法,其中所述指定步骤还包括基于所 述多个设备中的每一个内的可用存储量为该多个设备中的每一个指 定该应用程序的一部分。
28. 根据权利要求26的方法,其中所述指定步骤还包括基于所 述应用程序组的总工作量为所述多个设备中的每一个指定该应用程 序的一部分。
29. 根据权利要求26的方法,其中所述指定步骤还包括为所述 多个设备中的每一 个任意指定该应用程序的 一部分。
30. 根据权利要求26的方法,其中所述指定步骤还包括允许每 个设备通过与其他设备协商而调整其工作量。
31. —种用于从软件错误中修复应用程序的方法,其中该应用程 序包含代码,所述方法包括定义包含多个设备的应用程序组;为该多个设备中的每一个指定将要监控的错误;接收该多个设备之一 已经检测到所指定的错误的指示;并且响应于接收到该多个设备之一 已经检测到所指定的错误的指示, 将该错误告知该应用程序组。
32. 根据权利要求31的方法,其中所述指定步骤还包括基于所 述多个设备中的每一个内的可用存储量为该多个设备中的每一个指 定要监控的错误。
33. 根据权利要求31的方法,其中所述指定步骤还包括基于所 述应用程序组的总工作量为所述多个设备中的每一个指定要监控的 错误。
34. 根据权利要求31的方法,其中所述指定步骤还包括为所迷 多个设备中的每一个任意指定要监控的错误。
35. 根据权利要求31的方法,其中所述指定步骤还包括允许每 个设备通过与其他设备协商而调整其工作量。
36. —种用于从软件错误中修复应用程序的方法,其中该应用程 序包含代码,所述方法包括识别该应用程序的易受错误影响的源代码的 一部分; 响应于该识别隔离该源代码部分;并且将附加代码自动插入到该源代码的被隔离部分中,其中该附加代 码将该错误与该应用程序被编程而为之提供出错代码的其它错误进 行映射,并且其中该附加代码允许该应用程序继续运行而不会终止。
37. —种用于〗务复应用程序的方法,该方法包括 检测该应用程序中的错误;响应于检测到该错误,隔离与该错误相关联的应用程序的部分;生成基于仿真器的免疫程序以修复该错误;响应于在该应用程序的被隔离部分上应用基于仿真器的免疫程 序,确定该基于仿真器的免疫程序是否修复该错误;并且响应于确定该基于仿真器的免疫程序修复该错误,用该基于仿真 器的免疫程序更新该应用程序。
38. 根据权利要求37的方法,其中所述检测错误还包括使用至 少 一个传感器监控该应用程序的错误。
39. 根据权利要求37的方法,其中所述检测错误还包括确定该 应用程序的一个或多个部分是否易受外部攻击影响。
40. 根据权利要求37的方法,其中所述检测错误还包括确定该 应用程序的一个或多个部分是否包含有故障的指令。
41. 一种用于修复在应用程序组的第一和第二成员上操作的应 用程序的方法,该方法包括将该应用程序划分成第一和第二部分;将该第一部分指定给该第一成员,以评估该第一部分内的错误; 将该第二部分指定给该第二成员,以评估该第二部分内的错误;从该第一成员接收到该第一部分内的错误和被修复的第一部分的指示;并且将该第一部分内的错误和被修复的第一部分的指示发送给该第 二成员。
全文摘要
根据本发明,提供了一种允许应用程序从软件错误和攻击中自动修复的计算机实现方法和系统。使用一个或多个传感器可以检测出该应用程序中的错误。响应于检测到该错误,隔离导致该错误的应用程序代码部分。利用引起该错误的输入向量、关于该错误的信息(例如错误类型)、核心转储文件(例如堆栈跟踪)等。构造修复该错误的基于仿真器的免疫程序。响应于确认该免疫程序已修复了该错误的情况,用基于仿真器的免疫程序自动更新该应用程序,而无需用户介入。还提供了有效利用软件单一结构中可用资源的应用程序组的特征。应用程序组可以被限定为包括多个设备,并且应用程序代码可以被分成较小的代码部分,这些较小的代码部分被分配给所述多个设备中的每个设备以用于监控。每个设备还将该错误告知其他设备。
文档编号G06F11/00GK101529385SQ200680026240
公开日2009年9月9日 申请日期2006年4月7日 优先权日2005年6月1日
发明者安格罗斯·D·克罗米蒂斯, 斯蒂利亚诺斯·西迪罗格洛, 迈克尔·E·罗卡斯托 申请人:纽约市哥伦比亚大学理事会
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1