开发人员每天都使用插件,插件的功能在于简化开发流程,例如自动检测所有特殊字符(如“;”、“:”)或语法合规性。创建插件的目的本身就是为了让开发人员能够在编写代码时检测漏洞,并在无需离开 IDE 环境的情况下立即修复漏洞。我们来了解一下,什么是插件以及如何使用插件?
近年来,安全开发这一话题变得非常重要且具有现实意义。如今,从事开发或信息安全领域的人员基本上都听说过 DevSecOps 或见过相关信息。多项研究表明,网络应用程序攻击是最常见的网络攻击类型之一。例如,根据 Positive Technologies 的数据,在渗透测试人员发现的漏洞中有 72% 以上与应用程序代码中的错误相关,91% 的应用程序泄露了重要数据。各个公司和人员开展的类似研究有很多;要找到这些研究并不困难,只需使用搜索引擎即可。但这些研究都有一个共同点:都强调使用安全开发实践的重要性和必要性。
在搭建 DevSecOps 流程时,公司会尝试实施公认的最佳实践。例如,如果我们关注 Sonatype 的 DevSecOps 参考架构,我们不仅可以了解最佳的工具包及其在整个流程中的位置,而且还可以注意到一个非常重要的模式,即将代码安全测试转移到开发的早期阶段(左移)。原因在于,从开发到测试再到将应用程序投入生产的每个阶段,修复和禁用遗留漏洞或错误的成本都将增加。此成本可以用工时来表示,比如,开发人员在完成一个项目的工作后,会被分配到下一个项目。如果发现有问题,那么必须从新项目中抽调一名员工,或者分配额外的工时来修复已完工项目中的漏洞。另一方面,在生产中遗漏的漏洞可能会对公司声誉造成巨大影响和严重经济损失。这些论据正是应用左移等实践的主要推动力。
Sonatype 的 DevSecOps 参考架构
如果我们将参考架构简化一下,那么可以区分出代码检测的几个主要阶段,如源代码威胁、流程搭建威胁和流程交付威胁。在图中,就 IDE 插件在安全开发领域的应用而言,我们关注的是“源代码威胁”阶段。这一阶段是代码的编写阶段;该阶段包括首次编写的数行代码和项目搭建前完成的代码,如 GitLab 的主分支。
同样值得注意的是,最流行的代码检测技术,如 SAST、DAST 和 SCA,都设置在“流程搭建威胁”阶段。也就是说,检测是在开发人员已将其代码发送至存储库这一阶段进行的。如果每位开发人员将每个新编写的函数或模块都发送至 SAST 分析器进行检测,那么没有任何一家公司拥有足够的资源和能力完成。如果公司第一次使用或很少使用 SAST、DAST 或 SCA 分析,那么其开发人员很可能会收到一份厚厚的报告,其中包含需要修复和分析的漏洞,而分析可能会耗费大量的工时。这时,安全开发插件就能派上用场。
检测重点转移至开发的早期阶段
在应用程序代码编写过程中,安全开发插件可以直接发现漏洞和未记录的功能。内置分析模块可以检测开发过程中的源代码漏洞和配置文件错误。插件本身使用的是开发人员计算机的计算资源,无需额外的第三方资源。可以直接在 IDE 市场中检索这些插件。
VSCode 市场截图
插件本身分为 open(开放源代码)和 close source(封闭源代码),也就是说,有些插件允许查看源代码并支持自定义规则。如果公司有更高的或非常规的代码安全要求,这将非常有用。除此之外,这些插件还允许查看分析内核源代码。封闭源代码插件不允许修改内核工作原理或(在某些情况下)添加自定义规则和封闭知识库。封闭知识库包含已搭建的漏洞搜索规则和搜索算法。通常来说,封闭数据库表明该库已包含切合实际且真正有意义的漏洞检测,而且产品开发人员会继续支持该数据库。此外,开发成熟 SAST 分析器的供应商所创建的插件也可以实现同步。SAST 解决方案得出的结果可以通过插件关联到开发人员的 IDE 中,使开发人员能够直接在 IDE 内熟悉的环境中处理结果。插件适用于各种编程语言和 IDE,因此也适用于各种编程任务;文章末尾的表格中列出了相关示例。
下图是安全开发插件工作原理的示例。截图中突出了四个重点:
- 在对代码进行分析后,插件会以编译错误的形式显示发现的漏洞。检测出的所有漏洞将以列表形式显示,并允许在漏洞间进行便捷切换。
- 当选择某一漏洞时,代码漏洞部分会自动高亮显示。
- 漏洞管理。可以对漏洞进行确认、驳回(标记为假阳性,以免后期该操作重复出现),如果插件功能允许,还可以立即生成漏洞利用程序来测试漏洞。
- 数据流 (data flow) 映射允许追踪漏洞全路径,例如从公告易受攻击的变量开始,追踪其与其他数据的所有交互,直至输出点(漏洞将被利用的地方)。
插件会显示什么
当然,插件的使用并不能取代成熟的 SAST、DAST 和 SCA 分析,也不是万能的,但它可以成为构建安全开发和实施左移实践绝佳的附加工具包。值得注意的是,在同一个 SAST 解决方案中,项目通常已经构建完成,开发人员可以负责编写其中的单个模块。但是,在将模块上传到公共分支之前运用插件对其进行检测和修复,可以减少 SAST 结果解析阶段的工作量。
应用插件既可以是开发人员的个人主动行为,也可以是公司内部的规定。例如,个人动机在于提高自身的能力水平。无论是培训班还是大学教育,开发人员在学习过程中很少接受信息安全和安全编码原则相关的教育,而这已不是什么秘密。插件能够以非常容易理解的方式,通过实例实时演示代码缺陷是如何导致有条件的“数据泄露”的,而最重要的是,您将有机会学习如何消除这些缺陷。对公司来说,除左移之外,使用插件将有助于培训员工、贯彻安全开发原则,并有助于编写整洁代码。当然,员工和公司的整体利益也是一个巨大的竞争优势,因为在当前现实情况下,安全已经变得比以往任何时候都更加重要。
最后,顺理成章地以一个优秀插件的例子作为结尾。Positive Technologies 在安全开发社区 PosiDev 上为开发人员发布了免费的 IDE 插件,这些插件可以在 JetBrains 和 Visual Studio Code 中使用。因此,如果您对开发感兴趣,一定要尝试将它们应用到工作中。