大家好!👋 欢迎来到OWASP Top 10 攻克系列,今天我们将探讨在2021年新出现并强调其重要性的A08:2021-软件和数据完整性故障(Software and Data Integrity Failures)。
如果有人偷偷擦掉或修改了重要文件上的文字怎么办?或者我下载的程序文件在传输过程中被篡改,变成了恶意代码怎么办?😱 像这样,“完整性(Integrity)”意味着数据或软件在没有被意外更改或损坏的情况下,保持其原始状态。软件和数据完整性故障正是这种核心“信任”被破坏时发生的。现在,让我们一起看看我们的系统信任是如何被破坏的吧!🕵️♀️

🤔 软件和数据完整性故障?那是什么?
“软件或数据未能按预期保持未被篡改状态的所有问题” 📉
软件和数据完整性故障是一种漏洞,当应用程序的核心元素(如代码、数据、配置文件等)从不可信来源引入,或在传输/存储过程中存在被篡改或损坏的风险时发生。
这个问题可能发生在软件开发生命周期(SDLC)的各个阶段。
- 代码开发和构建过程: 开发者使用的库、框架可能被恶意代码篡改。
- 部署和更新: 软件更新文件可能在传输过程中被篡改,植入恶意代码。
- 数据处理: 应用程序未能正确验证外部输入数据,导致数据被篡改。
当完整性被破坏时,系统可能会出现不可预测的故障,或者完全被攻击者控制。
🕵️♂️ 常见的软件和数据完整性故障案例
在什么情况下,我们可以说软件和数据的“完整性”失败了呢?
1. 未经验证的更新/更新过程 🔄
不可信的更新可能成为毒药。
- 问题: 在下载应用程序、操作系统、固件等更新文件时,未通过数字签名(Digital Signature)或哈希(Hash)值验证文件完整性。如果攻击者入侵更新服务器并分发植入恶意代码的更新文件,用户会在不知不觉中安装恶意代码。
- 案例: 在操作系统更新时,未将下载文件的哈希值与官方网站的值进行比较,导致安装了被篡改的更新并感染系统。
2. CI/CD 流水线完整性不足 🏗️
如果软件的制造过程不安全怎么办?
- 问题: 从开发者编写代码到部署的整个过程(CI/CD 流水线)未能正确应用安全措施。
- 代码仓库(Repository)篡改: 攻击者可能入侵GitHub、GitLab等代码仓库,篡改源代码。
- 构建服务器感染: 构建服务器可能被恶意代码感染,导致正常代码在构建过程中被伪装成恶意代码。
- 案例: 攻击者访问CI/CD服务器并插入恶意脚本,在所有已部署的软件中植入后门。
3. 使用不可信的组件/库 📦
我的代码是干净的,但别人的代码是脏的怎么办?
- 问题: 使用未经验证或来源不明的开源库或第三方组件。(这与A06:易受攻击和过时的组件密切相关。)
- 案例: 遗留系统使用的旧库中发现远程代码执行(RCE)漏洞,但未及时更新,使其成为攻击目标。
4. 客户端完整性验证不足 🌐
仅在客户端而非服务器端验证数据的问题。
- 问题: 在Web应用程序中,用户输入数据的验证仅在浏览器(客户端JavaScript)中执行,而未在服务器端再次验证。攻击者可以轻易绕过客户端验证,并将篡改后的数据发送到服务器。
- 案例: 购物网站仅在客户端验证商品价格,而未在服务器端再次确认,导致攻击者使用开发者工具将价格修改为0元并完成支付。
5. 反序列化(Deserialization)漏洞 👻
隐藏的数据炸弹!
- 问题: 在反序列化(Deserialized)序列化(Serialized)对象时,应用程序处理不可信数据时发生。攻击者可以利用此漏洞触发远程代码执行。
- 案例: 在使用Java的ObjectInputStream、PHP的unserialize()函数等的应用程序中,反序列化恶意构造的序列化数据,从而执行系统命令。
🛡️ 如何阻止它?(防御方法)
防御软件和数据完整性故障的关键是“验证所有输入和外部传入元素,并检测更改”。
- 数字签名和哈希验证 ✍️✅: 所有软件、库、更新文件、固件等在下载和安装之前,必须数字签名并比较哈希值(例如:SHA256)以验证完整性。
- 加强CI/CD流水线安全 🏗️🔒:
- 加强对源代码仓库的访问控制,并应用多因素认证(MFA)。
- 加强整个CI/CD环境(包括构建服务器、容器镜像仓库等)的安全性,并定期检查漏洞。
- 将自动化安全测试(SAST、SCA)集成到CI/CD流水线中,以便在部署被篡改的组件或代码之前进行检测。
- 安全组件管理和SBOM利用 📦📝:
- 创建并管理所有使用的第三方组件列表(SBOM:Software Bill Of Materials)。
- 仅使用没有已知漏洞(CVE)的受信任组件,并定期更新。
- 强大的输入验证(Input Validation)🧐: 必须对所有用户输入在服务器端执行强大的有效性验证。基于允许字符列表(白名单)过滤数据,并严格限制数据格式和长度。
- 安全反序列化实现 🚫👻:
- 如果可能,避免使用反序列化功能,或限制仅反序列化来自可信源的数据。
- 在反序列化之前验证数据的完整性,并基于白名单而非黑名单指定允许反序列化的类。
✨ 总结
软件和数据完整性故障是一种根本性的威胁,它使我们的系统变得“不可信”。我们必须始终记住,一个小的破碎碎片可能会摧毁整个系统。
从开发阶段到部署、运营,必须在所有过程中建立持续的努力和验证流程来维护完整性。让我们坚定地守护我们系统的“信任”!💪
标签: OWASP, A08, Data Integrity, Software Integrity, 完整性, CI/CD安全, 反序列化, SBOM, 安全编码
}}“` maneuvers. The user wants a JSON output with translations of a blog post title and content into English, Japanese, and Chinese. I need to ensure the HTML structure is preserved in the translated content. The JSON structure must strictly follow the provided schema. I have already performed the translations in my thought process. Now I will construct the final JSON output.“`json{
发表回复