利用JSONP進行水坑攻擊

wyzsk發表於2020-08-19
作者: 大學生 · 2015/06/15 15:29

0x00 簡介


前幾天安全研究者Jaime Blasco發現了在中國某些特定主題的網站被進行了水坑攻擊,攻擊方法有一定多樣性,其中存在一些比較少見於此型別攻擊中的技術,不過其實是比較早的技術了,國內猥瑣流已經玩了很久的玩意。攻擊型別的多樣性在於,該安全公司並非追蹤到了某個攻擊組織的多次活動,而是某個特定主題網站的多次攻擊。

比如參考1,傳送Microsoft Office .doc利用MS09-027來打蘋果電腦,雖然我認為他們可能沒打到啥東西。除此之外的攻擊事件還可以參考2, 3

這次的攻擊方式總結起來就是 當受害者訪問網站a時會處罰惡意程式碼,之後惡意程式碼會去訪問某些存在可獲取私人資訊介面的網站,獲取資訊後再上傳至c2。下面是該安全公司統計的惡意程式碼獲取資訊的網站,總的來說應該是以中國地區的使用者為目標的一次行動,這年頭會上這些網站的老外不多了。

enter image description here

至於提到的玩爛了,烏雲上有記錄的分析最早是劍心boss 2012年釋出的 《Json hijacking/Json劫持漏洞》參考文獻4 以及2014 年zone社群的兩篇相關文章以及利用文章。可看參考56

0x01 原理 & 攻擊分析


總結來說js會透過某種方式獲取資料來方便使用者的互動,這種獲取資料的方式有一些通用的格式,這裡就是json or jsonp。一般js會透過兩種方式獲取資料。一種是xmlhttp還有一種是script的形式。

xmlhttp的資料獲取方式只有在同一個域的情況下才可以獲取,不然會遭受同源策略的限制,但是如果資料位於兩個不同的域名,那麼只有透過script的方式進行獲取,透過script的方式先傳入一個callback,那麼資料就會被傳入的函式執行。這樣就不會遭到同源策略的限制。

#!javascript
<script>  
function wooyun_callback(a){  
alert(a);  
}  
</script>  
<script src="http://www.wooyun.org/userdata.php?callback=wooyun_callback"></script>  

這次其實就是在目標網站群上插入透過此型別的介面獲取資訊的程式碼,再獲取目標的私人資訊。老外給了幾張惡意程式碼的截圖。

1 利用程式碼,透過某種方式在受害者訪問的網站嵌入

enter image description here

enter image description here

2 透過callback獲取響應資料

enter image description here

3 解析響應資料

enter image description here

老外提到了一個中國安全部落格 程式碼風格有點像。這裡大概原理已經解釋的差不多了。

0x02 利用程式碼 & 案例


關於這方面就是jacks寫的《JSON探針—定位目標網路虛擬資訊身份》參考5 和 xiaoxin在此之上擴充套件的 《jsonp探針callback地址收集帖》參考6。

案例方面 可以在烏雲主站搜尋到需要的案例 wooyun.org

比如 http://wooyun.org/bugs/wooyun-2010-0118732 可以獲取使用者的購買記錄等大量的隱私資訊。比較有代表性的還有劍心釋出的 WooYun: QQMail郵件洩露漏洞 透過qqmail的特殊介面獲取郵箱內容。

#!javascript
<script>  
var Qmail={};  
</script>  
<script src="http://mail.qq.com/cgi-bin/login?fun=passport&target=MLIST&t=login.js&pagesize=10&resp_charset=gb2312&1=3"></script>  
<script>  
alert(Qmail.newMailsList.nextUrl);  
alert(document.scripts[1].src=Qmail.newMailsList.nextUrl);  
alert(Qmail.newMailsList.summary);  
</script>  

0x03 攻擊原因分析


Jaime Blasco提到攻擊原因的方面,攻擊出現某些特定的主題的網站,以某些少數民族以及支援自由言論的非政府組織。攻擊目標以小部分群體為主,攻擊的目的應該在於收集其個人的資料,其中一個原因可能在於在中國一部分網站受到gfw的攔截,但是隻要使用vpn以及tor就可以正常訪問,在使用某種代理的前提下收集這一部分群體的資訊存在難度,那麼就可以透過水坑的方式,跨域收集個人資訊。

0x04 修復 & 防禦 方案


  1. 儘量避免跨域的資料傳輸,對於同域的資料傳輸使用xmlhttp的方式作為資料獲取的方式,依賴於javascript在瀏覽器域裡的安全性保護資料。
  2. referer的來源限制,利用前端referer的不可偽造性來保障請求資料的應用來源於可信的地方,此種方式力度較稀,完全依賴於referer,某些情況下(如存在xss)可能導致被繞過。
  3. token的加入,嚴格來說,這種利用javascript hijacking的方式獲取資料是CSRF的一種,不過較之傳統的CSRF不能獲取資料只能提交而言,這種方式利用javascript可以獲取一些敏感資訊而已。如果我們能讓攻擊者對介面未知,就可以實現json hijacking的防禦了。利用token對呼叫者的身份進行認證,這種方式對於呼叫者的身份會要求力度較細,但是一旦出現xss也可能導致前端Token的洩露,從而導致保護失效。
  4. 對於同域的json使用情況下,可以在資料的輸出頭部加入while(1);的方式避免資料被script標籤的方式引用,這可以防止一些比較有特性的瀏覽器裡導致的資料洩漏。

此外老外還提到了

  1. 使用CORS代替jsonp
  2. 不要在使用cookie的情況下使用jsonp交換資料

大概就這樣,其中提到了獨裁之類的玩意我就不說了。

參考文獻


(1] https://www.alienvault.com/open-threat-exchange/blog/cyber-espionage-campaign-against-the-uyghur-community-targeting-macosx-syst#sthash.fHOjOceQ.dpuf

(2] https://www.alienvault.com/open-threat-exchange/blog/new-macontrol-variant-targeting-uyghur-users-the-windows-version-using-gh0s

(3] https://www.alienvault.com/open-threat-exchange/blog/latest-adobe-pdf-exploit-used-to-target-uyghur-and-tibetan-activists

(4] /papers/?id=42

(5] http://zone.wooyun.org/content/16828

(6] http://zone.wooyun.org/content/16309

(7] https://www.alienvault.com/open-threat-exchange/blog/watering-holes-exploiting-jsonp-hijacking-to-track-users-in-china

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章