3.常见的Web安全漏洞
Web安全漏洞是指Web应用的软件、协议或前后端逻辑处理设计存在缺陷,导致攻击者能够在未授权的情况下进行访问或破坏。讲到Web安全漏洞,就不得不提到OWASP TOP 10。开放式Web应用程序安全项目(Open Web Application Security Project,OWASP)是一个开源的、非营利的组织,主要提供有关Web应用程序的实际可行、公正透明、有社会效益的信息,包括制定标准、提供测试或防护工具及相关技术文件等,其目的是研究Web安全,主要协助个人、企业和机构来发现和使用可信赖的软件以更好地应对安全风险。
OWASP组织大约每隔3年就会公布经统计分析的“十大安全漏洞列表”,即OWASP TOP 10。OWASP TOP 10是一个被广泛采用的“标准”文档,被用来参考确定网络安全漏洞的严重程度,目前被许多漏洞奖励平台和企业安全团队用来评估错误报告。OWASP TOP 10总结了近3年Web应用程序最可能、最常见、最危险的十大安全漏洞,可以帮助IT公司和开发团队规范应用程序开发和测试流程,进一步提高Web产品的安全性。
截至本书完稿,OWASP TOP 10最新发布时间为2021年9月,具体内容如表1.1所示。
表1.1 2021年OWASP TOP 10榜单
下面分别介绍这些常见的Web安全漏洞,为后续章节渗透测试的目标提供参考。
(1)访问控制崩溃
访问控制崩溃是指对经过身份验证的用户的行为实施限制时所存在的漏洞。当限制没有正确执行时,攻击者可以利用这个弱点来获得对系统功能和个人敏感数据未经授权的管理访问,甚至可以创建、修改或删除数据。因此,这类漏洞通常会导致未经授权的信息泄露、修改或破坏所有数据、执行超出用户限制的业务功能。
(2)加密失败
加密失败强调与密码学相关的故障,这些故障通常会导致敏感数据暴露或系统受损。它包括访问、修改或窃取未受保护的静止或传输中的数据,如密码、个人信息、健康记录、信用卡号等。
(3)注入
注入是指攻击者通过输入恶意代码到应用程序迫使其执行命令以访问数据或整个应用程序。常见的注入攻击类型有SQL注入、XSS攻击、NoSQL注入、操作系统(Operating System,OS)注入、轻型目录访问协议(Lightweight Directory Access Protocol,LDAP)注入和表达式语言(Expression Language,EL)或对象图导航语言(Object Graph Navigation Language,OGNL)注入。注入攻击可以会导致数据丢失或被破坏、缺乏可审计性或拒绝服务,甚至可导致攻击者完全接管主机。
(4)不安全的设计
不安全的设计是2021年的一个新增类别,重点关注与设计缺陷有关的风险。它是一个广泛的类别,代表许多不同的弱点,具体表现为“缺失或无效的控制设计”。相对应的安全设计是指一种文化和方法,它会不断评估威胁并确保代码经过稳健设计和测试,以防止已知的攻击方法。安全设计需要安全的开发生命周期、某种形式的安全设计模式或铺砌道路组件库或工具,以及威胁建模。因此,如果想要减少此类漏洞,就需要更多地使用威胁建模、安全设计的模式和原则,并引用其架构。
(5)安全配置不当
安全配置不当是常见的安全问题,通常是由于不安全的默认配置、不完整的临时配置、未修补的缺陷、未受保护的文件和目录、开源云存储、错误的超文本传送协议(Hypertext Transfer Protocol,HTTP)标头配置及包含敏感信息的详细错误信息所造成的。因此,我们不仅需要对所有的操作系统、框架、库和应用程序进行安全配置,而且必须及时修补和升级它们。
(6)易受攻击和过时的组件
易受攻击和过时的组件主要包括不知道所使用的所有组件的版本,软件易受攻击、不受支持或已过期,不能定期扫描漏洞,没有及时修复或升级底层平台、框架和依赖项,开发人员不进行测试更新、升级或修补库的兼容性,以及不保护组件的配置等。
(7)身份识别和认证失败
身份识别和认证失败是指与识别失败更多相关的漏洞。通常,通过错误使用应用程序的身份认证和会话管理功能,攻击者通过非法使用应用程序的身份认证和会话管理功能,破译密码、密钥或会话令牌,或者利用其他开发缺陷来暂时性或永久性冒充其他用户的身份。因此,确认用户的身份、身份验证和会话管理对于防止与身份验证相关的攻击至关重要。
(8)软件和数据完整性失败
软件和数据完整性失败是2021年的一个新增类别,专注于在不验证完整性的情况下做出与软件更新、关键数据等相关的假设。软件和数据完整性失败与不能防止完整性违规的代码和基础设施有关。例如,在对象或数据被编码或序列化为攻击者可以看到和修改的结构时,就会很容易受到不安全的反序列化的影响。
(9)安全日志记录和监控失败
安全日志记录和监控失败旨在帮助检测、升级和响应主动违规行为。如果没有日志记录和监控,就无法检测到漏洞。但是很多时候会发生日志记录、检测、监控和主动响应不足等情况。若其他用户或攻击者看到日志记录和警报事件,就很容易导致信息泄露。
(10)服务器端请求伪造
服务器端请求伪造也是一个新增类别,其英文全称为Server-Side Request Forgery,缩写为SSRF,一般指Web应用程序在未验证用户提供的统一资源定位符(Uniform Resource Locator,URL)的情况下获取远程资源时出现的缺陷。它允许攻击者强制应用程序将“精心设计”的请求发送到意外目的地,即使受到防火墙、虚拟专用网络(Virtual Private Network,VPN)或其他类型的网络访问控制列表(Access Control List,ACL)的保护。由于云服务和架构的复杂性,SSRF的严重性也越来越高。