OWASP Top 10漏洞解析(8)- Software and Data Integrity Failures
Web应用程序安全一直是一个重要的话题,它不但关系到网络用户的隐私,财产,而且关系着用户对程序的新人。随着Web应用程序功能持续增加,复杂性不断提高,这些程序也面临着越来越多的安全威胁和挑战。
为了帮助这些应用程序的开发团队和安全人员了解和防范这些威胁,提高安全意识,编写更安全的代码,OWASP(Open Web Application Security Project,开放式Web应用程序安全项目)发布了一份标准指南,称为OWASP Top 10。
这是一份关于Web应用程序安全风险的标准指南,它基于全球范围内的安全专家和数据提供者的共识,列出了当前最严重、最关键的10种Web应用程序安全风险,并提供了相应的防范措施和建议。OWASP Top10 每隔几年会更新一次(目前已经发布了六个版本,分别是2004年、2007年、2010年、2013年、2017年和2021年),最新的版本是在2021年发布的OWASP Top10:2021。
已解析的OWASP漏洞
- OWASP Top 10漏洞解析(1)- A1:Broken Access Control 访问控制失效:https://bbs.huaweicloud.cn/blogs/400993
- OWASP Top 10漏洞解析(2)- A2:Cryptographic Failures 加密机制失效:https://bbs.huaweicloud.cn/blogs/405125
- OWASP Top 10漏洞解析(3)- A3:Injection 注入攻击:https://bbs.huaweicloud.cn/blogs/407990
- OWASP Top 10漏洞解析(4)- A4:Insecure Design 不安全的设计:https://bbs.huaweicloud.cn/blogs/414812
- OWASP Top 10漏洞解析(5)- A5:Security Misconfiguration 安全配置缺陷: https://bbs.huaweicloud.cn/blogs/420057
- OWASP Top 10漏洞解析(6)- A6:Vulnerable and Outdated Components:https://bbs.huaweicloud.cn/blogs/424642
- OWASP Top 10漏洞解析(7)- Identification and Authentication Failures:https://bbs.huaweicloud.cn/blogs/427299
“缺失软件及数据完整性”缺陷详情
在2021年,一个新类别开始关注于在不验证完整性的情况下进行与软件更新,关键数据和CI/CD流水线相关的假设。这是来自于Common Vulnerability and Exposures/Common Vulnerability Scoring System (CVE/CVSS)数据中权重最高的影响之一。其中值得注意的CWE缺陷包括CWE-829: 来自不受信任的控制领域的内在功能,CWE-494: 未经完整性检查的代码下载以及CWE-502: 来自不受信任数据的反序列化。
常见的“缺失软件及数据完整性”缺陷类型
缺失软件和数据完整性和不能防止完整性违规的代码和基础设施有关。举例来说,一个应用程序依赖的插件,依赖库或则模型来自于不受信任的来源、仓库和内容交付网络(CDNs)。比如一个不安全的CI/CS流水线可以引入未经授权的访问、恶意代码或系统妥协的潜在风险。或则,鉴于现在许多应用程序包括自动更新功能,但这些自动更新可能在缺乏充足完整性验证功能时就下载并安装更新到处于安全状态下的应用程序。攻击者可以有可能上传自制的更新并传播分发到所有安装上去运行。
另一个例子可以说,如果一个对象或数据可以被编码或序列化成一个结构,那么攻击者就可以查看到完整的结构并发现反序列化脆弱的地方。
如何防止该缺陷的发生
想要防止该缺陷的发生,需要落实以下几种方法:
- 使用电子签名或类似的机制来验证软件/数据是否来自预期来源且未被更改。
- 确保库和依赖,比如npm或则Maven,使用的是受信任的。如果用户的配置风险较高,也可以考虑托管一个经过审核的内部已知良好的存储库。
- 确保使用软件供应链安全的工具来验证组件不包含已知漏洞。
- 确保存在代码和配置更改的审查流程,以最大程度减少恶意代码或配置可能被引入到用户的软件流程中的机会。
- 确保使用的CI/CD流水线具有适当的隔离、配置和访问控制,以确保代码在构建和部署过程中的完整性。
- 确保未签名或未加密的序列化数据不会发送给不受信任的客户端,除非有某种形式的完整性检查或数字签名来检测序列化数据的篡改或重放。
举个栗子
场景1
未签名的更新:许多家用路由器、机顶盒、设备固件等都没有通过签名的固件来验证更新。未签名的固件成为攻击者一个不断被越来越多使用的目标,而且预计这种情况会越来越严重。这是一个重大的问题,因为很多时候这种漏洞只有在未来版本才可能被修复,在此之前没有任何补救措施。
场景2
SolarWinds恶意更新:国家层面感知到的更新机制的攻击手段,其中最近一个显著的攻击是SolarWinds Orion攻击。开发该软件的公司拥有安全的构建和更新完整性流程。然而,这些流程被颠覆,几个月来,该公司向超过18,000家组织分发了一个高度针对性的恶意更新,其中大约100家左右受到了影响。这是历史上最具影响力和最重大的此类违规之一。
场景3
不安全的反序列化:一个React应用程序调用了一组SpringBoot微服务。作为函数式编程员,需要试图确保他们的代码是不可变的。他们想出的解决方案是将用户状态序列化并在每个请求中来回传递。攻击者注意到了“rO0”Java对象签名(以base64编码),就使用Java Serial Killer工具在应用程序服务器上实现了远程代码执行。
参考链接
- 点赞
- 收藏
- 关注作者
评论(0)