小心免费 iPhone 优惠:了解点击劫持的风险
面对免费 iPhone 优惠的诱惑,很多人难以抗拒。然而,需要警惕的是,你的每一次点击都可能隐藏着陷阱,稍有不慎就会带来灾难性的后果。
点击劫持,也被称为用户界面混淆,是一种通过在链接上覆盖一层透明的伪装层,诱导用户执行非本意的操作的网络攻击手段。这种攻击方式之所以能得逞,就在于它巧妙地利用了用户界面的迷惑性。
现代人习惯于在社交网络上保持登录状态,享受便捷的体验。然而,这种便利也给攻击者提供了可乘之机。他们可以利用这种习惯,在用户不知情的情况下,强迫用户点赞或关注某些内容。例如,网络罪犯可以在自己的网页上设置一个极具诱惑力的按钮,如“免费 iPhone,限时抢购”,然后在该按钮上覆盖一个带有社交网络页面的透明框架。这样一来,“点赞”或“分享”按钮就巧妙地隐藏在了“免费 iPhone”按钮的下方。
这个简单的点击劫持技巧可以轻而易举地让 Facebook 用户在不知情的情况下加入某些群组或关注粉丝页面。
虽然上述场景看似无害,受害者仅仅是被加入了一些社交网络群组。然而,如果攻击者稍加利用,完全可以通过相同的技术来判断用户是否登录了银行账户。在这种情况下,用户就可能在无意中点击了一个将资金转移到攻击者账户的按钮。更可怕的是,这种恶意行为难以追踪,因为用户是合法登录银行账户的,并且“自愿”点击了转账按钮。
由于大多数点击劫持技术都依赖于社会工程学,因此社交网络成为了理想的攻击平台。
下面,让我们一起深入了解一下这些攻击是如何进行的。
Twitter 上的点击劫持案例
大约十年前,Twitter 社交网络曾遭受一次大规模的点击劫持攻击。该攻击通过一条诱导用户点击链接的消息迅速传播,利用了人们天生的好奇心。
这条推文以“请勿点击”开头,后面附带一个链接,在数千个 Twitter 账户中迅速传播。当用户点击链接,并进一步点击目标页面上看似无害的按钮时,他们的账户就会自动发送一条包含“请勿点击”字样和恶意链接的推文。
Twitter 工程师在攻击开始后不久就修复了该漏洞。尽管攻击本身无害,却起到了警示作用,让人们认识到 Twitter 点击劫持计划中隐藏的风险。恶意链接会将用户重定向到一个带有隐藏 iframe 的网页。该框架内有一个不可见的按钮,用于从受害者的账户发送恶意推文。
Facebook 上的点击劫持案例
移动 Facebook 应用的用户曾面临一个漏洞,该漏洞允许垃圾邮件发送者在用户不知情的情况下,在其时间线上发布可点击的内容。安全专家在分析垃圾邮件活动时发现了这个漏洞。这位专家发现,他的一些联系人发布了指向带有有趣图片的页面的链接。在看到图片之前,用户需要点击一个成年人声明。
用户不知道的是,该声明隐藏在一个不可见的框架之下。
当用户接受声明时,他们会被重定向到一个带有有趣图片的页面。但与此同时,该链接也已被发布到用户的 Facebook 时间线上。之所以会发生这种情况,是因为安卓版 Facebook 应用中的 Web 浏览器组件与框架选项标头不兼容,从而允许恶意框架进行覆盖。
Facebook 官方并未将此问题视为漏洞,因为它并未影响用户账户的完整性。因此,该漏洞是否会被修复还是未知数。
其他社交网络上的点击劫持
点击劫持并非 Twitter 和 Facebook 的专利。其他不太流行的社交网络和博客平台也存在允许点击劫持的漏洞。例如,LinkedIn 曾有一个漏洞,可以让攻击者在未经用户同意的情况下,诱骗用户代表他们分享和发布链接。在修复之前,攻击者可以将 LinkedIn 的“分享文章”页面加载到一个隐藏的框架中,并将该框架覆盖在具有看似无害且吸引人的链接或按钮的页面上。
另一个例子是公共博客平台 Tumblr。该网站使用 JavaScript 代码来防止点击劫持。然而,这种保护方法并不完美,因为页面可以被隔离在 HTML5 框架中,阻止 JavaScript 代码的运行。通过结合以上缺陷和密码助手浏览器插件,再诱骗用户输入错误的验证码文本,攻击者就有可能窃取用户的密码。
跨站请求伪造(CSRF)
点击劫持攻击的一种变体是跨站请求伪造,简称 CSRF。借助社会工程学,网络犯罪分子将 CSRF 攻击指向最终用户,迫使他们执行非本意的操作。攻击媒介可以是电子邮件或聊天发送的链接。
CSRF 攻击的目的并非窃取用户数据,因为攻击者看不到对虚假请求的响应。相反,这些攻击针对的是状态更改请求,例如密码更改或资金转移。如果受害者拥有管理权限,攻击就有可能危及整个 Web 应用程序。
CSRF 攻击可以存储在易受攻击的网站上,尤其是那些具有“存储型 CSRF 漏洞”的网站。攻击者可以通过在输入字段中输入 IMG 或 IFRAME 标记来实现,这些标记随后会显示在页面上,例如评论或搜索结果页面。
如何预防框架攻击
现代浏览器允许开发者设置是否允许在框架内加载特定的资源。开发者还可以设置仅当请求来自用户所在的同一站点时才在框架中加载资源。通过这种方式,用户可以避免点击带有其他网站内容的不可见框架,从而防止点击被劫持。
客户端缓解技术,如“frame busting”或“frame killing”,虽然在某些情况下有效,但也很容易被绕过。因此,客户端方法并不被认为是最佳实践。安全专家推荐使用服务器端方法,例如 X-Frame-Options (XFO) 或更新的 Content Security Policy (CSP) ,而不是帧破坏技术。
X-Frame-Options 是 Web 服务器添加到网页响应标头中的一个设置,用于指示浏览器是否允许在其框架内显示其内容。
X-Frame-Options 标头允许使用三个值:
- DENY:禁止在框架内显示页面。
- SAMEORIGIN:仅当页面与当前域相同时,才允许在框架内显示。
- ALLOW-FROM URI:仅当页面在指定的 URI(统一资源标识符)内时,才允许在框架内显示。
最新的反点击劫持方法包括使用带有 frame-ancestors 指令的 Content Security Policy (CSP)。CSP 正在逐渐取代 XFO。与 XFO 相比,CSP 的主要优势在于它允许 Web 服务器授权多个域来构建其内容。但是,并非所有浏览器都支持 CSP。
CSP 的 frame-ancestors 指令接受三种类型的值:'none'
,禁止任何域显示内容; 'self'
,仅允许当前站点显示框架中的内容;或者是一个包含通配符的 URL 列表,例如 '*.some site.com'
, 'https://www.example.com/index.html'
,等等,允许仅在与列表中元素匹配的页面上构建框架。
如何保护自己免受点击劫持
在浏览网页时保持社交网络登录状态固然方便,但这样做需要格外谨慎。你还需要留意你所访问的网站,因为并非所有网站都采取了必要的措施来防止点击劫持。如果你不确定你所访问的网站是否安全,请不要点击任何可疑的链接,无论它多么诱人。
另一个需要注意的事项是你的浏览器版本。即使某个网站使用了我们之前提到的所有防止点击劫持的标头,也并非所有浏览器都支持这些标头。因此,请确保你使用的是最新版本的浏览器,并且它支持反点击劫持功能。
常识是防止点击劫持的有效自卫工具。当你看到不寻常的内容(包括朋友在任何社交网络上发布的链接)时,在采取任何行动之前,你应该问问自己,你的朋友会发布这样的内容吗?如果答案是否定的,那么你应该警告你的朋友,他们可能已经成为点击劫持的受害者。
最后一条建议:如果你是在网上拥有影响力的“网红”,或者在任何社交网络上拥有大量的粉丝或朋友,你就应该更加谨慎,在网上践行负责任的行为。因为一旦你成为点击劫持的受害者,最终可能会影响到很多人。