OWASP 学习笔记

再次学习 OWASP,本文仅仅作为一个概述,详细的内容以后有时间会慢慢补充。

0x00 十项最严重的 Web 应用程序安全风险 - 2017

1、TOP 1 注入
2、TOP 2 失效的身份认证
3、TOP 3 敏感数据泄漏
4、TOP 4 XML 外部实体
5、TOP 5 失效的访问控制
6、TOP 6 安全配置错误
7、TOP 7 XSS 跨站脚本
8、TOP 8 不安全的反序列化
9、TOP 9 使用含有已知漏洞的组件
10、TOP 10 不足的日志记录和监控

0x01 注入

将不受信任的数据作为命令或查询的一部分发送到解析器时,会产生诸如 SQL 注入、NoSQL 注入、OS 注入和 LDAP 注入的注入缺陷,攻击者的恶意数据可以诱使解析器在没有适当授权的情况下执行非预期命令或访问数据。

威胁来源

注入漏洞十分普遍,且很容易通过代码审查发现,扫描器和模糊测试工具都可以帮助攻击者找到这些漏洞。而且几乎任何数据源都能成为注入载体,包括环境变量、所有类型的用户、参数、外部和内部 Web 服务,当攻击者可以向解释器发送恶意数据时,就会产生注入漏洞。

影响

注入可能导致数据丢失、破坏或泄露给无授权方,使服务器缺乏可审计性或是拒绝服务,有时甚至能导致服务器被完全接管。

防范

防止注入漏洞的核心是要将数据与命令语句、查询语句分隔开,代码审计是最有效的检测应用程序的注入风险的办法之一,其次可以:

  • 使用安全的 API,避免完全使用解释器;
  • 在服务器使用“白名单”规范化用户输入;
  • 使用解释器转义语法转义特殊字符;
  • 在查询中使用 LIMIT 和其他 SQL 控件,以防止在 SQL 注入时大量泄露记录。

0x02 失效的身份认证

通过不正确地使用应用程序的身份认证和会话管理功能,导致攻击者能够破译密码、密钥或会话令牌,或者利用其它开发缺陷来暂时性或永久性冒充其他用户的身份。

威胁来源

攻击者可以获得数百万的有效用户名和密码组合,包括大量溢出的凭据、默认的管理帐户列表、自动的暴力破解和字典攻击工具,以及高级的 GPU 破解工具,攻击者也可以结合社会工程学,发现失效的身份验证并利用。

影响

攻击者只需要访问几个帐户,或者只需要一个管理员帐户就可以破坏我们的系统。根据应用程序领域的不同,可能会导致放任洗钱、社会安全欺诈、用户身份盗窃、泄露法律高度保护的敏感信息等。

防范

  • 在可能的情况下,实现多因素身份验证 ;
  • 不要使用默认的凭证,特别是管理员用户;
  • 执行弱密码检测,使密码长度、复杂性符合安全策略;
  • 限制或逐渐延迟失败的登录尝试,记录所有失败信息;
  • 使用服务器端内置的会话管理器,在登录后生成高度复杂的新随机会话 ID,会话 ID 不能在 URL 中;
  • 当用户不活跃时,及时使用户会话或认证令牌失效。

0x03 敏感数据泄漏

许多 Web 应用程序和 API 都无法正确保护敏感数据,为抵御攻击者我们需要对敏感数据加密,这些数据包括传输过程中的数据、存储的数据以及浏览器交互过程中的数据。

威胁来源

攻击者不是直接攻击密码,而是在传输过程中或从客户端(如浏览器)窃取密钥,发起中间人攻击,或从服务器端窃取明文数据。最常见的漏洞是对敏感信息不进行加密,或者在数据加密过程中使用不安全的密钥生成和管理机制,以及使用弱加密算法、弱协议和弱密码。

影响

敏感数据泄漏,通常包括很多个人敏感信息(PII),如:医疗记录、认证凭证、个人隐私、信用卡信息等,攻击者可以通过窃取或修改未加密的数据实施信用卡诈骗、身份盗窃或其他犯罪行为。

防范

对一些需要加密的敏感数据,至少应该做到以下几点:

  • 对系统处理、存储或传输的数据进行分类,并根据分类进行访问控制;
  • 熟悉与敏感数据保护相关的法律和条例,并根据每项法规要求保护敏感数据;
  • 对于没必要存放的、重要的敏感数据,应当尽快清除;
  • 确保存储的所有敏感数据被加密;
  • 确保传输过程中的数据被加密,如使用 HSTS(使用HTTP严格安全传输协议);
  • 确保使用了专用的算法存储密码,如使用 scrypt、bcrypt 或者 PBKDF2;
  • 确保使用了最新的、强大的标准算法或密码、参数、协议和密匙,并且保证密钥管理安全;
  • 禁止缓存对包含敏感数据的响应;
  • 单独验证每个安全配置项的有效性。

0x04 XML 外部实体

许多较早的或配置错误的 XML 处理器使用了 XML 文件中的外部实体引用,攻击者可以利用外部实体窃取使用 URI 文件处理器的内部文件和共享文件、监听内部扫描端口、执行远程代码和实施拒绝服务攻击。

威胁来源

大量 XXE 缺陷已经被发现并被公开,这些缺陷包括嵌入式设备的 XXE 缺陷、深嵌套的依赖项或集成,如果攻击者可以上传 XML 文档或者在 XML 文档中添加恶意内容,他们就能够攻击含有缺陷的 XML 处理器。

影响

当允许引用外部实体时,通过构造恶意内容,可导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站、发起拒绝服务攻击等危害。

防范

对开发人员进行安全培训是识别和减少 XXE 缺陷的关键,此外,防止 XXE 缺陷还需要:

  • 尽可能使用简单的数据格式(如 JSON),避免对敏感数据进行序列化;
  • 及时修复或更新应用程序和底层操作系统使用的所有 XML 处理器和库;
  • 在应用程序的所有 XML 解析器中禁用 XML 外部实体和 DTD 进程;
  • 在服务端使用“白名单”对输入进行验证、过滤和清理,以防止在XML文档、标题或节点中出现恶意数据;
  • 验证 XML 或 XSL 文件上传功能是否使用 XSD 或其他方法来验证上传的 XML 文件;
  • 使用 SAST 工具检测源代码中的 XXE 漏洞;
  • 使用虚拟修复程序、API 安全网关或 WAF 来检测、监控和防止 XXE 攻击。

0x05 失效的访问控制

由于未对通过身份验证的用户实施恰当的访问控制,攻击者可以利用这些缺陷访问未经授权的功能或数据,例如:访问其他用户的帐户、查看敏感文件、修改其他用户的数据、更改访问权限等。

威胁来源

对访问控制的利用是渗透测试人员的一项核心技能,使用 SAST(静态应用程序安全性测试) 工具和 DAST(动态应用程序安全性测试)工具可以检测到访问控制的缺失,但不能验证其功能是否正常。

影响

攻击者可以冒充用户、管理员或拥有特权的用户,或者创建、 访问、更新或删除任何记录。

防范

访问控制只有在受信服务端代码或没有服务器的 API 中有效, 这样攻击者才无法修改访问控制检查或元数据。

  • 除公有资源外,其他资源默认情况下拒绝访问;
  • 使用一次性的访问控制机制,并在整个应用程序中不断重用它们,包括最小化 CORS 使用;
  • 禁用 Web 服务器目录列表,并确保文件元数据不存在于 Web 的根目录中;
  • 记录失败的访问请求,并在适当时向管理员告警;
  • 对 API 和服务器的访问进行速率限制,以最大限度地降低自动化攻击工具的危害;
  • 当用户注销后,服务器上的 JWT(JSON Web Token)令牌应失效。

0x06 安全配置错误

安全配置错误是最常见的安全问题,这通常是由于不安全的默认配置、不完整的临时配置、开源云存储、错误的 HTTP 头部配置以及包含敏感信息的详细错误信息所造成的。因此,我们不仅需要对所有的操作系统、框架、库和应用程序进行安全配置,而且必须及时修补和升级它们。

威胁来源

安全配置错误可以发生在一个应用程序的任何层面,包括网络服务、平台、Web 服务器、应用服务器、数据库、框架、自定义代码和预安装的虚拟机、容器和存储等。通常,攻击者能够通过未修复的漏洞、默认账户、不再使用的页面、未受保护的文件和目录等来取得对系统的未授权访问或了解。

影响

这些漏洞使攻击者能访问一些未授权的系统数据或功能,严重的时候可能会导致系统被完全攻破。

防范

应实施安全的应用部署过程,包括:

  • 搭建最小化平台,该平台不包含任何不必要的功能、组件、文档和示例,移除或不安装不适用的功能和框架;
  • 检查和修复安全配置项来适应最新的安全说明、更新和补丁,并将其作为更新管理过程的一部分,特别注意云存储权限;
  • 使用能在组件和用户间提供有效的分离和安全性的分段应用程序架构,包括:分段、容器化和云安全组;
  • 使用 HTTP 安全头部向客户端发送指令;
  • 在所有环境中能够进行正确并自动化的安全配置。

0x07 XSS 跨站脚本

当应用程序的新网页中包含不受信任的、未经恰当验证或转义的数据时,或者使用可以创建 HTML 或 JavaScript 的浏览器 API 更新现有的网页时,就会出现 XSS 缺陷。XSS 让攻击者能够在受害者的浏览器中执行脚本、劫持用户会话、破坏网站或将用户重定向到恶意站点。

威胁来源

XSS 是 OWASP Top10 中第二普遍的安全问题,存在于近三分之二的应用中,自动化工具能够检测并利用所有三种形式的 XSS ,并且存在方便攻击者利用漏洞的框架。

影响

反射型 XSS 和 DOM 型 XSS 的影响是中等的,而存储型 XSS 的影响更为严重,如可以在受害者的浏览器上执行远程代码、窃取凭证和会话记录或传递恶意软件等。

防范

防止 XSS 需要将不可信数据与动态的浏览器内容区分开:

  • 使用从设计上就会自动编码来解决 XSS 问题的框架,如 Ruby 3.0 或 React JS;
  • 为了避免反射式或存储式的 XSS 漏洞,最好的办法是根据 HTML 输出的上下文对所有不可信的 HTTP 请求数据进行恰当的转义;
  • 在客户端修改浏览器文档时,为了避免 DOM XSS 攻击,最好的选择是实施上下文敏感数据编码;
  • 对抗 XSS 的深度防御策略是使用 CSP 内容安全策略。

0x08 不安全的反序列化

不安全的反序列化会导致远程代码执行,即使有些反序列化缺陷不会导致远程代码执行,攻击者也可以利用它们来执行重放攻击、注入攻击和特权升级攻击等。

威胁来源

对反序列化的利用比较困难,因为在不更改或调整底层可被利用代码的情况下,现成的反序列化漏洞很难被使用。有些工具可以被用于发现反序列化缺陷,但仍需要人工帮助来验证发现的问题。

影响

反序列化缺陷的影响不能被低估,它可能导致远程代码执行攻击,这是可能发生的最严重的攻击之一。

防范

唯一安全的架构模式是不接受来自不受信源的序列化对象,或使用只允许原始数据类型的序列化媒体,其次可以:

  • 执行完整性检查,如对任何序列化对象进行数字签名,以防止恶意用户创建或篡改数据;
  • 在创建对象之前强制执行严格的类型约束,但是绕过这种技术的方法已经被证明,完全依赖于它并不可取;
  • 如果可能,隔离运行那些在低特权环境中反序列化的代码;
  • 记录反序列化的例外情况和失败信息,如传入的类型不是预期的类型,或者反序列处理引发的例外情况;
  • 限制或监视来自于容器或服务器传入和传出的反序列化网络连接;
  • 监控反序列化,当用户持续进行反序列化时,对用户进行警告。

0x09 使用含有已知漏洞的组件

如果应用程序中含有已知漏洞的组件,则有可能被攻击者利用,会造成严重的数据丢失或服务器接管。

威胁来源

很多时候组件都是以与应用相同的权限运行的,这使得组件里的缺陷可能导致各式各样的问题,这些缺陷可能是偶然的,比如编码错误,也可能是蓄意的,比如软件后门。对一些漏洞而言很容易找到其利用程序,对于某些漏洞则需要定制开发。

影响

虽然对于一些已知的漏洞其影响很小,但目前很多严重的安全事件都是利用组件中的已知漏洞,根据你所要保护的资产,此类风险等级可能会很高。

防范

应该制定一个补丁管理流程:

  • 移除不使用的依赖、不需要的功能、组件、文件和文档;
  • 利用工具持续记录客户端和服务端所依赖库的版本信息,订阅关于所使用组件安全漏洞的警告邮件,并监控如 CVE 和 NVD 等是否发布已使用组件的漏洞信息,可以使用软件分析工具来自动完成此功能;
  • 仅从官方渠道安全的获取组件,并使用签名机制来降低组件被篡改或加入恶意漏洞的风险;
  • 监控那些不再维护或者不发布安全补丁的库和组件;
  • 如果不能打补丁,可以考虑部署虚拟补丁来监控、检测或保护。
  • 每个组织都应该制定相应的计划,对整个软件生命周期进行监控、评审、升级或更改配置。

0x10 不足的日志记录和监控

不足的日志记录和监控,以及事件响应缺失或无效的集成,使攻击者能够进一步攻击系统、保持持续性或转向更多系统,以及篡改、提取或销毁数据。大多数缺陷研究显示,缺陷被检测出的时间在 200 天之后,且通常是外部检测方检测到的,而不是通过内部流程或监控检测。

威胁来源

对不足的日志记录和监控的利用几乎是每一个重大安全事件的温床,攻击者依靠监控的不足和响应的不及时来达成他们的目标而不被知晓。

影响

多数成功的攻击往往从漏洞探测开始,允许这种探测将会大大提高攻击者攻击成功的可能性。

防范

根据应用程序存储或处理的数据的风险:

  • 确保所有登录、访问控制失败、输入验证失败都能被记录到日志中去,并保留足够的用户上下文信息,以识别可疑账户或恶意帐户,并为后期取证预留足够的信息;
  • 确保日志以一种能被集中管理的形式生成;
  • 确保高额交易有完整性控制的审计信息,以防止被篡改或删除;
  • 建立有效的监控和告警机制,使可疑活动在可接受的时间内被即使发现和应对;
  • 建立或采取一个应急响应机制和恢复计划。

参考文章:OWASP Top 10 2017.pdf


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!