Sniffly: 利用HSTS和CSP嗅探浏览器历史纪录

[复制链接]
  • TA的每日心情
    开心
    2018-3-2 08:04
  • 签到天数: 75 天

    [LV.6]无双隐士

    累计在线
    11460分钟
    发表于 2018-1-8 09:23:02 | 显示全部楼层 |阅读模式
    Sniffly是一种通过利用HSTS(HTTP Strict Transport Security)和内容安全策略(Content Security Policy)进行攻击的方式,它允许任意网站嗅探用户的浏览器历史。该技术被测试于 Firefox 和 Chrome 浏览器。
    Demo
    首先可以先参照DEMO的演示,通过使用Firefox/Chrome/Opera,但请先将HTTPS关闭。
    演示地址:Sniffly(打开之前,请再确认是否使用Firefox/Chrome/Opera浏览器打开,否则可能引起其他浏览器的崩溃)
    工作原理
    首先推荐先读一读源文件中的src/index.js,可以先理解下Sniffly是如何工作的。
    下面讲介绍其主要的工作原理:

    1、首先,用户一开始会先访问嵌入Sniffly的网页;
    2、接着,浏览器会先尝试通过http协议,转向使用HTTPS协议从服务器下载图像;
    3、这个时候,Sniffly会通过设置 CSP(内容过滤策略)屏蔽图像下载,从而实现阻断从http重定向到https,这是很重要的一步。如果浏览器完成了对https网址的请求,那么随后将会直接接收hsts发过来的 pin码,而接下来的攻击将难以实现。
    4、当图像被 CSP所中断,接下来将会调用onerror处理程序。在这种情况下,由onerror处理程序对图像从HTTP重定向到HTTPS的时间进行追踪计算。如果时间是在毫秒内,那么这意味着浏览器不需要发出网络请求,也就是用户以前访问过目标域名。如果时间是100毫秒左右,那么这意味着浏览器需要发出网络请求,也就是用户以前没有访问过目标域名。
    寻找HSTS主机地址
    加入网站列表,检测哪一台主机是发送 HSTS报文头部信息,

    $ cd util
    $ ./run.sh > results.log
    其中初始配置有100个网址,根据实际的环境,也可以使用不同的网址列表替代进行检测,如全Alexa排名前100万。
    通过最大时间跨度对结果进行处理和分类,先排除那些最大时间跨度少于1天以及预下载的。

    $ cd util
    $ ./process.py > processed.log
    执行之后,你可以从process.log中将主机地址复制到src/index.js中。
    运行
    在Chrome浏览器中访问file:///path/to/sniffly/src/index.html。而在Firefox中,显然是不支持CSP 头部信息使用标签的,所以需要建立一个本地网络服务器,去为CSP HTTP响应头部信息做回应。我的Nginx服务器功能模块如下,

    server {
    listen 8081;
    server_name localhost;
    location / {
    root /path/to/sniffly/src;
    add_header Content-Security-Policy “img-src http:”;
    index index.html;
    }
    }
    或者通过分布式配置文件.htaccess

    Header set Content-Security-Policy “img-src http:”
    又或者通过php发送头部信息
    将以下代码段粘贴在脚本的开头(请记得修改index.php名称)
    <?php    $csp_rules = "img-src http:";    // Just to ensure maximum compatibility    header('X-WebKit-CSP: '.$csp_rules);    header('X-Content-Security-Policy: '.$csp_rules);    header('Content-Security-Policy: '.$csp_rules);?>温馨提示

    1、目前尚不支持Safari, IE, o或者Chrome (iOS)
    2、请将HTTPS功能关闭,浏览器的扩展功能如HTTPS会混淆结果;
    3、请勿使用 Tor浏览器,因为时间统计会被四舍五入到接近100毫秒;
    4、用户如果有不同的HSTS预置列表(因为有较低版本的浏览器),可能看不到准确结果。
    Github地址:Github download

    立即注册!免费学习海量IT技术信息!!
    您好!您暂时不能浏览帖子的全部内容,请 登录 | 没有帐号? 注册QQ登录
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    快速回复 返回顶部 返回列表