macOS中怎么利用Emond實現(xiàn)持久化訪問,針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
創(chuàng)新互聯(lián)主要從事做網(wǎng)站、網(wǎng)站設(shè)計、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)靈丘,10年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18982081108
emond是一個普通的守護(hù)進(jìn)程,每次系統(tǒng)啟動時都會由launchd執(zhí)行,其對于launchd的配置文件和其他系統(tǒng)守護(hù)進(jìn)程在同一個地方:/System/Library/LaunchDaemons/com.apple.emond.plist,該配置文件決定了何時執(zhí)行emond,并帶有LaunchDaemons經(jīng)常使用的任何期望的選項。 emond.plist配置文件位于/etc/emond.d/目錄中。該文件定義了規(guī)則路徑,UID/GID過濾,錯誤日志和事件日志路徑以及一些其他選項。
圖1:emond.plist中的內(nèi)容
規(guī)則文件被存儲在/etc/emond.d/rules/目錄中,且應(yīng)該為plist格式。在該目錄下已經(jīng)有一個示例規(guī)則文件了(SampleRules.plist),該示例定義了名稱,類型和事件觸發(fā)后的操作。事件有幾種類型(startup, periodic, auth.success, auth.failure等),在這次的演示中我們只使用startup。一旦被emond加載,startup事件類型就會觸發(fā)規(guī)則;periodic事件類型只有在定義了“startTime”之后才會觸發(fā);同樣的,auth.success事件類型只會在用戶成功驗證后觸發(fā);auth.failure會在驗證失敗事件上觸發(fā),還有其他的一些事件類型就不一一列舉。action定義了事件發(fā)生后emond將要做什么,需要注意的是,我們可以在規(guī)則中定義多個action。只有少數(shù)action可以被用于惡意目的(如運行命令和發(fā)送電子郵件),你可能已經(jīng)猜到了,運行命令可以允許你執(zhí)行任意系統(tǒng)命令,對于發(fā)送電子郵件,目的不言自明。對于本演示,我們將重點介紹執(zhí)行命令。
現(xiàn)在我們可以演示如何利用事件監(jiān)視進(jìn)程來建立持久化訪問。 emond的機(jī)制與其他任何LaunchDaemon相似。 Launchd負(fù)責(zé)在啟動過程中執(zhí)行所有LaunchDaemons和LaunchAgent。 由于emond是在該過程中啟動的,所以當(dāng)使用執(zhí)行命令時,應(yīng)該注意一下你正在執(zhí)行什么命令,以及在哪一個過程應(yīng)該執(zhí)行哪個命令。 這一點非常重要,因為事件發(fā)生然后觸發(fā)action(執(zhí)行命令)的時候電腦很可能沒聯(lián)網(wǎng),所以任何需要網(wǎng)絡(luò)訪問的命令都沒法用。接下來,我們會展示如何創(chuàng)建規(guī)則文件。
要創(chuàng)建規(guī)則文件,我們可以使用已經(jīng)存在的SampleRule.plist文件,并根據(jù)需要對其進(jìn)行修改。
圖二:samplerules.plist
該示例包含我們的規(guī)則文件所需的一些值。 具體而言,我們可以刪除“allowPartialCriterionMatch”這個key并根據(jù)需要更改名稱。 所定義的action需要針對執(zhí)行命令的action類型進(jìn)行修改。 一個完整的例子如下所示:
圖三:實現(xiàn)持久化訪問示例
需要注意的是,第一個操作是睡眠10秒,這樣是為了等待網(wǎng)絡(luò)連接。至于是10秒還是20秒,因人而異,請自行斟酌。第二個就不用介紹了,建立會話。不過這樣持久性機(jī)制還有一個奇怪之處:launchd會在啟動過程中執(zhí)行emond,但是在QueueDirectories路徑中存在一個文件之前,服務(wù)將保持不活動狀態(tài)。 這在LaunchDaemon配置文件/System/Library/LaunchDaemons/com.apple.emond.plist中指定。 放在QueueDirectories路徑中的文件不需要遵循特定的命名方案,也可以為空。
圖四:com.apple.emond.plist中的QueueDirectories
把plist文件放進(jìn)rules目錄后,emond錯誤日志會顯示服務(wù)已啟動,emond也不會提示說找不到任何規(guī)則。
圖五:錯誤日志
一旦服務(wù)開始,如果你已經(jīng)定義了一個startup事件類型,那么事件將會立即發(fā)生并觸發(fā)任何action。 現(xiàn)在,我們應(yīng)該可以看到Empire會話建立了。
圖六:請求
圖七:會話建立
Emond并不是一個OSX事件監(jiān)視的新機(jī)制,但它可以作為一種攻擊新用例。 回想起來,在我撰寫本文時,所閱讀過的任何macOS威脅報告中都沒有提及過這樣的方法。但也有可能已經(jīng)在野使用,或者其本身人畜無害。
這種持久化訪問的方法需要對文件系統(tǒng)進(jìn)行一些改變, 幸運的是,macOS提供了fsevents API來捕獲文件系統(tǒng)事件。實質(zhì)上fsevents會記錄每個卷中的所有事件。 最初,事件存儲在內(nèi)存中,一旦內(nèi)存緩沖區(qū)已滿或即將卸載卷,事件會被寫入磁盤。FSEvent日志文件以gzip壓縮格式存儲,并遵循十六進(jìn)制命名方案。 所有日志文件都存儲在一個隱藏的目錄中:/fseventsd/。訪問此目錄需要root權(quán)限。 fsevents的一個注意事項是時間戳不包含在日志文件中。 通過訪問API,我們可以使用Python或Objective-C篩選所有接收到的事件,并在rules目錄或QueueDirectory中發(fā)生文件創(chuàng)建/修改事件時進(jìn)行警報。
點擊這里查看開源fsevents項目
你可以注意到fswatch可以在事件觸發(fā)時提供時間戳。 此外,你可以將其輸出到任何其他命令行,以便進(jìn)一步處理。 你也可以指定多個目錄進(jìn)行監(jiān)控。 下圖顯示了一旦我們在rules目錄中放置了一個plist文件,fswatch將以一個JSON字符串顯示事件詳細(xì)信息。
圖九:事件發(fā)生時的輸出
當(dāng)然這只是一個最基本的例子,可能不適用于部署在大型MacOS環(huán)境中。對于后者,更適用的選擇是osquery。Osquery提供文件完整性監(jiān)視,它使用fsevents api將文件系統(tǒng)更改記錄到特定目錄的文件。 更多信息可以點擊這里。安裝osquery之后,你需要提供一個配置文件來監(jiān)視文件系統(tǒng)事件。 下圖是一個簡單的示例來監(jiān)視rules目錄中的所有文件系統(tǒng)事件。 所有事件將以60秒為間隔進(jìn)行查詢。
為了簡潔起見,我們從命令行啟動osquery守護(hù)進(jìn)程,并使用-config_path標(biāo)志指定配置文件。 一旦我們創(chuàng)建了plist文件,并將其放置在rules目錄中,60秒后,在osquery日志文件中就應(yīng)該有一個條目。 結(jié)果默認(rèn)記錄到/var/log/osquery/osqueryd.results.log。 輸出將包括路徑,主機(jī)標(biāo)識符,時間戳,文件事件的類型以及其他。
關(guān)于macOS中怎么利用Emond實現(xiàn)持久化訪問問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。