OWASP Top 10(2021) 解读

454 阅读21分钟

本文其实是笔者的另一篇博文《API安全设计的12+个要点》 的番外和扩展,因为在那篇文章里提到了OWASP TOP10,在认真阅读了这个报告之后,笔者觉得它也是信息安全领域一个重要的工具,值得分享给大家。

关于OWASP和TOP10

"开放Web应用程序安全项目"(Open Web Application Security Project,OWASP)是一个国际化的信息技术安全开放社区,致力于提高软件和信息系统的安全性。

R-C (1).jpg

OWASP每几年会发布"十大Web应用安全风险(以下简称为TOP10)"报告,列出了它们当前最严重的Web应用漏洞类型,并给出相应的编码规范和防护措施建议。是为OWASP TOP10。

除了TOP10之外,OWASP的主要工作还包括:

  • 制定Web应用程序安全标准和最佳实践
  • 提供免费开源的安全工具
  • OWASP提供Web应用安全相关的培训课程和认证考试,以培养安全人才。
  • 研究新的安全威胁
  • 促进安全社区交流

OWASP作为权威的网络安全组织,其安全标准和工具在业界得到广泛应用和认可,对提高Web应用程序安全性发挥了重要作用。遵循OWASP标准成为了Web开发的最佳实践之一。

OWASP Top10是OWASP的一个核心业务和安全项目。它实际上是一份针对开发人员和Web应用程序安全性的标准意识文档,代表了关于Web应用程序最关键安全风险的广泛共识。很多开发人员认可它是通往更加安全编码的重要环节。所有的公司和机构,在设计和考虑自身信息系统安全的时候,都应当参考这份文档,并确保其Web应用程序在这些风险方面尽可能的降低。

本文的主要内容就是解读和分析这个报告。当前的最新版本是2021版(上一版本是2017)。在这个版本中,相对于前一个版本(2017)有三个新类别、四个类别名称和范围发生变化,以及一些项目的整合。下图展示了两个版本中的项目列表和变化情况。

0Q54.png

项目地址和报告的原文在: owasp.org/www-project…

下面是OWASP TOP10(2021)的具体项目列表和笔者的相关解读:

A01:2021-访问控制破坏 Broken Access Control(BAC)

这个风险从过去的第五位上升到现在的第一位,值得予以关注。在调查中,94%的应用程序都经过了某种形式的访问控制测试,暴露出多达34个常见漏洞枚举项目(Common Weakness Enumerations,CWE),这个比例超过其他的风险类别。

BAC指在计算机系统或网络中,由于访问控制机制的缺陷或错误,导致未经授权的用户或进程可以访问或操作敏感数据或资源。访问控制机制通常包括身份验证、授权、访问控制列表(ACL)等。

导致BAC的原因,可能包括:

  • 身份验证机制的缺陷,例如密码猜测或身份验证绕过。
  • 授权机制的错误配置,例如赋予了过高的权限或错误的角色。
  • 访问控制列表(ACL)错误配置,例如错误的权限设置或缺少必要的权限。
  • 输入验证的缺陷,如SQL注入或跨站脚本攻击

减少或消除BAC的相关措施可能包括:

  • 实施强的身份验证和授权机制。
  • 正确配置访问控制列表(ACL)和权限。
  • 实施输入验证和数据验证。
  • 定期检查和更新访问控制机制。

A02:2021 - 密码学失效 Cryptographic Failures(CF)

这个风险项目的前身是上一个版本的“敏感数据暴露(Sensitive Data Exposure)”,排名第五,新版中上升到第二位。这个调整是因为以前的名称更多体现为症状而非根本原因。 这一次的重点就聚焦在由于密码学失效而导致的敏感数据暴露和系统受损之上。

CF是指密码学算法或协议在实际应用中存在缺陷或弱点,导致加密系统和过程失去预期的安全性。现代信息应用系统在CF方面的经典场景就是MD5算法和SSL协议仍然被广泛而大量的使用。

CF的原因可能来自多个方面:

  • 算法本身的缺陷

密码算法在设计时,可能基于一些过于理想化的假设,或者忽视了一些攻击模型,导致在真实环境中存在漏洞可被攻击者利用。比如早期的DES加密算法密钥空间不够大。

这个问题,在现代化的密码学体系中已经很少遇到,因为现在主流应用的密码算法和协议,都经过了长时间大规模和广泛的应用过程,迄今为止没有被暴露出来非常严重的算法设计问题和漏洞。当然时间和技术发展也是一个重要的因素,可能需要开发者尽量选择比较新的密码学技术,系统业主也应当有一定的意识,定期改进和更新系统的安全特性,比如升级密码学算法和协议。

  • 算法使用不当

即使是密码学上安全的算法,如果使用方式不当,也可能导致系统失效。比如使用太短或重复的密钥、随机数不够随机、密钥管理疏漏等。这是本风险类别中最主要的项目。

  • 协议存在缺陷

加密通信往往需要复杂的密码协议,而协议设计中如果存在逻辑漏洞,也可能导致整个通信被攻破。比如著名的心脏出血漏洞。

  • 实现缺陷

密码学算法需要具体实现到软硬件系统中,实现过程中的编码缺陷、时序漏洞等,可能为攻击者提供攻击面。

  • 物理攻击

现代密码分析还包括对密码系统硬件的物理攻击,如侧信道攻击、故障注入等。

  • 其他社会工程学攻击

除技术层面外,攻击者还可能通过非法获取密钥等手段绕过密码保护。如窥视、窃听、撞库等等。这通常是很多网络和系统攻击的前期准备工作。

针对密码学失效的风险,可以采取的增强和实践包括:

  • 提高开发和使用者的信息安全特别是密码学方面的正确的认知和意识
  • 理解密码学安全的局限性,并在日常工作和生活中养成良好的安全意识和习惯
  • 使用新的陌生的软件硬件系统、设备和网络时保持警惕,做好防护
  • 采用国际主流密码学算法、框架和软件,并遵循相关开放规范和最佳实践
  • 在没有必要的情况下,尽量避免使用不了解或者技术封闭的密码学软件
  • 对开发过程、算法实现和程序流程进行重复的安全评估和测试
  • 进行日常持续的安全检查和审计

A03:2021 - 注入 Injection (IJ)

注入攻击风险,从上一版的第一位下降到第三位。在调查和测试中,94%的应用程序经过了某种形式的注入测试,可以映射到这一类别的33个CWE,在所有应用程序中的出现次数排第二。另外,在新的OWASP中,跨站脚本现已并入本类别。

IJ是一种将恶意代码作为正常输入数据输入注入到合法的应用程序数据中,并欺骗系统执行该恶意代码的攻击方式。常见的注入攻击包括SQL注入、OS命令注入、NoSQL指令注入、LDAP代码注入、XXE(XML外部实体)注入等方式。注入攻击的基本原理都是类似的,恶意数据混入合法数据后,被系统错误的解析执行,从而使攻击者能够获取信息、绕过认证、窃取数据、执行命令等,这些行为都会在不同程度上构成安全威胁。

EF989C1XYAEezEf.jpeg

防范注入攻击的主要手段包括:

  • 数据输入验证与过滤
  • 使用参数化查询或存储过程等防注入机制
  • 最小化系统权限和功能暴露面
  • 及时修补安全漏洞并更新系统版本
  • 系统安全审计,及时发现注入攻击的迹象和方式,及时修补漏洞

在很长一段时间内,注入攻击都是主流和危害性最大的攻击方式。所以行业非常重视。进行了持续的风险教育和技术改进,使这个威胁得到了有效的遏制和消减。

A04:2021 - 不安全设计 Insecure Design (ID)

这是是2021年的一个新类别,着眼于设计缺陷相关的风险。如果我们真的想要向一个行业的上游发展的话,就需要更多地使用威胁建模,安全设计模式和原则,和安全设计参考架构等工具。

不安全设计(Insecure Design)指的是在软件系统的设计和架构阶段,没有充分考虑安全性因素,导致系统在实现后存在潜在的安全隐患和漏洞。在系统开发过程中的不安全设计涉及项目可能包括:

  • 权限,违背最小权限原则,赋予组件或用户过高的访问权限,增加被入侵和滥用的风险
  • 基础安全,缺乏身份验证、访问控制、加密等必要的安全功能和防护措施。
  • 数据处理,对敏感数据缺乏适当的加密、完整性校验等保护,易受中间人攻击。
  • 通信,使用不安全的协议或加密算法进行数据通信,无法防范窃听和篡改攻击。
  • 硬编码,如密钥、密码等敏感信息硬编码在代码或配置文件中,被泄露风险高。
  • 验证,如缺乏防范注入、跨站脚本等Web攻击的输入验证和编码机制
  • 服务器,服务器端配置错误、缺乏完整性校验等,可被攻击者远程利用。
  • 加密,使用了过时、不当或错误的加密算法和模式,无法提供有效保护。

除了通用的信息安全考量之外,改善和缓解不安全设计的相关关键措施包括:

  • 明确安全需求
  • 遵循最小权限
  • 遵循信息安全系统设计和开发的最佳实践
  • 选择成熟稳定可靠安全的技术和框架
  • 安全审计

总的来说,不安全设计常常是由于在开发早期阶段缺乏安全意识和专业评审,导致安全需求落实不到位所致。而这些问题后期修复成本很高,因此安全设计越早越重要。

A05:2021-安全性错误配置 Security Misconfiguration (SMC)

这个风险从上一版的第六位略微上升到当前的第五位。90%的应用程序经过了某种形式的错误配置测试。当代Web应用软件的发展趋势是高度可配置化,所以这一风险类别上升也是非常自然的。之前还有一个风险类别XEE(XML External Entities,XML外部实体)作为类似的项目,现已并入本类别。

SMC意为服务器、操作系统、应用程序和支撑环境等配置不当导致的安全漏洞和风险。这些项目通常包括:

  • 不安全的默认配置,如弱口令,不必要的软件和服务,过于宽松的权限设置等,都可能会给攻击者可乘之机
  • 错误的云安全配置,对云存储、虚拟机、API等云资源和服务的访问权限管理配置不当,导致数据泄露
  • 不正确的SSL/TLS配置,使用不安全的加密协议版本、加密算法或密钥长度,或者证书配置错误(无效或者过期)
  • 不安全的系统权限,如文件系统权限设置不当,使攻击者能访问应该禁止的系统资源
  • 过于宽松的安全策略,如Web应用程序安全中对文件上传、跨站请求等限制过于宽松
  • 软件特性未完全关闭,操作系统或软件中没有完全关闭一些不需要的功能和服务
  • 遗留开发配置,生产环境中遗留了用于开发调试的后门账户、测试页面等

安全性错误配置风险的防范关键在于:

  • 遵循最小权限原则
  • 完全关闭和禁用不需要的功能
  • 持续使用自动化扫描和加固工具进行系统安全检查,并及时修复配置问题

A06:2021-易受攻击和过期组件 Vulnerable and Outdated Components(VOC)

之前称为使用含已知漏洞的组件(Using Components With Known Vulnerabilities),在2017年版本中排名第9位。它还在新版的Top10社区调查中排名第二。这个风险是一个众所周知,但我们在测试和评估风险方面一直存在困难的问题。也是唯一一个未将任何常见漏洞和暴露(CVE)映射到所包含的CWE的类别,因此在评分时考虑了5.0的默认利用和影响权重。通过数据分析综合考虑将其列入Top10,并且排名第六。

VOC指的是软件系统中使用了存在已知安全漏洞或者没有持续维护更新的第三方组件。这些问题组件给系统带来了潜在的安全风险,它们可能包括:

  • Web框架/服务器中间件存在远程代码执行漏洞
  • 应用程序使用了有缓存区溢出/内存损坏等漏洞的编解码库
  • 系统使用了存在认证绕过、信息泄露等漏洞的组件
  • 过期组件,使用的组件版本已经老旧,原作者不再更新修复新发现的漏洞,安全性无法得到持续保证

以下措施可以帮助修复和缓解VOC风险:

  • 订阅相关组件的安全公告并及时修复
  • 及时更新所有第三方组件到最新版本
  • 对无法更新的旧组件进行替换或隔离
  • 定期评估和实施安全性相关的系统更新
  • 定期审计运行系统的组件版本和安全状态

A07:2021-身份识别和认证失败 Identification and Authentication Failures (IAF)

之前的版本中被称为身份认证破损(Broken Authentication),是第二位的风险项目,现在这个项目进行了扩展,包括了更多与身份识别失败相关的CWE,并仍然保留在TOP10中,但是标准化框架的增加和应用似乎对安全状况有所帮助,所以总体风险下降到了第七位。

IAF指的是系统或应用程序在对用户进行身份验证时存在缺陷或被绕过,导致未经授权的访问和攻击发生。一般包括以下几种情况:

  • 使用不安全或过时的认证方式,如使用了容易被破解的短密码、明文传输密码、弱口令策略等不安全的身份验证方式
  • 缺乏多重身份验证,只使用密码进行认证,缺乏其他因素(如证书、生物识别等)的多重身份验证
  • 认证凭据存储或传输不安全,如明文存储密码、密钥等凭据,或在网络上明文传输,都可能被窃取或破解
  • 密钥管理疏漏,如密钥生成算法不安全、密钥过于简单、密钥分发不当等
  • 会话管理失效,如会话ID可被预测、不会自动超时注销、会话固定等,会话可能被劫持或展开重放攻击
  • 缺乏认证限制,没有针对无效认证尝试的限制机制(如密码尝试次数限制),可被暴力破解攻击
  • 认证凭据可被重用,跨系统或服务复用相同的身份凭据,一旦其中任一系统凭据泄露就会被利用
  • 认证短路或逻辑漏洞,认证代码中存在逻辑缺陷,可被绕过导致未授权访问

IAF的方法关键在于:

  • 使用安全的加密认证方式,保证认证过程安全
  • 落实密码格式和使用安全策略
  • 限制认证尝试次数和时间限制
  • 更有效的保护凭据安全
  • 实现会话管理
  • 实施多重身份验证
  • 定期评审认证设计和代码

A08:2021-软件和数据完整性失败 Software and Data Integrity Failures (SDIF)

这个项目是2021年的一个新类别,聚焦于在未经验证的情况下就对软件更新、关键数据和CI/CD流水线作出假设。根据CVE/CVSS数据,这一类别中映射到10个CWE,其影响权重很高。此外,2017年版中的不安全反序列化(Insecure Deserialization)相比,也成为当前这个更大类别的一部分。

SDIF是系统或应用程序中的软件组件、库、数据等在传输或存储过程中被非法修改或破坏,导致执行不可信代码或处理被污染数据的安全风险。SDIF最经典的案例是2015年的XcodeGhost事件。

涉及SDIF常见的项目和情况包括:

  • 软件供应链,从不可信来源获取的软件组件、库等被植入了后门或恶意代码,在系统运行时被利用
  • 软件签名,用于验证软件完整性的数字签名机制被绕过或被伪造,导致系统加载了不可信的组件
  • 软件更新流程,软件更新过程中缺乏完整性校验,可被攻击者植入恶意修改
  • 请求数据和文件,攻击者在Web请求的客户端与服务器间对请求参数或上传文件进行了篡改。
  • 代码执行,系统加载和执行了来自不可信渠道的代码或命令,如远程脚本注入攻击。
  • CI/CD流程,在持续集成和交付过程中,代码、构建等环节缺乏完整性保护,代码被污染
  • 数据备份或日志,攻击者修改了系统的备份数据或日志记录,覆盖真实信息和数据
  • 第三方库或模块,引入了可疑或有安全漏洞的第三方组件,而被攻击者利用

相关的防范和安全措施包括:

  • 使用数字签名、完整性校验、可信计算等技术来确保软件和数据在传输和存储中的真实性
  • 加固软件供应链管理
  • 不信任并且检查外部数据输入
  • 审计第三方依赖项项目
  • 保证整个软件开发和运行环节的端到端完整性

A09:2021-安全日志记录和监控失效 Security Logging and Monitoring Failures (SLMF)

本项目之前被称为日志记录和监控不足(Insufficient Logging & Monitoring),由从行业调查列表(第3位)增加而来,在上一版中排名第十。这一类别扩大了更多类型的失败,而且很难进行测试,在CVE/CVSS数据中也没有很好的体现。然而,这一类别中的失败可能会直接影响可见性、事件警报和取证。所以排名轻微上升到本版中的第九位。

SLMF指的是系统或应用程序在记录安全事件日志和监控异常活动方面存在缺陷,导致难以及时发现和响应安全违规行为和攻击事件。它主要包括以下几种情况:

  • 日志记录不充分,系统或应用程序没有记录足够的安全相关信息,如身份验证失败、访问控制决策、安全配置更改等,影响追溯与调查
  • 日志事件缺乏上下文信息,难以区分正常和异常行为,或关联不同事件源。
  • 日志保护机制缺失,日志文件本身又没有防篡改的完整性保护机制,可能被攻击者修改或清除痕迹。
  • 缺乏集中式日志处理,分散的日志文件未集中管理和分析,难以整体审视和关联分析安全事件
  • 缺乏实时监控,缺乏对日志和运行时系统状态的实时监控,影响异常行为和入侵迹象发现的及时性
  • 警报失效,即使检测到异常也没有生成有效的安全告警,或者告警被忽视或误判
  • 日志记录和监控的审计缺失,没有定期审查日志和监控系统本身的正确性和完整性。
  • 缺乏日志存储和保留策略,缺乏明确的日志存储和长期保留措施,重要事件痕迹被自动覆盖

相关防范措施包括:

  • 制定完善的日志记录规范和策略
  • 实现集中实时监控和及时告警
  • 保护日志完整性
  • 定期检查日志和审计

A10:2021-服务器端请求伪造 Server Side Request Forgery (SSRF)

这个新项目来自Top10社区调查的内容,它也是这个调查排名第一的问题。相关数据显示这个风险的出现率相对较低,测试覆盖率稍高于平均水平,利用和影响潜力评分也高于平均水平。这一项目体现出这样一个情况:即使在数据中并没有体现出来,但安全社区成员们可能认为它是很重要的。

SSRF是一种针对运行在服务器上的应用程序的攻击方式。攻击者可以通过构造恶意的请求参数,诱使和引导服务器向其他服务器发起请求,从而造成一些安全和性能隐患。SSRF漏洞的核心是服务端应用对外部请求源的过滤验证欠缺,导致攻击者可控制服务器作为代理发起内网或外网的请求。这种攻击主要包括以下几种情况:

  • 内网探测和攻击,让服务器向内网其他系统发起请求,探测内部网络拓扑结构和服务,寻找新的攻击面
  • 绕过防火墙限制,伪造成内部网络流量,可绕过防火墙对外部请求的限制访问受限资源。
  • 读取内部数据文件,诱使服务器读取服务器本地的敏感文件数据,如密钥、配置文件等泄露信息
  • 发起DoS攻击,大量构造对其他服务器的请求,耗尽自身及攻击目标资源。
  • 端口扫描和指纹识别,诱使服务器去扫描其他系统端口和服务,为进一步攻击做准备
  • 第三方服务器攻击,利用SSRF漏洞将服务器变为攻击系统的跳板,并隐藏攻击来源

防范SSRF的主要策略和方法包括:

  • 禁用或限制服务器向外发起请求特别是访问互联网的功能
  • 适当做输入数据的过滤和检查
  • 限制服务器出站流量只能访问预定可信目的地址
  • 保护敏感内部文件访问权限

小结

本文分析和解读了2021版的OWASP TOP10系统信息安全风险报告。列举了报告中列出的排名前十的系统安全风险,并总结了风险定义、可能的安全性影响、表现形式和处理方案等。可以作为企业信息系统架构和应用系统开发的安全性检查清单和指导。