關於應用寶劫持的技術分析

你有沒有遇到過下面這些情況:

  • 在手機上下載 XX 應用安裝包時,打開下載回來的安裝包後發現根本不是 XX 應用,而是應用寶
  • 一些應用提示更新,更新包下載完成之後,你發現根本不是這個應用的安裝包,而是應用寶
  • 在一些國內安卓市場上下載應用時,本來安裝的是 XX 應用,但安裝成功後發現實際上安裝的是應用寶

如果你遇上過上面任何一種情況,恭喜你,你被劫持了。

爲了通俗地解釋應用寶劫持是怎麼回事,首先我們需要了解下載是怎樣進行的。

———-下面是科普內容,專業人士可跳過——————–當你要下載某個應用的時候,會經過下面幾個步驟:

  1. 我:我需要下載 XXX 文件
  2. 服務器:給,這是你要的文件

其實基本的流程很簡單,不過有時候,這個流程會稍微複雜一些:

  1. 我(對服務器 1):我需要下載 XXX 文件
  2. 服務器 1:這個文件不在我這裏,你去服務器2那裏下載
  3. 我(對服務器 2):我需要下載 XXX 文件
  4. 服務器 2:給,這是你要的文件

這叫做重定向,我們本來是想去服務器 1 上下載文件的,但是服務器 1 告訴我們去服務器 2 上下載,最後我們就到服務器 2 上下載了。

應用寶劫持的過程是這樣的:

  1. 我(對服務器 1):我需要下載 XXX 文件
  2. 應用寶劫持黑手(搶在服務器 1 前面回答):你要的文件不再我這裏,你去服務器 XX 那裏下載(注意,XX 服務器是應用寶劫持黑手給出的,我們一旦去 XX 服務器下載,就會下載到應用寶)
  3. 我(對服務器 XX):我需要下載 XXX 文件
  4. 服務器 XX:給,這是你要的 XXX 文件(其實不是 XXX 文件,而是應用寶)

然後你下載回來的安裝包就是應用寶的安裝包了。

——————-上面是科普內容,專業人士可跳過——————-

下面開始技術細節的討論。

應用寶的劫持很聰明,它在一段時間內僅僅做一次劫持,根據我的體驗,可能是 24 小時。也就是說,如果你已經被劫持過一次,那麼在接下來的 24 小時內,你都不會被劫持了,可以正常下載 APK 安裝包了。

這是一個很聰明的策略,在劫持用戶的同時不會引起用戶太多的反感,也不會實質性地影響用戶的下載(因爲用戶可以重新下載,而重新下載時是不會被劫持的),這樣,就不會引起大規模的用戶投訴。不得不承認,幕後黑手確實很狡猾。

有些人認爲這是 DNS 劫持,其實不是的,DNS 劫持要做到這種效果,其實代價很大。要做這樣的劫持,HTTP 流量劫持是最好的。事實上,從 Google Play 上安裝軟件就不會被劫持,這可能是 Google Play 在下載安裝包的時候使用了加密的連接。

幕後黑手的另一個狡猾之處是,它僅對試圖下載 APK 文件的流量進行劫持,甚至,它可能還會使用 User Agent 的信息,僅僅劫持 Android 系統的流量。這就把流量劫持限定在了 Android 用戶身上,而不會對其他用戶造成任何影響,這就進一步降低了用戶投訴的數量。

事實上我自己已經被劫持過多次,但是因爲在一段時間內僅僅會劫持一次,所以在被劫持之後再去收集證據就變得比較困難。我在被劫持了多次之後,終於摸索到劫持的規律,也就是一段時間內僅劫持一次。摸索到這個規律後,我就估摸着劫持快要發生的時候,先打開 Wireshark 進行抓包,然後再嘗試下載 APK 文件,最後抓到了應用寶劫持流量的證據。

不出所料,應用寶確實是劫持 HTTP 流量的,下面三張截圖很清晰地反應了這一事實:

應用寶劫持抓包數據-01

這是第一張圖:我發起了一個 APK 下載請求,請求下載小米運動的最新版。圖中可以看到,請求的文件後綴是 apk,User Agent 顯示我是 Android 系統,這已經給了劫持方足夠的信息:這是一個可以劫持的流量。


應用寶劫持抓包數據-02

這是第二張圖:劫持方搶在服務器之前回應了我的 HTTP 請求,並使用 HTTP 302 重定向告訴我應該去 s3.fenghaoda.com 上下載這個文件。請注意,這個 TCP 包的 ACK 是 305。此時,我已經被引導到劫持者給出的下載地址去了。


應用寶劫持抓包數據-03

這是第三張圖:這是真正的服務器回包,ACK 也是 305,但由於劫持者的包先到達,所以這個包被當作重複包被操作系統丟棄了。可以看到,雖然這個包也要求進行 HTTP 302 重定向,但重定向地址明顯是真正的下載地址。

以上三張圖已經可以作爲應用寶進行 HTTP 流量劫持的證據了,下面來討論一些其他的問題。

流量被劫持到了 s3.fenghaoda.com 這個域名上,我對這個域名做了 WHOIS 查詢,得到信息如下:


Registry Registrant ID:
Registrant Name: yujie
Registrant Organization: yujie
Registrant Street: beijing
Registrant City: shi jia zhuang shi
Registrant State/Province: he bei
Registrant Postal Code: 100000
Registrant Country: CN
Registrant Phone: +86.05922669759
Registrant Phone Ext:
Registrant Fax: +86.05922669759
Registrant Fax Ext:
Registrant Email: [email protected]
Registry Admin ID:
Admin Name: yujie
Admin Organization: yujie
Admin Street: beijing
Admin City: shi jia zhuang shi
Admin State/Province: he bei
Admin Postal Code: 100000
Admin Country: CN
Admin Phone: +86.05922669759
Admin Phone Ext:
Admin Fax: +86.05922669759
Admin Fax Ext:
Admin Email: [email protected]
Registry Tech ID:
Tech Name: yujie
Tech Organization: yujie
Tech Street: beijing
Tech City: shi jia zhuang shi
Tech State/Province: he bei
Tech Postal Code: 100000
Tech Country: CN
Tech Phone: +86.05922669759
Tech Phone Ext:
Tech Fax: +86.05922669759
Tech Fax Ext:
Tech Email: [email protected]

通過這些信息,可以看到一些有趣的東西:

註冊城市和省份寫的是石家莊市,但郵編和接到地址卻寫了北京,而聯繫電話的區號是 0592,這是廈門的區號。

組織名和註冊人名字都是 yujie,看來這是個人行爲?或者是實施此行爲的組織內部管理不夠嚴格?

註冊人可能將 QQ 郵箱作爲主郵箱,從概率上來說,此人的技術水平很有可能低於平均值。

DNS 服務器對應的是 DNSPod 的個人專業版服務器。

此人不會使用 WHOIS Privacy 保護自己(都上 DNSPod 的收費版了,可能會沒錢上 WHOIS Privacy 嗎?)

直接訪問 www.fenghaoda.com,得到 HTTP 403 錯誤,訪問 www.fenghaoda.com/robots.txt 還是得到 HTTP 403 錯誤,使用搜索引擎查詢 site: www.fenghaoda.com 沒有結果。
好吧,直接訪問 fenghaoda.com ,結果發現這是一個面向移動端的網站,網站內容看起來像是一個應用市場。網站最下方署名“西昌時空文化傳媒廣告有限責任公司”。

應用寶被劫持到的地址是 http://s3.fenghaoda.com/Download/main?pid=5 ,我把 pid 參數改成其他值,發現可以下載到 PPAssist,SogouMall 之類的應用。看來這些廠商也會劫持用戶的流量?當然這不一定,也有可能是廠商提供安裝補貼,然後某些人就以流量劫持的方法謀取這些補貼。這是我接下來要討論的問題。

那麼,劫持流量的人是誰?我們沒有直接的證據,只能猜測。

從目前蒐集到的信息來看,實施劫持流量的可能是下面幾種人或組織:

  1. 電信運營商主動劫持,並獲取廠家的應用安裝補貼。
  2. 黑客以牟利爲目的自發地進行劫持。
  3. 廠商自己花錢請人(可能是黑客、運營商官方或者是運營商內部有權限的工作人員)劫持流量,推廣自己的應用。

首先第二種,也就是黑客自發劫持不太可能。以“應用寶 劫持”爲關鍵字搜索一下就會發現,這個現象在全國都有,憑黑客一人或幾人之力不太可能在全國進行如此大規模的劫持。

第一種和第三種情況都需要有運營商的參與,事實上這也和觀察到的現象比較符合——僞造的 HTTP 回包比真正的 HTTP 回包更早達到客戶端,而且延遲很短(從圖上可以看出,從發出請求到收到假回包,時差只有不到 10 毫秒),這表明包很有可能是在較近的路由上發回來的,這就需要運營商的支持才能做到。如果在網站服務器所在機房進行劫持,假回包的時差不可能這麼小。

從目前蒐集到的信息來看,也就只能把可能性縮小到第一種和第三種情況上了。但是,不管是哪種情況,運營商都是難辭其咎的。

於是,又到了工信部出場的時候了,如果你再次遇到了被劫持的情況,就可以向工信部投訴,投訴理由可以是這樣:

“我認爲電信運營商劫持流量,將我要下載的應用替換成別的應用,這嚴重影響了我的下載體驗。我要求運營商停止劫持行爲,並給予合理補償。”

當然,運營商肯定會矢口否認,這時候,你可以再次投訴,投訴口徑如下:

“我遭到了 HTTP 流量劫持,由於運營商否認是他們進行流量劫持,故我認爲流量劫持是由於黑客攻擊了運營商的網絡造成的。我要求運營商加強網絡安全建設,並調查流量被劫持的原因,給出調查結果,同時給予我合理的補償。我已經請專業人士檢查過我的電腦,確認我的電腦沒有中毒,路由器等網絡設備沒有問題,可以確定流量劫持是在運營商的設備上發生的。”

這回運營商就沒辦法了。

其實我早就想投訴了,不過一來懶,二來最近也沒怎麼被劫持了,所以就沒去投訴。現在好不容易抽出時間來寫這篇文章,如果你看到了,被劫持了,行動力又很強的話,歡迎你去投訴。

對了,投訴的時候先直接打運營商客服電話投訴,然後再投訴到工信部並表明你對運營商的處理不滿意,這樣工信部纔會受理哦。

發佈了60 篇原創文章 · 獲贊 18 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章