裝置指紋簡析

wyzsk發表於2020-08-19
作者: 阿里巴巴雲譽 · 2016/04/13 11:17

Author:bbdog

0x00 裝置指紋


前言

最近”水哥”很是火了一把,一招微觀辯水技驚四座,貼上下其如何做到的描述如下:

王昱珩:多資訊匹配,看水的時候所有資訊抓住,從上往下看,亞克力杯子是沒有什麼細節的,工業產品很難看(辨識) 。但杯子有水之後,就有了生命,有了不一樣的地方,每杯水都是獨立的。

記者:魏坤琳說你是透過水的綜合特徵進行辨識的,除了氣泡等我們常人能看到的,還結合了哪些特徵?

王昱珩:氣泡是依據但不是可靠依據,時間長了它會變大變小甚至掉落。看水看第一眼,給我整個的感覺,就像一個星座。中心點的時候看到一張臉,形象化。每一次閉眼都是在做一次記憶的整理。現場找那杯水,就像拿著照片找人一樣,像在茫茫人海找到你愛的人一樣,一眼就能看到。

在網路中,你所不知道的角落裡,也有很多很多的“水哥”在注視著你們,靜靜的看著你們的所有活動,並默默把每一幕記了下來。並按照他自己的意願,或好好壞的使用這些資料。

它們所使用的方法與“水哥”基本一致:每個人根據其綜合特徵進行辨識,都是可唯一的。透過對這些綜合特徵的識別,就可以把你從千萬人中識別出來。

裝置指紋是什麼

對於某些網站來說,能夠精確的識別某一使用者、瀏覽器或者裝置是一個很有誘惑性的能力,同時也是一個強需求。

它有什麼用

例如,對於廣告聯盟或者搜尋引擎來說,可以利用裝置指紋知道這個使用者之前搜尋過什麼、愛好是什麼,從而在搜尋結果中更好的貼合使用者需求展示搜尋結果;對於銀行、電商等對於安全需求更高的組織來說,可以利用該技術,發現正在登陸的使用者環境、裝置的變化,從而阻止賬號盜取、密碼破解等惡意請求;當然,對於某些惡意組織,也可以利用這種技術,用於對使用者進行追蹤。

它的基本原理是什麼

這裡,姑且給出會被拍磚的結論:

伺服器透過在客戶端收集以下資料:

A.瀏覽器或裝置對於特定標準的不同實現(如標準api使用情況)

B.伺服器曾經下發給客戶端的特定資料

C.瀏覽器或裝置對特定事件的不同反應(如已快取的文件)

D.瀏覽器使用者個人特有設定

E.瀏覽器使用者個人特有的其他資訊(如瀏覽器歷史)

透過對以上資料進行組合,並進行hash即可得到一個該裝置的唯一識別碼。

同時,為了保證資料的穩定性和精確度,裝置指紋還需保證這些資料的不變性和穩定性(針對現在很多使用者會使用隱私模式/清理cookie),於是又引出了其他的一些相關性技術,如持久化cookie等。

它是如何精確的找出你的呢?

舉個例子,以下是我的資料,資料來源[https://amiunique.org/fp]:

  1. 我使用chrome,在某網站上的所有使用者中,我是34.46 %之一
  2. 我使用的瀏覽器是chrome48.0,佔比2.46%
  3. 我的作業系統是mac,佔比13.9%
  4. 我的mac版本是mac 10.10,佔比7.25%
  5. 我設定的語言是中文,佔比0.56%
  6. 我瀏覽器設定的時區是UTC+8,佔比1.58%

將以上的百分比進行相乘,你會發現要找到一個跟你完全一幕一樣的裝置,機率是很低的。 當然,如果你的裝置、作業系統、瀏覽器等足夠”平庸”,裝置指紋不能保證找到你,它只能得出一個結論:現在我發現了一批人,這批人中有你。 如果你的裝置、作業系統或瀏覽器足夠特別,它就會像”水哥”一樣馬上把你找出來。

你到底有多特別

有人說,我用的是大眾的作業系統,直接從某度下的最新版本瀏覽器,沒有做任何額外配置,我本身還經常做清理cookie操作,我應該跟很多大眾一樣,為什麼我會像黑暗中的螢火蟲一樣,如此容易被識別呢。在此簡單給出理由,具體可以到相關技術中看詳細實現。

  1. 瀏覽器在使用過程中,所使用的快取機制會暴露。
    你最近訪問過支付寶,那麼在快取期間,訪問支付寶的響應速度會很快。這些對於不同網站的訪問速度,可以得出類似使用者訪問歷史的資料,而每個人這份資料都是不同的,你愛淘寶我愛天貓就是如此。

  2. 瀏覽器的實現機制、裝置的效能會暴露。
    用i7核心的電腦和酷睿2的電腦對同一段計算任務的計算時間,會暴露你的硬體差異。

  3. 你所安裝的外掛和字型會暴露你。

  4. 你清除了cookie,然而根本沒有清理乾淨。

  5. 歷史上的資料會暴露你。

......

如果一個部署了裝置指紋的網站,可以完美的拿到上述的這些資料,那麼它基本上可以百分百的斷定你是誰,然後撈出你在某天某月看小電影的記錄。

它具體包含哪些技術

首先,基於相關技術的時間點和其對抗的難度,整理如下圖所示。

session/cookie

這是實現方式最簡單,也是應用最普遍的方式。 透過瀏覽器set-cookie儲存資料(UUID)到客戶端,然後在其他請求時候附在頭部裡即可完成。 缺點是,透過手動清理、禁止寫入等可以很簡單的阻攔,導致資料穩定性降低。

window.name等dom操作

window.name可以儲存最多2MB的資料,可以用於一些特殊的場合進行資料傳遞,不過這種方法比較trick,沒有太多人使用。

基於快取的識別

基於快取的識別大致上可以分為幾類:

  1. 每人一份特有的快取檔案
    比如伺服器返回給每個使用者的html中,隱含一個特殊的div,id直接用UUID生成。使用者下載一次以後,因為快取的緣故,這個id就會和其瀏覽器、裝置繫結。

  2. 載入速度區分
    有快取資料肯定比沒快取的資料下載速度快。
    具體做法通常是:訪問一個很少不會有人訪問的地址,得到一個下載的基準值,然後再訪問一次,得到快取的一個基準值。然後訪問一個準備好的常見網站的列表,看處於快取狀態的有哪些網站。

  3. ETAG/LastModify
    透過濫用這兩個header,比如設定ETAG超時時間超長,並且把UUID寫在ETAG中(ETAG支援最高81864位元),那這個使用者就可以在超時前被一直鎖定跟蹤

  4. DNS快取
    該技術與載入速度區分並無本質區別,只是dns快取是利用dns查詢時間查詢的長短等進行的,在此不做贅述。 

如果可以完美的得到每個使用者最近訪問的網站,那基本可以完成精準定位了。

這裡先貼一個2010的css歷史記錄嗅探的問題:

持久化cookie/Flash cookie/evercookie/h5 stroage/webDB

該技術其實是對cookie技術的一個補充。因為,越來越多的普通使用者會清理cookie,因此導致無法對使用者進行識別,因為每次看到使用者都是全新的使用者。

所謂的持久化cookie,無非就是將資料儘可能的藏在了更多的猥瑣的地方。比如flash中(flash可做到多個瀏覽器、多域下的資料共享,因此被廣泛使用),h5的各種生命週期的storage中,webDB中、IE的userdata中等。

如果使用者不能事無鉅細的清理乾淨。一旦有一個地方未清理完,就會把清理的部分完全覆蓋回來。

簡單流程圖如下:


帆布指紋

這是較新的一種技術,是利用不同瀏覽器不同的設別實現會在canvas繪圖這以功能中,同樣的內容,會繪製出具有細小細節差別的圖片。 透過對這些圖片資料進行hash,可以得到一個粗略的指紋。該指紋能夠識別出了某種GPU在安裝了某種字型下的群體。但是單一使用該資料進行判斷誤判較高,一般還會結合其他技術綜合判斷。 如下,即是對同樣的一段帶表情帶背景文字在不同裝置上渲染出的影像顯示。

利用不同裝置上的預設字型和顯示的不同,笑臉表情在各個系統上作圖如下:

具體生成方法如下:

  1. 建立cavas環境,該canvas可以是不可見的,因此對使用者完全無感知。
  2. 設定要作圖的型別,字型等,呼叫api:fillRect、fillText、fillStyle等
  3. 對已經完成的圖,呼叫api:canvas.toDataURL(),即可得到圖的base64表示,採用一種hash演算法,即可完成hash計算
  4. 將這個hash即可作為該裝置裝置指紋的一個組成部分。

Flash/Java/JAVASCRIPT等 基本資料採集

裝置指紋也需要採集儘量多的資料進行區分,資料採集方式可以透過Flash、java applet(現在基本沒有了)、js。

採集包括:

  1. 作業系統型別、作業系統版本
  2. 瀏覽器useagent、瀏覽器的平臺
  3. webgl Vendor 、webgl render
  4. 是否支援image、是否支援js
  5. 內容編碼、設定的時區、設定文字語言、設定接受壓縮格式
  6. 螢幕解析度、color depth
  7. 瀏覽器安裝的外掛、安裝的字型
  8. http請求發起時的頭部
  9. webRTC 等等

0x01 end


最後,還是表達下我對“水哥”的憧憬,附上我喜歡的一個圖:


0x02 refer


  1. Mowery, Keaton, et al. "Fingerprinting information in JavaScript implementations." Proceedings of W2SP 2 (2011).

  2. Bujlow, Tomasz, et al. "Web Tracking: Mechanisms, Implications, and Defenses." arXiv preprint arXiv:1507.07872 (2015).

  3. [https://zyan.scripts.mit.edu/presentations/toorcon2015.pdf]

  4. Acar, Gunes, et al. "The web never forgets: Persistent tracking mechanisms in the wild." Proceedings of the 2014 ACM SIGSAC Conference on Computer and Communications Security. ACM, 2014.

  5. Mowery, Keaton, et al. "Fingerprinting information in JavaScript implementations." Proceedings of W2SP 2 (2011).

  6. Laperdrix, Pierre, Walter Rudametkin, and Benoit Baudry. "Beauty and the Beast: Diverting modern web browsers to build unique browser fingerprints."37th IEEE Symposium on Security and Privacy (S&P 2016). 2016.

  7. Acar, Gunes, et al. "The web never forgets: Persistent tracking mechanisms in the wild." Proceedings of the 2014 ACM SIGSAC Conference on Computer and Communications Security. ACM, 2014.

  8. Fifield, David, and Serge Egelman. "Fingerprinting web users through font metrics." Financial Cryptography and Data Security. Springer Berlin Heidelberg, 2015. 107-124.

  9. Sánchez-Rola, Iskander, et al. "Tracking Users Like There is No Tomorrow: Privacy on the Current Internet." International Joint Conference. Springer International Publishing, 2015.

  10. Mowery, Keaton, and Hovav Shacham. "Pixel perfect: Fingerprinting canvas in HTML5." Proceedings of W2SP (2012).
本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章