在本节中,将解释什么是点击劫持,描述点击劫持攻击的常见示例,并讨论如何防范这些攻击。
什么是点击劫持?
点击劫持是一种基于界面的攻击,通过点击诱饵网站中的内容,诱骗用户点击隐藏网站上的可操作内容。
来看如下示例:
网络用户访问诱饵网站(可能是电子邮件提供的链接)并单击按钮赢取奖品。在不知不觉中,他们已被攻击者欺骗按下替代隐藏按钮,这导致影响了在另一个站点上支付账户。
这是点击劫持攻击的一个示例,该技术依赖于包含按钮或隐藏链接的不可见性和可操作性。例如,在iframe中,iframe覆盖在用户预期的诱饵网页内容至上。
这种攻击与CSRF攻击的不同之处在于,用户需要执行诸如单击按钮之类的操作,而CSRF攻击则依赖于在用户不知情或不输入的情况下伪造整个请求。
对CSRF攻击的保护通常是通过使用CSRF令牌来提供的:特定于会话的、一次性使用的数字或随机数。
但是CSRF令牌不会降低点击劫持攻击的影响,因为目标会话是使用从真实网站加载的内容建立的,并且所有请求都发生在域内。CSRF令牌被放入请求中并作为正常会话的一部分传递给服务器。与普通用户会话相比,不同之处在于该过程发生在隐藏的iframe中。
如何构建基本的点击劫持攻击?
点击劫持攻击使用CSS创建和操作图层,攻击者将目标网站合并为覆盖在诱饵网站上的iframe层,使用样式标签和参数的示例如下:
目标网站iframe位于浏览器内,以便目标操作与使用适当宽度和高度位置值的诱饵网站精确重叠。无论屏幕大小、浏览器类型和平台如何,都使用绝对和相对位置值来确保目标网站准确地与诱饵重叠。z-index确定iframe和网站层的堆叠顺序。不透明度值定义为0.0(或接近0.0),以便iframe内容对用户透明。浏览器点击劫持保护可能会应用基于阈值的iframe透明检测(例如Chrome版本76包含此行为,但FireFox没有)。攻击者选择不透明度值,以便在不触发保护行为的情况下达到预期效果。
如何防止点击攻击劫持?
点击劫持是一种浏览器端的行为,其成功与否取决于浏览器功能以及是否符合现行Web标准和最佳实践。
通过定义和传达对使用iframe等组件的约束条件来提供针对点击劫持的服务器端保护。但是,保护的实现取决于浏览器的合规性和这些约束的实施。
服务器端点击劫持保护的两种机制是X-Frame-Options和Content Security Policy(CSP)。
X-Frame-Options保护
X-Frame-Options最初是作为IE8中的非官方响应标头引入的,并在其他浏览器中被迅速采用。
标头为网站所有者提供了对iframe或对象使用的控制权,因此可以使用拒绝指令禁止再框架中包含网页:
或者,可以使用sameorigin指令将框架限制为与网站相同的来源:
或使用allow-from指令访问指定网站:
X-Frame-Options在浏览器中的实现不一致,但是,当与CSP一起作为多层防御策略的一部分正确应用时,它可以提供针对点击劫持攻击的有效保护。
内容安全策略(CSP)
内容安全策略(CSP)是一种检测和预防机制,可缓解XSS和点击劫持等攻击。
CSP通常在Web服务器中实现为以下形式的返回标头:
其中policy是一串以分号分隔的策略指令,CSP向客户端浏览器提供有关允许的Web资源来源的信息,浏览器可以应用这些信息来检测和拦截恶意行为。
推荐的点击劫持保护是将frame-ancestors指令合并到应用程序的内容安全策略中。
frame-ancestors 'none'指令的行为类似于X-Frame-Options拒绝指令。
frame-ancestors 'self'指令大致等同于X-Frame-Options sameorigin指令。
以下CSP仅将同一域列入白名单:
或者,可以将框架限制到命名站点:
为了有效对抗点击劫持和XSS,CSP需要仔细开发、实施和测试,并且应该用作多层防御策略对的一部分。
SQL注入攻击-检索隐藏的数据
HTTP Host头漏洞攻击-概念梳理
原文始发于微信公众号(H君网安白话):点击劫持攻击-概念梳理
- 我的微信
- 微信扫一扫
-
- 我的微信公众号
- 微信扫一扫
-
评论