当前位置: 首页 > 科技观察

如何使用机器学习进行静态分析

时间:2023-03-21 12:47:50 科技观察

机器学习和人工智能是在很多领域都被广泛应用的两种技术,尤其是在营销分析和网络安全方面。它们在这些领域的成功应用导致一些人尝试将它们用于所有方面。这包括使用机器学习系统创建静态代码分析器来定位安全漏洞。其中一些应用程序已经尝试并取得了一定的成功:Facebook、Amazon和Mozilla现在都提供某种形式的机器学习驱动的静态代码分析器。但是,任何了解机器学习基础知识的人都知道,这些方法也有一些固有的局限性。机器学习静态分析器在过去的几年里,市场上出现了大量机器学习驱动的静态分析器。其中一些是由热心的业余爱好者开发的;其他由科技巨头开发,Facebook、亚马逊和Mozilla现在都提供此类工具,并承诺在每次发布时彻底改变开发过程。事实上,这些工具可以节省开发人员搜索漏洞和错误的时间。让我们来看看市场上一些主流的机器学习静态分析器:1.DeepCodeDeepCode可能是最著名的Java、JavaScript和Python漏洞搜索程序。DeepCode还提供了一个机器学习模块,开发人员称之为“开发人员语法”。DeepCode的机器学习模块通过查看开发人员在处理大量项目时所做的大量更改来工作。通过学习,DeepCode可以为开发人员提供他们正在解决的问题的建议解决方案,并捕获之前出现的错误。DeepCode仍然包含一些限制。该系统的开发者声称,自2018年起将支持C++语言,开发者可以通过其插件使用C++和DeepCode。2.InferInfer已经存在了将近十年,并于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是一个用于错误分析的启动平台,它提供代码依赖关系的可视化,但在可用语言方面也受到限制。所有这些系统对开发人员都非常有用,但前提是它们与特定语言结合使用,并且只有在经过培训才能达到特定结果的情况下。换句话说,支持机器学习的静态代码分析器——一种可以在多种语言和环境中捕获错误和故障的多功能工具——的承诺尚未实现。开发爱好者会说这只是因为机器学习驱动的静态分析器还需要进一步开发。然而,重新思考机器学习系统的实际工作方式表明,这些问题可能会持续一段时间。结论最后,这是人们需要知道的事情。机器学习技术仍处于起步阶段,可能会在许多发展领域找到许多有用的应用程序。但请注意,机器学习技术仍然很难改变静态分析工具的构建方式。在最基本的层面上,这是因为静态分析和机器学习平台根本不同。与用于运行人工智能和机器学习系统的模糊概率逻辑不同,错误隔离和修复需要精确、可重复的方法。最终,人们不希望静态分析器根据其他示例指出代码可能是错误的,并且人们想确定它是否会工作。不幸的是,这种确定性只有在明确编码的分析器中才有可能。最起码到现在。