静态应用安全测试

什么是 SAST?

静态应用安全测试 (SAST) 也称静态分析,是一种测试方法,通过分析源代码发现容易让组织的应用受到攻击的安全漏洞。SAST 在编译代码之前扫描应用。它也称为白盒测试。

SAST 解决哪些问题?

SAST 在软件开发生命周期 (SDLC) 的早期阶段进行,因为测试时不需要应用运行,并且可以在不执行代码的情况下进行测试。它能帮助开发人员在开发的初始阶段识别漏洞并快速解决问题,而不会破坏构建成果或将漏洞传递到最终应用版本。

SAST 工具在开发人员编码时为其提供实时反馈,帮助他们在将代码传递到 SDLC 的下一阶段之前解决问题。这样,可以防范在安全相关的问题上出现事后诸葛亮的情况。SAST 工具还会对所发现的问题提供从污染源到语句执行处的图形介绍。这些可帮助您更轻松地完成浏览代码。有些工具指出漏洞的确切位置,并突出显示风险代码。这些工具还可以提供有关如何修复问题的深入指导,以及在代码中修复问题的最佳位置,而无需深奥的安全领域专业知识。

开发人员还可以使用 SAST 工具创建他们需要的自定义报告;这些报告可以离线导出并使用操作面板进行跟踪。有条不紊地跟踪工具报告的所有安全问题,可帮助开发人员及时修复这些问题,并在发布应用时让问题在最大程度上得以解决。该流程有助于创建安全的 SDLC。

需要注意的是,必须定期在应用上运行 SAST 工具,例如在每天/每月的构建工作中、在每次登记代码时或在发布代码期间。

Coverity SAST


Coverity 静态应用安全测试

在编码开发过程中解决安全和质量缺陷

为什么 SAST 是一项重要的安全活动?

开发人员的数量远远多于安全人员。对于一个组织而言,即便是寻找资源为一小部分应用执行代码审查,也并非易事。SAST 工具的一个关键优势是能够分析 100% 的代码库。而且,与人工使用手动安全代码审查相比,其速度要快很多。这些工具只需几分钟即可扫描数百万行代码。SAST 工具可自动识别关键漏洞,如缓冲区溢出SQL 注入跨站点脚本等,并且具有高置信度。因此,将静态分析集成到 SDLC 中,可以在所开发代码的整体质量方面取得卓越的成果。

有效运行 SAST 的关键步骤是什么?

对于使用不同语言、框架和平台构建了大量应用的组织,需要六个简单的步骤来高效执行 SAST。

  1. 最终确定工具。选择一个静态分析工具,可以对您所用的编程语言写入的应用执行代码审查。该工具还应该能够理解您的软件使用的基础框架。
  2. 创建扫描基础架构并部署工具。此步骤涉及处理许可要求、设置访问控制和授权,以及获取部署该工具所需的资源(例如服务器和数据库)。
  3. 自定义工具。微调工具以适应组织的需求。例如,您可以通过配置,使其能够减少误报或能够通过编写新规则或更新现有规则来查找其他安全漏洞。将工具集成到构建环境中,创建用于跟踪扫描结果的控制面板,从而构建自定义报告。
  4. 执行应用优先排序和载入。工具准备就绪后,将应用载入系统。如果您有大量应用,请优先扫描高风险应用。最终,您的所有应用都应定期载入和扫描,并将应用扫描与发布周期、每日或每月构建或代码提交实现同步。
  5. 分析扫描结果。此步骤涉及对扫描结果进行分类,以移除误报条目。一旦问题集最终确定,就应对其进行跟踪并将其交给部署团队,以便进行适当及时的修复。
  6. 提供治理和培训。执行适当的治理可以确保您的开发团队正确使用扫描工具。SDLC 中应当显示软件安全接触点。您的应用开发和部署流程应当纳入 SAST 测试。

可以使用哪些工具执行 SAST?

Synopsys 提供最全面的解决方案,用于在 SDLC 和供应链中集成安全和质量。

Coverity 静态应用安全测试在编写代码时查找关键缺陷和安全弱点。它提供全面的路径覆盖,确保测试每行代码和每条潜在执行路径。它能够通过深入了解源代码和基础框架,提供高度准确的分析,避免开发人员浪费大量时间去处理误报。

Coverity 可以扩展以容纳成千上万的开发人员,并能轻松地分析超过 1 亿行代码的项目。它可以与支持开发过程的关键工具和系统快速集成,例如源码控制管理、构建和持续集成、缺陷跟踪、应用生命周期管理 (ALM) 解决方案以及 IDE。

IDE 中的 SAST (Code Sight) 是一款以开发人员为中心的实时 SAST 工具。它能在开发人员编码期间扫描并识别漏洞。Code Sight 集成到集成开发环境 (IDE) 中,可在其中识别安全漏洞并提供补救指导。

SAST 与 DAST 有何区别?

由于泄露事件的数量不断增加,各组织日益重视应用安全。他们希望识别应用中的漏洞,并提早降低风险。有两种不同类型的应用安全测试:SAST 和动态分析测试 (DAST)。这两种测试方法都能识别应用中的安全漏洞,但它们却又截然不同。

以下是两种测试方法的一些主要区别: