罗盘时钟编码代码_安全研究 | 利用macOS Dock实现代码的持久化执行
背景介紹
近期,我一直在研究macOS上的一些持久化技術(shù),尤其是如何利用低等級用戶權(quán)限來修改文件以影響用戶交互。對于macOS終端用戶來說,交互最頻繁的當(dāng)屬Dock了。
在我的研究過程中,我發(fā)現(xiàn)了一個plist文件,它可以控制Apple D 對于macOS終端用戶來說,交互最頻繁的當(dāng)屬Dock了。ock應(yīng)用程序是否可見。在檢查plist文件中的值時,我就想判斷是否可以通過修改這些值來將合法程序替換成我們的惡意程序,并執(zhí)行惡意代碼。
最終,我開發(fā)出了一個包含PersistentJXA項目的DockPersist.js腳本文件,并且能夠?qū)ock中最常見的Safari和Chrome替換成我們的惡意程序,不過這種方法適用于其他任何應(yīng)用程序。一旦用戶點擊了Safari或Chrome圖標(biāo),我們的惡意軟件就會運行,因為這里的Dock圖標(biāo)充當(dāng)了實際應(yīng)用程序的快捷方式。
接下來,我們將在這篇文章中介紹這項技術(shù)的實現(xiàn)方式。
環(huán)境配置
這種持久化方法需要將惡意程序上傳到目標(biāo)設(shè)備中,不過我們有很多種方法繞過Gatekeeper保護(hù)機制,并實現(xiàn)惡意程序的上傳:
壓縮應(yīng)用程序Bundle,在Mythic代理中使用上傳命令,然后解壓至目標(biāo)路徑;
壓縮應(yīng)用程序Bundle,使用curl命令在目標(biāo)設(shè)備中拉取程序,然后解壓至目標(biāo)路徑;
壓縮應(yīng)用程序Bundle,進(jìn)行base64編碼,然后在目標(biāo)設(shè)備中解碼,并解壓至目標(biāo)路徑;
在這里,首先使用Automator創(chuàng)建一個應(yīng)用程序,這個應(yīng)用程序會在后臺打開Safari,然后運行我們的Apfell Payload:
為了不引起終端用戶的察覺,我用Safari羅盤圖標(biāo)替換掉了Automator圖標(biāo)。當(dāng)然了,我們也可以使用Xcode來生成更加復(fù)雜的應(yīng)用程序。
接下來,壓縮應(yīng)用程序Bundle并上傳至目標(biāo)系統(tǒng),然后解壓至/Users/Shared/路徑下,此時我們就可以調(diào)用持久化方法了。
這里需要注意的是,考慮到plist文件的格式,這里要求偽造的應(yīng)用程序命名為“Google Chrome”或“Safari”,并且存儲路徑為/Users/Shared/,然后修改Safari64和Chrome64變量來指向該地址。
調(diào)用持久化方法
將腳本導(dǎo)入至Apfell代理中:
調(diào)用DockPersist函數(shù),該函數(shù)可以接收三個參數(shù):
應(yīng)用程序名稱;
應(yīng)用程序Bundle ID;
重載Dock選項;
Bundle ID存在于Info.plist文件中,可以使用下列命令直接獲取:
/usr/libexec/PlistBuddy -c 'Print CFBundleIdentifier' ~/FakeApp/Safari.app/Contents/Info.plist檢測技術(shù)
Crescendo是一款在單主機中快速捕捉事件的優(yōu)秀工具,Crescendo也是macOS上的一款實時事件查看器,它可以利用蘋果的終端安全框架ESF來實現(xiàn)其功能。ESF能夠監(jiān)控系統(tǒng)事件,并識別潛在的惡意活動,它相當(dāng)于Windows中的ETW。
在Crescendo的幫助下,我們可以輕松查看持久化執(zhí)行所生成的文件和進(jìn)程事件。
比如說,下列ESF事件將會被映射至Crescendo中:
ES_EVENT_TYPE_AUTH_EXEC = process::execES_EVENT_TYPE_NOTIFY_EXIT = process::exitES_EVENT_TYPE_NOTIFY_CREATE = file::createES_EVENT_TYPE_NOTIFY_KEXTLOAD = process:kext::loadES_EVENT_TYPE_NOTIFY_MOUNT = file::mountES_EVENT_TYPE_NOTIFY_UNLINK = file::unlinkES_EVENT_TYPE_NOTIFY_RENAME = file::renameES_EVENT_TYPE_NOTIFY_UIPC_CONNECT = network::ipcconnectES_EVENT_TYPE_NOTIFY_FORK = process::forkES_EVENT_TYPE_NOTIFY_EXEC可以捕捉這種持久化方法的各種事件,如果還需要覆蓋其他事件,我強烈推薦使用Xorrior的Appmon。
以下幾個因素針對的是持久化方法的運行,因為實際的惡意應(yīng)用程序組件將根據(jù)攻擊者開發(fā)的內(nèi)容而有所不同。
首先,plutil可以將Dock plist轉(zhuǎn)換為XML,XML格式可以輕松修改:
除此之外,temp9876文件的創(chuàng)建也會被記錄到日志中。
DockPersist.js會在/private/tmp/目錄下創(chuàng)建一個隨機名稱的文件,該腳本將修改plist文件的XML版本,并將其存儲至這個隨機文件名中。在這里,temp0wsn4p包含了XML格式的惡意plist,所以我們可以使用正確的格式來修改代碼格式版本,并在Dock中正確加載:
接下來,DockPersist.js會刪除~/Library/Preferences/com.apple.dock.plist路徑下的plist文件:
ESF會捕捉到我們存儲新的惡意plist文件的行為:
~/Library/Preferences/com.apple.dock.plist最后,因為我們在函數(shù)調(diào)用中重載了Dock,因此killall命令將會被調(diào)用:
這些事件都可以作為構(gòu)建檢測機制的入口點,這里最重要的就是plutil和killall了。除此之外,還可以利用文件創(chuàng)建、刪除和修改事件進(jìn)行檢測。
正常執(zhí)行
我們已經(jīng)知道了如何使用ESF來捕捉惡意行為了,那么我們?nèi)绾巫孍SF來顯示正常執(zhí)行行為呢?
在正常操作中,cfprefsd會觸發(fā)com.apple.dock.plist上的file::rename(文件重寫)事件,當(dāng)用戶通過GUI手動修改Dock時同樣會觸發(fā)這些事件:
防護(hù)繞過
攻擊者可以在目標(biāo)設(shè)備外執(zhí)行plist修改操作,然后再上傳到目標(biāo)Dock plist路徑下,這樣可以降低被檢測到的風(fēng)險。但是,這同樣會觸發(fā)file::rename事件,不過它不會使用到cfprefsd進(jìn)程。
可視化指標(biāo)
我們的PoC應(yīng)用程序執(zhí)行之后,會在Dock中出現(xiàn)兩個Safari圖標(biāo):
第一個Safari是惡意程序,它存在于plist文件中的persistent-apps字段,第二個就是真實的Safari了,它存在于plist文件中的recent-apps字段。
總結(jié)
在這篇文章中,我們介紹了一種在macOS上的持久化機制,它有點類似于在Windows中利用.LNK文件實現(xiàn)持久化的方法。更重要的是,我們希望通過這篇文章來幫助廣大研究人員開發(fā)出相應(yīng)的檢測技術(shù)。
精彩推薦
總結(jié)
以上是生活随笔為你收集整理的罗盘时钟编码代码_安全研究 | 利用macOS Dock实现代码的持久化执行的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 请求接受json tp5_关于jq js
- 下一篇: FMI在仿真软件SkyEye中的应用