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