8月23日-25日,一年一度的KCon 駭客大會在北京昆泰嘉瑞文化中心成功舉辦,本屆大會以「無界」為主題,透過匯聚全球駭客的智慧,探索技術的無窮奧秘,突破邊界外的邊界,創造不可能的可能。
作為安全領域內擁有豐富實戰經驗和技術積累的安全團隊,美團安全研究院成員受邀參加Kcon駭客大會,並針對目前主流廠商在移動平臺(iOS、Android)的APT檢測裝置明顯不足的現狀,分享了關於「APT檢測裝置的擴充套件研究」的議題。
現場議題圍繞業界現狀分析、相關裝置的動態沙箱(蜜罐)技術等幾個方面,充分展示美團安全團隊對APT檢測裝置的擴充套件研究成果。
議題解讀
「APT檢測裝置的擴充套件研究」
演講者 | JU ZHU
目前就職於美團(高階安全研究員),有著9+年的安全研究經驗,其中7+年主要從事高階威脅的研究,包括0Day、nDay 和漏洞挖掘。他一直致力於使用自動化系統來 Hunt 野外的高階威脅,曾多次獲得 CVE,且受到 Google、Apple、Facebook 等廠商的致謝,也多次作為 Speaker 受邀參加 BlackHat、CodeBlue、CSS 等國內外的頂級安全會議。
1. 現狀分析
1.1 業界主流APT檢測裝置選型對比
APT檢測裝置的選擇一般是參考Gartner報告挑出備選,再結合實際情況做適應性檢測對比。
平臺支援性:
我們統計了某天內網接入裝置的作業系統型別(見圖1),並根據這些型別對三個備選廠商進行了平臺相關性檢測(見圖2)。
圖1 內網接入裝置的作業系統型別統計
圖2 各廠商的平臺支援對比
從圖1和圖2可以看出,大部分廠商只是對Windows平臺的支援比較好,或者也提供Android沙箱。然而這和內網接入裝置的多元化還有很大差距,需要我們自己進行進一步的擴充套件開發。
檔案型別支援性:
有些廠商對於平臺的支援可能受到某些限制,所以他們透過更多的檔案型別支援來進行能力補充(見圖3)。
圖3 各廠商的檔案型別支援對比
在選型測試中,我們特地增加了plist檔案格式的樣本,這源於之前發現的在野的iOS Ransomware(Death Profile[1])。它是一種基於iOS的Configuration Profile,常用於企業為辦公裝置推送各類配置資訊(如Wi-Fi、VPN設定等),是一種常見的公司內部交換檔案格式。
從圖3看,各廠商幾乎覆蓋了基於Windows平臺的檔案格式(諸如PE、Office等),只有少量廠商支援基於MacOS/iOS平臺的Mach-O檔案(經過實測,他們基本上採用的是靜態分析方式),而plist格式目前並未有廠商支援。因此對於檔案格式的支援性,還有很大的空間可提升。
1.2可參考的解決方案對比
對於甲方來說,APT檢測的解決方案一般以採購為主,但也不乏根據實際情況進行部分自研。我們選取了一些可參考的(除Windows外)動態沙箱技術解決方案來進行對比(見圖4)。
圖4 可參考的動態沙箱技術解決方案對比
MacOS:
Darling是一種比較輕量級的基於Linux的MacOS App執行環境,主要是做了一個轉換層,將App的函式呼叫重定向到了Linux。Darling可以執行在Docker上,方便大規模部署和維護。Cuckoo Sandbox是比較重量級的,它執行在MacOS上,一般採用VisualBox來部署,效能會差些。
因此可以採用階梯式部署方式:Darling完成大部分指標檢測,而剩下的少部分,則由Cuckoo Sandbox來完成(如圖5)。
圖5 MacOS動態沙箱技術解決方案
iOS:
Corellium擁有一套比較完整的iOS虛擬機器,不過目前他們只提供雲服務,對於內網審計是個很大的挑戰。對於很多甲方公司來說,內網的資料是不能外傳的,所以我們更傾向於使用本地沙箱方式。
Android:
Anbox是一個輕量級完整模擬Android的系統, Cuckoo Droid是一個比較成熟的檢測Android Malware的沙箱系統,且它們都是開源的,比較符合甲方的需求,不需要再做擴充研究。
綜上所述,大部分可參考的動態沙箱技術解決方案,基本都可實現本地部署,且開源方便二次開發。唯有iOS動態沙箱需要重新設計和開發。
2. iOS動態沙箱(蜜罐)技術
2.1總體架構流程
為了能檢測出未知Malware(0 Day等),同時又能知曉影響面(版本、位數等),我們首先需要提取iOS App中的Mach-O檔案,再根據32位或者64位來進行相應的檢測。
圖6 針對Mach-O的流程
如圖6所示,首先解開IPA檔案,再分解Fat檔案為32位Mach-O和64位Mach-O。由於基於Aarch 64的硬體伺服器架構不能直接執行Arm 32位的程式,我們進行了分流設計:將32位的Mach-O送入模擬Arm v7的Qemu,而64位的Mach-O則送入基於Aarch 64的Docker。
另外,存在像Death Profile這樣的攻擊,我們還需要檢測流量中plist格式的檔案或者內容(如圖7)。
圖7 針對plist的流程
2.2 輕量級虛擬化設計
Corellium的虛擬化方案雖然非常完備,但對於我們的需求來說過重,且開發成本極高。因此我們更傾向於類似Darling(或者Wine)的輕量級解決方案。
我們採用API重定向的方式,將Mach-O完整地在Qemu(或者Docker)中模擬執行起來。
圖8 輕量級的虛擬化設計
圖8是我們提出的輕量級虛擬化設計,最底層硬體和作業系統都是基於Aarch 64(或者Arm v8),在它們上面使用Qemu以實現Arm v7的支援。而Docker用於直接對Arm 64的支援。
在Qemu(或者Docker)內,我們部署安裝了一些基礎庫(諸如libc、libc++等),還編譯了libobjc、libdispatch等開源庫,以對更上層的API重定向庫提供支援。
最後,我們實現了類似Foundation.framework的API重定向庫,以支撐Mach-O的正常執行,執行效果見圖9、圖10。
圖9 Qemu(Arm v7)的執行效果
圖10 Docker(Arm 64)的執行效果
2.3 實現
正常來說,我們執行一個Mach-O檔案,需要實現一個類似dyld的Loader程式,來用於解析和載入Mach-O,並匯入相關的依賴庫。這裡我們需要自己實現這個過程。
整個實現過程分為六個部分:解析和載入、匯入相關依賴庫、地址修正、地址(API)重定向、執行、回撥。
圖11 整個執行過程
圖12 執行效果
解析和載入:
我們透過解析Mach-O檔案中Load Commands的Segment資訊,將所有的Segment資料(除PageZero)按地址順序逐一載入到虛擬記憶體。由於程式啟動時會在程式空間加上一段偏移量(slide),我們需要計算記錄下slide的結果,用於之後執行時的起始地址計算(如圖13)。
slide = text_real_vm_addr - text_vm_addr
其中text_real_vm_addr是TEXT段的實際虛擬記憶體地址,text_vm_addr是Mach-O檔案中TEXT段的VM地址。
另外,在對映時,可按實際VM Protection值來設定所對映的虛擬記憶體VMP屬性。
圖13 所有Segment資料(除PageZero)對映到虛擬記憶體的實際地址分佈情況
匯入相關依賴庫:
透過解析Mach-O檔案中Load Commands的LC_LOAD_DYLIB資料,可獲取所有依賴庫的資訊,並做模擬實現。這樣就可以將Mach-O中的API呼叫重定向到我們希望呼叫的函式中去。
事實上,在實現某個依賴庫(比如Foundation)時,可能會存在更多的依賴庫需要實現,其工作量將是巨大的(如圖14)。
圖14 Foundation的實現
地址修正:
如果要正常執行main函式,Mach-O檔案中Rebase所描述地址的資料還需要做修正,如Lazy Symbol Pointer資料和CFString資料等。
圖15 Mach-O檔案中Rebase所描述地址的資料修正
地址(API)重定向:
對於Lazy Symbol Pointer這類資料,我們還需要再做一次修正,那就是使用我們模擬實現的函式地址來替換該資料(Pointer)。
圖16 地址(API)重定向
圖17 API重定向流程
執行:
如果我們希望執行某個函式,只需要找到它的入口地址,即可直接執行。比如main函式,我們透過解析Mach-O檔案中Load Commands的LC_MAIN資料,從而獲得它的相對入口地址,再加上之前我們獲得的slide和text_vm_addr,就可以算出它的絕對(真實)入口地址。
圖18 算出main函式的絕對(真實)入口地址,並直接執行它
回撥
Delegate是iOS開發常用的設計模式,所以我們也需要實現相應的回撥。我們透過解析Mach-O檔案中ObjC2 Class的資料,來獲得Delegate類。然後,再解析它(比如AppDelegate)的Protocol資料,來獲得Framework裡對應的類(比如UIKit的UIApplication)最後,再解析它的Method資料,並註冊到NSNotificationCenter。
圖19 回撥流程
圖20 執行效果
2.4 部署
最初研究或小批次試驗,可以使用一些廠商的雲服務,或者採用低成本的樹莓派叢集。而我們為了更好的匹配重新設計的動態沙箱(蜜罐)系統,採用了公司現有的ODM(Original Design Manufacturer)專用Aarch 64伺服器。
圖21 自研伺服器
團隊介紹
美團安全部的大多數核心人員,擁有多年網際網路以及安全領域實踐經驗,很多同學參與過大型網際網路公司的安全體系建設,其中也不乏全球化安全運營人才,具備百萬級IDC規模攻防對抗的經驗。安全部也不乏CVE“挖掘聖手”,有受邀在Black Hat等國際頂級會議發言的講者,當然還有很多漂亮的運營妹子。
目前,美團安全部涉及的技術包括滲透測試、Web防護、二進位制安全、核心安全、分散式開發、大資料分析、安全演算法等等,同時還有全球合規與隱私保護等策略制定。我們正在建設一套百萬級IDC規模、數十萬終端接入的移動辦公網路自適應安全體系,這套體系構建於零信任架構之上,橫跨多種雲基礎設施,包括網路層、虛擬化/容器層、Server 軟體層(核心態/使用者態)、語言虛擬機器層(JVM/JS V8)、Web應用層、資料訪問層等,並能夠基於“大資料+機器學習”技術構建全自動的安全事件感知系統,努力打造成業界最前沿的內建式安全架構和縱深防禦體系。
隨著美團的高速發展,業務複雜度不斷提升,安全部門面臨更多的機遇和挑戰。我們希望將更多代表業界最佳實踐的安全專案落地,同時為更多的安全從業者提供一個廣闊的發展平臺,並提供更多在安全新興領域不斷探索的機會。
招聘
美團安全2019年招聘火熱進行中~
如果你想加入我們,歡迎簡歷請發至郵箱zhaoyan17@meituan.com。