网络应用程序经常成为恶意攻击者的目标。这些应用程序是可公开访问的,至少它们的登录页面是可公开访问的,而且对于一个意志坚定的攻击者来说,找到存在安全漏洞的网站并不困难。攻击者通常会试图利用网络应用程序中的登录页面安全漏洞来造成过大的负载,并可能导致网站瘫痪。
安全问题页面就是这样一个漏洞,它是许多登录流程的一部分。在这篇文章中,我们将探讨这种情况,研究它成为问题的原因,并就如何降低这种安全风险提供指导。
带有空白安全问题的登录页面
登录页面的安全漏洞比你想象的更常见。在许多网站和应用程序的登录流程中,额外的验证保障措施扩展了传统的用户名/密码步骤,以提高安全性。想象一下两步登录流程。第一步,网站会要求你输入用户名和密码组合。如果您输入正确,第二步就会要求您回答一个安全问题(您在首次设置账户时指定的问题)。
第二步通常由页面视图模板构建,该模板会根据成功完成第一步的用户插入安全问题。整个两步登录流程基本上是这样工作的:
- Alice 访问 https://www.example.com/login 的登录页面。
- Alice 提交用户名和密码组合。
- 服务器验证提交的证书。
- 由于凭据正确无误,服务器会将浏览器重定向到 https://www.example.com/login2 的后续页面,并在请求头中包含一个唯一令牌,以验证 Alice 已通过登录流程的第一步。
- 服务器根据模板渲染该页面,为爱丽丝插入获取的安全问题,以及用于回复的文本输入和提交按钮。
- Alice 提交对安全问题的回复。
- 服务器确认 Alice 正确回答了她的安全问题,然后将她登录。
让我们把注意力集中在流程的第二页,即 https://www.example.com/login2。想象一下,如果你不经过第一步,直接在浏览器中访问该页面,可能会发生什么。
在一种情况下,服务器可能会检查请求头中是否没有有效令牌(这意味着您没有成功通过登录流程的第一步),然后将您重定向到 https://www.example.com/login,以便重新开始。
然而,在另一种可能的情况下,服务器仍然根据模板渲染页面。由于无法为用户找到相应的安全问题(因为没有令牌告诉服务器这是哪个已通过一半身份验证的用户),因此生成的页面可能如下所示:
你会看到一个尴尬的安全问题页面,里面......没有安全问题。这个页面毫无意义。
毫无意义,没错。但无害?别那么肯定
对安全的影响
继续假设,当你(或比你更恶意的人)提交这个 "安全问题 "的答案时,会发生什么?服务器将投入 CPU 周期来评估你的答案。它将处理文本输入,查找请求头中的唯一标记,甚至可能执行数据库查询,试图验证您的答案。
带有空白安全问题的登录页面看似无关紧要(浪费几个 CPU 周期有什么不好?
- 浪费后台处理资源:处理无意义的表单提交会消耗网络和计算资源,还可能消耗数据库资源。
- 潜在的拒绝服务(DoS)攻击:攻击者可以建立僵尸网络,重复发送表单提交,使系统超载。
- 脆弱性增加:一次成功的 DoS 攻击可能导致整个系统瘫痪。
如果攻击者能利用这一弱点浪费服务器的处理能力,就有可能中断合法用户的服务,并使系统受到进一步攻击。
毕竟不是那么无害。
让我们来看看如何解决这样的漏洞,以维护应用程序的安全性和可靠性。
如何防御
在这种特殊情况下,处理 login2 端点的服务器应该验证请求头中是否存在有效的令牌。如果没有适当的令牌,就不应进行进一步处理,而应将用户重定向到登录流程的第一步。这样,就能最大限度地减少用于从容处理请求的资源,就像处理 404 或 401 一样。
不过,这种情况凸显了一个更普遍的安全问题,你应该注意:重复请求会给你的服务器带来过重的负担。当然,利用带有空白安全问题的无意义登录页面,会因使用大量处理资源而使服务器更快地超负荷。但是,僵尸网络也会向你完全正常的用户名/密码登录页面发出过多请求。
要保护网络应用程序免受此类攻击,请采取以下措施:
- 使用网络应用程序防火墙(WAF):WAF 可提供 DoS 保护,并能检测和阻止恶意机器人,从而降低自动攻击的风险。Linode 的应用程序市场包括Haltdos Community WAF,它可以在这方面为您提供帮助。
- 实施速率限制:限制单个 IP 地址在给定时间窗口内的请求数量。有了速率限制,你就能防止攻击者(和机器人)向你的系统发出大量请求。
- 启用监控和警报:持续监控工具可以监视可疑的请求模式,实时提醒您潜在的攻击。如果能立即得到通知,您就能迅速做出反应并缓解问题。
总结
我们已经研究过登录页面安全问题空白的情况。乍一看,这是一个奇怪的边缘页面,最终毫无意义。但攻击者可以利用这样的漏洞浪费你的资源,并有可能导致你的系统瘫痪。安全问题页面只是此类漏洞的一个例子。
如果您在设计应用程序时考虑到安全性并采用安全的编码实践,那么您就有了一个良好的开端。但是,您的应用程序还需要在系统和基础架构层面实施安全措施,例如使用 WAF、速率限制、持续监控和警报。有了适当的安全措施,您就可以大大降低成为此类攻击目标的风险。
有关保护应用程序安全的更多指导和提示,请查看Linode 文档及其丰富的安全相关指南库。在那里,您将找到有用的资源,指导您如何保护系统和用户。
注释