隨著互聯(lián)網(wǎng)絡(luò)的廣泛普及冕房,數(shù)以億計(jì)網(wǎng)民的網(wǎng)絡(luò)行為數(shù)據(jù)早已成為最寶貴的資源,企業(yè)通過五花八門的各種手段了解網(wǎng)民的行為和隱私數(shù)據(jù)牢屋,用于廣告投遞且预、用戶興趣分析等,進(jìn)而作為決策的依據(jù)烙无。利用Web客戶端對(duì)用戶行為進(jìn)行收集和追蹤是重要手段之一锋谐。
本文繼《淺談Web客戶端追蹤(上)》繼續(xù)對(duì)主流的Web客戶端追蹤技術(shù)進(jìn)行分析,主要介紹典型的指紋追蹤技術(shù)和WebRTC技術(shù)截酷,介紹一些簡(jiǎn)單的防跟蹤的方法涮拗,并給出相關(guān)參考供感興趣的朋友深入研究。
一迂苛、 典型追蹤技術(shù)
1. 瀏覽器指紋追蹤
類似人的外貌和指紋三热,Web客戶端(這里主要指瀏覽器)也有多種“外貌”信息和“指紋”信息,將這些信息綜合分析計(jì)算后三幻,可對(duì)客戶端進(jìn)行唯一性識(shí)別就漾,進(jìn)而鎖定、追蹤念搬、了解網(wǎng)民行為和隱私數(shù)據(jù)抑堡。
1) 基本指紋
基本指紋是任何瀏覽器都具有的特征標(biāo)識(shí)摆出,比如硬件類型(Apple)、操作系統(tǒng)(Mac OS)夷野、用戶代理(User agent)懊蒸、系統(tǒng)字體荣倾、語言悯搔、屏幕分辨率、瀏覽器插件 (Flash, Silverlight, Java, etc)舌仍、瀏覽器擴(kuò)展妒貌、瀏覽器設(shè)置 (Do-Not-Track, etc)、時(shí)區(qū)差(Browser GMT Offset)等眾多信息铸豁,這些指紋信息“類似”人類的身高灌曙、年齡等,有很大的沖突概率节芥,只能作為輔助識(shí)別在刺。可以在該網(wǎng)址進(jìn)行查看本地瀏覽器的基本特征头镊,https://www.whatismybrowser.com/
2) 高級(jí)指紋
基本指紋就像是人的外貌特征蚣驼,外貌可以用男女、身高相艇、體重區(qū)分颖杏,然而這些特征不能對(duì)某個(gè)人進(jìn)行唯一性標(biāo)識(shí),僅使用基本指紋也無法對(duì)客戶端進(jìn)行唯一性判定坛芽,基于HTML5的諸多高級(jí)指紋對(duì)此提供了新思路留储。
①、Canvas指紋
說到高級(jí)指紋咙轩,不得不提Canvas指紋获讳,Canvas(畫布)是HTML5中一種動(dòng)態(tài)繪圖的標(biāo)簽,可以使用其生成甚至處理高級(jí)圖片活喊。2014年9月丐膝,ProPublica報(bào)道:新型的Canvas指紋追蹤正在被用到“上到白宮,下到Y(jié)ouPorn”等眾多網(wǎng)站胧弛,事實(shí)上早在2012年已有研究報(bào)告[6]分析稱canvas指紋被用于跟蹤用戶尤误。
利用Canvas進(jìn)行追蹤的一般過程大致如下:
基于Canvas標(biāo)簽繪制特定內(nèi)容的圖片,使用canvas.toDataURL()方法獲得圖片內(nèi)容的base64編碼(對(duì)于PNG格式的圖片结缚,以塊(chunk)劃分损晤,最后一塊是32位CRC校驗(yàn))作為唯一性標(biāo)識(shí),如下圖红竭。
Canvas指紋的原理大致如下:
相同的HTML5 Canvas元素繪制操作尤勋,在不同操作系統(tǒng)喘落、不同瀏覽器上,產(chǎn)生的圖片內(nèi)容不完全相同最冰。在圖片格式上瘦棋,不同瀏覽器使用了不同的圖形處理引擎、不同的圖片導(dǎo)出選項(xiàng)暖哨、不同的默認(rèn)壓縮級(jí)別等赌朋。在像素級(jí)別來看,操作系統(tǒng)各自使用了不同的設(shè)置和算法來進(jìn)行抗鋸齒和子像素渲染操作篇裁。即使相同的繪圖操作沛慢,產(chǎn)生的圖片數(shù)據(jù)的CRC檢驗(yàn)也不相同。
在線測(cè)試地址:https://www.browserleaks.com/canvas达布,可查看瀏覽器的Canvas唯一性字符串团甲。
Canvas的兼容情況:幾乎已被所有主流瀏覽器支持,可以通過大部分的PC黍聂、平板躺苦、智能手機(jī)訪問!
②产还、AudioContext指紋
HTML5提供給JavaScript編程用的Audio API則讓開發(fā)者有能力在代碼中直接操作原始的音頻流數(shù)據(jù)匹厘,對(duì)其進(jìn)行任意生成、加工雕沉、再造集乔,諸如提高音色,改變音調(diào)坡椒,音頻分割等多種操作扰路,甚至可稱為網(wǎng)頁(yè)版的Adobe Audition。
AudioContext指紋原理大致如下:
方法一:生成音頻信息流(三角波)倔叼,對(duì)其進(jìn)行FFT變換汗唱,計(jì)算SHA值作為指紋,音頻輸出到音頻設(shè)備之前進(jìn)行清除丈攒,用戶毫無察覺哩罪。
方法二:生成音頻信息流(正弦波),進(jìn)行動(dòng)態(tài)壓縮處理巡验,計(jì)算MD5值际插。
AudioContext指紋基本原理:
主機(jī)或?yàn)g覽器硬件或軟件的細(xì)微差別,導(dǎo)致音頻信號(hào)的處理上的差異显设,相同器上的同款瀏覽器產(chǎn)生相同的音頻輸出框弛,不同機(jī)器或不同瀏覽器產(chǎn)生的音頻輸出會(huì)存在差異。
從上可以看出AudioContext和Canvas指紋原理很類似捕捂,都是利用硬件或軟件的差異瑟枫,前者生成音頻斗搞,后者生成圖片,然后計(jì)算得到不同哈希值來作為標(biāo)識(shí)慷妙。音頻指紋測(cè)試地址:https://audiofingerprint.openwpm.com/
3) 硬件指紋
硬件指紋主要通過檢測(cè)硬件模塊獲取信息僻焚,作為對(duì)基于軟件的指紋的補(bǔ)充,主要的硬件模塊有:GPU’s clock frequency膝擂、Camera虑啤、Speakers/Microphone、Motion sensors猿挚、GPS咐旧、Battery等。更多細(xì)節(jié)請(qǐng)參考:https://arxiv.org/pdf/1503.01408v3.pdf
4) 綜合指紋
Web世界的指紋碰撞不可避免绩蜻,將上述所有的基本指紋和多種高級(jí)指紋綜合利用,進(jìn)行分析室埋、計(jì)算哈希值作為綜合指紋办绝,可以大大降低碰撞率,極大提高客戶端唯一性識(shí)別的準(zhǔn)確性姚淆。測(cè)試地址:https://panopticlick.eff.org/
2. 跨瀏覽器指紋
上述指紋都是基于瀏覽器進(jìn)行的孕蝉,同一臺(tái)電腦的不同瀏覽器具有不同的指紋信息。這樣造成的結(jié)果是腌逢,當(dāng)同一用戶使用同一臺(tái)電腦的不同瀏覽器時(shí)降淮,服務(wù)方收集到的瀏覽器指紋信息不同,無法將該用戶進(jìn)行唯一性識(shí)別搏讶,進(jìn)而無法有效分析改用戶的的行為佳鳖。
近期有學(xué)者研究了一種跨瀏覽器的瀏覽器指紋,其依賴于瀏覽器與操作系統(tǒng)和硬件底層進(jìn)行交互進(jìn)而分析計(jì)算出指紋媒惕,這種指紋對(duì)于同一臺(tái)電腦的不同瀏覽器也是相同的系吩。更多技術(shù)細(xì)節(jié)請(qǐng)參考:
http://yinzhicao.org/TrackingFree/crossbrowsertracking_NDSS17.pdf
3. WebRTC
WebRTC(網(wǎng)頁(yè)實(shí)時(shí)通信,Web Real Time Communication)妒蔚,是一個(gè)開源項(xiàng)目穿挨,旨在使得瀏覽器能為實(shí)時(shí)通信(RTC)提供簡(jiǎn)單的JavaScript接口,說的簡(jiǎn)單明了一點(diǎn)就是讓瀏覽器提供JS的即時(shí)通信接口肴盏,讓瀏覽器實(shí)時(shí)獲取和交換視頻科盛、音頻和數(shù)據(jù)。WebRTC實(shí)現(xiàn)了三個(gè)API菜皂,分別是:
MediaStream:通過MediaStream的API能夠通過設(shè)備的攝像頭及麥克風(fēng)獲得視頻贞绵、音頻的同步流。
RTCPeerConnection:RTCPeerConnection是WebRTC用于構(gòu)建點(diǎn)對(duì)點(diǎn)之間穩(wěn)定幌墓、高效的流傳輸?shù)慕M件但壮。
RTCDataChannel:RTCDataChannel使得瀏覽器之間(點(diǎn)對(duì)點(diǎn))建立一個(gè)高吞吐量冀泻、低延時(shí)的信道,用于傳輸任意數(shù)據(jù)蜡饵。
基于WebRTC的實(shí)時(shí)通訊功能弹渔,可以獲取客戶端的IP地址,包括本地內(nèi)網(wǎng)地址和公網(wǎng)地址溯祸。其原理是利用到RTCPeerConnection 的API肢专,大致函數(shù)如下:
利用WebRTC能做的事情還遠(yuǎn)不止這些,比如使用其探測(cè)掃描內(nèi)網(wǎng)信息焦辅,進(jìn)行語音博杖、視頻交流,更多技術(shù)細(xì)節(jié)請(qǐng)參考:
https://diafygi.github.io/webrtc-ips/
二筷登、 防客戶端追蹤措施
1. 瀏覽器設(shè)置
基于上述客戶端追蹤技術(shù)和原理剃根,對(duì)瀏覽器設(shè)置提出一些簡(jiǎn)單的防御措施,大致如下:
①前方、使用隱身模式狈醉,目前主流的瀏覽器都支持該模式。
②惠险、禁用Cookie和JavaScript(此項(xiàng)可能導(dǎo)致頁(yè)面顯示不正常苗傅,慎用)
③、禁用WebRTC班巩,如Firefox瀏覽器:打開about:config渣慕,找到media.peerconnection.enabled的項(xiàng),設(shè)置成 false
④抱慌、禁用Geolocation逊桦,F(xiàn)irefox瀏覽器:打開about:config,找到geo.enabled 的值遥缕,設(shè)置其值為 false彬檀。Chrome 點(diǎn)擊設(shè)置(Settings)灯抛,從顯示高級(jí)設(shè)置(Show advanced settings)上,找到隱私(Privacy)并且點(diǎn)擊內(nèi)容設(shè)置(Content settings), 在窗口里找到定位(Location)并設(shè)置選項(xiàng)不允許任何網(wǎng)站追蹤你的物理位置(Do not allow any site to track your physical location)
⑤倍靡、限制API訪問文件資源時(shí)序信息炼彪,惡意網(wǎng)站會(huì)通過檢測(cè)瀏覽器緩存的時(shí)序信息胎署,包括訪問和忽略第三方網(wǎng)站的資源颠悬,來判斷使用者是否訪問過第三方網(wǎng)站。Firefox瀏覽器:打開about:config鸡号,將dom.enable_resource_timing, dom.enable_user_timing 和dom.performance.enable_user_timing_logging 設(shè)置為 false转砖,來阻止這些 API 運(yùn)行。
2. 插件
推薦幾個(gè)較好的插件來阻止第三方廣告追蹤和廣告:
①、Ghostery府蔗,個(gè)人使用推薦晋控,官網(wǎng)地址:
https://www.ghostery.com/try-us/download-browser-extension
②、Privacy Badger姓赤,官網(wǎng)地址:
https://www.eff.org/privacybadger/
③赡译、uMatrix(僅Chrome和FireFox):
https://addons.mozilla.org/en-us/firefox/addon/umatrix/
④、NoScript(僅FireFox):
https://addons.mozilla.org/en-US/firefox/addon/noscript/#
⑤不铆、Chameleon(僅Chrome):
https://github.com/ghostwords/chameleon
三蝌焚、 參考資料
- [1] https://securehomes.esat.kuleuven.be/~gacar/persistent/index.html
- [2] http://cseweb.ucsd.edu/~hovav/papers/ms12.html
- [3] https://arxiv.org/pdf/1503.01408v3.pdf
- [4] https://eprint.iacr.org/2015/616.pdf
- [5] http://www.freebuf.com/news/40745.html
- [6] http://w2spconf.com/2012/papers/w2sp12-final4.pdf
- [7] http://randomwalker.info/publications/OpenWPM_1_million_site_tracking_measurement.pdf
- [8] http://securityaffairs.co/wordpress/47550/digital-id/audio-fingerprinting-tracking.html
- [9] http://www.ghacks.net/2014/08/04/deal-webrtc-spying-chrome/