假面攻擊(Masque Attack)在2014年被首度報導,駭客只要使用相同Bundle ID的變造企業簽章應用程式就能替換掉App Store上的真正程式。Apple隨後就修補了這個漏洞(CVE-2015-3772和CVE-2015-3725),不過當它關上了一扇門,詐騙分子也隨及打開了另一扇窗。Haima重新封裝過的廣告軟體和其原生Helper應用程式證明App Store詐騙仍然存在。
⊙ 延伸閱讀:iOS再曝高危險漏洞,會置換你合法下載的應用程式
趨勢科技在App Store上發現大量使用企業憑證及跟合法應用程式使用相同Bound ID的有問題iOS應用程式。經過深入研究後,我們發現Haima和其他第三方應用程式商店利用iOS程式碼簽章程序內的功能來達成資料繼承,從而完成其惡意行為。我們與Apple進行合作,並在iOS 10解決了這些問題,現在可以防止合法應用程式被造假版本蓋過。但是使用iOS 9.3.5或之前版本的設備仍可能受到影響,因此建議使用者要更新到iOS的最新版本。
潛在風險
不僅僅用來製造山寨版,這些漏洞也造成嚴重的風險,惡意分子可以針對合法應用程式來散布惡意軟體。詐騙者只需要建立跟正版應用程式具備相同Bundle ID的惡意程式,接著利用其熱門程度來誘騙使用者安裝他們的惡意軟體。企業所用的內部應用程式也一樣能夠透過相同Bundle ID來偽造、重新簽章和重新封裝。
對合法應用程式所造成的影響可能有很多種,取決應用程式如何控制自己的資料或如何實作其功能。許多合法應用程式用JavaScript來實作服務,其程式碼會自伺服器取回。利用這漏洞可以讓攻擊者用自己的伺服器連結替換掉原本的連結。讓他們能夠變更應用程式邏輯,接著控制應用程式的行為。
他們還可以修改資料來偽造網址,讓合法應用程式連到惡意服務來騙取個人身份資料,甚至直接竊取使用者的網路銀行帳號。還可以修改應用程式功能,例如替換應用程式開啟的網址來下載惡意軟體(在使用者「信任」憑證後執行)。也可以修改合法應用程式的廣告識別碼,將產生的廣告獲利轉給詐騙者。
惡意利用程式碼簽章程序來取得相似的Bundle ID
重新封裝過的搜尋Pokemon Go、Facebook和許多其他遊戲程式只是我們所發現App Store上與相應合法應用程式使用相同Bundle ID的一部分。雖然Apple已經在XCode內加上額外邏輯來解決這問題(圖2),還是可以用命令行的Codesign工具取代XCode來直接簽章應用程式。
詐騙者只需要準備一套簡單的工具組就可以重新簽章應用程式,包括:
- 企業憑證(用來在不經過Apple審核發布應用程式)
- 發布(Distribution)憑證,讓應用程式可以部署在iOS設備上;或是開發(Development)憑證,用來測試應用程式功能(通常由研究人員和應用程式開發者進行)
- 配置檔案(Provisioning Profile),在Apple的開發者網站上生成
- plist(授權檔案),從應用程式匯出
- 用來解開真正應用程式Mach-O檔案的Clutch工具,Mach-O是一種在iOS系統上Apple預設加密原生可執行檔、程式庫和物件程式碼的格式
流程包括:
- 下載配置檔案(Provisioning Profile)和plist檔案
- 使用由Clutch工具解開的版本來替換合法應用程式內的Mach-O檔案
- 使用憑證重新簽章Mach-O檔案
- 透過命令行重新封裝應用程式
圖4、用來重新簽章和重新封裝應用程式的範例Entitlements.plist檔案(上)和配置檔案(Provisioning Profile)(下)
這個流程 – 特別是使用配置檔案(Provisioning Profile)和Entitlements.plist檔案,可以用來重新簽章App Store上的其他合法應用程式。儘管iOS 10已經整頓Apple Stor,用合法應用程式更新、升級偽造的版本,但只要他們輸入相同的Bundle ID,仍然可以重新簽章、安裝和執行在iOS設備上。
整個簽章過程不會違反任何檢查機制。同樣地,Apple的程式碼簽章信任和授權檢驗來源是應用程式識別碼,它跟Team ID連結。詐騙者只需要確認是否從同一個應用程式取得配置檔案(Provisioning Profile)和entitlements.plist檔案。由於重新簽章的應用程式具備有效的憑證,因此可以在iOS系統上執行。
有缺陷的資料繼承
iOS有強制規定防止企業簽章的應用程式置換掉使用相似Bundle ID的合法版本。然而,我們發現反過來則沒有作用。當安裝企業簽章的應用程式時,App Store(如果設成自動更新)將通知使用者已經有更新可用。如果App Store中存在具有相同Bundle ID和較新版本的應用程式,它將會覆蓋並繼承企業簽章應用程式內的所有歷史記錄/資料。
我們可以用iOS 9.3.5及更早版本上的遊戲應用程式再現此問題。真正應用程式覆蓋假的企業簽章應用程式後能夠透過繼承後者的資料(包括遊戲內的無限金幣)來繞過應用程式內購買流程。
圖5、截圖顯示企業簽章應用程式(從左到右)如何由合法版本安裝、執行、更新和覆蓋,同時還繼承了遊戲內無限的金幣
其他功能也可以被繼承,例如規避iOS的隱私保護機制。Bundle ID如何被利用?新安裝的應用程式通常在存取設備資源(如聯絡人資訊)時會遇到一連串的權限請求。如果移除並安裝具有相同Bundle ID的另一個應用程式,後者會繼承授予先前應用程式的權限。當應用程式第一次執行時,可能會生成授予權限並和Bundle ID成對儲存,但移除應用程式時不會刪除。
我們可以用一個社群媒體應用程式來再現這個問題。合法版本在要求存取設備位置和聯絡人列表時會通知使用者。如果移除並安裝重新封裝的版本,後者會繼承已經授予的權限,讓它可以自由的存取使用者資料而不會出現通知。如果先安裝了重新封裝的應用程式,則會跳出一連串的對話框要求使用者輸入。
解決方法
建議會使用如內部購買等功能的應用程式開發者要遵循Apple的官方指南,特別是如何驗證App Store的回條(Receipt),以及採用可以阻止詐騙者逆向工程應用程式的機制。建議使用/支援iOS設備的企業要在行動與生產力和隱私和安全政策間取得平衡,特別是在採用自帶裝置(BYOD)時。除了要保持作業系統在最新狀態外,還必須提醒使用者要注意不要從可疑的第三方應用程式商店下載應用程式。
趨勢科技將這些有問題的應用程式偵測為IOS_Landmine.A。我們已經在2016年7月21日向Apple通報並展示了這些漏洞。他們分配了CVE編號:CVE-2016-4659給應用程式覆蓋問題,CVE-2016-4606給隱私設定(權限)漏洞。蘋果已經在iOS 10.0修補了這些漏洞。可以到此附錄查看一些我們發現利用這些漏洞重新封裝的應用程式。
原文出處:Masque Attack Abuses iOS’s Code Signing to Spoof Apps and Bypass Privacy Protection