本节,我们将介绍 TapJacking,一种利用mobile 浏览器中实现的辅助功能的 clickjacking。
TapJacking 表明了 mobile站点中 frame busting 的重要性。
1. Tapjacking iPhone上的 Safari
iPhone Safari浏览器支持所有传统clickjacking攻击所需要的功能:透明功能和IFRAME。
透明功能通过 Safari Mobile 中的 CSS opacity属性来实现。同时,iPhone中的其他特性使得
我们的攻击更加危险。
Zooming 功能:在桌面浏览器上,攻击者能够保证用户会点击 IFRAME 中的真确位置。
一种方法是在检测到 MouseMove 事件时将 IFRAME 移动到相应的鼠标位置,那么用户的鼠
标总是指到攻击者想让其点击的地方。由于这种方法在 iPhone 上较难实现,我们使用 iPhone
的 zooming功能来代替。
我们知道在 smart-phone上缩大缩小是通过视口的 meta tag来实现的:
initial-scale = 10,
user-scalable=no”>
<meta name=”viewport”
content = “width = 320,
在这个例子中,整个视口的初始大小被设为 10 (最大化)。以这个大小,任何按钮都将会
覆盖整个屏幕的宽度。将这个放大化的按钮放进 IFRAME 会使得 clickjacking 攻击变得更有
效(由于“有效触摸区”非常大)。
图 1 显示了一个 Twitter 的例子,Twitter 的发布按钮在一个透明 IFRAME 中被放大了。
为了进一步确保用户只能点击目标区域,可以通过将 user-scalable 属性设为 0 来禁止进一步
的缩放。

隐藏或伪造地址栏:桌面系统上的 clickjacking 攻击有一个很重要的困难就是使得浏览
器的地址栏指向一个看似合法的 URL。这个对于 TapJacking 不是一个问题,因此在手机上
攻击者可以使得地址栏不显示。如下的代码演示了将地址栏隐藏起来。
<body onload=”setTimeout(function()
{window.scrollTo(0,1)},100);”>
</body>
攻击者可以在framing page中嵌入一张伪造的地址栏的图片从而使得该页面似乎来自一个合
法网站。
误用共享的屏幕功能:于浏览器和 iPhone UI 共享屏幕资源,使得我们有方法增强
Tapjacking 攻击。方法是创建一个页面并将该行为伪装成一个于 web 无关的正常手机行为。
例如,图 1 显示了一个看似收到短信的伪装攻击。而事实上,这个信息根本不是 SMS 应用
发出的,而是一个网页伪装成一个 iPhone 应用。由于用户知道在收到短信时需要按”Close”
或”Reply”,他们会毫不犹豫地点击。在图 1 中,用户的点击不会显示短信内容而是发布一
个 tweet。
通过关闭导航和使用动态滚屏增强 Tapjacking:过使用 touchMove 事件可以禁止对
apjacking 页面的任何触摸行为。这通过 preventDefault 函数来实现,如下所示:
function touchMove(event){
event.preventDefault();
}
另外,通过使用标准的 JavaScript 函数 window.scrollTo(x,y)可以动态定位视口的位置。
这 样可以使得攻击者能够动态地将视口移动到目标按钮上面。
会话劫持:话标识符通常存储在会话 cookie 中。在桌面浏览器上,当用户关闭浏览器时
这些会话 cookie 就会过期。然而,在 iPhone 上却不是这么回事。当 Mobile Safari 关闭时,
会话会持续有效。这极大地帮助了攻击者,因为对于 clickjacking 攻击,会话是十分重要的。
可以通过向用户发送一个带恶意链接的 email,使得浏览器开始一个新的会话。
当分析 Alexa Top 100 站点时,我们发现某些”mobile cookie”持续的时间很长。一方面原
因可能是,减少用户用手机登录的次数(用手机登录很麻烦)。
防御:X-Frame-Options HTTP 头部:头部指示所有主要浏览器(除 Firefox)的最新版本不
要使用 sub-frame 的网页(即相关页面是否能够被嵌入 iframe)。从 iPhone 3.0 的 Mobile Safari |