机器学习和人工智能这两种技术在许多领域广泛应用,尤其是在营销分析和网络安全方面,它们在这些领域的成功应用促使有些人试图将它们用于所有方面。这其中包括使用机器学习系统创建用于定位安全漏洞的静态代码分析器。
其中一些应用尝试取得了一定的成功:Facebook、亚马逊和Mozilla公司现在都提供了某种形式的机器学习驱动的静态代码分析器。但是,正如了解机器学习基础的任何人都知道的那样,这些方法也存在一些固有的局限性。
机器学习静态分析器
在过去的几年里,人们看到市场上出现了大量的机器学习驱动的静态分析器。其中一些是由热心的业余爱好者开发的;另一些是由科技巨头开发的,Facebook、亚马逊和Mozilla现在都在提供这样的工具,而且在发布每一个版本时都承诺会彻底改变开发过程。
实际上,这些工具在搜索漏洞和错误时为开发人员节省了时间。以下了解一下市场上主流的一些机器学习静态分析器:
1.DeepCode
DeepCode可能是Java、JavaScript和Python最著名的漏洞搜索程序。DeepCode还提供了一个机器学习模块,开发人员称其为“开发人员的语法”。
DeepCode的机器学习模块通过查看开发人员在处理大量项目时所做的大量更改来工作。通过学习,DeepCode可以为开发人员提供针对他们正在解决的问题的建议解决方案,并捕获以前出现的错误。
DeepCode仍然包含一些限制。该系统的开发者声称,自从2018年起将支持采用C ++语言,开发人员可以通过其插件使用C ++和DeepCode。
2.Infer
Infer已经存在了将近十年,并于2013年被Facebook公司收购,作为基于机器学习原理的静态代码分析器的基础。由于多种原因,Infer作为静态分析器已变得非常流行:它支持多种语言,并且可以与AWS和Oculus结合使用。最重要的是,该项目的源代码于2015年开放,从而推动了项目的快速发展。
尽管它很受欢迎,即使是使用Infer的开发人员也承认,即使在Facebook项目中,它生成的警告中也只有80%是有用的。它将发现指针取消引用和内存泄漏错误,但是仍然存在Infer无法检测到的错误类别,包括类型转换异常和未验证的数据泄漏。
3.Source{d}
Source {d}是一个开源静态代码分析器和开发管理器,它不仅致力于为管理者提供有关特定软件项目进度的信息,而且还为开发人员提供了许多工具。作为静态应用程序安全测试协议的一部分,它可以执行许多有用的SAST功能,其中包括分析字节码和二进制文件以及应用程序源代码中的漏洞。
该软件的主要优点之一是其源代码是完全透明的,并且可以在GitHub存储库中使用,从而使开发人员可以从根本上构建自己的机器学习增强型代码分析器。
这就是说,Source {d}在隔离代码错误方面非常有限。它使用Babelfish服务将特定的代码实例转换为通用语法树,并从那里可以简化和建议对代码的编辑,使其更易于使用。在使用代码时,这可以为开发人员节省大量的时间,但这并不是一个完整的静态分析器。
其他的静态分析器
除了这三种解决方案之外,还有一些新兴的静态分析器有望实现。Clever-commit是Mozilla公司的一个项目,但是在细节方面仍然令人沮丧。CodeGuru是亚马逊公司的机器学习增强型静态代码分析器,但目前仅适用于Java。Embold是一个用于错误分析的启动平台,提供可视化的代码依存关系,但在可使用的语言方面也受到限制。
所有这些系统对于开发人员都非常有用,但只有在将它们与特定语言结合使用的情况下,并且仅在经过培训以实现特定结果的地方,这些功能才是有用的。换句话说,支持机器学习的静态代码分析器(一种可以在多种语言和环境中捕获错误和故障的多功能工具)的承诺尚未实现。
开发爱好者会说这只是因为机器学习驱动的静态分析器仍需要进一步开发。然而,重新考虑机器学习系统的实际工作方式表明,这些问题可能会持续存在一段时间。
结论
最后,人们要了解的是。机器学习技术仍处于起步阶段,并可能在许多开发领域中找到许多有用的应用程序。但是需要知道,机器学习技术仍然很难改变静态分析工具的构建方式。
从最根本的角度来说,这是因为静态分析与机器学习平台本质上是不同的。与用于运行人工智能和机器学习系统的模糊的概率逻辑不同,错误隔离和修复需要精确的、可重复的方法。最终人们不希望静态分析器根据其他示例指出代码可能出错,并且想确切地知道它是否能够工作。
遗憾的是,只有通过明确编码的分析器才能实现这种确定性。至少现在是这样。