2019 SDC 議題回顧 | 安全研究視角看macOS平臺EDR安全能力建設
如果你有幸去了峰會現場,一瞻講師風采,可以看看本文,溫故知新;如果很遺憾你沒有去現場,也可以看看本文,絕對讓你有所獲益。
看雪學院一貫秉承分享奉獻的原則,現在福利大放送,會後對每一個議題進行具體分析、回顧總結,嘉賓演講全文速記、完整議題PPT,技術乾貨已裝載,還在等什麼,快來上車吧!
編輯按
crownless:系統安全建設是一個複雜而困難的任務。macOS作為安全性廣受好評的作業系統,採用了眾多技術,強勢佔領安全高地。
非蟲版主從技術角度的剖析令人印象深刻。安全是一個整體,面對日益增長的高階安全威脅,系統設計者和應用開發者需要時刻緊跟安全趨勢,才能永遠立於不敗之地,守住安全大門。
嘉賓介紹
豐生強 (id:非蟲),奇安信安全威脅情報中心安全研究員,專注軟體安全領域。《Android軟體安全與逆向分析》、《macOS軟體安全與逆向分析》、《Android軟體安全權威指南》作者。
10多年前,終端安全曾被認為是“安全最後一公里”,經過16年的演繹,這個話題技術已經延展成為成熟型企業的必然選擇。經過16年的演繹,這個話題技術延展成為成熟型企業必然要選擇的。
然而針對macOS平臺產品化思路在國內大會上討論比較少,本次峰會上豐生強(非蟲)帶領大家開啟macOS平臺安全產品的安全思路,並從安全研究與Agent實現的視角,講解了macOS平臺的EDR安全能力建設。
演講具體內容
以下為速記全文:
我們首先介紹一下什麼是EDR、EDR是為了解決什麼問題而產生的、EDR系統架構、macOS平臺上系統安全機制、系統自帶的安全限制,瞭解這些安全機制之後非常有利於我們在macOS平臺上進行安全開發。
後面會介紹macOS終端上的agent實現技術方案,以及開發除錯需要注意的點。
關於我,我從事安全有10多年,在2013年、2016年以及2019年這三個時間點出版三本軟體安全相關的書籍,目前我就職於奇安信情報中心,它的前身是360情報中心,現在由於與360企業在公司資料與業務層面的分離原因,現在更名為奇安信威脅情報中心。
奇安信是國內非常專業的研究網路威脅情報的一個團隊。大家可以關注我們團隊的公眾號【奇安信威脅情報中心】,每週會定時輸出一些高質量的威脅分析與APT溯源相關的高階話題。
一、EDR概述
首先是安全產品,從最初的網路安全需求發展到現在,安全產品的種類已經非常多。大家看一下常見的安全產品有哪些,在早年對於業務安全需求比較多的情況下是WAF這個產品,它突出表現在對業務的API防護,比如說像常見的防注入、入侵檢測。
這是主機安全上的IDS和IPS,IDS和IPS是目前討論得比較多的一個安全產品,因為無論大小企業,都會用到這款產品。HIDS和NIPS最主要的區別是是否在主機端部署agent,agent是用來收集主機上的日誌資訊,用來後期的資料關聯、資料分析。
早年的網路安全需求發展到現在,已經變成了非常大的網路安全市場,EDR也是一個轉變的產品、是一個複合型的產品,它在終端上會分為終端的檢測與響應,或者基於雲安全平臺的CWPP這個產品。
在奇安信這邊,目前它的EDR產品有天擎EDR,主要方向是終端這一塊。ATP產品是在國內比較知名的應該是微軟提出的ATP產品,它被用來檢測一些高階威脅。
大家看看這個安全能力象限,在企業安全建設過程中,安全能力體現產品開發思路以及產品在企業安全中扮演的角色,安全能力象限-檢測、防護、預測、響應,這四個點代替了企業當中經常遇到的網路安全問題。
拿檢測來說,檢測惡意流量、攻擊行為是IDS和SSP安全感知平臺這些產品的功能需求,防護產品就是常見的殺軟、WAF、防火牆這些產品,帶NG這些產品名稱是它是下一代的安全產品。
在預測方面,大資料的態勢感知和威脅情報的平臺可以對威脅進行預測,最後是響應中心。響應一般需要對安全資料進行運維,所以它需要一個安全運維平臺和安全日誌管理系統。
我們看看EDR的定義,EDR是2013年由Gartner提出的一個概念,它的早期只是一個概念,後面是以EDR的形式出現。EDR強調的是一種能力,我們剛才前面看到的安全象限,在EDR的能力中都會有所體現,它強調的是一種能力,而不僅僅是個工具。
EDR如何工作?它透過在主機端上部署agent,然後由agent採集資料,然後對大量資料進行分類、進行處理,然後對事件進行定義的這樣一個過程。
二、EDR架構
這是國內比較知名的深信服公司,提出基於業務層面的一個架構圖,它把EDR的架構分成了三部分:最底下是基礎平臺,主機代理agent是用於部署在客戶主機上的,惡意檔案分析引擎和web控制檯和SOC進行聯動。
核心引擎部分,常見的行為引擎是透過對一些規則的靜態或動態分析,以及機器學習的演算法,然後配合威脅情報以及一些大資料的處理、CEP等引擎。對所有采集到的資料進行處理;功能展現部分,是最終展示給使用者或者管理人員的展示臺。
我們今天重點討論的點是主機代理在功能展現上的技術點該如何實現。
三、macOS平臺上系統安全機制
我們看看蘋果系統的架構,再講講它的安全機制,最後討論它的安全機制。這張圖是將蘋果系統以元件形式劃分為五類,從上到下是應用程式、媒體、核心服務、核心系統和核心這五層。我們重點關注的是第三層的安全層,以及核心這部分。
蘋果系統有哪些機制?它在coreServices這個框架中提供了使用者認證和程式碼簽名的功能,在核心BSD提供了程式碼審計以及核心的授權認證。
在mach層提供MACF強制訪問控制這個框架,這個框架是蘋果非常重要的核心元件,它承載了蘋果系統絕大多數的安全檢測用途,我們在後面會重點討論MACF。
最後是核心當中的網路程式設計NKE網路核心擴充套件,網路核心擴充套件是蘋果系統提供類似Windows系統核心過濾驅動的元件,可用於對所有蘋果電腦的網路流量進行監控、過濾以及修改。
四、macOS系統安全限制
基於這些安全元件,系統提供了一些安全限制。這些安全限制是蘋果從使用者態軟體產品或者軟體元件中給大家展示出的蘋果的安全特性。
這個Authd的作用是當系統中低許可權元件向高許可權元件訪問申請資源時,它會彈出授權使用者的許可權申請的對話方塊,這個對話方塊在底層是透過XPC向Authd申請這個許可權。
這裡有一個syspolicyd守護程式,它的作用是當所有應用程式啟動安裝時,它會用於管理這些使用者執行的程式,對其實施一些系統的安全策略,它主要是實現了對gatekeeper以及使用者授權的核心擴充套件的載入、以及APP的公正這三大塊對底去的支援。
我們看一下gatekeeper,當新安裝的軟體從網路上下載後,它會經過gatekeeper向使用者展示對話方塊,展示對話方塊中提供了APP下載的時間點以及下載的途徑,只要使用者點選“確定”之後才可以繼續開啟這個APP。它的實現在底層依賴於gatekeeper機制。
Gatekeeper在底層有quarantine機制,當你從網路上下載APP,這個APP會自帶擴充套件屬性,這個擴充套件屬性是由quarantine守護程式來嚮應用程式寫入,寫入這個程式會在這當中有一個資料庫來儲存所有的quarantine,quarantine核心層面是透過核心擴充套件,然後使用這個框架獲可常見的介面。
在syspolicyd這一塊將所有的gatekeeper資訊寫入使用者態的一個資料庫中。
APP Translocation這個功能是強調在APP進行轉移、移動複製這種場景下才會出現的。首先,當一個APP下載完後,它是帶有Quarantine屬性的,會對gatekeeper進行檢測,但這時並不會觸發APP Translocation。
APP Translocation是在10.12裡引入的新特性,當一個APP透過隨身碟傳到另外一臺電腦上時,如果它帶了Quarantine屬性,它就有可能觸發APP Translocation,隨身碟中直接執行微信程式會彈出一個框,這個框彈出之後我們可以看一下這個APP載入路徑是這麼一個隨機受限制的目錄,這就保證了透過隨身碟這些可移動的媒介去執行這個程式時不會對系統造成破壞。
使用者授權的核心擴充套件是在10.13時引入的一個新特性,這個安全特性的作用是,當新安裝的應用程式帶著核心擴充套件,就我們熟悉的核心驅動,這麼一個功能在早先的作業系統中是不需要確認就可以直接載入的,但是到了10.13時必須手動在設計頁面點選“允許載入”它才會去載入,否則預設是不會被載入的。
在10.13的作業系統中實現這個功能是透過這個類,標紅的這幾個方法是用於檢測載入時的資訊,以及使用者是否點選了“確認”,所有這些操作完的資訊都會最終儲存在SystemPolicy這個資料庫,這個操作是由syspolicyd守護程式完成的。
這是APP公正,這個功能是在macOS 10.14.5引入,2019年4月7日後,所有開發者簽發的APP都必須要加入APP公正這個過程,APP公正是開發者手動向蘋果公司提出申請,由蘋果公司對這個APP進行稽核的過程。在底層這些所有的資訊會寫入一個資料庫當中。
Rootless又稱之為SIP,系統管理性防護這個功能,是防止使用者獲取最高許可權的情況下對系統檔案進行篡改的這麼一個功能。即使在開啟了SIP許可權下,即使你擁有最高許可權,也不能對蘋果系統核心受保護的檔案進行修改。
Rootless是從10.11引入的功能,所有受SIP防護的檔案或目錄,會有一個受限制的屬性。
SIP是基於檔案目錄對軟體進行防護的,比如說在除錯過程中,開啟SIP的情況下,對系統的應用程式,比如計算器是無法除錯的,但是可以將計算器這個APP複製到不受限制的目錄下,然後對它進行除錯。
它的底層是由一個核心擴充套件來實現的,這個核心擴充套件的底層也是使用AMFI這個框架,掛了MACF的幾個常見的回撥函式。
我們看看這個沙盒sandbox,同樣是在10.11有的功能,可能更早。沙盒是依賴於底層和使用者態的這種自定義沙盒語言對系統進行防護的,可以在系統的/Library/Sandbox/Profiles/目錄下找到所有和沙盒相關的檔案,這些檔案是由系統維護升級,使用者是沒辦法進行修改的。沙盒是由sandbox.kext擴充套件,底層也是Hook了MACF的一些回撥實現的。
這是XProtect,是蘋果內建的一款可以理解為“殺軟”的工具,它的工具實現依賴於一個簽名檔案,這個檔案的路徑是在/System/Library/CoreServices/CoreTypes.bundle下面,所有的簽名會動態更新。
MRT是蘋果到目前為止還在更新的一款軟體刪除工具,這款工具和XProtect一樣類似於“殺軟”,MRT是一個二進位制,在底層當中沒有用簽名檔案機制,所有的簽名是內建在二進位制當中。
我們可以手動的去執行這個MRT程式,讓它以守護程式的形式去啟動。前一段時間火熱的蘋果系統上的zoom軟體出現漏洞,蘋果後臺推送了更新,靜默的刪除了其web server,其底層用到的工具就是MRT,採用了比較激進的方式處理了電腦上的惡意/漏洞軟體。
終端安全模組是蘋果在10.14.5 Catalina裡面引入的一個新功能,終端安全模組的用途是為了代替蘋果公司早年使用的核心擴充套件,可能在以後的發展過程中,蘋果的核心擴充套件會被限制或者會被移除,而採用使用者態的終端安全模組給安全開發者提供介面。目前它是測試狀態,可以看到少量的資料結構。
五、macOS終端agent技術實現方案
終端安全實現的細節分成四部分:第一部分是事件部分,事件是所有資料的基礎,event事件代表了每一個API發生時一條資料、一條日誌資訊。
Incident是一組事件的集合,所有事件加在一塊就形成了一個incident。我們看如何去對這些事件進行管理。這是安全架構上,主要討論自身安全以及對系統加固如何適時。然後是攻擊檢測和安全防護。
1、事件部分,首先是事件與事件的響應,資料來源從哪裡來?怎樣採集資料來源?如何處理這些資料?
2、資料來源就是我們要採集系統中哪些資料,哪些資料需要受到我們的監管。這裡列出了5張圖是開源工具獲取的資料,由Facebook開發的一款工具,它對蘋果作業系統當中的資料進行了歸類,我展示了它的程式、網路、登陸使用者以及程式開啟檔案這5個部分,這只是資料當中很小的一部分。
比較權威的資料來源是MITRE這個組織在官網上公開的企業安全的攻擊向量,從攻擊者視角向開發者提供資料來源,非常詳細、專業的一份資料來源。
3、資料採集。我們採用哪種方式去採集資料?一是是系統呼叫表的hook,這是比較傳統、使用比較多的一種方案,在Windows以及Linux系統上比較常見,在蘋果系統上同樣有系統呼叫表這個資料結構。
這個資料結構可以在核心當中透過查詢核心當中的前三個系統呼叫去判斷這個是不是sysent這塊表,對錶裡的系統呼叫指標替換可以達到Hook系統呼叫表的後果。
二是審計部分早先是實現一個開源技術方案,後來蘋果公司也採用了這種方式,這種審計的方式有一個好處是在核心當中、在這個檔案中對每條指令都插入了這兩條指令。透過使用者態praudit訪問管道裝置可以抓取系統中每條系統呼叫的日誌資訊。
三是kauth機制,這個機制是由10.4系統引入的,它和MACF一樣提供了回撥註冊介面,開發人員可以編寫一些回撥函式,對系統發生的事件進行監控。Kauth分為四部分:常規、程式、VNODE、檔案操作,但是kauth提供的介面比較少,在現實當中。
開發人員更傾向於使用MACF框架,它的上層是一串以mac_開頭的一組呼叫的封裝,所有資源訪問的系統呼叫都會經過一組預先註冊好的回撥函式進行預檢。可以向系統當中註冊一個、一組甚至多個回撥。它的底層有一個結構體。當前作業系統中支援所有的回撥型別非常詳細。
六、安全加固/防護
對作業系統的打補丁、軟體補丁、核心加固、自我防護、風險掃描。
1、系統打補丁。蘋果公司自帶的這個命令可以用來底層靜默發現並且更新作業系統的功能,這個功能可以透過APP store手動去點選。
2、軟體補丁。APP store或者第三方的mas可以檢測這個系統當中安裝軟體的版本資訊。
3、核心加固。當我們發現比較常見的核心漏洞,這些核心漏洞還來不及被蘋果公司去打補丁,或者使用者沒有去升級作業系統的情況下,引入核心加固這個功能非常必要。核心加固可以針對常見的核心漏洞,自己去做一個核心的patch。
4、自我防護。Agent安裝在使用者主機上之後,首先需要一個自我防護的功能,才能保證穩定的去採集系統上的資料。
我提出兩種防護方式,一種是由系統自帶的launch daemons和launch agents,前者是守護程式,後者是代理程式,它們都會在電腦啟動過程中去啟動,類似於Windows平臺的自啟動技術。前面的launch daemons以入口身份執行的,而launc agents是以使用者態的方式執行。
如果keepalive加上設定為true的情況下,這個元件會常駐系統當中,即使使用者去關閉這個程式,它的父程式也就是1號程式launchd會對它重啟。我們看一下天擎的APP在啟動時會有兩個程式,launch daemons和launch agents,它們之間可以透過XPC進行通訊。
第二種方案是訊號,關閉一個程式時會向程式發出訊號,我們可以在MACF中註冊這個訊號檢測,在訊號裡對它進行遮蔽檢測,就可以實現核心態的防護功能。
5、風險配置掃描。類似於殺軟的首次啟動對系統的預檢,它需要我們預先配置好,這裡有一個開源的方案,這個工具是Linux上比較常用的一款風險配置掃描工具,它在macOS上也是同樣支援的。
七、攻擊檢測
當所有資料採集到以後,經過引擎處理需要實現攻擊檢測功能。常見攻擊檢測有以下攻擊種類。
1、勒索攻擊。對系統磁碟中的檔案進行大量讀寫操作以及程式啟動執行的操作,我們可以重點關注這兩個事件。
2、挖礦攻擊。
3、資訊竊取。對使用者敏感資源訪問以及網路資料中是否有網路資料這麼一個規則去檢測。
4、許可權提升。首先是有程式執行這個動作,它可以是程式的命令執行,執行的過程中我們可以去檢查程式的資訊,檢視它的資訊許可權是否被提升。
我們重點講一下安全防護,我這裡所有安全防護的功能是採用MACF的方式去實現。
1、檔案讀寫是重點關注vnode的API,vonode類似於Linux的inode,是檔案系統對檔案抽象的一個資料型別,可以對常見的write、unlink等進行掛鉤,檢測檔案讀寫資訊。
2、檔案執行管理。首先是一個程式啟動fork,通常一個應用執行是fork和exec兩部分組成。可以在fork時檢測應用程式啟動過程中的證書資訊、簽名資訊以及teamID資訊。
啟動的第二個階段我們可以去檢測它的許可權資訊,包括許可權、父程式、引數資訊。另外一種管理檔案執行的方案是掛鉤這個函式介面,是應用程式執行後會呼叫的一個API,我們可以在核心當中獲取這個API,對它進行hook操作,同樣也是可以實行檔案執行管理的功能。
3、網路訪問管理。可以透過這一系列API,socket建立、設定socket屬性的這麼一個API,或者使用NKE的一個介面。NKE需要傳入一個資訊,這個資訊可以包含它的協議,包括TCP、UDP甚至ITV6這些資訊。
4、程式管理。程式資訊由一組proc_check開頭的資訊,我們可以掛鉤這些介面去實現程式的管理。
5、系統呼叫審計。系統呼叫審計可以看一下一個程式執行過程中所有的流程,它最終是呼叫了這個呼叫,在底層10.15裡引入了這個介面,可以完全對所有的syscall的呼叫審計。
6、終端隔離。終端隔離主要分為網路訪問阻斷和程式啟動阻斷,這兩個機制可以透過前面介紹的方式對它進行管控。
7、資產報備。EDR會對使用者的資訊進行統計。
八、開發除錯與注意事項
我們看一下是如何獲取核心符號的地址,以及如何去查詢核心符號,這是兩種方式,一種方式是去從核心啟動循序漸進一頁頁去查詢,另一種方式是呼叫一個函式去進行unslide操作。
模組除錯部分也需要對MACF介面進行大量除錯,從10.12之後MACF變成了私有框架,蘋果不鼓勵使用這個框架,如果我們還需要使用這個框架,需要關注每一次系統升級之後介面的變化,我們需要做大量測試,包括對不同版本的作業系統做一個快照,然後進行自動化的措施。
公眾號ID:ikanxue
官方微博:看雪安全
商務合作:wsc@kanxue.com
相關文章
- 峰會預告 | 安全研究視角看macOS平臺EDR安全能力建設2019-07-18Mac
- 2019 SDC 議題回顧 | 是誰推開我的“窗”:iOS App介面安全分析2019-07-29iOSAPP
- 2020 看雪SDC議題回顧 | Android WebView安全攻防指南20202020-10-29AndroidWebView
- 2023 SDC 議題回顧 | 晶片安全和無線電安全底層滲透技術2023-11-22晶片
- 2020 看雪SDC議題回顧 | 生物探針技術研究與應用2020-10-30
- 2023 SDC 議題回顧 | 探索軟體定義汽車的安全攻擊面2023-12-07
- 甘肅啟動“網路安全研究”平臺建設2017-07-10
- 2019 SDC 議題回顧 | 工業集散控制系統的脆弱性分析2019-07-29
- 2019 SDC 議題回顧 | 基於雲資料的司法取證技術2019-07-24
- 2020 看雪SDC議題回顧 | 麒麟框架:現代化的逆向分析體驗2020-11-03框架
- 2020 看雪SDC議題回顧 | 高通移動基帶系統內部揭密2020-11-04
- 2021看雪SDC議題回顧 | APT針對恐怖主義的間諜活動剖析2021-11-04APT
- 淺談安全管理和態勢平臺關鍵能力建設要點2020-07-08
- 2021看雪SDC議題回顧 | 基於模擬模擬的藍芽協議棧漏洞挖掘2021-11-01藍芽協議
- 極客視角看安全:智慧生活遠沒想象中安全2018-09-03
- 5月第2周安全回顧Wi-Fi無線安全建議微軟修補4個漏洞2017-11-08微軟
- 醫共體安全守護養成記(四)丨 縣域醫共體雲平臺安全防護能力建設2020-05-18
- 2020 看雪SDC議題回顧 | 世界知名工控廠商密碼保護機制突破之旅2020-11-02密碼
- 2019 SDC 圓桌會談回顧 | 5G時代車聯網安全的未來與展望2019-08-02
- 2022 SDC 議題 | 從應用場景看金融安全 — 邏輯為王2022-10-14
- 輕量級安全態勢感知平臺|看綠盟安全管理平臺如何讓安全通俗易懂2021-09-07
- OAuth 2.0安全案例回顧2020-08-19OAuth
- 2023 SDC 議題回顧 | 從探索到利用:揭示安卓模擬器漏洞2023-11-14安卓
- 將軍令:資料安全平臺建設實踐2019-02-15
- 【kingsql分享】雲平臺安全的研究2014-10-12SQL
- 2020 看雪SDC議題回顧 | 敲開晶片記憶體保護的最後一扇“門”2020-11-02晶片記憶體
- 2020 看雪SDC議題回顧 | 基於量子邏輯閘的程式碼虛擬(vmp)保護方案2020-11-02
- 2021看雪SDC議題回顧 | SaTC:一種全新的物聯網裝置漏洞自動化挖掘方法2021-11-09
- PHP 安全程式設計建議2016-09-16PHP程式設計
- 醫療資訊化建設實踐丨一體化安全能力建設,助力醫院安全能力提升2021-11-09
- 關鍵基礎設施網路安全建議—使用視訊會議2020-07-09
- 2020 看雪SDC 議題預告 | Android WebView安全攻防指南20202020-10-21AndroidWebView
- 石油化工企業安全生產智慧化管控系統平臺建設思考和建議2022-07-04
- 《走進企業看安全》第6站:愛加密站 活動回顧2016-11-28加密
- 360網路空間安全教育雲平臺|疫情期間網路安全防範建議2020-02-28
- 【看雪2017安全開發者峰會演講回顧0x3】淺析WEB安全程式設計2017-11-23Web程式設計
- 態勢感知、聯防聯動,資料安全綜合治理平臺為資料安全帶來新視角2023-05-04
- 網路安全:2018回顧&2019預測2019-01-31