阿里巴巴支付寶的一個進程Alipaybsm.exe被懷疑監控網絡流量,它會復制發送的數據到接收緩沖中。
在接下來的篇幅中,我要講一個目前還沒結束的故事。故事可能還會繼續發展下去,也可能因為我的懶而就此打住。但至少我覺得目前已經有足夠有意思的信息可以讓諸位知道了。這件事,跟支付寶有關,跟(網絡)信息安全也可能有一些關系。有興趣的朋友,可以接著看下去。
我以前曾寫過一個服務器Ping值測試程序(參見這里《寫了個批量測試服務器Ping值的小工具》)。這個程序一直都能滿足我的需要,直到有一天在我老婆的筆記本Win7 x64系統上遇到了問題:對幾乎所有的IP,我這個程序的Ping都很快收到了回應,快得不正常,幾乎就像做了個本地調用一樣,與實際情況不相符。于是我打算看看這是怎么回事情。
當時我人在公司,VC6遠程調試又不方便。最后靠著DbgView終于搞清楚了:接收到的數據中,多出來了一份不正常的東西。我之前的代碼,并沒有估計到這份不正常的數據可能會出現,所以處理上出了些問題。
OK,這算是我的Bug。可這“不正常的數據”到底是什么東西?我把它Dump出來一看,還真是有點奇怪!ICMP Type是8,源地址和目的地址則與預期的Echo回應包剛好相反。算上sendto時候系統自己加上的IP包的包頭,跟我送去發送緩沖區里的數據那是一模一樣。
要解決我程序里的這個問題非常簡單。但是另一個問題就不那么好回答了:為什么其它電腦上不會這樣,偏偏這臺電腦會出現這種奇怪的事情?
直接答案很簡單——它一定跟別的電腦有什么地方不一樣!
那么還有第二個問題:到底是什么地方不一樣呢?
可以說是我的幸運,也可以說是阿里集團的不幸。因為我的Taskmgr里面進程列表設置為按ASCII字母序排升序的緣故,我很快就找到了這第二個問題的答案:Alipaybsm.exe。殺掉Alipaybsm.exe這個進程,前面提到的那份“不正常的數據”就不再出現。而這個Alipaybsm.exe似乎由AlipaySecSvc.exe在守護,過了一會兒就又自己啟動起來了。它一出現在進程列表中,我一試,哈,那個奇怪的現象就又出現了。
后來,我把這事情在Twitter上說了一下,還引發了一場小小的討論。
我目前還沒完全想明白Alipaybsm.exe這樣做的目的是什么。初步感覺,有可能是跟背地里監控網絡流量有關。畢竟,目的地址不正確的數據,就算被放入Socket接收緩沖里面,在網絡層與傳輸層之間估計也被濾掉了。我這次是因為用了SOCK_RAW,需要自己下到網絡(IP)層來處理數據,才碰巧發現了這個情況。如果只是在傳輸層(TCP/UDP)從事工作,估計不會有任何察覺。
只不過,反過來講,如果能做到復制數據到Socket接收緩沖,那應該完全可以做到監控流量而不帶任何痕跡才對。所以我目前還只能理解為,Alipaybsm.exe想完全監控網絡流量,所以利用了這個手段(復制發送的數據到接收緩沖中),但干這事屁股沒擦干凈(也可能沒法擦干凈),才產生了我遇到的這些情況。
我本來以為當時那個Alipaybsm.exe是個假貨。但看EXE的詳細信息,以及綁定的數字證書,都像是支付寶官方的真貨。我又以為那只是一個不成熟的版本,可能有Bug,但我前兩天為了轉一筆賬,又去下載并安裝了一個支付寶安全控件,然后它又出現了,帶著它那奇怪的行為又出現了。
所以,我們來仔細看看這貨吧:
看上去挺正常吧?
在Twitter上討論的時候,有人表示,在Mac上用防火墻沒觀察到有這個現象。為此,我今天特意去確認了一下:在Windows上抓包,也觀察不到這個現象。我估計,只有自己寫基于SOCK_RAW的程序,才能收到這些數據。為了檢查這種特殊的行為,我專門寫了個小程序AlipaybsmTester,基本上就是一個單地址單次單線程的PingTester。
從這幅截圖中可以看到,Microsoft Network Monitor只抓到了一來一回共兩個包,但我的測試程序發了一個包收到了兩個,內容各不相同。如果殺掉Alipaybsm.exe,那就只會收到后一個包了。
接下來再看看這個Alipaybsm.exe的一些更好玩的事情:
很奇怪的是,它其實并不是隨著“支付寶安全控件”(Aliedit.exe)裝上去的。當你登錄支付寶,根據Web頁面上的提示安裝了“支付寶安全控件”時,只會在Program Files (x86)alipay下面建一個名字叫alieditplus的目錄。
但是過一會兒(我這次過了30分鐘左右),在alieditplus下面會出現一個update目錄,并下載一個SafeTransaction_Setup.exe放在其“jobfile mpzip_1009_”子目錄中(不同時期不同環境中路徑可能會有所不同)。隨后Program Files (x86)alipaySafeTransaction目錄便出現,里面就有Alipaybsm.exe(當然還有一些別的)。
我在網上想搜一下關于這個Alipaybsm.exe或SafeTransaction_Setup.exe的相關信息,發現少得可憐。Alipay官方完全沒有提到過這些東西,好像它們是感染了AIDS的私生子一樣。不過每個安裝了支付寶安全控件的電腦上,估計都會有這些個東西(還有個AlipayDHC也值得注意)。我認為以這種方式進行推廣的程序,很可能另有其目的,不見得真的是保障個瀏覽器安全這么簡單。如果真是為了保障瀏覽器安全,完全可以公開(乃至大張旗鼓地)宣傳,然后打包到安裝包里一起分發下去正大光明地安裝,不是嗎?
PS: 我后來發現,殺掉AlipaySecSvc.exe也會導致復制數據包的現象中斷,并且重啟該服務之后,恢復現象花的時間比單單殺掉Alipaybsm.exe要長。可見Alipaybsm.exe的角色大概只是一個行動的發起者和結果的分析者,具體對流量實施監控的行為,很可能是它去調用AlipaySecSvc.exe中的某些個服務來完成的。這說明對于“支付寶安全控件”本身也不能掉以輕心。相關功能其實可能一直就放在AlipaySecSvc.exe中,只是沒有人來扣扳機而已。而這個扣扳機的可以是Alipaybsm.exe,也可以是別的誰,那誰誰誰。