1. 程式人生 > >運營商進行網路劫持的前生今世+劫持的危害

運營商進行網路劫持的前生今世+劫持的危害

原文地址:https://www.v2ex.com/amp/t/255600

運營商進行網路劫持的前生今世+劫持的危害

2016-02-06 00:00:52 +08:00

raysonx  raysonx

西元 2016 年 2 月 5 日晚
(注:本人只是一名技術人員,憑專業知識和經驗寫成本文,並非運營商員工,如有錯誤還請各位看官指出。)

0. 前言

網際網路行業的火( pao )熱( mo )真是讓豬也飛起來了,而運營商的日子卻不怎麼好過。
面對傳統話言簡訊業務收入下滑,辛辛苦苦建設的光纖網路和 3G 、 4G 基站成本沒收回來又被要求提速降價,相對於其他壟斷行業,運營商真是個軟柿子。
看看國內絕大多數網民都是小白級別,連設定家用路由器都玩不利索,於是運營商打起了各種如意算盤……

1. 從最原始的 DNS 投毒談起

DNS 作為網際網路的基礎設施之一,起到把域名轉換成 IP 地址的作用,比如 www.baidu.com --> 115.239.211.112 。
各大運營商通常會以省為單位建設 2-4 臺遞迴(或快取) DNS 給使用者使用,在 PPPoE 撥號時自動配置。
假若使用者輸錯了域名,正常情況下 DNS 伺服器會返回 NXDOMAIN ( nonexistent domain?)錯誤,然後瀏覽器或應用程式會報「域名無法解析」錯誤。
運營商通常會對 NXDOMAIN 結果進行汙染,返回一個假冒的 IP 地址,這個 IP 地址指向運營商的伺服器,於是你便看到了「貼心」的滿屏廣告的各種網址糾錯頁。
這種方式簡單粗暴,使用者一般也不會太反感,而且似乎也不會違反任何法律法規(?)。
我曾見過個別地區的某運營商竟然對正常網站也有一定概率劫持到糾錯頁,不過這種現象現在很少見了。

2. HTTP 劫持,你奈我何?

只在使用者輸錯網址時才會顯示廣告內容,太不給力了吧?!特別是現在大多數人多用手機 APP 或是用搜索引擎找網站,根本不可能輸錯網址好不好!更可氣的是現在居然有了很多第三方的無劫持的公共 DNS (這裡有一份公共 DNS 列表),由於沒有廣告,使用者都跑去用他們的服務了,這可不妙。於是運營商靈機一動,轉而在 HTTP 協議上做手腳。
HTTP 協議是全球資訊網( WWW )的基石。瀏覽網頁時,地址覧最前方的 http://即表示當前正使用 HTTP 協議(現最新版的 Chrome 、 Safari 、 Edge 會隱藏這個協議字首,可能以後的小白越來越不知道什麼是 HTTP 了)。
目前手機上的 APP 和伺服器通訊時大多也採用 HTTP (基於 HTTP 的 API 或者直接內嵌網頁),只是你不能用肉眼一下子看出來而已。
HTTP 協議本身未提供任何的安全措施,你和伺服器之間的通訊可以被任何中間裝置竊聽、記錄、篡改,甚至目標伺服器本身都可以偽造。
於是便有了:上網時正常頁面被植入廣告或惡意程式碼,連使用手機 APP 都不能倖免(如

求問怎麼找到運營商劫持加廣告的事實依據),上 A 網站卻有一定機率被跳轉到 B 網站等(如扒皮-聯通是如何劫持任意網站到攜程的),訪問網站被多次跳轉並被新增返利小尾巴等。
由於資訊不加密,意味著運營商可以隨意記錄並出售你的上網資料。更為安全的 HTTPS 協議則完全沒有上述提到的問題,只要你別忽略瀏覽器的報的證書錯誤(如訪問 12306.cn 時),你和伺服器之間的連線就是安全的(當然你的裝置要是中毒了當我沒說)。之前淘寶沒啟用 HTTPS 加密連線之前,經常有人在淘寶上買完東西后馬上收到詐騙電話,訂單號、收件人等各種私密資訊均被洩露,估計和某些運營商脫不了關係。

這種劫持屬於違法甚至犯罪行為,見青島聯通劫持百度流量被罰 20 萬元 百度助警方破獲全球首例打擊流量劫持刑事案件
目前,國內外的許多網站已開啟全站 HTTPS 加密,如 Google 的各類產品(包括 YouTube )、 Facebook 、 Twitter 、 Wikipedia 、淘寶、天貓、百度搜索。另外知乎和 V2EX 都已支援 HTTPS 方式訪問(但沒有強制 HTTPS ),聽京東的同學講京東也正在測試全站 HTTPS 。 Google 已經表示對於啟用全站 HTTPS 的站點,在搜尋排名上會優先顯示,鼓勵各網站啟用 HTTPS 。新版的 Chrome 和 Firefox 瀏覽器已經支援速度更快的 HTTP/2 ,但只支援啟用了 HTTPS 的站點。可見,將來會有越來越多的網站轉而使用 HTTPS ,明文的 HTTP 會被冷落, HTTP 劫持終會成為歷史。

3. 談一談所謂的「良性」劫持

使用者跨運營商訪問網路時,運營商可能需要為使用者支付網間結算費用。比如中國移動寬頻使用者訪問位於中國電信網路的伺服器,中國移動必須為這些流量或頻寬支付給中國電信網間結算費用。
由於眾所周知的原因,網間結算費用十分昂貴,為了節省網間互聯費用,部分運營商部署了快取伺服器,在使用者跨網訪問時,採用技術手段將使用者與目標伺服器的連線劫持到自家的快取伺服器上。
各小區寬頻運營商和部分地區的移動最愛幹這事,二大基礎電信運營商(中國電信和中國聯通)一直不存在這個現象。但從 2016 年 1 月起聯通也開始部署這套東西了。也就是說,目前不存在快取劫持的網路在中國只剩中國電信一家,這真是我國網路的大退步啊。
樓主曾於 2016 年 1 月 19 日將此事投訴給工信部電信使用者申訴受理中心,兩天後劫持現在全國消失,於是樓主撤訴。但最近幾天劫持又來了,樓主在 2 月 3 日又重新向工信部投訴了一次,但願這事能有個好結果(雖然不抱太大希望)。樓主第一次投訴時曾開了個帖子記錄投訴過程,見直播投訴聯通寬頻和資料網路( 3G-4G )的 HTTP 鏈路劫持行為

4. 樓主對所謂「良性」劫持的看法

堅決反對。
有人說,聯通的快取劫持加快了某些境外網站的訪問速度啊,體現了聯通改善使用者體驗的誠意啊 balabala (如我投訴直播帖 66 樓),但我覺得這件事情沒那麼樂觀。
因為劫持本質上並沒有提高網間互聯頻寬,網際網路的本質是點對點互聯,快取劫持只是造成了網間互聯性的假象,當你使用非 HTTP 協議時,頻寬不足的問題就出現了。
聯通出於成本考慮,在接入網頻寬日益上升的大環境下,不去對骨幹網和互聯頻寬擴容,反而去搞快取劫持,可以預見到以後的網間互聯問題會越來越突出。
上面說過,全站 HTTPS 是大勢所趨,可以預見,在 HTTPS 流量越來越多的前提下,快取劫持將變得越來越沒有意義。和各大網站合作發展 CDN 才是王道。

5. 「良性」劫持的危害

個人觀點表達完了,我們來看看這種劫持是否合乎法律法規。

《中華人民共和國電信條例》 第五十七條 任何組織或者個人不得有下列危害電信網路安全和資訊保安的行為: 
(一)對電信網的功能或者儲存、處理、傳輸的資料和應用程式進行刪除或者修改; 
(二)利用電信網從事竊取或者破壞他人資訊、損害他人合法權益的活動; 
(三)故意製作、複製、傳播計算機病毒或者以其他方式攻擊他人電信網路等電信設施; 
(四)危害電信網路安全和資訊保安的其他行為。 
第六十五條 電信使用者依法使用電信的自由和通訊祕密受法律保護。除因國家安全或者追查刑事犯罪的需要,由公安機關、國家安全機關或者人民檢察院依照法律規定的程式對電信內容進行檢查外,任何組織或者個人不得以任何理由對電信內容進行檢查。 
電信業務經營者及其工作人員不得擅自向他人提供電信使用者使用電信網路所傳輸資訊的內容。 
第六十六條 違反本條例第五十六條、第五十七條的規定,構成犯罪的,依法追究刑事責任;尚不構成犯罪的,由公安機關、國家安全機關依照有關法律、行政法規的規定予以處罰: 
第六十九條 違反本條例規定,有下列行為之一的,由國務院資訊產業主管部門或者省、自治區、直轄市電信管理機構依據職權責令改正,沒收違法所得,處違法所得 3 倍以上 5 倍以下罰款;沒有違法所得或者違法所得不足 5 萬元的,處 10 萬元以上 100 萬元以下罰款;情節嚴重的,責令停業整頓: 
(四)擅自中斷網間互聯互通或者接入服務的

《全國人民代表大會常務委員會關於維護網際網路安全的決定》
四、為了保護個人、法人和其他組織的人身、財產等合法權利,對有下列行為之一,構成犯罪的,依照刑法有關規定追究刑事責任:
(二)非法截獲、篡改、刪除他人電子郵件或者其他資料資料,侵犯公民通訊自由和通訊祕密;

唔,這種良性劫持說到底還是檢查了使用者的訪問內容,切斷了使用者與目標伺服器的通訊,估計法律法規上這一關很難過得去。

聯通的快取劫持是通過用 HTTP 302 重定向報文搶答實現的,下面是我整理的快取劫持對普通使用者的危害:
一、可能造成網站和 APP 功能故障。 
1. 快取更新時間及失效時間對使用者和網站不可控,快取的舊資料和新資料無法在時間上保持一致性,可能引發一些「奇怪」的問題。比如好多軟體的最新版本下載地址是不變的,如 http://www.example.com/download/latest.exe ,由於快取的原因會讓你一直下載到舊版本。這可能會影響到部分軟體的自動更新、自動升級功能。還有如網頁中部分資源引用到舊資料導致網頁排版和功能異常,驗證碼被快取導致驗證碼怎麼都輸不對等問題。
2. 由於劫持的方式是使用 HTTP 302 重定向指令,有的應用可能只接受 HTTP 200 OK 為正確的響應,不會識別 HTTP 302 Found 指令,造成通訊故障。 
3. 劫持後網址經生變化,可能會觸發瀏覽器和部分程式的跨站保護功能,導致網頁上的指令碼程式無法執行。或者由於相對路徑發生變化導致 HTTP 404 錯誤。
3. 從技術上快取系統只能通過 URL 來區別不同的資源,不能識別具有相同 URL 的不同資源,這會導致資源載入錯誤。比如看視訊時,出現前一段和後一段內容不一致,下載 Windows 7 系統的驅動結果下載完成後發現是 Windows XP 的驅動,帶有敏感使用者資訊的檔案被快取後對所有人可見等安全問題。 
二. 快取伺服器具備篡改或出售快取資料的隱患,對資訊保安不利。目前部分地區的使用者已經在網上討論過下載 A 軟體卻被替換成 B 軟體的情況。
三. 快取伺服器故障時,會造成大量使用者「部分斷網」。 
四. 快取伺服器頻寬和處理效能有限,據網上反映由於快取伺服器經常報 HTTP 403 、 502 錯誤,導致資源無法載入,或由於快取伺服器超載導致載入速度緩慢。 
五. 快取伺服器可能觸發部分網站的反爬蟲(反機器人)、反盜鏈機制,快取的內容是伺服器報錯資訊,導致資源無法載入。 
六. 破壞了 URL 對使用者的透明性。假設使用者將劫持後的連結分享給其他人,而聯通對快取伺服器做了訪問控制,將會導致連結無法在外部開啟;另外如果快取失效而又沒有及時更新的話,可能導致使用者無法通過此 URL 訪問被引用的資源。 
七. 損害了 IDC 和 CDN 的利益,此種網路劫持使 IDC 和 CDN 的流量大幅減少,影響 IDC 和 CDN 的流量收入。題外話,話說聯通為何不提供商業 CDN 服務而偏要搞劫持? 
八. 目前聯通的劫持依靠 TCP 搶答的方式,但原始資料包還是會到達目標伺服器並被正確響應。就我抓包的情況來看,雖然你訪問資源時被 HTTP 302 資料包重定向到了聯通的快取伺服器,但原目標伺服器的 HTTP 200 響應還是會被送到使用者端,且由於得不到使用者端的確定不斷觸發超時重傳,極大地浪費了使用者頻寬。

6. 有人問,為什麼運營商多采用 HTTP 302 跳轉進行快取劫持而不是直接反向代理篡改原始資料

問這個問題的朋友是考慮到用 HTTP 302 劫持容易被發現,只接作為反向代理進行篡改比較隱藏難以發現。
我的看法是,不考慮成本的話可以這麼做,但是不考慮成本肯定是在耍流氓。
從技術人員的角度看, HTTP 302 跳轉方式部署起來最容易,成本最低。因為不需要對原有裝置進行改造,只需要在交換機上以分光並聯的方式進行連線即可。劫持裝置的 DPI (深度包檢測)系統可以實時探測使用者和正常伺服器的通訊內容,可根據網路狀況、劫持伺服器負載、使用者身份、訪問內容、劫持概率等按需進行劫持。劫持時,只要偽造目標伺服器的身份搶在真正的伺服器之前向用戶傳送一條 HTTP 302 報文讓使用者跳轉到新地址即可完成劫持。劫持裝置與路由裝置分離,方便維護。
而如果直接篡改原始資料,則需要對原有裝置進行改造,串聯進路由裝置,對每一個通過的資料包進行探測,決定放行或劫持。由於無法從目的 IP 判斷資料包應發往真正的伺服器還是截持伺服器,這種系統還要為每個使用者維護一份連線會話資訊來作區分。可以想象的是,這套系統將對網路效能產生巨大的負面影響,並且難以維護。另外只要搞劫持,不論方式多麼隱藏,時間久了就肯定會被使用者發現(比如我)。反正這部分使用者都會投訴,幹嘛這麼大費周折呢?

小結

從目前的國情看,投訴不一定能解決問題,但是不投訴運營商會更加肆無忌憚。這幾天有時間我會陸續在 V 站發一些如何發現運營商劫持和如果收集劫持證據的個人經驗。希望能有越來越多的朋友為維護祖國的網路環境出力。

6724 次點選