OWASP Top10 之软件和数据完整性故障
随着攻击者越来越多地针对持续集成/持续交付(CI/CD)管道、开源组件和更新机制发动攻击,保护网络应用的代码和数据完整性比以往任何时候都更为重要。
什么是软件和数据完整性故障?
软件和数据完整性失败是指系统未能充分防止对代码、配置或数据的未经授权的更改。这可能意味着一个应用程序下载了一个恶意的软件更新,运行了被篡改的脚本,或者毫无保留地接受了来自不可信来源的被篡改的输入。
从根本上说,这些问题源于在没有验证其完整性的情况下信任组件或流程。这使得攻击者能够操纵软件行为、注入恶意代码或危及敏感操作。
软件和数据完整性故障的常见原因
未签名或未验证的软件更新:没有数字签名或完整性检查的软件更新可能会被篡改,从而用于传播恶意代码。
不安全地使用插件或模块:依赖未经安全审查的第三方组件可能会引入漏洞并增加攻击面。
在传输或存储过程中对数据的验证不足:未能验证或清理数据可能会让攻击者在传输过程中或在静止状态下注入或篡改敏感信息。
CI/CD工作流中缺乏完整性检查:当代码和工件在整个管道中未经过验证时,攻击者可以注入恶意更改,而这些更改可能会在未被检测到的情况下进入生产环境。
缺乏数据真实性验证:当应用程序未能确认传入数据的来源时,它可能会接受并处理不可信的输入。这为攻击者向系统注入恶意数据打开了大门。
缺乏完整性验证支持:如果软件没有机制来验证数据的完整性,攻击者可以在不被检测到的情况下更改或删除信息,从而危及系统的可靠性。
使用不可信的搜索路径:允许用户或外部输入影响库或模块的搜索路径可能会导致加载恶意代码而不是可信组件。
下载代码时未进行完整性验证:在下载外部代码或依赖项时未检查其真实性或完整性,会使攻击者能够替换或注入有害代码。
不安全地反序列化不可信输入:在没有验证的情况下反序列化不可信数据可能会导致代码执行攻击,因为恶意负载可以嵌入在序列化对象中。
软件和数据完整性故障示例
最臭名昭著的案例可能是SolarWinds供应链攻击。攻击者在渗透开发管道后,将恶意代码插入到一个网络监控工具的可信软件更新中,该更新随后被分发到数千个组织,包括政府机构。被篡改的更新使攻击者获得了对关键系统的远程访问权限,并且在数月内未被检测到。
更近一些的例子是Polyfill安全危机,一个第三方购买了用于分发一个可信且流行的JavaScript库的CDN,并用它向依赖该库的网站提供包含恶意代码的版本。更普遍的例子包括:
通过npm或CDN链接注入的带有加密矿工的JavaScript依赖项
内容管理系统中的恶意插件
基础设施即代码管道中的配置漂移
CI工具中可被利用的默认设置,允许脚本注入
软件和数据完整性故障有哪些危险?
与简单的错误配置不同,这些故障会影响整个软件生命周期的信任模型。如果攻击者可以篡改代码、数据或部署过程,他们可以:
插入危害用户或内部系统的后门程序
在看似合法的操作下窃取敏感数据
破坏对软件供应商和平台的信任
通过更新将恶意软件传播到客户环境中
通过在可信工作流程中注入恶意功能来绕过其他控制措施
这些类型的攻击很难检测,并且可能产生深远的后果,远远超出“普通”数据泄露,特别是当涉及第三方组件或自动化工具时。
如何减少软件和数据完整性故障
缓解的关键是降低对未经验证的来源的信任,并确保在整个软件交付生命周期中进行可靠的验证。这意味着不仅要在边界或生产环境中应用安全控制措施,还要贯穿整个构建和部署过程。
常见的数据完整性问题
缺少加密签名:软件或脚本在执行前未进行签名或验证。
不安全的第三方集成:应用程序从远程源和API拉取数据,而未验证数据内容。
管道被篡改:存储库或CI/CD工具配置错误,允许未经验证的代码被注入到构建中。
不当的输入验证:数据字段或配置文件被篡改而未被检测到。
如何防止软件和数据完整性故障?
为了防止完整性故障,组织要专注于其代码、数据和整个软件管道的可见性、验证和控制。主要安全措施包括:
实施签名更新和软件包的政策:要求所有更新和第三方组件都进行数字签名。
使用哈希验证:检查已下载代码或容器映像的加密哈希,以检测篡改。
保护CI/CD管道:在自动化过程中应用访问控制、密钥管理和工件验证。
进行监控和测试:使用静态测试工具及开源组件分析工具在上线前进行检测,并使用自动化动态测试对生产环境进行连续验证。
定期查看依赖项:自动检查所有组件的漏洞,并删除或更新过时的插件。
通过使用SAST静态应用程序安全测试工具或SCA 结合动态应用程序安全测试 (DAST)在软件进入生产环境前进行检测,有助于降低风险。
参读链接:
https://www.invicti.com/blog/web-security/software-and-data-integrity-failures-an-owasp-top-10-risk/

浙公网安备 33010602011771号