安全报告 | 2021 OWASP TOP 10 新榜解读
OWASP(开放式Web应用程序安全项目)是一个开放的社区,该项目由非营利组织OWASP基金会支持,致力于改进Web应用程序的安全性,OWASP总结了10种最严重的Web应用程序安全风险,警告全球所有的网站拥有者,应该警惕这些最常见、最危险的漏洞,也就是我们熟知的“OWASP TOP 10”榜单。
2021年新的OWASP TOP 10榜单有三个新类别,还有四个类别名称和范围发生了变化,还对一些类别进行了合并,下图是2017版与2021版的榜单变化图。
2021 OWASP TOP 10 新榜详解
A01访问控制失效(Broken Access Control)
从第五位上升到了第一位。94%的应用程序都经过了某种形式的访问控制失效测试。映射到访问控制失效的34个CWE在应用程序中的出现频率比其他任何类别都要多。
A01解读:
授予对角色、功能和能力的自由访问权限,这些权限应受最小特权原则的限制并默认被拒绝;
篡改参数和强制浏览(即修改URL或HTML页面)或修改API请求以避免访问控制检查;
提供不安全的直接对象引用(即唯一标识符),允许查看和修改用户的帐户;
由于错误或设计缺陷导致的特权提升;
篡改元数据,例如JWT访问控制令牌、cookie、隐藏字段和滥用JWT失效;
强制浏览以访问经过身份验证或特权的页面;
由于跨域资源共享(CORS)配置错误,允许来自不受信任/未经授权的来源的API访问;
在没有POST、PUT和DELETE访问控制的情况下访问API。
A02加密失败(Cryptographic Failure)
以明文形式存储或传输敏感数据;
使用过时或弱的加密算法和协议;
使用默认或弱加密密钥,不使用密钥管理和轮换;
没有强制加密;
未正确验证服务器证书和信任链;
忽略或重用初始化向量或使用不安全的操作模式;
攻击者可以利用这些漏洞来访问敏感数据。
A03注入(Injection)
用户提供的数据未经验证、过滤或删除;
解释器直接使用动态查询或非参数化调用,无需转义;
恶意数据被直接使用、连接或在对象关系映射(ORM)搜索参数中;
当注入攻击成功时,攻击者可以查看、修改、删除数据,并可能获得对服务器的控制。
A04不安全设计(Insecure Design)
与应用程序安全专家一起实施安全的开发生命周期,以评估设计安全和隐私相关要求;
引入并使用安全的设计模式库或准备使用的组件;
将威胁建模方法应用于关键身份验证、访问控制、业务逻辑和关键流;
使安全语言和控制成为用户故事的一部分;
在系统的每一层执行从前端到后端的合理性检查;
通过单元和集成测试验证关键流对威胁模型的抵抗力;
为应用程序的每一层编译使用和误用案例;
根据暴露和保护要求,在系统上分离层和网络层;
通过设计在所有层中稳健地分离租户;
限制用户或服务的资源消耗。
A05安全配置错误(Security Misconfiguration)
应用程序未做安全加固;
错误配置的云服务权限;
允许或安装不必要的功能,例如端口、服务、页面、帐户或权限;
默认帐户/密码已启用或未更改;
向用户显示的错误消息包含堆栈跟踪或其他敏感信息;
未正确启用或实施最新的安全功能;
服务器、框架、库或数据库的安全设置未设置为安全值;
安全标头或指令不是由服务器发送或未设置为安全值;
使用老旧软件,未更新到最新版本
A06易受攻击和过时的组件(Vulnerable and Outdated Component)
如果您不知道您使用的客户端和服务器端组件的版本;
如果软件易受攻击、不受支持或已过期;
这包括操作系统、Web/应用程序服务器、数据库管理系统(DBMS)、应用程序、API和任何组件、运行时环境和库;
如果您没有定期扫描漏洞并关注有关您使用的组件的安全新闻;
如果您在补丁发布时没有修复或升级您的平台、框架和依赖项;
如果您的开发人员没有对更新、升级或修补的库的兼容性进行测试;
如果您的组件配置不安全。
删除任何未使用的依赖项、不必要的功能、组件、文件和文档;
通过使用OWASP Dependency-Check、retire.js等定期清点客户端和服务器端组件的版本及其依赖项;
关注常见漏洞和暴露(CVE)和国家漏洞数据库(NVD)等来源),并订阅电子邮件警报以接收有关组件中任何漏洞的新闻;
要自动化该过程,请利用软件组合分析工具;
仅使用官方来源和安全链接来获取组件,选择签名包;
留意未维护且没有旧版本安全补丁的库和组件,如果您无法打补丁,请部署一个虚拟补丁来监控、检测或防范已知漏洞
A07识别与认证失败(Identification and Authentication Failure)
此前称为“身份验证失效”(Broken Authentication)——排名从此前的第2位降到了第7位,而且该类别目前包含更多与识别失败相关的CWE。虽然该类别仍然位列Top 10榜单,但标准化框架的可用性增加似乎有助于解决这一问题。
A07解读:
如何避免识别和认证漏洞?
OWASP建议的预防措施包括:
尽可能实施多因素身份验证,以防止凭证填充、暴力破解和被盗凭证重用攻击;
永远不要使用默认凭据进行交付或部署,尤其是对于管理员级别的用户;
执行弱密码检查;
使用密码策略来确定密码长度、复杂性和轮换策略;
通过对所有结果使用相同的消息,强化注册、凭证恢复和API途径以抵御帐户枚举攻击;
限制或逐步延迟失败后的重复登录尝试,但避免创建拒绝服务场景;
记录和监控失败的尝试,并在检测到凭据填充、暴力破解或其他类型的攻击时通知管理员;
利用服务器端、安全和内置的会话管理器,在登录后生成具有高熵的新随机会话ID。不要保留URL中标识的会话,并确保在注销、空闲和绝对超时后安全存储和失效。
A08软件和数据完整性故障(Software and Data Integrity Failure)
2021年新增的一个类别,主要关注缺乏完整性验证情况下做出与软件更新、关键数据和持续集成/持续交付(CI/CD)流水线相关的各种假设。CVE/CVSS数据最高加权影响之一映射到该类别中的10个CWE。此前版本中的“不安全反序列化”(Insecure Deserialization)类别如今也被归入这一更大类别。
A08解读:
类似的漏洞故障可能是大多数应用程序的自动更新功能,这些功能不一定含有软件的完整性及可用性检查。
如何防止软件和数据完整性故障?
为了防止不安全的反序列化,OWASP建议执行以下步骤:
使用数字签名等机制来验证来自源的软件或数据未被篡改;
确保库和依赖项仅使用受信任的存储库,或者考虑托管一个内部已知良好的存储库,如果您的风险较高;
使用软件供应链安全工具确保组件没有任何已知漏洞;
为代码和配置更改制定审查流程,以降低将恶意代码或配置插入软件管道的风险;
对CI/CD管道实施彻底的隔离、配置和访问控制,以保证流经构建和部署过程的代码的完整性;
确保没有未签名或未加密的序列化数据发送到不受信任的客户端,而无需事先进行完整性检查或数字签名以检测数据的篡改或重放。
A09安全日志与监测失败(Security Logging and Monitoring Failure)
此前名为“日志记录和监控不足”(Insufficient Logging & Monitoring)——从最后一名上升至第9位。而且该类别已扩展纳入了其他类型的故障,虽然这些故障难以测试,并且在CVE/CVSS 数据中没有得到很好的体现,但却会直接影响可见性、事件警报和取证。
A09解读:
这一类别至关重要,会影响到问责、可见性、事件警报和相关取证等。
在以下情况下会发生日志记录、检测、监控和操作响应失败:
不记录登录、登录失败、高价值交易和其他类型的可审计事件;
警告和错误生成的消息不充分、不清楚或没有消息;
不检查 API 和应用程序日志的可疑活动;
您只在本地存储日志;
警报阈值和响应升级流程尚未制定或无效;
动态应用安全测试工具不会通过渗透测试或扫描触发警报;
应用程序无法实时或接近实时地检测、升级或警告主动攻击;
如果用户或攻击者可以看到日志记录和警报事件,您的应用程序可能会进一步暴露在信息泄漏的风险中。
如何防止安全日志记录和监控失败?
为了防止由于这些故障而可能出现的漏洞,OWASP 建议根据风险的严重程度实施以下一些控制措施。
具体实施措施为:
使用足够的用户上下文记录所有登录、访问控制和服务器端输入验证失败,以发现可疑或恶意帐户;
将它们存储足够长的时间以进行延迟取证分析;
确保日志采用日志管理解决方案可以轻松使用的格式;
通过正确编码日志数据,避免对日志记录或监控系统的注入或攻击;
对高价值事务(例如仅追加数据库表)实施具有完整性控制的审计跟踪,以防止篡改或删除;
建立有效的监控和警报以检测可疑活动并快速做出响应;
引入或采用事件响应和恢复计划。
A10服务器端请求伪造(Server-Side Request Forgery)
2021年新增的类别。虽然数据显示其发生率相对较低,但测试覆盖率却高于平均水平,并且漏洞利用和影响潜力的评级也高于平均水平。该类别是行业安全专家为我们预警的一种重要场景,尽管目前并没有数据能够证实其危险性。
A10解读:
实行站库分离来减少SSRF的攻击影响;
通过制定“默认拒绝”网络策略或网络访问控制规则来阻止除基本流量之外的所有流量;
根据应用程序引入防火墙规则的所有权和生命周期;
在防火墙上记录所有接受和阻止的网络流。
所有输入数据都必须经过验证;
使用“白名单”列表来强制执行URL架构、端口和目标;
不要向客户端发送原始响应;
禁用HTTP重定向;
通过验证URL一致性来避免DNS重新绑定和“检查时间、使用时间”(TOCTOU)竞争条件等攻击;
不要使用拒绝列表或正则表达式来缓解SSRF,这些方法可以通过多种方式绕过。
控制前端系统的本地流量,而不是部署其他安全服务;
对于非常高的保护需求,在具有专用和可管理用户组的前端独立系统上使用网络加密。
结语
OWASP TOP 10榜单目的是为了让网络安全行业更了解漏洞和漏洞利用趋势,以便更好地迎接和应对未来挑战。
部分参考来源:OWASP、Google、Freebuf