一文徹底說明白溯源反制以及對抗
感覺很多人都對溯源反制這個事情,感覺很神奇。
今天就講一下我所知道的目前的溯源反制的手段,以及技術原理
1.ip層面
這個維度主要就是對攻擊者的ip進行威脅情報查詢,微步在線跑一遍,重點關注歷史綁定域名、綁定域名的備案等等。或者可以掃一下攻擊ip開發的端口等等,可能有一些脆弱服務什么的。
2.瀏覽器層面
也就是目前蜜罐主流的手段,
2.1 jsonp
瀏覽器層面主要發力點是在JSONP漏洞上,jsonp是早期瀏覽器對跨域支持不完善,開發人員想到的一種繞過機制。
大家都知道在HTML頁面中,我a站直接ajax b站,如果沒有做特別配置的話,瀏覽器肯定是會直接攔截的。
示例代碼如下

在開發者工具中看流量記錄,test.php報了CORS錯誤。

這個是肯定,具體的瀏覽器跨域策略,有興趣可以百度了解,我這里不深入了。
早期的web開發者也遇到過這個問題,于是想到了一個很巧妙的辦法來進行跨域。
大家看前面的示例代碼,ajax是被攔截了。但是前面的script標簽中的jquery.min.js文件可是被正常加載了。
script標簽是可以正常跨域的,那么我如果想讓a站從b站上獲取數據,進行跨域的話,我只需要在b站構造一個特別的js文件即可完成數據交換,代碼如下。
在b站寫入如下t2.php文件
header('Content-type: application/json');
$uid = 123;
$jsoncallback = htmlspecialchars($_REQUEST ['jsoncallback']);
echo $jsoncallback . "(" . $uid . ")";
然后a站代碼如下
</span></code><code style="white-space:pre-wrap;box-sizing: border-box;font-size: 14px;display: flex;font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;"><span class="code-snippet_outer" style="box-sizing: border-box;"> function a(data){</span></code><code style="white-space:pre-wrap;box-sizing: border-box;font-size: 14px;display: flex;font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;"><span class="code-snippet_outer" style="box-sizing: border-box;"> alert(data);</span></code><code style="white-space:pre-wrap;box-sizing: border-box;font-size: 14px;display: flex;font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;"><span class="code-snippet_outer" style="box-sizing: border-box;"> }</span></code><code style="white-space:pre-wrap;box-sizing: border-box;font-size: 14px;display: flex;font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;"><span class="code-snippet_outer" style="box-sizing: border-box;">
我們提前定義好函數a,然后引入前面寫好的文件,成功獲取到b站中存儲的uid,完成跨域。

在很多大型網站中,比如百度、騰訊網站中也會存在jsonp這種機制,用了和一些網站跨站,而且這些接口傳遞的數據中很可能就包含了一些個人信息,如昵稱、QQ號啥的。
而蜜罐只需要找到這些特殊的接口,然后自己構造好a函數,就能接受到這些個人信息了。
比如我以前挖到過的某一個大站的jsonp漏洞,就包含了昵稱信息,還有一些唯一標識碼

雖然jsonp可以直接跨域交換信息,但是也要依托于瀏覽器的登錄狀態,就像csrf漏洞。但是如果你在b站上壓根都沒登錄的話,那么也是無法獲取到個人信息的。而且新版的chrome內核在加載js的時候,已經是不會再傳遞cookie了。

cookie中還是為空,可以一定程度上避免此類問題。

但是如果是運營商層面的話,就有點難頂了。畢竟是直接流量層面的。這種要么有線掛代理要么匿名物聯網卡。
2.2 云指紋
這個我也是在一篇文章中看過,大概過程是。將蜜罐部署在多家單位中,然后攻擊者訪問了a單位的a網站,又訪問了和a單位完全沒有任何關系的b單位的b網站。那么可以大概率確定是該訪問對象為攻擊者。
那么蜜罐是如何確定是同一個人訪問了A、b兩個網站的呢。a和b是兩個獨立的網站,依托cookie來進行確定肯定是不行的,因為cookie肯定是不共享的,單獨引入一個第三方域來做統計的話,那下次別人只要看到這個第三方域就知道是蜜罐了,那肯定不行。
這就要用到瀏覽器指紋技術了,瀏覽器指紋顧名思義就是用來標識唯一瀏覽器的。具體效果就是,你用電腦上的chrome瀏覽器去訪問任何一個網站,通過一段js代碼都能運算出一個相同的標識符。該標識符不受cookie、無痕模式的影響。只受瀏覽器的影響,需要你換一個其他瀏覽器可能改標識符才會改變。
常見的瀏覽器指紋技術有Canvas指紋、AudioContext指紋、硬件指紋
什么是 Canvas 指紋?
從根本上來說,每一種瀏覽器都會使用不同的圖像處理引擎,不同的導出選項,不同的壓縮等級,所以每一臺電腦繪制出的圖形都會有些許不同,這些圖案可以被用來給用戶設備分配特定編號(指紋),也就是說可以用來識別不同用戶。
那么,如何給我們的網站增加 Canvas指紋 呢?
我們可以通過html5的canvas接口,在網頁上繪制一個隱藏的畫布圖像。
值得注意的是,如果用戶的設備,操作系統,瀏覽器都一樣的話,計算出來的 canvas 指紋是一樣的。換句話說:canvas 指紋不具備唯一性,要和其他的瀏覽器指紋相互結合利用來進一步計算出區分度更高的指紋標識。
以Canvas指紋舉例,通過這個鏈接可以獲取到自己瀏覽器的Canvas指紋
https://jsbin.com/qisodaz/edit?html,js,output
以我的chrome瀏覽器打開,結果如下。可以看到是不受無痕模式的影響的。

那么如何對抗這種指紋檢測技術呢?
我個人使用的Brave瀏覽器,也是內核也是用的chrom的內核。

但是更加注重隱私,示例如下

然后配合上,會放心一點

Canvas指紋只是瀏覽器指紋技術的一種,不保證Brave瀏覽器能對抗所有指紋。
3.釣魚
這個層面常見的套路有
1.mysql弱口令,故意給你掃出來一個mysql弱口令。然后你去連接的話,服務器端會嘗試獲取你的微信id、瀏覽器的sqlite文件等等。最好規避的方法就是在虛擬機中去鏈接,千萬避免物理機直接鏈接。
2.搞一個vpn軟件和賬號密碼放到網站目錄下或者藏到一個比較容易獲取到的地方。你一看這不是妥妥的內網的誘惑嗎,趕緊安裝。然后就中木馬了,場面一度十分尷尬。
3.chrome 0day,如果你的價值畢竟高的話,不排除防守方會申請瀏覽器的0day來專門反制你,這種也很好解決。懂得都懂。
