共计 3538 个字符,预计需要花费 9 分钟才能阅读完成。
Clickjacking (UI redressing)
在本节中,咱们将解释什么是 clickjacking 点击劫持,并形容常见的点击劫持攻打示例,以及探讨如何进攻这些攻打。
什么是点击劫持
点击劫持是一种基于界面的攻打,通过诱导用户点击钓鱼网站中的被暗藏了的可操作的危险内容。
例如:某个用户被诱导拜访了一个钓鱼网站(可能是点击了电子邮件中的链接),而后点击了一个赢取大奖的按钮。理论状况则是,攻击者在这个赢取大奖的按钮上面暗藏了另一个网站上向其余账户进行领取的按钮,而后果就是用户被诱骗进行了领取。这就是一个点击劫持攻打的例子。这项技术实际上就是通过 iframe
合并两个页面,实在操作的页面被暗藏,而诱骗用户点击的页面则显示进去。点击劫持攻打与 CSRF
攻打的不同之处在于,点击劫持须要用户执行某种操作,比方点击按钮,而 CSRF
则是在用户不知情或者没有输出的状况下伪造整个申请。
针对 CSRF
攻打的进攻措施通常是应用 CSRF token
(针对特定会话、一次性应用的随机数)。而点击劫持无奈则通过 CSRF token
缓解攻打,因为指标会话是在实在网站加载的内容中建设的,并且所有申请均在域内产生。CSRF token
也会被放入申请中,并作为失常行为的一部分传递给服务器,与一般会话相比,差别就在于该过程产生在暗藏的 iframe
中。
如何结构一个根本的点击劫持攻打
点击劫持攻打应用 CSS 创立和操作图层。攻击者将指标网站通过 iframe
嵌入并暗藏。应用款式标签和参数的示例如下:
<head>
<style>
#target_website {
position:relative;
width:128px;
height:128px;
opacity:0.00001;
z-index:2;
}
#decoy_website {
position:absolute;
width:300px;
height:400px;
z-index:1;
}
</style>
</head>
...
<body>
<div id="decoy_website">
...decoy web content here...
</div>
<iframe id="target_website" src="https://vulnerable-website.com">
</iframe>
</body>
指标网站 iframe
被定位在浏览器中,应用适当的宽度和高度地位值将指标动作与钓饵网站准确重叠。无论屏幕大小,浏览器类型和平台如何,相对地位值和绝对地位值均用于确保指标网站精确地与钓饵重叠。z-index
决定了 iframe
和网站图层的重叠程序。透明度被设置为零,因而 iframe
内容对用户是通明的。浏览器可能会基于 iframe
透明度进行阈值判断从而主动进行点击劫持爱护(例如,Chrome 76 蕴含此行为,但 Firefox 没有),但攻击者依然能够抉择适当的透明度值,以便在不触发此爱护行为的状况下取得所需的成果。
预填写输出表单
一些须要表单填写和提交的网站容许在提交之前应用 GET 参数事后填充表单输出。因为 GET 参数在 URL 中,那么攻击者能够间接批改指标 URL 的值,并将通明的“提交”按钮笼罩在钓饵网站上。
Frame 拦挡脚本
只有网站能够被 frame
,那么点击劫持就有可能产生。因而,预防性技术的根底就是限度网站 frame
的能力。比拟常见的客户端保护措施就是应用 web 浏览器的 frame
拦挡或清理脚本,比方浏览器的插件或扩大程序,这些脚本通常是精心设计的,以便执行以下局部或全副行为:
- 查看并强制以后窗口是主窗口或顶部窗口
- 使所有
frame
可见。 - 阻止点击可不见的
frame
。 - 拦挡并标记对用户的潜在点击劫持攻打。
Frame 拦挡技术个别特定于浏览器和平台,且因为 HTML 的灵活性,它们通常也能够被攻击者躲避。因为这些脚本也是 JavaScript,浏览器的平安设置也可能会阻止它们的运行,甚至浏览器间接不反对 JavaScript。攻击者也能够应用 HTML5 iframe
的 sandbox
属性去躲避 frame 拦挡。当 iframe
的 sandbox
设置为 allow-forms
或 allow-scripts
,且 allow-top-navigation
被疏忽时,frame 拦挡脚本可能就不起作用了,因为 iframe 无奈查看它是否是顶部窗口:
<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms"></iframe>
当 iframe
的 allow-forms
和 allow-scripts
被设置,且 top-level 导航被禁用,这会克制 frame 拦挡行为,同时容许指标站内的性能。
联合应用点击劫持与 DOM XSS 攻打
到目前为止,咱们把点击劫持看作是一种独立的攻打。从历史上看,点击劫持被用来执行诸如在 Facebook 页面上减少“点赞”之类的行为。然而,当点击劫持被用作另一种攻打的载体,如 DOM XSS 攻打,能力施展其真正的破坏性。假如攻击者首先发现了 XSS 攻打的破绽,则施行这种组合攻打就很简略了,只须要将 iframe
的指标 URL 联合 XSS,以使用户点击按钮或链接,从而执行 DOM XSS 攻打。
多步骤点击劫持
攻击者操作指标网站的输出可能须要执行多个操作。例如,攻击者可能心愿诱骗用户从批发网站购买商品,而在下单之前还须要将商品增加到购物篮中。为了实现这些操作,攻击者可能应用多个视图或 iframe
,这也须要相当的精确性,攻击者必须十分小心。
如何进攻点击劫持攻打
咱们在上文中曾经探讨了一种浏览器端的预防机制,即 frame 拦挡脚本。然而,攻击者通常也很容易绕过这种进攻。因而,服务端驱动的协定被设计了进去,以限度浏览器 iframe
的应用并加重点击劫持的危险。
点击劫持是一种浏览器端的行为,它的胜利与否取决于浏览器的性能以及是否恪守现行 web 规范和最佳实际。服务端的进攻措施就是定义 iframe
组件应用的束缚,然而,其实现依然取决于浏览器是否恪守并强制执行这些束缚。服务端针对点击劫持的两种爱护机制别离是 X-Frame-Options
和 Content Security Policy
。
X-Frame-Options
X-Frame-Options
最后由 IE8 作为非官方的响应头引入,随后也在其余浏览器中被迅速采纳。X-Frame-Options
头为网站所有者提供了对 iframe
应用的管制(就是说第三方网站不能随便的应用 iframe
嵌入你管制的网站),比方你能够应用 deny
间接回绝所有 iframe
援用你的网站:
X-Frame-Options: deny
或者应用 sameorigin
限度为只有同源网站能够援用:
X-Frame-Options: sameorigin
或者应用 allow-from
指定白名单:
X-Frame-Options: allow-from https://normal-website.com
X-Frame-Options
在不同浏览器中的实现并不统一(比方,Chrome 76 或 Safari 12 不反对 allow-from
)。然而,作为多层进攻策略中的一部分,其与 Content Security Policy
联合应用时,能够无效地避免点击劫持攻打。
Content Security Policy
Content Security Policy
(CSP
) 内容安全策略是一种检测和预防机制,能够缓解 XSS 和点击劫持等攻打。CSP
通常是由 web 服务作为响应头返回,格局为:
Content-Security-Policy: policy
其中的 policy
是一个由分号分隔的策略指令字符串。CSP
向客户端浏览器提供无关容许的 Web 资源起源的信息,浏览器能够将这些资源利用于检测和拦挡歹意行为。
无关点击劫持的进攻,倡议在 Content-Security-Policy
中减少 frame-ancestors
策略。
frame-ancestors 'none'
相似于X-Frame-Options: deny
,示意回绝所有 iframe 援用。frame-ancestors 'self'
相似于X-Frame-Options: sameorigin
,示意只容许同源援用。
示例:
Content-Security-Policy: frame-ancestors 'self';
或者指定网站白名单:
Content-Security-Policy: frame-ancestors normal-website.com;
为了无效地进攻点击劫持和 XSS 攻打,CSP
须要进行认真的开发、施行和测试,并且应该作为多层进攻策略中的一部分应用。
继续更新中,点击即可查看 Web 平安系列文章。