什么是点击劫持?
什么是点击劫持漏洞,它如何影响您?
“UI欺骗”是“点击劫持”的一个子类别。点击劫持是一种有害行为,它会诱骗网页用户参与与其预期处理的内容不同的活动。在大多数情况下,点击劫持攻击只需点击网页元素即可完成。当用户被诱骗点击隐藏网页上的某个元素或伪装成其他元素的元素时,就会发生点击劫持攻击。简而言之,任何攻击中用户错误点击了意外网页元素都被称为点击劫持。
您可以说,我们在网页上呈现的任何内容都是另一个页面,它半透明地叠加在可见页面之上。“点击劫持”一词用来描述在可信网站上叠加恶意内容或在网页上叠加透明页面的行为。
当受害者与看似无害的网站互动时,这种攻击(可以单独使用或与其他攻击结合使用)可能会发送不需要的命令或泄露个人信息。
点击劫持攻击在实践中的样子
最常见的点击劫持方法是在浏览器窗口中向用户显示两个叠加的网页的组合,以及一些诱导用户点击特定位置的诱饵。攻击者首先将易受攻击的目标网站加载到iframe中,将其设置为完全透明,并将其放置在旨在诱导点击特定位置的恶意网页前面。
考虑一个出现在弹出窗口中的有趣的基于浏览器的游戏,并为获胜者提供奖励或令人兴奋的内容。该游戏可以显示为背景页面,而目标在线应用程序(例如银行或电子商务网站)则以透明框架叠加在上面。攻击者设计游戏页面,使可点击的物品与目标网站上的选定控件位于同一位置。当用户尝试点击游戏中的物品时,他们会触碰易受攻击网页上的不可见按钮,这可能会产生重大影响。根据网站的不同,受害者可能会无意中给出五星评价、点赞可疑的Facebook页面、授予Facebook应用程序权限、通过SSO技术登录或使用一键购物将昂贵的商品转移给攻击者。
该攻击与拖放策略结合使用时,可能会诱骗用户填写网络表单中的文本字段或验证码。在这种情况下,由于与游戏的精心策划的交互,用户会无意中将内容从不可见的页面拖动并将其放入表单字段。
点击劫持攻击类型
点击劫持是针对一组攻击途径和策略的综合名称,这些途径和策略统称为UI欺骗攻击。根据叠加材料的使用,攻击可分为两类。基于叠加的攻击最为普遍,最常见的技术策略是将网站嵌入到不可见的iframe中。
有几种不同类型的基于叠加的点击劫持:
完全透明叠加
这种方法被用于最早的一些高调点击劫持攻击中,这些攻击诱骗用户通过Adobe Flash插件设置页面允许Flash动画访问计算机的摄像头和麦克风。
裁剪
在这种技术中,攻击者只选择透明页面上的几个控件来叠加在可见页面上。根据攻击的目标,这可能包括隐藏带有不可见超链接的按钮以使其执行与预期不同的操作、用误导性指令替换文本标签或用误导性内容覆盖整个合法页面,只留下一个原始按钮暴露在外。
隐藏叠加
这是第一个被证明的点击劫持方法。攻击者将包含恶意内容的1x1像素iframe放置在鼠标指针后面,使其隐藏起来,但会注册受感染页面上的任何点击。
合法页面显示在前台,完全覆盖后面的恶意页面,点击事件被丢弃。攻击者将顶部的CSS pointer-events值更改为none,强制点击事件“穿过”合法页面叠加层,只在下面的恶意页面上注册。
快速内容替换
不透明叠加层覆盖目标控件,这些控件会在一瞬间被移除以注册点击,然后再次被替换。这要求攻击者预测受害者点击的确切时间,但如果您了解一些计算机用户习惯和心理学,这比听起来容易。
即使点击劫持漏洞不用于植入叠加层,攻击者也有多种方法可以诱导用户点击意外控件:
滚动
攻击者将真实的对话框或其他网页元素部分地从屏幕上滑出,对用户隐藏一些控件。例如,警告对话框可能会滑出屏幕,只留下“确定”和“取消”按钮可见,攻击者放置无害的提示文本,使其看起来像是按钮适用于此消息而不是警告。
重新定位
为了执行此攻击,攻击者必须迅速将可信对话框(或其他UI元素)重新定位到光标下方。同时,受害者忙于点击其他看似无害的元素。如果成功,用户会在意识到任何变化之前无意识地点击替换的控件。为了防止检测,攻击者可能会在点击后迅速将对话框重新定位回原位,类似于快速内容替换。
拖放
虽然大多数点击劫持攻击都集中在拦截点击上,但拖放漏洞可用于诱骗用户执行某些操作,例如通过将看不见的文本拖动到不可见的文本字段中填写在线表单或向攻击者提供敏感的个人信息。
您如何避免成为点击劫持攻击的受害者?
有两种方法可以避免点击劫持攻击:
1. 客户端保护 2. 服务器端安全 (X-Frame-Options) 客户端安全
框架破坏
框架破坏是保护网页免受点击劫持攻击最常见的客户端策略。此方法防止网站在其加载到框架中时工作。
在这种方法中,用户的浏览器JavaScript用于防止自身嵌入到iframe中并退出iframe。
页面加载时,此JS代码会检查页面的域是否与浏览器的域匹配。如果匹配,则没有问题;如果不匹配,它将退出框架并在浏览器中加载站点,而不是尝试在Iframe中加载它。
X-Frame-Options
微软已经构建了一个基于头的保护系统,作为客户端框架破坏代码的替代方案。
服务器在HTTP回复中提供新的“X-FRAME-OPTIONS”头,用于指示哪些网页不应被框架化。尽管“X-FRAME-OPTIONS”是一个合理的解决方案,已被大多数浏览器实现,但这种策略有一些明显的缺点,可能会导致在任何情况下利用点击劫持漏洞。
X-Frame-Options头是解决方案的一部分。开发人员可以使用它来防止其网站受到点击劫持攻击。其值可以调整为以下任何一个,以指示是否允许浏览器在Iframe中显示网站
DENY X-FRAME-OPTIONS:如果使用DENY,则任何站点都无法在框架中加载页面。
SAMEORIGIN X-FRAME-OPTIONS:如果您提供SAMEORIGIN,只要放置它的站点与提供页面的站点相同,您仍然可以在框架中使用该页面。
ALLOW-FROM URI X-FRAME-OPTIONS:如果您指定此项,则只有提供的URI才能用于在框架中显示站点。