運營商黑產 流量劫持技術剖析


轉載於 https://mp.weixin.qq.com/s/SrfPXdbiBe7rrPdEn9rXSg 作者:金龍

0x01 概述

相信大家對流量劫持都很痛心,明明要下載游戲盒子,結果變為XX助手或者是葫蘆娃,但是這種光明正大的流氓行為似乎是個爛攤子幾乎沒人管或者管不着,而且像蟑螂一樣消滅不盡。

偶爾的劫持造成的傷害大家可能已經麻木,但這點傷害累積起來對受傷的正規公司而言可是會損失大量用戶,遭受萬點以上的沖擊。如果各公司都去用那些手段來獲取用戶的話,會造成整個行業持續地畸形發展,就像如果所有老板都去炒房,還有誰去認真做實業呢?

知己知彼,我們要拒絕被劫持的話先要了解下一般有哪些手段,其實大概原理大家都有所了解,因為是明文傳輸,中間的小運營商可以在傳輸過程中插入小廣告或者強制替換下載內容,要杜絕的話要上https加密,這些大理論大家都明白。

但如果要追問,要怎么插入小廣告或者強制替換掉用戶下載的文件呢?估計大部分IT人士就只能說“他們有專業的設備做劫持”這樣含糊的專業術語來糊弄一下了。更裝一點的可能會列一個這樣的表格給你:

我們常見的劫持一般是通過DNS污染和旁路模式注入惡意的HTTP信息給用戶。這次來個詳細的技術教程,讓普通用戶也可以過過癮,了解一下網絡劫持相關的技術,包括多種方式的流量捕獲和竊聽劫持、彈廣告等方面,體驗下我們常說的中間人劫持,為以后的防范做准備-_-。

0x02 捕獲流量

中間人攻擊要對用戶進行網絡劫持的話,首先需要有捕獲對方流量的通道。捕獲流量大概分為兩類,一類是有交換機或者網關設備的權限,直接進行普通用戶無法控制的劫持,另外一類是誘導使用VPN或者進行ARP攻擊這種旁門左道的方式,有一定的失敗機率。

2.1 旁路鏡像

最有效的是在網絡設備這里進行旁路鏡像,比如交換機的端口鏡像、添加分光器等。

其中端口鏡像的方式是成本最低的,直接在交換機這里取一份完整的數據到我們的設備,而且完全不影響原來的正常網絡拓撲,用戶毫無感知。

如圖所示,在核心交換機這里插根網線和一台Linux服務器連接起來,然后用monitor session命令配置端口鏡像即可。

有理由相信運營商的劫持基本都是添加一個旁路設備來做的。

2.2 Linux網關和WIFI

有些小辦公點還是用的Linux做網關來替代出口路由器,用IPTABLES來做NAT處理,這種情況也是最好做的,直接在在IPTABLES上面即可控制用戶流量了。如果手上沒有網關設備,可以自行搭建個WIFI熱點也行。

2.3 透明網橋

如果沒權限登錄網絡設備進行旁路劫持,可以考慮用網橋的方式來捕獲流量。准備個雙網卡的機器,安裝好bridge-utils套件,用brctl命令進行網卡綁定:

兩個網卡不配置IP,配置里面加上BRIDGE="bri0",綁定好之后,兩個網卡一進一出,一個直通的透明網橋就做好了,接入到任何網絡拓撲里面就可以實現對流量的捕獲和IPTABLES控制了。

上面幾種情況的捕獲流量需要比較大的設備權限,比如運營商的人,或者自行偷偷搬個機器到機房做網橋。

普通用戶需要嘗試的話可以用虛擬機或者下面幾個方式來實現。

2.4 VPN代理

Vpn和代理在國內比較流行,同時技術上也是最容易進行劫持的。

比如在Linux上系統搭建好vpn,然后用IPTABLES做nat轉發,同時我們也可以在IPTABLES這里做些特殊處理,比如直接REDIRECT流量走向來控制,同理如果是用戶用的FQ代理的話也是可以直接用IPTABLES來處理,統一導入到下面說的MITMF環境即可。

2.5 ARP欺騙

在局域網時候如果主機沒有安裝一些安全軟件綁定網關的mac地址時候,攻擊者只需要運行一些特殊的軟件即可進行arp欺騙。

Arp欺騙最好是在linux環境下做,因為可以當作一個網關,打開數據包的轉發,在IPTABLES這里做一層nat即可讓用戶幾乎無察覺到有攻擊存在(有防ARP情況例外),比如用arpspoof命令進行arp欺騙:

這樣對方192.168.2.111在尋找網關地址192.168.2.1的時候就會誤以為攻擊方是他要找的網關,然后流量就被我們捕獲了。

這種攻擊方式需要是局域網才可以完成,而且需要主機沒有安裝網絡安全軟件綁定網關arp才可以正常實現,還有一點就是用戶有機率網絡不穩定導致容易察覺到有攻擊存在。

2.6 篡改DNS

如果路由器有漏洞或者弱密碼,可以有機率篡改用戶DNS,使域名流量經過解析之后直接轉向我們自己的服務器來達到捕獲用戶流量的目的。

0x03流量處理(開始劫持)

捕獲到流量之后,要做內容的竊聽和劫持這里分為兩個情況,一個是網關模式,另外一個是交換機旁路模式。

因為旁路方式的優點,我們生活中的劫持現象一般都是用旁路方式進行流量注入,我們不用專業設備來處理旁路流量,我們直接用python之類的軟件實現。

下面來具體介紹怎么針對捕獲的流量進行內容劫持。

3.1 網關模式

網關模式可以理解為數據包直接經過我們的設備,這個時候可以通過IPTABLES來控制用戶的流量走向,直接轉發到我們的惡意代理即可。

HTTP劫持

我們可以創建個代理,然后對其中的http協議的數據進行劫持修改,首先需要手動把用戶的80端口http流量導入到我們的程序里面:

然后用mitmf創建代理,比如把”買服務器”改為”買IPHONE”,命令:

注意如果是新版的mitmf,語法已經變了,需要配置/etc/mitmf/mitmf.conf里面的Replace段,比如:

新版的mitmf如果有Content-Type的報錯,需要把/usr/share/mitmf/plugins里面對應的插件里面的

修改為

然后客戶端瀏覽器那里就對上述的字符串改為我們的目的字符串了,效果如下:

上面只是簡單的替換字符串。

我們最常見的應該是下面這個廣告彈窗,可以直接注入js:

效果如圖:

或者可以讓其加載beef平台的js文件,然后用beef來實時控制瀏覽器行為了。

bdfproxy木馬

bdfproxy可以對經過他的流量進行自動識別,識別到是下載動作時候就結合msfconsole進行下載的文件自動分拆,然后加入木馬進行封裝再傳給用戶,讓用戶從正常的通道也下載到含有木馬的軟件或者壓縮包。

修改兩處配置:

然后直接用bdfproxy啟動即可。

注意,這里用戶端下載的時候,獲取到的http頭部除了Content-Length會變為新的長度值之外,別的頭部都不會變,比如我們的APK下載里面的md5值和etag值等,雖然頭部校驗是含有我們正確的頭部,但是內容還是可能會變為別的。

案例如下圖:

DNS劫持

DNS劫持在橋接方式下直接把53端口的流量重定向到我們的程序即可。

類似IPTABLES里面配置:

然后在上面啟動dnschef欺騙程序,把指定的幾個域名所有解析解析成192.0.2.1,其余的正常轉發。

效果如圖:

用戶端界面:

或者啟動一個dnsmasq程序,把hosts指定好,同樣是一個可以做DNS劫持的好用工具,而且這種直接針對53端口的及時換了DNS因為無法避免。

3.2 旁路模式

旁路模式在網絡入侵檢測或者是抓包竊聽時候是最好用的,不影響原來的網絡架構,旁路設備出問題也不會影響到原先的流量,因為配置了旁路之后,交換機只是把原先的流量復制一份到旁路設備,然后就不管了。

旁路設備可以自行對原有的返回流量進行注入,比如優先返回302到別的網站,或者返回RST中斷正常連接。

旁路配置

旁路監聽的話很簡單,比如cisco網絡設備做端口鏡像:

這樣可以在fa0/24端口上接收到別的端口的流量,然后在利用一些抓包工具比如wireshark來進行竊聽。

Linux做網關時候直接在服務器上進行tcpdump抓包即可:

如果是要對旁路抓到的數據包進行處理的話,比如進行劫持,原理也比較簡單,可以做dns劫持或者http劫持,就是旁路設備抓到需要處理的對象之后,在正常數據包返回之前優先返回我們偽造的數據包給用戶,而用戶會丟棄之后正常返回的數據包,因為會話已經重復了。

在要進行劫持時候,需要在monitor session的目標接口的時候需要指定ingress vlan模式。

特別注意這個ingress參數,這個參數導致以前測試一直未成功,如果不加的話會導致旁路設備只可以接收數據而無法發送成功,也就無法對用戶進行實際的內容影響了。

中斷會話

中斷會話這個功能效果就是類似於發送請求之后,我們可以在旁路把這個連接兩端RST斷開會話。

工具是tcpkill這個命令。

比如設置好旁路之后,在eth0上面有所有有關目標用戶的流量經過,然后運行命令:

然后就無法正常連接到目標機器了。

圖例:

會顯示已經向兩端發送了RST請求重置連接了。

dns劫持

這個注入模式稍微高端點,比如在網橋上面也可以做,也可以在自己的dns服務器上實現。當然我們現在是在端口鏡像的旁路時候:

比如網橋上面用dnsspoof來進行解析干擾解析:

hostsfile里面的內容是類似hosts格式的解析,然后用戶端進行解析的時候,這個程序會優先返回結果來干擾正常的解析返回,效果如下:

抓包可以看到這個偽造的結果比正常的dns返回先返回給了用戶,這樣就達到了欺騙效果:

可以看到8.8.8.8這條數據優先1.5毫秒返回給用戶,然后用戶就丟棄了后面的正常響應而使用經過我們篡改的dns結果。

http劫持

下面模擬下旁路劫持用戶流量時候的302跳轉和彈廣告情況。

1. 302跳轉

在旁路服務器上直接監聽網卡然后注入HTTP數據,比如利用的是python的scapy模塊,像github上的hijack.py腳本,簡單修改下L2socket時候的filter匹配條件,格式和tcpdump醫院,效果如下:

這個就是訪問騰訊官網,然后被劫持到淘寶去了的效果。

抓包的結果也是這個302包就快那么點點優先返回給用戶了:

2. 彈廣告

原先網橋模式下面用mitmf插入js地址就可以實現右下角彈廣告的效果。

現在旁路模式不行這樣直接插入,需要對目標站點的某個JS文件進行篡改然后再返回才行。

但是一般的廣告js比較長,不適合一次性以內容方式返回給用戶,而是采用修改js的內容,然后用js再加載js的方式,而且是先加載個帶版本號的正確js,然后再加入廣告就是,參考內容如下:

也就是以前見到過玩家的js內容被修改了,然后加載了廣告js的效果。

然后具體實現需要修改之前的hijack.py代碼來做,比如先判斷好我們需要劫持的js具體URL,然后給這個js返回我們的上面一段內容(jscode)即可。

劫持效果如下:

js的加載情況:

如果再加些邏輯處理,然后打包起來就可以是一個專業的劫持后台了。

0x04總結

隨意劫持用戶流量是非法而且非常惡心的事情,不過“技術無罪”,了解下其中的技術還是對我們的IT工作中會有所幫助。

如果發現家里網絡遇到了運營商廣告劫持,或者跳轉賭b網站/黃s網站,直接打電話去工信部投訴即可,上面會查的

投訴可以參考:

http://www.360doc.com/content/18/0106/10/36560257_719489651.shtml


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM