上一篇文章中,我们讨论了软件供应链的概念并了解到近年来软件供应链安全事件层出不穷。为了保障软件供应链安全,我们需要了解网络安全领域中的一些主要技术。本篇文章将介绍其中一个重要技术——SAST。

当开发软件时,我们必须同时考虑开发生命周期中的安全性和源代码功能。人为错误是难免的,因此任何企业都会尽可能使用 SAST 工具,以最大限度地减少进入最终应用程序的代码错误数量,并保护应用程序免受未来的网络攻击。‍

让我们一起看看 SAST 技术究竟是什么,从长远来看,它如何帮助您的应用程序更安全,以及它如何影响企业网络保护。

什么是 SAST?

静态应用程序安全测试(Static Application Security Testing),也称为静态分析,它通过直接查看应用程序的源代码发现各种安全漏洞,以避免企业损失。SAST 工具和扫描程序基本都是在应用程序代码完全编译之前使用,因此也可以将它们称为“白盒”工具。

一般而言, SAST 技术在软件开发周期的早期就被使用,并且可以在不运行代码的情况下进行测试,这让开发团队得以在最终确定各种代码特性和功能之前使用此类扫描工具。因此,被发现的任何安全问题都可以得到及时解决。任何漏洞都会在开发的早期被发现,所以应用程序的“破绽”或安全问题都难逃“法眼”。

实时反馈

一些 SAST 工具可以在开发人员编写代码时提供实时反馈,并且能够在代码传递到开发周期的下一阶段之前修复各种问题。在扫描阶段,SAST 扫描程序可以准确地指出应用程序架构代码存在问题的位置。这让有经验的程序员解决问题时信手拈来,避免了花费数天或数周的时间研究代码来识别漏洞的来源。

此外,大多数 SAST 技术允许开发人员自定义报告,这些报告可以通过第三方 dashboard 或其他应用程序导出和跟踪。因此与其他类型的应用程序扫描技术相比,SAST 扫描工具在处理漏洞的解决方案要容易上手得多。但是在整个开发过程中,SAST 扫描工具必须在应用程序上运行多次。这要求开发人员将SAST工具的使用与开发生命周期和排期集成,而避免他们因为代码中内置的安全漏洞而偏离开发轨道。

总之,SAST 工具可以帮助企业在开发阶段保护其应用程序。如果使用得当,SAST 工具可以确保您的企业永远不会启动具有明显安全问题或配置问题的应用程序。

SAST 的优势

与 DAST 及其他类似技术相比,SAST 扫描程序和工具有很多优势。

快速扫描

与许多其他应用程序安全工具相比,SAST 扫描程序可以在相对较短的时间内分析100%的应用程序代码库。实际上一些更高级的工具可以在短短几分钟内扫描多达数百万行代码。

这也让开发人员能够将 SAST 扫描与开发周期的其余部分无缝集成,从而无需将这部分任务安排到开发日程中,或在源代码中花费大量时间查找安全漏洞。

SAST 工具比人工更准确

在阅读数百万行代码时,与人工相比,机器总是更善于捕捉错误。实际 SAST 扫描程序更能够自动识别某些漏洞,比如跨站脚本攻击,缓冲区溢出和 SQL 注入漏洞,比人工更可靠、更高效。此外,能够在开发周期中更快地识别和处理安全漏洞。

总之,企业能够将人力转移到编程或其他任务上,而不是进行耗时耗力的安全检查。

实时报告

与 DAST 和其他工具相反,SAST 扫描程序会准确告诉您应用程序源代码中的问题所在,让您更及时解决问题。您和您的团队从而不必花费大量时间去查找问题以及定位检测到的安全漏洞的来源。

事实上,优秀的SAST扫描工具甚至会在程序员编写代码时直接显示应用程序代码库中的问题。SAST扫描程序会在小错误被其他代码掩盖并变得难以检测之前捕获它们,从而减少整体开发时间。

多种编程语言和开发平台兼容性

SAST 工具并不像 DAST 工具那样通用,降低 SAST 扫描程序的使用门槛,能够让大多数主流编程语言和平台得以使用适配的高质量扫描工具。因此,开发人员在开发过程中应该较容易为其应用程序找到合适的 SAST 扫描套件或漏洞检测工具。

SAST 的短板

虽然 SAST 工具确实有很多优点,但同时也需要注意相应短板,避免使用错误的工具。

较高的误报风险

关于 SAST 工具和扫描报告,开发人员需要单独查看每个标记的错误或漏洞。因为 SAST 工具的误报率相对较高,有问题的扫描程序可能会将代码的特定部分标记为错误。这无疑会降低开发速度。

报告有效期短

由于 SAST 工具仅生成静态报告,因此这些报告也很快过期,特别是当与开发周期快或复杂性不断增长的应用程序一起使用时。您需要在整个应用程序的开发周期中多次运行SAST扫描,来去捕获无意中创建或忽略的新代码错误以及安全漏洞。

此外,如果在开发周期的尾声运行 SAST 扫描,则与该工具类型的初衷冲突,因为您将不得不返回到应用程序的代码中,并且可能需要对代码体系结构进行大幅度更改,以修复任何检测到的问题。

未对运行漏洞进行分析

使用 SAST 工具时,应用程序需要处于静止状态或处于非活动状态。正在运行或完全部署的应用程序,无法使用 SAST 扫描程序进行彻底检查,换言之,这类工具不适合识别潜在黑客在实际攻击期间可能试图利用的某些类型的安全漏洞。

由此可以看出,SAST 扫描程序并不擅长发现复杂的安全漏洞,这些漏洞仅在应用程序通过其自己的代码运行并同时与其他应用程序交互时才会出现。因此,某些漏洞(如不安全的反序列化)对于 SAST 工具来说很难检测到。

不同编程语言需要特定工具

虽然大多数主流编程语言和开发平台都有一个 SAST 扫描工具,但不同语言需要特定的扫描工具。‍如果企业在使用多种语言开发不同应用程序,那么将需要多个 SAST 工具来单独处理每个应用程序。这个过程耗时耗财。

SAST 和 DAST 之间的差异

动态应用程序安全测试(Dynamic Application Security Testing)在很多方面都与 SAST 技术相对应。实际这两种类型的安全工具都强大且有效,但两者都无法捕捉全部可能存在的安全漏洞。两者应相互结合使用,以确保应用程序的整体安全性。

DAST 工具在扫描应用程序的安全漏洞时采用由外向内的方法。通过输入特定的 URL(或 URL 列表),操作员可以使用 DAST 扫描程序检查安全漏洞,并部署多个虚拟网络攻击来测试应用程序。‍一旦检测到缺陷,就可以生成报告以通知安全团队潜在的问题。

DAST 工具无法告知开发人员错误出现的位置或原因。因此,开发人员必须查看代码并利用其安全专业知识来辨别问题是什么以及如何解决它。这与 SAST 工具形成鲜明对比,SAST 工具能够指出可能导致问题的任何有问题的代码。

何时使用 SAST 工具?

DAST 工具可以在已部署或已完成的应用程序上运行。它们主要用于在软件开发生命周期结束时查找安全漏洞,并且通常在早期开发会话中完成多次 SAST 扫描之后。这意味着检测 DAST 漏洞花费的成本和时间都比 SAST 错误更多,但在完全部署之前发现这些漏洞依旧十分重要。

DAST 也很有用,因为它们可以发现动态和复杂的安全漏洞,并且在应用程序运行时进行分析,同时与网络中的其他应用程序进行交互。这是 SAST 工具在扫描应用程序的静态源代码时根本无法做到的。

此外,DAST 工具通常具有读取多种应用程序语言或开发平台的能力。因此,单个 DAST 工具有时可以为整个企业提供服务,其中包含多个正在开发或即将部署的应用程序。

如何优雅地使用 SAST 工具?

高效运用 SAST,请记住以下步骤:

  • 首先,选择一个工具,并根据您使用的编程语言进行完善

  • 确保该工具可以理解软件使用的任何底层框架

  • 创建扫描基础架构并部署工具,最终确定许可要求

  • 设置访问控制,并保护部署工具所需的资源

  • 根据需求修改 SAST 扫描工具附带的控件

  • 针对特定的安全漏洞来编写新规则

  • 载入任何应用程序和设置优先级前先扫描高风险应用程序

  • 分析扫描结果,单独检查每个报告避免误报

  • 制定一个时间表,定期在软件开发生命周期中运行 SAST工具,以最大限度地提高其效率

SAST 工具精选

优秀的 SAST 工具数不胜数。以下是我们精选的可能适合您的企业的 SAST 工具。

Veracode 静态分析

此工具支持 SAST 功能、DAST 分析,以及软件成分分析。这是一个一站式工具,无论使用什么语言或平台,都可以处理您的所有安全和渗透测试需求。

此应用程序甚至包括 API 访问,因此您可以根据需求自定义软件。默认情况下,包括帮助您修复安全漏洞的专业提示。可以说是为开发人员量身定制的工具。

AppScan

这种 SAST 扫描技术允许组织实施可扩展的安全测试策略。如果您的企业将在未来几年内快速增长,这对企业至关重要。该工具允许测试移动端、网页端和开源软件,并为多应用和多用户部署提供各种管理和报告工具。这是一个非常灵活的工具,提供相对较低的误报率和数据保护功能。唯一的缺点是其界面不那么直观。

总 结

总之,SAST 技术是在部署之前测试应用程序的重要组成部分,也是确保为企业提供高质量软件的重要工具。当与 DAST 技术结合使用时,SAST 工具能够保护应用程序免受攻击,并在部署后更好地促进整体应用程序运行。转载自 SEAL安全

时至今日,绝大多数的开发者并不是从零开始进行软件开发,而是在创建软件时依赖第三方资源。通过使用预先构建的库和开源组件,工程师们可以加快开发进程并且降低生产成本,从而快速将产品推向市场。

因此,企业需要意识到软件并不完全在他们的掌控之中。那么是哪些流程、组件和工具构成了你所部署的软件呢?

什么是软件供应链?

“供应链”这一术语通常用于制造业,是指制作和分发一个产品的人员和流程。例如,一家造飞机的公司会自己制造一些部件,也会从其他公司购买和组装部件。他们根据设计规格组装零件,然后对新飞机进行测试。通过测试后,新飞机会被交付到航空公司和飞行员手中。

现代软件的开发流程与此类似:一个软件是由多个组件组成,涉及到多个开发人员、团队和某家公司的内部与外部系统。并且像飞机一样,软件也需要通过压力测试。

因此,我们将软件供应链定义为在软件开发中所涉及到的组件、开发流程以及投入生产和最终软件产品分发的过程。

软件供应链由什么构成?

上文中我们已经讨论了软件供应链的定义。构成软件的诸多组件中,有部分依赖项并非由你的团队开发:

  • 硬件和基础架构

  • 操作系统

  • 编译器和编辑器

  • 驱动和依赖项

  • 开源脚本和打包好的软件

  • 代码仓库引擎、测试套件以及CI/CD工具

  • 云服务和数据中心

同时,供应链会包含公司外部的人员配置,比如外包公司、咨询师以及供应商等。因此,软件供应链安全的首要关注点是将风险管理和网络安全原则相结合,这一做法可以检测到第三方组件给软件带来的风险,并将其最小化。

软件供应链管理

在大型软件的开发过程中会涉及到成千上百个组件、多个团队的协同合作,因此会遇到诸多安全问题。进而可见性、明确的规范以及根据软件开发进度进行持续的改善对于大型软件开发至关重要。

1. 软件材料清单

撰写一份优秀的文档绝非易事,但列出代码中的第三方成分列表则是必须的,这可以让开发人员对软件中可能存在的风险有基本的了解。通过这一列表,能够清楚地知道最新的安全新闻是否与软件中的组件相关。

这些列表被称为软件材料清单,或 SBOM(另一个取自制造业的术语),它们由官方发布并且计算机可以直接对其进行处理。这些清单里详细说明了软件中的各种组件和依赖项。

除了可见性这一优势外,构建这份清单还能够与客户建立信任,证明企业具备安全意识以及确保许可证的合规性。基于此,你不需要向客户开放所有源代码,同时可以根据需要与客户分享他们所需要的信息。

2. 信息访问管理(IAM)和数据治理

目前,软件开发还是一个高度线性且类似于生产线的碎片化过程。现在,企业们正试图消除这一障碍,并跨团队整合工作流程,即 DevOps。开发和运维之间的合并意味着团队之间的协作将持续增加,目前这样的整合已在业界取得初步成效。

在急速变化的环境中,避免数据泄露或敏感信息的丢失比以往任何时候都更加重要。为了保护数据,公司需要实施强有力的 IAM 策略和数据治理程序。部分企业甚至采用 DevSecOps 的方式来确保协作中的安全性。

首当其冲:软件供应链是恶意攻击的首要目标

因为软件由第三方组件构成,因此对软件的攻击已经转移到对供应链的攻击。针对 SolarWinds 的攻击事件是绝佳佐证——通过对多个组件实施攻击进入该公司的网络和应用程序监控平台,从而对使用该系统的 30000 多个组织造成影响。在进入系统之后,攻击者将恶意代码插入该公司的软件中。当 SolarWinds 向其客户发送更新时,无意中授予了对客户账户的后门访问权限,这使得黑客不仅可以访问属于 SolarWinds 的系统,还可以访问每个安装该更新的公司的系统。

针对开源项目的攻击呈上升趋势

研究显示,黑客正积极瞄准开源组件以伺机进入软件供应链。在过去的12个月内,针对开源工具的网络攻击增加了650%。

Sonatype在《2021年软件供应链的现状》报告中指出,传统软件供应链攻击集中在公开披露的漏洞。在过去3年里攻击者已经改变了攻击策略并且频繁向连接全球供应链的开源项目注入恶意代码。

换言之,他们的目标是“上游”组件,或者是分发软件工作流程和更新的服务。这会影响到大量位于下游的终端用户,最终会牵涉到多家组织。

破坏软件更新成为主要攻击手段

通过破坏已经广泛传播的软件更新,攻击者可以获取大量的系统访问权限。例如,许多公司每月会定期发布新的安全补丁,这些补丁会被成千上百万的开发者下载用于开发他们的项目或应用于 CI/CD 流水线中。如果攻击者可以操纵其中一个更新,那么他们就可以轻松地获取部署了该补丁的系统的访问权限。

如何保障软件供应链安全?

1. 快速响应漏洞

传统软件供应链攻击仍然是一个令人担忧的问题,公司在漏洞披露后处理漏洞的窗口期越来越窄。在漏洞出现后未能及时更新其应用程序的企业很有可能会输给竞争对手。因此,IT团队必须利用SCA测试工具来发现第三方代码中的漏洞,并提出补丁和更新等修复措施。根据 Veracode 近期的《软件安全状况:开源软件版本》报告发现,92%的库缺陷都可以通过更新来修复。

2. 保持高度的供应链可见性

发现漏洞仅仅是成功的一半。在了解安全问题之后,开发者需要更新使用了该代码的软件,这需要保持对整个软件供应链有高度的可见性。为了使你的应用程序的依赖关系有完整的可见性,你需要问自己一些问题:

  • 开发生命周期的每一步都涉及什么?

  • 外包员工是否拥有代码权限?

  • 谁安装了软件更新并且是如何安装的?

企业应该审计其所有的应用程序以及授予内部和外部各方的访问权限。理想情况下,这一切应该是有据可查的,并且是自动化的,所以当一个漏洞发生时,你可以迅速找出拥有该访问权限的人员。

3. 组件黑名单机制

及时的沟通是防止攻击的关键。一旦开发人员和社区成员发现有害的组件,这些项目就不能进入生产。团队可以标记出问题组件,并建立一个框架来跟踪和防止它们重新进入软件开发流程中。

4. 更新和监控代码

当代码停止更新或处于 EOL(end-of-life)阶段时,就无法将其留在应用程序中。因此,必须保证软件所采用的组件代码仍然被社区广泛使用并且有技术支持。

将过时的代码留在应用程序中会导致漏洞,进而影响整个软件供应链。因此,一旦你得知某个代码库或项目要关闭或停止维护,就必须将其移除或使用替代项目。

5. 确保特权访问管理的安全

一旦攻击者获得系统访问权限,他们将会试图通过网络横向移动来找到特权账户。一旦成功,他们将使用该账户来访问敏感数据或控制其他系统。

因此,安全团队应该密切监控特权账户的异常活动——密码变更、登录活动以及权限更改等,并且应该及时响应。假设一个域名管理员账户多次尝试输入错误的密码,那么安全团队应该立即开始进行调查并且锁定该账号,直到他们确定这只是一次合法的行为。

管理员应该采用最小权限原则——只有在必要时才应授予高等级的访问权限。系统管理员应该使用自动化和配置管理工具来控制和监控账户管理。这就使得人为干预的空间大大缩小了。

总 结

企业必须意识到现在他们时刻生活在网络攻击的威胁中,这是当前环境下的全新挑战。而软件供应链一旦遭遇攻击,将会为企业带来重大的损失。要避免此类攻击,需要企业安全团队了解整个软件供应链,审计软件所依赖的第三方,扫描软件组件的漏洞,并且有一个强有力、可执行的软件供应链管理计划。

参考链接:

State of Software Security v11: Open Source Edition
https://info.veracode.com/fy22-state-of-so...

Software Supply Chain Management: An Introduction
https://www.sonatype.com/resources/softwar...

2021 State of the Software Supply Chain Report
https://www.sonatype.com/resources/state-o...

被以下专题收录,发现更多精彩内容