浏览器知道你的哪些信息

这些都可以作为进一步改进beef的参考思路

在不弹出权限询问的情况下,浏览器可以获得你的哪些信息?除了常见的 IP、地理位置、系统和浏览器版本,其实还能获取本地 IP、CPU 平台、显卡型号、登录过的社交网站等等信息。

What every Browser knows about you 展示了浏览器知道的所有关于你的信息。本文就来一一解释下所使用的技术。

地理位置(Location)

基于IP

经纬坐标和位置信息

Webkay 使用了 Google Maps Geolocation API 来获取地理位置。

类似的地理位置服务都是通过服务器获取客户端 IP,然后在 IP 地址库中查找对应的真实坐标。

这种方法依赖于浏览器上报的 IP,精确度远不如 GPS。比如我挂了代理,Google 就把我定位到了日本。

以下是 PHP 获取客户端 IP 的代码(source):

精确地理位置

如果想获取精准的地理坐标,可以使用 HTML5 中的 Geolocation API,不过使用该 API 会向用户弹出权限询问框。

语言

window.navigator 保存了不少客户端信息,接下来你还会看到很多次:

1
2
3
var languages = navigator.languages // 非 IE 浏览器,语言列表
|| navigator.language // 非 IE 浏览器,首选语言
|| navigator.userLanguage; // IE 浏览器,首选语言

本地时间

最容易获取的信息之一

1
new Date();

软件(Software)

系统和浏览器

通过 UserAgent判断

Webkay 使用了 UAParser.js 对 navigator.userAgent 进行了解析。UserAgent 中文叫用户代理字符,这个字符串包含了浏览器和系统的表示信息。

插件

浏览器插件则是通过遍历 navigator.plugins 获得。

1
2
3
4
5
6
7
for (var i = 0; i < navigator.plugins.length; i++) {
var plugin = navigator.plugins[i];
plugin.name // 名称
plugin.filename // 文件名
plugin.description // 描述
plugin.version // 版本号
}

硬件

CPU

Webkay 结合使用了 navigator.platform 和 UAParser.js 来获取 CPU 平台,核心数则通过 navigator.hardwareConcurrency 获取。

GPU

通过 WebGL API 中的 WEBGL_debug_renderer_info 来获取显卡信息。

分辨率和颜色深度则是通过 window.screen 获取。

电量

通过新的 Battery Status API 获取电量相关信息;

连接(Connection)

本地IP

使用 WebRTC 中的 RTCPeerConnection 接口建立 WebRTC 连接,给其他客户端发送请求时会带上本地 IP。我们只需要对信息中的 IP 进行提取即可。

公网 IP 和服务器运营商

分别使用了在线服务 https://api.ipify.org?format=jsonhttp://ip-api.com/json。
原理和之前获取经纬坐标和位置信息一样,服务器根据 IP 查地址库。

来源页

document.referrer

下载速度

Webkay 通过 new Image() 下载一张图片,然后用文件大小除以用时得出,不过这个方法需要事先在 JS 里写明文件大小。如果用 XMLHttpRequest 会更加方便:

1
2
3
4
5
6
7
8
9
10
11
12
var startTime = Date.now();
var xhr = new XMLHttpRequest();
xhr.open("GET", "https://upload.wikimedia.org/wikipedia/commons/2/2d/Snake_River_%285mb%29.jpg");
xhr.onload = function() {
var duration = (Date.now() - startTime) / 1000;
var size = xhr.getResponseHeader("Content-Length") / 1024;
var speed = (size / duration).toFixed(2);
console.log(speed);
};
xhr.send();

网络类型

使用了目前还没有任何浏览器支持的 Network Information API …

社交媒体

如果你已经登录了某个网站,这时你再访问该网站的登录页面,网站会自动跳转到其他页面。

Webkay 就是利用了这一点,通过一个地址为登录页面(可能会跳转到 Favicon)的图像元素,如果接收到的是图片,就说明用户已经登录了该网站,并触发 onload 事件,反之则不会触发。

以 Twitter 为例:在你已经登录的情况下访问 https://twitter.com/login?redirect_after_login=%2Ffavicon.ico,页面就会自动跳转到 https://twitter.com/favicon.ico

1
2
3
4
5
6
7
var img = new Image();
img.onload = function() {
// 你登录过 Twitter 啦
};
img.src = "https://twitter.com/login?redirect_after_login=%2Ffavicon.ico";

点击劫持(Click Jacking)

这个我感觉和 What every Browser knows about you 的主题无关,具体介绍可以看 Clickjacking 简单介绍 | WooYun 知识库。

陀螺仪(Gyroscope)

这个只有在带有陀螺仪的设备上才有效,通过注册 deviceorientation 事件实时获取设备的陀螺仪信息。

网络扫描(Network Scan)

用 WebSocket API 遍历之前获得的本地 IP 所在的 IP 段。这个方法只有在对方搭建了 WebSocket 服务器的情况下才有效,对于普通用户来说,可能性基本为零。

图像(Image)

使用 Exif.js 读取图像 EXIF 信息。

浏览器指纹的常见思路

这是比较 High Level 层面的说明

  1. IP
  2. 不同显卡的抗锯齿算法不同,使用WebGL在不同屏幕分辨率下在canvas中绘制图形时会有差别
  3. 不同声卡的硬件实现在播放同一首歌曲时,频率图的音量(Volume)可能存在差异
  4. 不同系统的字体安装不同
  5. 语言(language)
  6. 陀螺仪的硬件实现存在误差
  7. 屏幕分辨率

跨浏览器指纹
跨平台指纹

用户行为特征

比如 通过鼠标 上下滑动,通过PageDown,通过触摸板,通过上下左右按键。
打开新标签的方式,通过按钮打开,或者通过快捷键打开。

即,在浏览器的同一个功能的实现上有多种操作方式(纯鼠标,鼠标+键盘,纯键盘,触摸板,触摸屏),观察用户使用不同操作方式的频率分布。

跨浏览器指纹收集技术

跨浏览器指纹追踪技术
http://www.4hou.com/info/news/3380.html

http://cancer.shtech.org/wiki/Reading-Group/%5B20170220%5DCross-Browser-Fingerprinting-via-OS-and-Hardware-Level-Features
论文
http://cancer.shtech.org/wiki/uploads/crossbrowsertracking_NDSS17.pdf

浏览器指纹的其他现有技术
AmIUnique
https://amiunique.org/

B08资料 链接: http://pan.baidu.com/s/1i5zCNn3 密码: fb8h

uXDT

基于超声波的信息传输

超声波追踪技术可以暴露Tor用户的真实信息(去匿名化,含视频)
http://www.freebuf.com/articles/wireless/125138.html

Beware of ads that use inaudible sound to link your phone, TV, tablet, and PC
https://arstechnica.com/tech-policy/2015/11/beware-of-ads-that-use-inaudible-sound-to-link-your-phone-tv-tablet-and-pc/

Hackers can hack smartphones and laptops by hacking inaudible sounds embedded into ads
https://www.techworm.net/2016/11/hackers-can-hack-smartphones-latops-hacking-inaudible-sounds-embedded-ads.html

Silently Tracking Users With Ultrasonic Beacons
https://www.onthewire.io/silently-tracking-users-with-ultrasonic-beacons/

设备指纹

MAC
IMEI
理论上这些常见设备指纹均能被修改
不过要注意修改软件是否存在日志行为。

总结

这些信息并不像 Cookie 存在关于个人隐私的安全隐患,如果能够善用这些信息,其实可以给用户带来更好的用户体验~

补充

Binni Shah @binitamshah
[ Browser ] Detecting and defeating browser spoofing : https://t.co/sU0uiFkaXn
“ 检测与防御浏览器的指纹欺骗: https://browserprint.info/blog/defeatingSpoofing

Daniel Bilar @daniel_bilar
[ Hardware ] #Rowhammer bitflips as PUF https://t.co/XgUDRMdcBH [intrinsic DRAM, boot & rt; code https://t.co/lszzx2xdYd ; see… https://t.co/XxTjJPNuWL
“ RowHammer 在物理设备识别、设备指纹方面的应用(paper): http://www.seceng.informatik.tu-darmstadt.de/assets/schaller-2/rowhammer-puf/rowhammer-puf.pdf code:http://caslab.csl.yale.edu/code/rowhammerpuf/RHPUFcode-2017-04-28.tar.gz

参考资料

[1] 浏览器知道你的哪些信息
[2] What every Browser knows about you
[3] 浏览器指纹 fingerprintjs2