不同的配方,相同的味道。App Store 一直都在飛快地發展,現在這塊蛋糕越來越大,尤其是在中國地區。所以,想要從這塊蛋糕上嘗到甜頭的人也越來越多。做法正經的,我們叫他們商人;做法不正經的,我們只能稱之為奸商甚至是犯罪份子了。可憐開發者,要背鍋了。
罪惡之源被曝光
“我們已經了解到,一系列采用第三方移動廣告 SDK 進行開發的 iOS 軟件會通過私人 API 擅自收集用戶的個人信息,包括郵箱地址、設備序列號以及路由數據等等。然后,這些軟件把用戶數據傳向一家名為有米的移動廣告供應商所設的服務器,開發者所使用的 SDK 也是由這家供應商所開發的。
這種行為已經違反了我們的安全與隱私準則,所以使用有米 SDK 進行開發的軟件將會從 App Store 下架,提交的審核也會被拒絕。蘋果正在與開發者進行緊密合作,幫助他們將自己的軟件進行升級,以配合 App Store 的準則,保證用戶信息的安全,盡快讓受到影響的軟件回到 App Store。”
上面這一段話,是蘋果發言人向代碼數據分析機構 SourceDNA 發送的一次最新回應,因為后者在近日有一段了不得的發現:App Store 當中有一大批軟件會通過私人 API 收集用戶資料,然后傳向有米的服務器。有米,這是一家來自中國的移動廣告供應商,他們自己有一套 SDK,與之合作的開發者可以使用他們的 SDK 來開發軟件。
通過使用自家的檢測工具,SourceDNA 在 App Store 當中發現了至少 256 款使用有米 SDK 來開發的軟件,所收獲的累計下載次數超過 100 百萬次,這些軟件將會被蘋果一一下架(目前已經有一批被下架),其開發者基本上也都來自于中國。一直以來,蘋果都不允許第三方 SDK 帶私有 API,但這一次有米明顯是繞過了 App Store 的審核機制。
根據 SourceDNA 公布的信息,使用有米 SDK 開發的軟件會收集以下信息:
1:安裝應用的具體列表
2:iOS 設備序列號(識別號)
3:硬件及外接設備的標識符等信息
4:Apple ID 郵件地址
據了解,有米通過私有 API 收集用戶信息已經不是一天兩天的事兒了,他們早在兩年之前就開始這么干,并隨著時間的推移越來越肆無忌憚。也許是因為有米有特別的隱藏數據收集行為的技巧,蘋果也一直沒有發現他們所干的勾當。收集了兩年的用戶資料才被發現,他們到底是怎么做到的呢,我們先來看看 SourceDNA 是怎么發現的。
背后的技術解析
iOS 的二進制文件包括 ARM 機器代碼,SourceDNA 會對這一些代碼進行解析。調用一個 Objective-C 方案時,它是通過 objc_msgsend 來進行矢量導航的,而且它是以字符串的方式來接收類別及方案。一般情況下,在調用 objc_msgsend 之前這些字符串可以通過查看數據參考來完成靜態解析。SourceDNA 會跟蹤這些調用目標類別/方案的起源和目的,然后建立一個調用圖,用來探測每個(受到影響的)應用程序是使用了哪種方案。
然而,在某些情況下,這些參數是不能被靜態解析的。因為它們只是字符串,它們可以在運行時通過任何字符串操作例程來創建。所以,一些工具會利用這種特點來混淆類別和方案的名稱,在調用 objc_msgsend 之前解擾字符串。
一款應用程序還可以通過調用 dlopen 來加載一個全新的資料庫,然后通過調用 dlsym 在這個資料庫里面訪問相應的函數或數據。這樣一來,動態鏈接器在指定的文件中就會進行勘查(首先檢查它的代碼簽名),然后查找給定的符號地址。由于資料庫和符號名稱都是字符串,因此也可以在運行時創建。
SourceDNA 對這一個在數以百萬計應用程序當中存在的代碼行為進行了解析,主要是確認運行時間里的資料庫加載是否被拿來訪問私有的 API接口,SourceDNA 對他們所收集到(應用程序)資料進行排查,如果符合以下條件就證明應用程序會收集用戶的個人信息:
-調用dlopen、dlsym 或 nsclassfromstring / nsselectorfromstring
-通過各種字符串控制函數來生成參數
經過排查發現,有幾百款應用程序符合他們的設定。這些應用程序使用的是 sprintf 和 %s 格式字符串以及 %@ 和 NSString stringwithformat:。SourceDNA 為此還通過使用附近的靜態字符串寫了一個腳本來擴展這些格式字符串,然后對重構的參數進行聚合。最后,就得到了有米 SDK 試圖收集用戶個人信息的證據。
至于為何有米通過私有 API 收集用戶資料的行為這么久才被發現,主要是因為這家移動廣告商通過枚舉電池系統等外接設備突破了蘋果的限制,并且又以硬件標識符的方式對設備的序列號進行搜集,因此很難被查到。據了解,這是自 App Store 在 2008 年上線以來,第一次有人以這樣的方式來繞過蘋果的審核機制。
蘋果做法可點贊
這一次的有米 SDK 事件很容易讓我們想起不久之前的 XcodeGhost,因為中招的都是 App Store,而且源頭都是中國區。不過,其影響范圍可不僅僅是中國。上一次的 XcodeGhost 事件,主要是因為開發者使用了來源不明的 Xcode 開發工具所致,影響到的都是像微信、鐵路 12306、聯通手機營業廳、高德地圖等非常熱門的軟件,蘋果也因此在第一時間對受到影響的軟件進行了暫時下架處理。
在本次事件中,SourceDNA 并沒有列出他們探測到的 256 款應用程序名單,目前我們所知中國版的麥當勞 App 已經因為該事件而遭到下架處理。我們還通過有米的官網了解到,像唯品會、淘寶網等知名 App 是他們的合作伙伴,至于是否受到影響目前還不得而知,有米方面至今還未對此報告作出回應。
好在,無論是涉及到用戶安全還是隱私問題,蘋果的態度一直都是“堅決擁護”。XcodeGhost 事件如是,有米 SDK 事件如是,蘋果都在第一時間作出反應,該封殺的就封殺。
iOS 平臺也不是沒有出現過安全事故,但此前我們看到的惡意軟件感染事件基本上都是黑客直接把病毒植入偽裝的應用程序內,又或者是通過外部鏈接來引誘 iOS 上當。然而這一次的 SDK 以及上一次的 XcodeGhost 事件,不法份子則是通過開發軟件的源頭下手,《福布斯》雜志稱之為“一種全新的方式”。
近段時間曾有調查發現,中國已經成為 iOS 應用最重要的市場,因為中國區的 App Store 應用下載數已經超過了美國(收入上還落后)。隨著 App Store 下載量的進一步提升,中國區應用市場這塊蛋糕也越來越大,而盯上蛋糕的黑客也自然越來越多。也許不久之后,我們又會見到“一種全新的方式”。
最后說一句,在本次事件當中,開發者也很可憐的,因為他們很有可能也不知道自己開發的應用會搜集用戶的信息,因為有米根本沒有告訴他們。