何谓软件移植?它们如何修复受损代码?它会在企业软件生命周期中占据一席之地吗?此外,它们是否会导致更多的软件漏洞和安全漏洞?
Michael Cobb:软件开发人员喜欢从网上复制和粘贴密码。不管是关于一个函数如何工作的、一个代码片段还是多行开源库。这节省了大量的时间和金钱,且可以让开发人员能快速添加特性和功能,而无需从头开始创建。
在开发一个应用时,开发团队可以很轻易地使用从网上找来的一百种以上的开源库、框架和带有代码片段的工具。《2014 Sonatype开源开发调查》发现,一个典型应用的90%都是由开源组件“组装”而成的,其中有很多也带有已知的安全漏洞。
这是一个十分严重的问题:同样的受损代码可被成千上万的应用重复使用。实际上在较近的OWASP前10名应用程序漏洞列表上这已经显现出来。
为了解决这一问题,麻省理工学院的研究人员想出了一种方法——用从其他运行正确的程序的代码替代受损代码,这是较佳的一种自我完善的模式。他们的系统被称作CodePhage,它能识别并解决常见的编程错误,例如越界访问、整数溢出和“除以0”的错误。
CodePhage通过分析受损代码如何处理数据不会造成奔溃或故障以及会造成失误的代码来工作的。然后会将带有错误的输入内容反馈给原来的程序并记录究竟是哪些检查并约束其安全地处理输入,通常都是一个函数或审查输入数据的程序。之后检查一下嵌入的代码是否已经修正这个错误。如果还没有,它会继续寻找两个程序在处理输入方面的差异。CodePhage不需要访问来源应用的开源代码,它能够从已用编程语言写好的应用中开启检查,而不是从正在修复的程序中。
对各种常用开源程序(在这些程序中他们包括错误输入的产生器DIODE已被发现存有漏洞)进行早期测试看上去是非常有前景的,每次在2~4个来源应用中使用,受损代码可在2~10分钟解决。
因为很多编码时间可确保数据输入不会干扰到程序的预期流动,CodePhage能够通过在开发过程中自动纠正代码错误从而节省开发时间。作为一个自动代码分析和修复工具,CodePhage前途无量,企业开发团队可时刻关注其动向,如果有可能的话将其纳入到自己的构建过程中。如果开发人员弃安全代码实践于不顾,而只是依赖将其嵌入至重要安全检查中,那么这将是对该技术的滥用。