MacOS 上常見的七種混淆技術(shù)
MacOS 平臺(tái)的威脅日漸增多,攻擊者也越來(lái)越重視針對(duì)該平臺(tái)的用戶的攻擊,本文將會(huì)介紹七種 macOS 上常見的混淆技術(shù)。
混淆的 Shell 腳本
Shell 腳本可能是 Linux 平臺(tái)下最常見的惡意文件,在 macOS 上也不遑多讓。許多惡意軟件都將 Shell 腳本作為應(yīng)用程序中的可執(zhí)行文件,如下所示。
混淆的 Shell 腳本
也有攻擊者直接將腳本內(nèi)置在鏡像文件中,通過別名來(lái)誘導(dǎo)用戶執(zhí)行:
文件中的腳本
在安裝鏡像文件時(shí),會(huì)看到教育用戶打開惡意軟件并繞過內(nèi)置的 Gatekeeper 安全機(jī)制。
提示信息
要求用戶點(diǎn)擊的安裝 PKG 圖標(biāo)其實(shí)是一個(gè)隱藏目錄中的 Shell 腳本的別名,名稱為 .hidden。該腳本經(jīng)過輕微混淆,在 /tmp 目錄下使用隨機(jī) 12 個(gè)字符創(chuàng)建一個(gè)目錄后,會(huì)完成去混淆執(zhí)行并刪除從同一目錄中的數(shù)據(jù)文件中提取的可執(zhí)行文件:
混淆的 SHC
Shell Script Compiler 是將 Bash 腳本編譯生成可執(zhí)行文件的技術(shù),盡管這些可執(zhí)行文件并不能做到完全獨(dú)立,仍然需要執(zhí)行環(huán)境中包含指定的 Shell。
Shell Script Compiler
SHC 的 -U 參數(shù)可以使編譯后的二進(jìn)制文件無(wú)法使用 ptrace 進(jìn)行跟蹤,-e 參數(shù)支持設(shè)置程序終止運(yùn)行的到期日期。如果使用不同的 -e 參數(shù),相同的腳本就可以生成不同哈希的二進(jìn)制文件。
Shell Script Compiler
SHC 被 SCSSET 惡意軟件大量使用,在野能夠持續(xù)發(fā)現(xiàn)相關(guān)樣本。從攻擊者的角度來(lái)看,使得編寫無(wú)法通過靜態(tài)分析讀取的惡意腳本變得非常簡(jiǎn)單。而且,通過 -e 參數(shù)還能夠無(wú)限生成不同哈希值的樣本文件。
Shell Script Compiler
發(fā)現(xiàn) SHC 編譯的二進(jìn)制文件,唯一的方法就是通過沙盒執(zhí)行觀察其行為。靜態(tài)檢測(cè)發(fā)現(xiàn) SHC 編譯的二進(jìn)制文件時(shí)可以將其認(rèn)為是可疑的,編譯器生成的獨(dú)特字符串也利于檢測(cè),但實(shí)際上只有通過執(zhí)行才能準(zhǔn)確區(qū)分是否惡意。
混淆的 Python 腳本
蘋果公司已經(jīng)在 Monterey 12.3 及更高版本的 macOS 設(shè)備上取消了對(duì) Python 2.7 的支持,所以針對(duì) macOS 平臺(tái)的攻擊者已經(jīng)對(duì) Python 不再熱衷。
混淆的 Python 腳本
將 Python 腳本打包 .pyc 編譯好的 Mach-O 文件仍然是存在的攻擊媒介,更常見的則是將框架如 Meterpreter 經(jīng)過多次 base64 編碼混淆處理,這就足以繞過許多檢測(cè)引擎。
混淆的 Python 腳本
混淆的 Cobalt Strike
Cobalt Strike 在 Windows 平臺(tái)非常常見,在 macOS 上出現(xiàn)甚少,但也不是完全沒有。
2021 年 9 月,OSX.Zuru 發(fā)起了供應(yīng)鏈攻擊,針對(duì)使用 iTerm2、Mac 版 MS 遠(yuǎn)程桌面、SecureCRT 和 Navicat 14 進(jìn)行投毒。惡意軟件使用 UPX 加殼,解壓后是一個(gè)使用 C 語(yǔ)言編寫的 Mach-O 文件。該可執(zhí)行文件經(jīng)過混淆,包含超過 4 萬(wàn)個(gè)垃圾函數(shù)。相同的混淆方式,后來(lái)也出現(xiàn)在針對(duì) PyPI 的 pymafka 供應(yīng)鏈攻擊中。
混淆的 Cobalt Strike
該混淆技術(shù)能夠通過二進(jìn)制段的熵和哈希中進(jìn)行識(shí)別。例如,__cstring 段的 MD5 哈希值為 c5a055de400ba07ce806eabb456adf0a,其熵值也能用于靜態(tài)識(shí)別特征:
混淆的 Cobalt Strike
混淆的 AppleScript
AppleScript 一直是被低估的攻擊向量,其在 macOS 系統(tǒng)中的存在時(shí)間甚至比 Python 都要長(zhǎng)。最近幾年蘋果公司不再給予其過多的關(guān)注,但仍然通過 TCC 等其他機(jī)制來(lái)對(duì)其進(jìn)行限制。
混淆的 AppleScript
AppleScript 能夠通過 run-only 選項(xiàng)來(lái)生成幾乎不可逆向恢復(fù)的編譯后代碼。在野發(fā)現(xiàn)的惡意軟件中,有使用四字節(jié)十六進(jìn)制字符編碼將一個(gè) run-only 的腳本嵌入到另一個(gè)腳本中。
混淆的 AppleScript
此類腳本無(wú)法使用內(nèi)置工具進(jìn)行反編譯,需要進(jìn)行動(dòng)態(tài)分析或者手動(dòng)的逆向工程。想要靜態(tài)檢測(cè)的話,可以檢測(cè)嵌入的十六進(jìn)制字符和標(biāo)記 AppleScript 塊結(jié)尾的 Magic Number:FADE DEAD。
Poseidon 惡意軟件
Poseidon 是攻擊框架 Mythic 的 Golang 版本,可以使攻擊者操縱失陷主機(jī)。最近一次高調(diào)的攻擊,是針對(duì) Rust 開發(fā)社區(qū)的 CreateDepression 供應(yīng)鏈攻擊。
Poseidon 惡意軟件
左側(cè)為源代碼,右側(cè)是反匯編代碼。Poseidon 支持攻擊者與失陷主機(jī)中間發(fā)送與接收文件,還支持獲取按鍵記錄、屏幕截圖并進(jìn)行持久化等。已編譯的 Poseidon 二進(jìn)制文件中的字符串具有獨(dú)特的特征,很容易檢測(cè)。
Sliver 惡意軟件
開源框架 Sliver 被在野使用的越來(lái)越頻繁,可以通過 DNS、HTTPS、雙向 TLS 和 Wireguard 為攻擊者提供 C&C 信道。
Sliver 二進(jìn)制文件多達(dá) 10MB 甚至更多,盡管 Sliver 本身不支持混淆或加殼,但在野發(fā)現(xiàn)了原始與定制的 UPX 加殼方案。
Sliver 惡意軟件
近期發(fā)現(xiàn)的 macOS 惡意軟件,偽裝成 Apple 軟件更新二進(jìn)制文件并在用戶的 Library LaunchAgents 文件夾中進(jìn)行持久化。該攻擊避免使用任何 Apple 專有軟件,并使用各種免費(fèi)的工具(UPX、MacDriver 與 Platypus)。
結(jié)論
以上介紹的混淆機(jī)制并不是全部,攻擊者也在不斷精進(jìn),研究更多、更先進(jìn)的混淆方式,例如 Pirrit、Adload 與 SliverSparrow 等。
蘋果仍然在嘗試阻止繞過 Gatekeeper 安全設(shè)置的各種下載,預(yù)計(jì)以后會(huì)有更多的惡意軟件在初始載荷中就嵌入后續(xù)的 Payload,并且結(jié)合更多的混淆和規(guī)避技術(shù)。