在上个月的计算机器编程语言设计与实现协会会议(AssociationforComputingMachinery'sProgrammingLanguageDesignandImplementation)上,麻省理工学院的研究人员展示了一个新系统,可以自动修复通过导入其他更安全的应用程序功能来修复危险的软件漏洞。自动错误修复系统:CodePhage该系统称为CodePhage,无需访问源代码即可自动“借用”其他程序的功能。因此,导入程序的开发语言(即Donordonor,以下简称D)并不重要。一旦将打补丁的代码导入易受攻击的应用程序(RecipientReceiver,简称R),CodePhage就可以提供更深入的分析以确保漏洞得到修复。麻省理工学院计算机科学与人工智能实验室(CSAIL)的CodePhage开发主管SteliosSidiroglou-Douskos表示,“在开源库中,我们有大量可用的源代码,这数百万个项目和大量类似的规范.项目实施。随着时间的推移,你需要完成的就是从这些项目中提取最好的组件来构建CodePhage——这个混合系统。”在开始分析时,CodePhage需要两个样本值输入:一个会导致R崩溃,另一个不会。一个名为DIODE的漏洞定位器程序会自动生成崩溃诱导输入。但用户只认为打开特定的崩溃导致的崩溃文件系统运行过程首先,CodePhage为D提供一个不会导致崩溃的“安全”输入,然后跟踪D的执行操作顺序,并使用符号表达式记录下来,其中符号表达式(SE)是一串符号描述操作系统施加的逻辑约束。在某些情况下,可能会检测到D的输入是否小于某个阈值。如果结果小于,CodePhage将添加一个SE术语来指示该条件低于阈值。这里不记录文件的实际大小,只是通过检测施加限制约束。接下来,CodePhage为D提供导致崩溃的输入。它再次构造一个SE代表D执行的操作程序。但是,当新的SE从旧的SE分叉出来时,CodePhage中断了它的进程。这种差异是安全输入会遇到而导致崩溃的输入不会遇到的约束。所以这可能是R安全检测的缺失部分。CodePhage然后分析R程序以找到大多数SE限制输入的位置,但不是全部。R可以按照与捐赠者完全不同的顺序执行不同的操作,并且可以以不同的形式存储数据。流程结束后,SE描述的是数据的状态,而不是流程本身。在每个标记的位置,CodePhage都不受大多数??SE约束的约束——这同样适用于R。从一开始,CodePhage就将R编程语言中仍然存在的少数约束翻译成新代码,并将其插入到源代码中。然后再次运行导致崩溃进入。如果程序有效,新代码就解决了问题。如果不是,CodePhage将移动到R的下一个候选位置。如果项目仍然崩溃,即使在CodePhage已尝试修复所有候选位置之后,它将退回到D程序并继续构建SE,直到找到下一个偏差。<以上内容很专业,小编的翻译比较生涩...详情请查看原文>未来自动化研究人员在发现漏洞的DIODE的7个常见开源项目中对CodePhage进行了测试,并每个导入两个从D到四个不同数量的错误修正。在所有情况下,CodePhage都能修复易受攻击的代码,每次修复只需要两到十分钟。安全检测占据了现代商业软件代码的80%以上。研究人员希望未来版本的CodePhage能够自动检查和插入系统,从而大大减少软件开发人员花在繁重工作上的时间,解放程序员。开发者的语言麻省理工学院计算机科学与工程教授MartinRinard说,“未来的愿景是,你不再需要编写一段别人写过的代码。这个系统可以找到代码并自动不管它是什么代码,都要替换它。”这些链接在一起以使您的程序运行。从另一个具有类似功能的程序中借用一个技巧并用它来修复一个基本上坏了的程序是一个非常酷的过程。老实说,我很惊讶它能奏效。”Berger解释说,“捐助者计划不是由同一个人编写的。他们有不同的编码标准;他们以不同的方式命名变量;使用完全不同的变量;这些变量可以是本地的;或更高的堆栈。CodePhage能够识别这些链接并说“这些变量与这些变量相关联”。与器官捐献类似,个人通过遗传密码的转移变得更健康。它的工作原理和最终结果真是太棒了,这非常酷。“
