如何干净的删除vm_如何在macOS 10.15 Catalina绕过XProtect?
在macOS 10.15 Catalina中,Apple進(jìn)行了許多安全性能地改進(jìn),包括通過使所有可執(zhí)行文件都受XProtect掃描來加固系統(tǒng),而不管文件是否帶有com.apple.quarantine位標(biāo)記。對于安全研究人員而言,這意味著不再像以前的macOS一樣,僅通過使用xattr實(shí)用程序刪除隔離位就可以運(yùn)行已知的XProtect惡意軟件了。這對于用戶來說是個(gè)好消息,但是對于那些想要探索XProtect樣本的更詳細(xì)的行為細(xì)節(jié)的研究人員來說,這可能是個(gè)問題。在本文中,研究人員將研究研究人員如何繞過這種各種安全功能,并在需要時(shí)仍在Catalina上運(yùn)行已知的惡意軟件。
為什么要在Catalina上運(yùn)行已知的惡意軟件
不久之前,研究人員可能不太關(guān)心XProtect已知的惡意軟件,因?yàn)閄Protect很少更新,并且沒有涵蓋macOS研究社區(qū)已知的許多攻擊。最重要的是,在Catalina之前,XProtect總是很容易被繞過。
然而,時(shí)代已經(jīng)變了,蘋果公司終于意識到,Mac電腦在野外正受到各種不同攻擊因素的攻擊。最近幾個(gè)月,蘋果公司不僅更頻繁地更新其內(nèi)部安全工具,而且還發(fā)現(xiàn)了其他研究人員之前面臨的一些攻擊。但Apple很少共享攻擊情報(bào),而且如果攻擊被Catalina上的XProtect阻止,則研究人員則無法更深入地研究攻擊的工作原理。這種深度探索是必要的,至少有兩個(gè)原因。首先,研究人員要開發(fā)比XProtect使用的遺留方法更有效的緩解措施和阻止措施;其次,研究人員希望能夠分析惡意軟件的行為并跟蹤活動(dòng),以便在攻擊開始之前采取行動(dòng)。
如何在Catalina上運(yùn)行已知的惡意軟件樣本
鑒于研究人員不能再刪除com.apple.quarantine位以允許惡意軟件在Catalina上運(yùn)行了,研究人員必須采取其他策略。
首先,研究人員可以在macOS的早期版本(例如10.14)上運(yùn)行示例,在這些早期的版本中,研究人員可以使用常規(guī)的XProtect繞過。這在某些情況下可能沒問題,但這意味著研究人員無法測試特定于Catalina的惡意行為。此外,一旦研究人員升級到10.16及更高版本,測試計(jì)算機(jī)上的操作系統(tǒng)將越來越落后于實(shí)際使用的惡意軟件作者所針對的操作系統(tǒng)。最終,研究人員最終會獲得一個(gè)甚至根本不支持該惡意軟件的操作系統(tǒng),因此從長遠(yuǎn)來看,還需要另一種解決方案。
第二種可能性是禁用SIP并修改XProtect文件(例如刪除所有簽名),盡管在實(shí)驗(yàn)室設(shè)備或?qū)iT用于測試惡意軟件的VM上執(zhí)行此操作沒有問題,但這個(gè)解決方案會帶來很多副作用。除非萬不得已,不要使用該方案。它的問題是在SIP關(guān)閉的情況下,你可能會遇到更多的問題,因?yàn)閻阂廛浖谶@樣一個(gè)不尋常的環(huán)境中會有不同的行為。惡意軟件的開發(fā)者知道,真正的用戶很少在禁用SIP的情況下運(yùn)行,因此他們可以使用一種簡單的反分析技術(shù)來運(yùn)行csrutil狀態(tài),然后相應(yīng)地退出或改變行為。
第三種可能性是確定樣本觸發(fā)的規(guī)則,然后修改樣本以避免該規(guī)則。XProtect很久以前就不僅僅是一個(gè)簡單的基于哈希的文件掃描程序了,現(xiàn)在它使用了Yara規(guī)則,因此僅僅在示例的末尾添加一兩個(gè)字節(jié)來更改計(jì)算的文件散列是行不通的。然而,正如我們將看到的,仍然可以通過一些工作繞過XProtect,但是有幾個(gè)“陷阱”需要注意,我將在下面解釋。
如何在macOS 10.15及更高版本上攻擊計(jì)算機(jī)
當(dāng)然,研究人員指的是在運(yùn)行惡意軟件之前正確隔離的一次性VM實(shí)例的攻擊!一旦你處在一個(gè)安全的、可任意使用的環(huán)境中,第一個(gè)任務(wù)就是確定惡意軟件所針對的規(guī)則是什么。就本文而言,我將使用此示例,該示例在發(fā)布時(shí)未被VT上的任何靜態(tài)引擎檢測到:
174c5712759c4abd2bdfc1b93f4c990011c45aeed236e89c1c864b1e8379c54d
在Catalina上,研究人員仍然必須刪除com.apple.quarantine位,才能同時(shí)滿足Gatekeeper(山獅中引入的一項(xiàng)新安全技術(shù),它可保證用戶安裝來自Mac App Store或者擁有開發(fā)者簽名的應(yīng)用)和Notarization?要求(2019年,蘋果在10.14.5上新引入的App Notarization機(jī)制,要求開發(fā)人員上傳應(yīng)用程序之前,將它們提交給蘋果,以掃描惡意內(nèi)容,并查找可能存在的代碼簽名問題,沒有經(jīng)過蘋果檢測的應(yīng)用程序以后可能將不被允許運(yùn)行)。
$ xattr -rc ~/mdworker_share.app
但是,正如研究人員看到的那樣,當(dāng)嘗試引爆樣本時(shí),盡管VT不了解這種惡意軟件,但XProtect卻知道。
這意味著研究人員首先必須檢查研究人員的惡意軟件,并將其與XProtect.yara中的規(guī)則進(jìn)行比較以找到匹配項(xiàng)。之前我們已經(jīng)寫過有關(guān)如何逆轉(zhuǎn)XProtect簽名定義的文章,因此請參閱該文章中的內(nèi)容。
如果你試圖測試已經(jīng)在VT或其他存儲庫中發(fā)現(xiàn)的惡意軟件,那么你可以通過查看惡意軟件的檢測名稱來獲得線索,但蘋果的新簽名并不使用普通的惡意軟件名稱。如今,蘋果公司更喜歡使用無意義的字母數(shù)字標(biāo)識符,如下面所示,來混淆他們所檢測的內(nèi)容:
如果像研究人員在此使用的示例一樣,你的惡意軟件不為殺毒引擎所知,并且被XProtect阻止,那么請先查看更新的XProtect規(guī)則。至少在目前,較新的規(guī)則往往位于文件的頂部。但研究人員發(fā)現(xiàn)經(jīng)常關(guān)注XProtect的更改是很有用的,這樣可以查看每次更改的內(nèi)容,從而使這個(gè)過程更快、更容易。
你可能必須根據(jù)規(guī)則對樣本的二進(jìn)制文件進(jìn)行g(shù)rep字符串查找,直到找到匹配項(xiàng)為止。
在此示例的情況下,事實(shí)證明這些字符串與Apple所謂的MACOS.b264ff6的規(guī)則匹配,目前,該規(guī)則已添加到XProtect v2112中。
研究人員可以將惡意軟件樣本加載到十六進(jìn)制編輯器中,并以十六進(jìn)制搜索規(guī)則,以確認(rèn)樣本是否符合要求:
當(dāng)然,請確保你的樣本符合指定的確切條件,而不僅僅是一個(gè)字符串。對于此規(guī)則,研究人員需要從$ a和$ b集合中的字符串中每個(gè)擊中一個(gè),以及從字符串$ c中獲得一個(gè)命中。
Macho and filesize < 3000000 and (1 of ($a*)) and (1 of ($b*)) and $c
如何修補(bǔ)二進(jìn)制文件以繞過XProtect Yara規(guī)則
假設(shè)該規(guī)則在條件中有一個(gè)文件大小,我們可以選擇將垃圾數(shù)據(jù)附加到二進(jìn)制文件的末尾,或者修改規(guī)則中指定的一個(gè)字符串。該規(guī)則表示可執(zhí)行文件必須小于3MB,而實(shí)際上研究人員的樣本只有86Kb,因此要添加很多垃圾。不過,將垃圾附加到二進(jìn)制文件中很容易。這樣做可能需要幾分鐘,但是很容易用條件將數(shù)字替換為下面括號中的第二個(gè)數(shù)字,并且代碼會將文件膨脹到所需的大小:
for i in {1..3000000}; do echo '0' >> mdworker_share; done
盡管這種方法在這個(gè)特定的示例上工作得很好,又可能導(dǎo)致其他樣本改變其行為,例如,如果它對自己的文件大小進(jìn)行自我檢查。同樣,盡管當(dāng)前幾乎所有XProtect規(guī)則都在條件中指定了文件大小,但將來可能不成立。因此,研究人員還應(yīng)該考慮修補(bǔ)二進(jìn)制文件,而不僅僅是將垃圾數(shù)據(jù)附加到二進(jìn)制文件中。
在修補(bǔ)二進(jìn)制文件時(shí),需要注意一些“陷阱”,我將在下一部分中列出,但是你要注意的第一個(gè)也是最直接的一個(gè)是確保你不要更改會破壞的東西,或更改惡意軟件的行為。例如,假設(shè)研究人員的示例具有在MACOS.b264ff6規(guī)則中指定的$ b4字符串:
$b4 = { /usr/sbin/system_profiler }
研究人員不應(yīng)該只是將其更改為某些垃圾字符串,因?yàn)檫@可能會阻止他們分析的惡意軟件正常運(yùn)行或完全無法執(zhí)行。相反,研究人員可以將該路徑更改為另一個(gè)長度相等的路徑,然后將system_profiler二進(jìn)制文件的副本放在研究人員的測試設(shè)備上。例如,研究人員可以創(chuàng)建/tmp/sbin/system_profiler
修補(bǔ)程序本身就是使用類似hex Fiend的十六進(jìn)制編輯器,對規(guī)則中出現(xiàn)的每個(gè)惟一字符串或十六進(jìn)制字節(jié)進(jìn)行搜索和替換。如果可以選擇,請選擇理想情況下只出現(xiàn)在一個(gè)地方的代碼,以減少破壞樣本的風(fēng)險(xiǎn)。
研究人員使用的這個(gè)特定示例匹配字符串$ a1,$ b2和$ c,只需要更改其中之一即可發(fā)起攻擊。字符串$b2看起來像一個(gè)方法名,只有當(dāng)用戶取消授權(quán)請求時(shí)才會調(diào)用這個(gè)方法名。
$b2 = { didCancelAuthenticationChallenge }
由于我不打算在測試中執(zhí)行此操作,因此我將在Hex Fiend中更改此方法名稱的前幾個(gè)字符,然后保存二進(jìn)制文件。
在最壞的情況下,惡意軟件會對其自身的代碼完整性進(jìn)行內(nèi)部檢查,或者你在不影響惡意軟件行為的情況下無法找到要更改的值,則可能必須制作此類補(bǔ)丁才能首先通過XProtect進(jìn)行啟動(dòng),然后再取消補(bǔ)丁。調(diào)試器中的二進(jìn)制文件,以使其在執(zhí)行內(nèi)部檢查或修補(bǔ)的代碼之前返回其原始狀態(tài)。這涉及在修補(bǔ)的代碼上設(shè)置斷點(diǎn)(請記住,你必須在出現(xiàn)的任何地方對其進(jìn)行修補(bǔ)/取消修補(bǔ)),然后在繼續(xù)之前提供原始值。
修補(bǔ)二進(jìn)制文件時(shí)的一些注意事項(xiàng)
研究人員的示例現(xiàn)在可以運(yùn)行了,但是在啟動(dòng)它之前,先了解一些陷阱,以確保做的一切都是正確的。
首先,請確保僅替換二進(jìn)制文件中的字節(jié),而不添加字節(jié)。雖然在二進(jìn)制文件的末尾添加垃圾文件是可以的,但是在二進(jìn)制文件中創(chuàng)建的任何補(bǔ)丁都不應(yīng)該添加額外的字節(jié),否則你將移動(dòng)所有偏移量,代碼將無法運(yùn)行。
其次,確保你的補(bǔ)丁工具能夠在不破壞二進(jìn)制文件的情況下保存它們。例如,Ghidra似乎無法在不破壞二進(jìn)制文件的情況下進(jìn)行修補(bǔ)和保存。Hex Fiend可能是你最好的選擇,但是其他工具當(dāng)然也應(yīng)該起作用。
第三,打補(bǔ)丁時(shí),你將破壞可能存在的所有代碼簽名。這通常不是問題,因?yàn)槟銓⑼ㄟ^刪除com.apple.quarantine位來禁用代碼簽名檢查,但是如果你確實(shí)需要對二進(jìn)制文件進(jìn)行有效的代碼簽名(例如,如果它檢查自己的代碼簽名)在修補(bǔ)后使用臨時(shí)簽名對它重新簽名,或者修補(bǔ)或跳過在二進(jìn)制文件中返回代碼簽名檢查的方法。
第四,如果你在Catalina上運(yùn)行了一個(gè)示例,但該示例被XProtect阻止,則請勿修補(bǔ)被阻止的同一實(shí)例??雌饋?#xff0c;無論是通過XProtect還是LaunchServices,卡塔琳娜都記得已被阻止的文件,并且無論你對其進(jìn)行多少修補(bǔ),它都將無法運(yùn)行。因此,在另一臺計(jì)算機(jī)或VM上修補(bǔ)一個(gè)干凈的惡意軟件副本,然后將其轉(zhuǎn)移過來。在嘗試啟動(dòng)之前,請記住刪除隔離位。
如果你避免了上述所有“陷阱”,那么你現(xiàn)在應(yīng)該能夠引爆惡意軟件,,并愉快地繼續(xù)你的macOS反向工程探索!
樣本
mdworker_share.app.zip
791157ca6a1f10ee209ea71ffa0f8c9109028f4d1013d092276a6a7e50e1b2a4
174c5712759c4abd2bdfc1b93f4c990011c45aeed236e89c1c864b1e8379c54d
46724f195ea18e82d833ed92637a20ed95f9afe1ef749aa06c9156f2719ce389
helper.app.zip
0ac25a8dd9134284406248110ad66dbdb7f4ec557570be02fb9f92bee93727bf
fa88ca779f16e7adbe0702db8473883c20b0aaa69a2345d07c81d322ff2bc990
terninal.app.zip
cbc7751d5fcca12d9e7ea2fd90862d14af8d024710ff22f5457a2f8d427b7fee
參考及來源:https://www.sentinelone.com/blog/macos-malware-researchers-how-to-bypass-xprotect-on-catalina/
總結(jié)
以上是生活随笔為你收集整理的如何干净的删除vm_如何在macOS 10.15 Catalina绕过XProtect?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 想给孩子存钱怎么存划算?看完就明白了!
- 下一篇: sql怎么读_大白话讲解脏写、脏读、不可