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