【中國如何利用百度統計攻擊GitHub】
最近網路世界發生了一件很重大的事情。中國當局疑似透過知名中國廠商百度的統計機制,對提供程式碼儲存的知名廠商GitHub發動DDoS攻擊(阻斷服務攻擊,也就是用大流量癱瘓服務)。這次的攻擊,導致從3/18到3/27之間,對GitHub的存取容易發生錯誤。
為何要攻擊GitHub?這要從中國的防火牆說起。中國有防火牆,藉此屏蔽對中國不利的網站。有個名為Greatfire的網站因此幫助大家辨識哪些網站已遭到封鎖。另外,有些網站也會利用GitHub的機制,將一些被封鎖的網站備份到GitHub上,以方便中國民眾瀏覽。
中國曾多次嘗試封鎖GitHub,但由於GitHub上保存的程式碼是許多程式人員從業所需要的資料,也是目前資訊圈許多先進程式碼的存放位置,中國的封鎖引來包含李開復等許多資訊人員的抗議,因此難以封鎖。
既然很難封鎖,那麼把那些可能造成問題的內容幹掉應該就可以了吧?因此,中國這次的作法是,利用百度統計的程式碼,引導世界各地的人在沒有察覺的狀況下攻擊GitHub特定頁面。
百度的統計會存取一個小小的Javascript程式(http://hm.baidu.com/h.js),這個程式存放在中國。如果在中國存取這個程式不會有問題,但如果從中國以外的地方存取,連線經過防火牆,就會出現攻擊「https://github.com/greatfire/」和「https://github.com/cn-nytimes/」的指令。
也就是說,如果你是中國以外地區的人,瀏覽了一個放入百度統計的網頁,你的瀏覽器會收到一個變造過的網頁統計程式碼,引導瀏覽器每兩秒攻擊一次這兩個github頁面。而且,攻擊流量來自於世界各地,就是沒有中國 -中國會跟別人說,這絕不是中國網軍發動的攻擊。
這兩個網頁中,https://github.com/greatfire/ 是Greatfire 的頁面,而 https://github.com/cn-nytimes/則是紐約時報中文網的頁面。
後來,這兩個網頁只好暫時下架網頁內容,而以程式碼取代網頁內容。這個程式碼會彈出視窗,導致攻擊無法進行下去。
當然,嚴格來說,只能確定這次的攻擊應該是藉由百度統計發動。但究竟是如何嵌入這些程式碼到百度統計當中?有人認為可能是程式碼透過防火牆送出時,遭到防火牆嵌入或是替換,但目前已不得而知,中國政府與攻擊之間的關聯也難以證明。但看到被攻擊的網頁,很明顯可以知道得利者是中國當局。
這也是我們應該憂心的部分。中國可透過許多看似無害的公司,藉由這些公司投放的程式碼,達到攻擊異己,或是竊取資料的間諜行為。這次的事件只是冰山一角,未來可能還有更多攻擊,躲在我們不知道的地方。一不小心,我們都將成為發動攻擊的一份子。
延伸閱讀:
百度统计js被劫持用来DDOS Github
http://drops.wooyun.org/papers/5398
【更正】經過本人測試,英國、美國、台灣訪問hm.baidu.com均指向IP 61.135.185.140,而該IP來自中國,因此並非存放於CDN的程式碼有問題,而是存取該檔案的連線通過中國防火牆時遭到竄改。