紅藍對抗基礎設施架構設計Wiki(下)
(接上文)
有效載荷和Web重定向
在提供有效載荷和Web資源時,我們希望最小化事件響應者檢視檔案的能力,並增加成功執行有效載荷的機會,無論是建立C2還是收集情報。
Jeff Dimmock寫的關於 Apache Mod_Rewrite的用法和示例:
· 使用 Apache mod_rewrite 模組加強你的網路釣魚方法
·使用Apache mod_rewrite模組設定無效的 URI 重定向
· 使用 Apache mod_rewrite模組建立基於作業系統的重定向
·使用 Apache mod_rewrite 模組對抗安全事件響應人員
·使用 Apache RewriteMap 模組設定過期的釣魚連結
·Apache mod_rewrite 模組在滲透測試中的幾個應用
· 使用 Apache mod_rewrite 模組提供隨機的有效載荷
其他關於Apache mod_rewrite的用法和示例:
·使用 mod_rewrite 規則規避供應商沙盒 by Jason Lang @curi0usjack
·如何通過 NGINX 提供隨機的有效載荷- Gist by jivoi
要在重定向器伺服器上自動設定Apache Mod_Rewrite,請檢視Julain Catrambone的(@n0pe_sled ) 部落格兩篇文章——自動化設定 Mod_Rewrite 模組 和accompanying tool 。
C2重定向
重定向C2流量背後的意圖有兩個:一個是為了混淆後端的團隊伺服器,如果被事件響應人員瀏覽了網站,則可以迷惑他們,讓網站看起來似乎是合法的網站。通過使用Apache mod_rewrite或其他代理(例如使用Python的Web框架Flask),我們可以可靠地過濾來自調查流量的真實C2流量。
·使用 Apache mod_rewrite 模組建立 Cobalt Strike HTTP C2 重定向器 – Jeff Dimmock
·使用 Apache mod_rewrite 模組保護你的 Empire C2 – Gabriel Mathenge (@_theVIVI)
·擴充套件你的視野: Red Team – 現代 SAAS C2 – Alex Rymdeko-Harvey (@killswitch-gui)
·混合的 Cobalt Strike 重定向器介紹 – Zach Grace (@ztgrace) and @m0ther_
使用HTTPS進行C2重定向
在上面的“C2重定向”的基礎上的另一種方法是讓你的重定向伺服器使用Apache的SSL代理引擎來接受入站SSL請求,並將這些請求代理到反向HTTPS監聽器的請求。加密需要在所有階段使用,你可以根據需要在重定向器上更換SSL證書。
為了使用mod_rewrite規則,你需要將規則放在“/etc/apache2/sites-available/000-default-le-ssl.conf”中,假設你已使用LetsEncrypt(又叫做CertBot)安裝了證書。此外,要啟用SSL ProxyPass引擎,你需要在同一個配置檔案中包含以下配置行:
# Enable the Proxy Engine #啟用代理引擎 SSLProxyEngine On # Tell the Proxy Engine where to forward your requests#告訴代理引擎轉發請求的位置 ProxyPass / https://DESTINATION_C2_URL:443/ ProxyPassReverse / https://DESTINATION_C2_URL:443/ # Disable Cert checking, useful if you're using a self-signed cert SSLProxyCheckPeerCN off SSLProxyCheckPeerName off SSLProxyCheckPeerExpire off
其他有關於Apache mod_rewrite的資源
·自動化配置 Apache mod_rewrite 模組以及 Cobalt Strike Profiles
·Apache 2.4 mod_rewrite 模組官方說明文件
· Mod_Rewrite/.htaccess 字元檢查器介紹
修改C2流量
Cobalt Strike
Cobalt Strike使用Malleable C2配置檔案修改其流量。配置檔案提供高度可自定義的選項,用於修改伺服器的C2流量線上路上的顯示方式。 Malleable C2配置檔案可用於加強規避事件響應人員的檢測以及冒充已知對手或偽裝成目標使用的合法內部應用程式。
·Malleable C2 Profiles 官方說明 – GitHub
·Malleable 命令及控制說明文件- cobaltstrike.com
·Cobalt Strike 2.0 – Malleable 命令及控制說明文件 – Raphael Mudge
·Cobalt Strike 3.6 – 特權提升介紹 – Raphael Mudge
·勇敢的新世界: Malleable C2 – Will Schroeder (@harmj0y)
·如何編寫用於Cobalt Strike 的 Malleable C2 Profiles – Jeff Dimmock
· 記憶體中的規避技術介紹 (Video series) – Raphael Mudge
在開始建立或修改Malleable C2配置檔案時,保持Beacon資訊放置的資料大小限制非常重要。例如,配置profile檔案使得在URL引數中傳送大量資料將需要許多請求。有關這方面的更多資訊,請檢視Raphael Mudge的部落格文章小心低速下載 。
如果你的Malleable C2配置檔案出現問題並注意到teamserver的控制檯輸出了錯誤資訊,請參閱Raphael Mudge的部落格文章(突破許可權限制以及 Malleable C2 Profiles )獲取故障排除的提示。
Empire
Empire使用通訊配置檔案,它為GET請求URI,使用者代理(User Agent)和HTTP頭提供自定義的選項。該配置檔案由每個元素組成並由管道字元分隔,並在監聽器上下文選單中使用set DefaultProfileoption進行設定。
以下是預設的配置檔案示例:
"/CWoNaJLBo/VTNeWw11212/|Mozilla/4.0 (compatible; MSIE 6.0;Windows NT 5.1)|Accept:image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*|Accept-Language:en-en"
或者,可以通過在Empire的初始設定之前修改檔案/setup/setup_database.py來設定DefaultProfile的值。這將更改Empire使用的預設通訊配置檔案。
除了通訊配置檔案之外,請考慮按照Joe Vest (@joevest ) 的文章( Empire – 修改服務端C2 指示器 )中提供的步驟來自定義Empire伺服器的stage URI,伺服器標頭和預設的網頁內容。
·預設的 Empire 通訊配置檔案介紹 (in Empire GitHub repo)
· 如何製作 Empire 的通訊配置檔案 – Jeff Dimmock
第三方C2通道
利用C2的可信合法Web服務可以為你自己配置的域名和基礎架構提供有價值的支援。配置時間和複雜性需要根據所使用的技術和服務而異。利用第三方服務進行C2重定向的一個流行案例是使用Domain Fronting。
Dmain Fronting域名前端
Domain Fronting是一種審查逃避服務和應用程式用於通過合法和高度可信域名路由流量的技術。支援Domain Fronting的流行服務包括Google App Engine , Amazon CloudFront , 和Microsoft Azure 。重要的是要注意許多提供商,例如Google 和Amazon 已實施針對域名前端的緩解,因此在你嘗試使用時,此Wiki中提供的某些連結資源或資訊可能已過時。
簡而言之,流量使用了受信任服務提供商的DNS和SNI名稱,以下示例中使用的服務提供商是Google。當邊緣伺服器收到流量時(例如:來自gmail.com的流量),資料包將轉發到資料包主機頭中指定的源伺服器(例如:phish.appspot.com)。根據服務提供商的不同,Origin Server會直接將流量轉發到指定的域名,我們將指向我們的團隊伺服器,或者需要代理應用程式來執行最終的流量轉發。
有關Domain Fronting如何工作的更多詳細資訊,請參閱白皮書(通過 domain fronting 技術阻止通訊 )和TOR專案(說明文件 )
除了標準的前端域名(例如任何google.com的域名)之外,還可以利用其他合法域名進行前端處理。
有關搜尋前端域名的更多資訊,請檢視以下資源:
·通過Cloudfront 替代域進行Domain Fronting – Vincent Yiu (@vysecurity)
·查詢Azure 域名的 Domain Fronting – thoth / Fionnbharr (@a_profligate)
·Google Groups: 使用Censys查詢2000+ Azure域的部落格文章
·FindFrontableDomains 工具介紹 – Steve Borosh (@rvrsh3ll)
關於Domain Fronting的更多資源
·簡化Domain Fronting – Tim Malcomvetter (@malcomvetter)
· 高聲譽重定向器及 Domain Fronting – Raphael Mudge
· Empire Domain Fronting – Chris Ross (@xorrior)
·逃脫並規避限制的網路 – Tom Steele (@_tomsteele) and Chris Patten
·紅隊洞察之使用 Cobalt Strike 對谷歌伺服器的Domain Fronting攻擊 – Will Vandevanter and Shay Nahari of CyberArk
·SSL Domain Fronting 101 – Steve Borosh (@424f424f)
·我們是如何發現 93k 個可用於 的 Domain Fronting CloudFront 域名的 – Chris Myers (@SWIZZLEZ_)和Barrett Adams (@PEEWPW)
· 什麼是 Domain Fronting – Vincent Yiu (@vysecurity)
·無效的 CloudFront SSL 域名 – Vincent Yiu (@vysecurity)
·CloudFront 劫持 – Matt Westfall (@disloops)
·CloudFrunt GitHub Repo – MindPointGroup
·微軟 Azure 雲的 Metasploit Domain Fronting (@ch1gg1ns)
·阿里巴巴 CDN 的 Domain Fronting – Vincent Yiu (@vysecurity)
·CloudFlare Domain Fronting: 一種簡單的方法來訪問(和隱藏)惡意軟體的C&C – @theMiddle (Medium)
PaaS重定向器
許多PaaS和SaaS提供商提供了靜態子域或URL以供配置例項使用。如果關聯域名通常是高度可信的,則例項可以通過購買的域名和VPS為你的C2基礎架構提供額外的信任。
要設定重定向,你需要標識一個服務,該服務將靜態子域名或URL作為例項的一部分發布。然後,需要使用網路或基於應用程式的重定向配置例項。該例項將充當代理,類似於此Wiki中討論的其他重定向器。
具體實施可能因服務而有很大差異;但是,對於使用Heroku的示例,請檢視這篇部落格文章(擴充套件你的視野 – 現代 SaaS C2 by Alex Rymdeko-Harvey (@Killswitch_GUI) )。
另一個值得進一步研究的有趣技術是使用過度寬鬆的Amazon S3儲存桶作為C2伺服器。檢視Andrew Luke (@Sw4mp_f0x) 發表的(S3 Buckets for Good and Evil )文章瞭解有關S3儲存桶如何作為C2伺服器的更多詳細資訊。這種技術可以與Empire的第三方C2功能結合使用,以便使用目標的合法S3儲存桶來對抗它們。
有關使用PaaS作為C2伺服器的另一個示例,請參閱Scott Sutherland(@_nullbind )的文章( 資料庫和雲: SQL Server 作為 C2 )。
其他第三方C2
在過去,已經有其他第三方服務用於C2的案例。利用允許快速釋出或修改使用者生成內容的第三方網站可以幫助你規避基於信譽的控制,尤其是在第三方網站通常受信任的情況下。
檢視以下這些資源可以獲取其他第三方C2選項:
· canisrufus (GitHub Repo) – maldevel
·外部C2(第三方命令和控制) – Cobalt Strike說明文件
·穿過外部C2 的 Cobalt Strike ——以最隱祕的方式回連 – Mark Bergman at outflank.nl
·用於 Cobalt Strike C2 的 Office 365 任務 – William Knowles (@william_knows)
·用於 Cobalt Strike 的外部C2框架 – Ryan Hanson (@ryhanson)
·用於 Cobalt Strike 的外部C2框架 – Jonathan Echavarria (@Und3rf10w)
·外部C2框架 (GitHub Repo) – Jonathan Echavarria (@Und3rf10w)
· 躲在雲中:使用亞馬遜API 的 Cobalt Strike Beacon C2 – Rhino Security Labs
· 探索 Cobalt Strike的 外部 C2 框架 – Adam (@xpn)
基礎設施模糊處理
用於攻擊活動的基礎設施通常很容易被檢測到,就像合法伺服器的外殼一樣。我們需要對我們的基礎架構採取額外步驟,以增加在目標組織或目標可能使用的服務之間與真實伺服器混合的可能性,以此來模糊化我們的基礎設施。
重定向器 可以通過重定向到無效的URI 、到期的釣魚有效載荷連結 或阻塞通用的事件響應技術 來幫助混入;但是,還應注意基礎主體及其指標。
例如,在John Menerick(@Lord_SQL )發表的這篇文章(檢測Empire )中介紹了在網際網路上檢測Empire伺服器的方法。
為了對抗這些及類似的指標,最好修改C2傳輸模式 和伺服器登入頁面,限制開放埠和修改預設的HTTP響應標頭。
有關如何為多個攻擊框架執行這些操作和其他策略的更多詳細資訊,請檢視以下文章:
· Empire – 修改伺服器 C2 特徵 – Andrew Chiles
·搜尋紅隊的 Empire C2 基礎設施 – chokepoint.net
· 搜尋紅隊的 Meterpreter C2 基礎設施 – chokepoint.net
· 發現 Empire 的 HTTP 監聽器 (Tenable Blog) – Jacob Baines
·主機標頭操作- Vincent Yiu (@vysecurity)
保護基礎設施
用於攻擊活動的基礎架構可以像任何其他連線網際網路的主機一樣受到攻擊,並且由於使用中的資料以及與目標環境的連線,它應該被視為高度敏感的基礎設施。
2016年,最常見的一些攻擊工具中被披露了遠端執行程式碼漏洞:
· 2017 Metasploit Meterpreter 目錄遍歷 Bug 彙總
·Cobalt Strike 3.5.1 重要安全更新 – Raphael Mudge
iptables應用於過濾不需要的流量並限制所需的基礎架構元素之間的流量。例如,如果Cobalt Strike團隊伺服器僅為Apache重定向器提供資產,則iptables規則應僅允許來自重定向器的源IP的80埠。這對於任何管理介面尤其重要,例如SSH或Cobalt Strike的預設埠50050。還要考慮阻止非目標國家/地區的IP。作為替代方案,請考慮使用VPS提供商提供的虛擬機器管理程式防火牆。例如,Digital Ocean提供的雲防火牆 可以保護一個或多個droplet產品。
chattr可以在團隊伺服器上使用,可以防止修改cron目錄。使用chattr,你可以限制任何使用者(包括root)修改檔案,直到刪除chattr屬性。
SSH應僅限於公鑰驗證,並配置為使用有限許可權的使用者進行初始登入。為了增加安全性,請考慮向SSH新增多重身份驗證。
更新!如果沒有提醒你定期更新系統並根據需要應用熱修復來修復漏洞,則無法獲得安全列表。
當然,此列表並不能詳盡你可以採取哪些措施來保護團隊伺服器。在所有基礎架構中遵循以下常見的強化實踐:
·20 個 Linux伺服器強化安全技巧 – nixCraft
·利用 Docker 實現你的命令&控制伺服器 (C2) – Alex Rymdeko-Harvey (@killswitch_gui)
一些具體的強化資源
網上有許多資源可以討論基礎設施的安全設定和設計。並非每個設計考慮都適用於每個攻擊基礎架構,但瞭解哪些選項可用以及其他測試人員正在做什麼是非常有用的。
以下是一些有關的資源:
·負責任的紅隊 – Tim MalcomVetter (@malcomvetter)
·保護紅隊基礎設施 – Tim MalcomVetter (@malcomvetter)
·紅隊基礎設施之加密的AWS-EBS – @_rastamouse
·攻擊基礎設施的日誌記錄 – Gabriel Mathenge (@_theVIVI)
自動部署
本文章中涵蓋的主題加強了攻擊基礎設施,但通常需要大量的時間來設計和實施。通過自動化可以大大縮短部署時間,使你能夠在更短的時間內部署更復雜的設定。
檢視有關攻擊基礎架構自動化的一些資源:
·使用Terraform自動化紅隊基礎設施部署 – 第1部分 – @_RastaMouse
· 使用Terraform自動化紅隊基礎設施部署 – 第2部分 – @_RastaMouse
·Mod_Rewrite 模組自動化設定 – Julian Catrambone (@n0pe_sled)
· 自動部署 Empire 基礎設施 – Jeremy Johnson (@beyondnegative)
·RTOps: 使用Ansible自動執行重定向器部署 – Kevin Dick
· 使用Ansible和Docker自動化Gophish釋出 – Jordan Wright (@jw_sec)
·Red Baron GitHub Repo – Marcello (@byt3bl33d3r)
· 自動化用於威脅情報響應的 Apache mod_rewrite 模組和 Cobalt Strike Malleable C2 – Joe Vest (@joevest)
·使用 Terraform 將基礎設施模組化 – Liam Somerville (@liamsomerville)
常用的部署技巧
·記錄所有內容 – 運行復雜的紅隊基礎架構意味著需要移動許多部件。請務必記錄每個資產的功能及其流量的傳送位置。
·在不同的服務提供商和地區之間拆分資產 – 基礎設施資產應分佈在多個服務提供商和地理區域。藍隊成員可能會對被識別為主動執行攻擊的提供商提高監控閾值,甚至可能直接阻止給定的服務提供商。注意:如果跨境傳送加密或敏感資料,請牢記國際隱私法。
·不要玩的過分 – 滲透測試人員很容易對先進的技術感到興奮,並希望將這些技術用到目標上。如果你正在模擬特定的對抗性威脅,則只利用威脅角色使用的真實威脅角色或技能組合中的技術就行了。如果你的紅隊測試人員會長期攻擊相同的目標,請考慮在開始時“輕鬆一些”並在你的評估中逐步進行更高階的攻防。與藍隊一起發展紅隊的技術將會一直推動企業組織向前發展,但與此同時,用藍隊打擊一切可能會壓倒藍隊並減緩學習的程序。
·監控日誌 – 應該在整個參與過程中監控所有日誌:SMTP日誌,Apache日誌,socat重定向器上的tcpdump,iptables日誌(特定於流量轉發或目標過濾),網路日誌,Cobalt Strike / Empire / MSF日誌。將日誌轉發到中央日誌處理中心,例如使用rsyslog ,以便於監控。保留操作員的終端資料可以在操作期間用於回溯歷史命令的使用情況。@Killswitch_GUI建立了一個名為lTerm的易於使用的程式,它可以將所有bash終端命令記錄到一箇中心位置。使用ITerm記錄所有的終端輸出 。檢視Vincent Yiu的文章CobaltSplunk ,瞭解如何將Cobalt Strike日誌傳送到Splunk進行高階基礎架構監控和分析。
·實施高價值事件警報 – 配置攻擊基礎架構以生成高價值事件的警報,例如新的C2會話或憑證捕獲命中。實現警報的一種流行方式是通過聊天平臺的API,例如Slack。檢視以下有關Slack警報的文章:Slack Shell 機器人 – Russel Van Tuyl (@Ne0nd0g) , 將Slack 通知用於 Cobalt Strike – Andrew Chiles (@AndrewChiles), 將 Slack 機器人用於釣魚和工作k – Jeff Dimmock (@bluscreenfojeff)
·指紋事件響應 – 如果可能,在評估開始之前嘗試執行被動或主動的指紋IR操作。例如,向目標傳送普通的網路釣魚電子郵件(使用不相關的基礎架構)並監控基礎架構接收的流量。 IR團隊的調查工作可以披露出目標有關團隊如何運作以及他們使用何種基礎設施的大量資訊。如果可以在評估之前確定,則可以直接過濾或重定向流量。
感謝以下貢獻者
非常感謝以下所有人(按字母順序排列),他們提供了包含在本WiKi中的工具,提示或連結,另外,感謝任何編寫了此WiKi中引用的工具或文章的人!
· @andrewchiles – Andrew Chiles
· @armitagehacker – Raphael Mudge
· @beyondnegative – Jeremy Johnson
· @killswitch_gui – Alex Rymdeko-Harvey
· @n0pe_sled – Julian Catrambone