某種流量劫持攻擊的原理簡述和演示
04-02
PS:該短文為作者博客早年寫的文章,現搬運到知乎
回顧近幾年國內發生的各類惡意劫持事件中,莫過於運營商劫持嚴重干擾到了個人和企業用戶的正常使用和運營。鑒於互聯網上已經有大量關於此類攻擊的案例分析和闡述,為了完善的防禦此類攻擊,本文將換一個角度思考和分析,通過具體的劫持實驗,從攻擊者的立場用通俗的語音來簡述過程。
即通過旁路設備監聽HTTP請求,篡改正常返回的js代碼和信息,實現隱蔽的劫持互聯網網站計費信息的方案。
0x01劫持實驗條件準備
- 獲取互聯網用戶發往80埠的網路數據包,無需回傳的數據包。
- 演示用戶的瀏覽器使用基數最大的Windows + IE組合,確保方案的通用性。PS:經過測試,該演示方案對於Windows系統 , 移動端iPhone和Android平台上的默認瀏覽器均有效。
- 註冊開通某商網站聯盟賬號,會從後台分配到一個跳轉的url,該鏈接會給用戶設置 cookie,同時用做系統後期統計計費分成。
舉例鏈接如下:
- http://u.XXX.com/union/CtripRedirect.aspx?TypeID=2&Allianceid=1234&sid=56789&OUID=abc&jumpUrl=http://www.XXX.com
紅色字體為不同的加盟賬戶被分配的不同編號,如若該參數被惡意篡改,該用戶推廣獲得的收入分成將轉移。
下圖中的紅色部分標明了該返回包進行了Set-Cookie計費和跳轉。0x02劫持過程簡述
- 假設用戶訪問http://www.XXX.com,劫持者旁路偵聽到該用戶瀏覽器請求http://www.google-analytics.com/ga.js (ga.js 是Google Analytics的統計代碼),Referer 目標站http://www.XXX.com。
- 先於http://www.XXX.com的伺服器返回構造過的TCP包給用戶,同時將篡改過的JS內容返回。
注入返回構造過的ga.js代碼。詳見下面截圖:
執行完成後瀏覽器效果如下截圖:
統計Cookie植入成功效果見截圖:
0x03劫持原理和特點
- 部分網站會對js代碼進行校驗,並對CDN節點上的緩存內容做定時輪訓匹配對比,判斷是否被篡改。
- 部分網站會監控用戶真實得到的HTML源代碼,觀察是否被非法注入或者強制跳轉等等。流行的劫持方式之一,直接在用戶訪問http://www.XXX.com的時候劫持其訪問,並直接302重定向跳轉到自己的聯盟url鏈接上,此類方式非常容易被甲方發現。
統計js劫持的特點:
- 該類js代碼是由Google發布和更新,正常情況下不會有人對其返回進行校驗。即便用戶頻繁重複請求或者請求失敗,被劫持方不會被Google主動告知。
- 操作隱蔽且靈活,通過多種方式只需發送1k以下的數據包篡改js代碼,即可完成劫持,無需額外的伺服器再做跳轉。
- 該類js代碼用作通用的網站流量統計實現,在國內中小型web站點甚至大型網站,具有很強的通用性。
廣域網環境需要幾點限制條件:
- 能通過旁路分光設備做流量鏡像,獲取到http get 上行的數據包。
- 需要在真實伺服器返回的TCP包到達前就將偽造包發到客戶端,否則將失去效果。所以此類劫持方式理論上需要離用戶側盡量靠近。
- 通信運營商一般都會在節點配置部署URPF策略,偽造IP頭的包通常會被丟棄。比如,在關鍵回寫植入點的路由器上添加ACL規則,放行這部分回寫包(例如約定某種格式或者特徵)。
推薦閱讀:
※1.35TB超大流量DDoS攻擊 GitHub遭遇memcrashed DDoS放大攻擊
※安全數據科學是什麼?
※APP加固技術歷程及未來級別方案:虛機源碼保護
※Python3學習系列(一):Scrapy在Python3環境下的安裝
※淺談Night 未來發展
TAG:網路安全 |