Amazon GuardDuty 是一項威脅檢測服務,能夠持續監控、分析和處理 Amazon Web Services (AWS) 環境中的數據來源和日誌。GuardDuty 使用威脅情報來源,例如惡意 IP 地址和域名列表、文件哈希值和機器學習 (ML) 模型,來識別 AWS 環境中的可疑和潛在惡意活動。當 GuardDuty 識別到潛在的安全問題時,它會創建一個 GuardDuty 發現,提供有關潛在安全問題的資訊、涉及的資源,以及解決問題所需的關鍵背景資訊。GuardDuty 透過不斷擴展威脅檢測來幫助您監控最新的威脅,無論是新興的還是常見的威脅。
無論您是 GuardDuty 的新手還是長期使用者,建議您了解不同的 GuardDuty 發現類型和發現細節,並按照 AWS Well-Architected 的安全支柱中建議的方式進行回應練習。
在這篇博客文章中,我深入探討了一個用於測試 GuardDuty 發現的開源工具,並展示了三個如何使用此工具來測試和改進您對 GuardDuty 發現的回應的例子。
概述
如果您想了解更多有關 GuardDuty 的資訊,可以閱讀 AWS 文檔中的發現類型。不過,客戶通常希望在其環境中獲得真實的發現,以了解發現的樣子並實際練習回應。雖然您可以使用 GuardDuty 在您的環境中創建樣本發現,但這些發現是用佔位符值填充的近似值,與真實發現不同。此外,您無法使用這些發現進行補救練習,因為它們不與您帳戶中的實際資源相關聯。如果您只想查看發現中的細節,這可能會有所幫助,但如果您想練習真實場景,這些樣本發現可能不夠充分。
為了解決這個用例並為客戶提供一種安全可靠的方式來測試 GuardDuty 的威脅檢測能力,GuardDuty 服務團隊推出了一個名為 GuardDuty Tester 的開源項目。GuardDuty Tester 在您的環境中創建基礎設施,以模擬不同的安全問題,讓您可以測試 GuardDuty 發現,這些發現反映了您可能遇到的實際安全問題,例如加密貨幣挖礦或在 Amazon Elastic Compute Cloud (Amazon EC2) 實例上創建反向殼。GuardDuty Tester 最初於 2018 年作為 AWS CloudFormation 模板發布,主要專注於測試調查工作流程,而不是廣泛的發現類型。AWS 自此發布了一個更新版本,使用 AWS Cloud Development Kit (AWS CDK) 使基礎設施代碼更易於閱讀,並將測試覆蓋範圍擴展到超過 100 種獨特的發現類型和資源組合。
能夠在不同的資源類型上創建發現,例如 Amazon EC2、Amazon Simple Storage Service (Amazon S3) 和 Amazon Elastic Kubernetes Service (Amazon EKS),對於您的安全團隊來說是一個有價值的資源,允許他們在隔離的基礎設施中模擬各種類型的威脅,這樣您就不需要妥協已部署的工作負載來改進回應行動和技術。請記住,GuardDuty Tester 不涵蓋所有可能的場景,而是專注於威脅情報和基於規則的發現。異常檢測發現需要了解您如何運行環境,這些不包括在 GuardDuty Tester 中。
開始使用 GuardDuty Tester
GuardDuty Tester 是通過使用 AWS CDK 部署的,以創建所需的基礎設施和腳本來生成 GuardDuty 發現。為了安全,AWS 建議您在一個專門用於此目的的帳戶中,在非生產環境中部署 GuardDuty Tester。這樣,您的安全團隊可以區分測試 GuardDuty 發現和他們正在監控的其他工作負載的發現。
在這篇文章中,我不會逐步介紹 GuardDuty Tester 的配置,因為這已在 GuardDuty 文檔中記錄。相反,我將介紹您需要了解的有關 GuardDuty Tester 的資訊及其一些優勢。
圖 1 顯示了 GuardDuty Tester 的架構,其中包括創建各種保護計劃(如 Amazon S3 存儲桶、Amazon EC2 實例和 Amazon EKS 集群)所需的資源。測試器還部署了一個專用的 GuardDuty Tester 實例,您將在其中運行創建 GuardDuty 發現所需的腳本。
圖 1: GuardDuty Tester 架構
GuardDuty Tester 提供的關鍵功能包括:
- 廣泛的威脅場景模擬:GuardDuty Tester 可以創建發現的資源包括 Amazon S3、AWS 身份和訪問管理 (IAM)、Amazon Elastic Container Service (Amazon ECS) 用於 Amazon EC2 和 AWS Fargate 托管的工作負載、Amazon EKS 和 AWS Lambda,涵蓋超過 105 種威脅場景。這包括 GuardDuty 運行時監控以及其他 GuardDuty 保護計劃。
- 通過 AWS Systems Manager 訪問:GuardDuty Tester 使用 Systems Manager 提供安全訪問,以最小化對互聯網的開放端口,僅允許通過 Systems Manager 訪問。
- 模塊化腳本:隨著可用測試庫的擴展,GuardDuty Tester 接受用戶參數來設置要運行的測試範圍,這為不同的測試場景提供了更大的靈活性。
設置 GuardDuty Tester 環境很簡單,只需幾個命令。根據文檔和存儲庫中的 README 文件,設置堆棧有一些先決條件。這些先決條件包括 Python 3+、git、AWS 命令行介面 (AWS CLI)、AWS Systems Manager Session Manager 插件、npm、Docker 和 Amazon EC2 的 Kali Linux 映像訂閱。您必須在 AWS Marketplace 中訂閱 Kali Linux 實例,但僅在 GuardDuty Tester 部署期間才會對實例收費。在滿足這些先決條件後,您可以克隆存儲庫、安裝包並將 GuardDuty Tester 部署到您的 AWS 帳戶。
部署 GuardDuty Tester 可能需要 20-30 分鐘,但如果您正在跟隨這篇文章,我假設您已將 GuardDuty Tester 部署到您的環境中,並已按照 GuardDuty 文檔中步驟 3 的 A 部分開始您的 Systems Manager 會話。現在,我將深入探討第一個測試示例。
手動調查
第一個測試用例是熟悉 GuardDuty 發現的樣子以及發現提供的細節。這可能是您開啟 GuardDuty 後的第一步之一,或者這可能是您為幫助新團隊成員了解 GuardDuty 發現而進行的活動。
開始手動調查:
- 在您的 Systems Manager 會話中運行以下命令以查看 GuardDuty Tester 選項。Python3 guardduty_tester.py –help
- 在您的 Systems Manager 會話中運行以下命令以創建第一個測試發現。Python3 guardduty_tester.py –ec2 –runtime only –tactics impact
- 在創建發現之前,GuardDuty Tester 會提示您確認允許它更改環境中的 GuardDuty 設置。例如,如果您選擇創建與 GuardDuty 運行時監控功能相關的發現,但未啟用此功能,GuardDuty Tester 將為測試啟用它,然後在測試完成後禁用它。
注意:這將在此帳戶中啟動啟用功能的 30 天試用,即使在測試完成後禁用該功能。更多有關 GuardDuty 定價和免費試用的信息可以在 GuardDuty 定價頁面上找到。
- 選擇 y 表示“是”後,GuardDuty Tester 會報告其預期的域名聲譽發現數量。圖 2 顯示了預期發現的示例。您可以在 GuardDuty 發現文檔中了解更多有關域名聲譽發現的信息。

圖 2: 控制台中生成的 GuardDuty 發現
- 在 GuardDuty Tester 完成後,等待幾分鐘,然後轉到 AWS 管理控制台中的 GuardDuty 查看發現。在此示例中,預期有四個新的 GuardDuty 發現,如步驟 4 所示,並在圖 3 中顯示。生成發現後,您可以開始手動調查。

圖 3: GuardDuty 發現細節
在上圖中,您可以看到一些發現細節,例如行動類型和過程信息,這可以幫助您快速識別觸發可疑通信的原因。從這裡開始,我鼓勵您使用此發現來練習您的調查和回應手冊。例如,您可以從驗證和分類發現開始,然後進入證據收集和補救。如果您尚未建立事件回應手冊,可以使用此發現作為示例開始。有多個開源示例,例如 AWS 事件回應手冊和 AWS 客戶回應手冊。手冊將幫助您的團隊評估 GuardDuty 發現中提供的信息,並了解他們需要了解的其他信息,以便正確回應發現。例如,在發現中,您將擁有資源和行為者信息,但不包括諸如誰是帳戶所有者或該帳戶的安全聯絡人等信息。
創建警報
下一個用例重點介紹如何基於 GuardDuty 發現創建警報。在使用工具如 Amazon Simple Notification Service (Amazon SNS) 和 Slack 設置警報自動化時,您應該使用 GuardDuty Tester 創建一個發現,以測試您是否正確配置了警報。請參閱創建對 GuardDuty 發現的自定義回應,了解有關使用這些工具創建警報的信息。圖 4 顯示了一個將 GuardDuty 發現發送到 SNS 的示例 EventBridge 規則。

圖 4: 將 GuardDuty 發現發送到 SNS 的 EventBridge 規則
對於這篇文章,我假設您已經配置了一個 Amazon EventBridge 規則和 Amazon SNS 警報。
測試警報:
- 在您的 Systems Manager 會話中運行以下命令以創建一個特權容器發現。Python3 guardduty_tester.py –finding ‘PrivilegedEscalation:Kubernetes/PrivilegedContainer’
- 創建此發現後不久,您應該會看到基於發現類型的 SNS 警報。

圖 5: 來自 GuardDuty 發現的 SNS 通知
如果您正確配置了警報,您將看到類似於圖 5 的電子郵件。該電子郵件顯示 SNS 通知已成功配置並使用 GuardDuty Tester 進行測試。如果這是一個新發現,您將在 GuardDuty Tester 生成發現後不久收到此 SNS 通知,但如果這是一個更新的發現,則時間將基於帳戶中配置的通知頻率。
客戶在其環境中消耗 GuardDuty 發現的方式有很多。無論您是使用 Amazon SNS 還是其他機制,例如聊天應用程序、票務系統或安全信息和事件管理 (SIEM) 解決方案,您都可以使用此 EventBridge 規則示例和 GuardDuty Tester 測試您的通知管道。
自動化回應
在第三個用例中,我向您展示如何基於 GuardDuty 發現創建自動化行動。在此示例中,我創建了一個基於 EC2 實例連接到比特幣挖礦域的發現,然後基於此發現,我使用 Lambda 標記實例,以便在後續的調查步驟中協助識別。雖然這是一個簡單的示例,但它展示了您可以通過結合 EventBridge 規則和 Lambda 函數來做什麼。如果您想為需要進行主機級別修改的 GuardDuty 運行時監控發現創建自動化回應,您可以使用 EventBridge 規則與 AWS Systems Manager Run Command 結合,在主機上本地運行命令以補救安全問題。
首先,創建一個 Lambda 函數,該函數將接收由 EventBridge 傳遞的 GuardDuty 事件,提取實例 ID 信息,然後將其用作 create_tags API 調用中的參數。請參閱以下示例代碼。
import json
import boto3
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def lambda_handler(event, context):
try:
# 提取 GuardDuty 發現中的必要信息
instance_id = event['detail']['resource']['instanceDetails']['instanceId']
account_id = event['detail']['accountId']
region = event['detail']['region']
# 創建一個 EC2 客戶端
ec2 = boto3.client('ec2', region_name=region)
# 向實例添加 "infected" 和 "cryptomining" 標籤值對
ec2.create_tags(
Resources=[instance_id],
Tags=[
{
'Key': 'infected',
'Value': 'cryptomining'
}
]
)
logger.info(f"已在帳戶 {account_id} 和地區 {region} 中將實例 {instance_id} 標記為 'infected=cryptomining'")
return {
'statusCode': 200,
'body': '實例標記成功'
}
except Exception as e:
logger.error(f"標記實例 {instance_id} 時出錯:{str(e)}")
return {
'statusCode': 500,
'body': f"標記實例時出錯:{str(e)}"
}
接下來,我創建了一個特定於我想測試的比特幣挖礦發現的 EventBridge 規則,如圖 6 所示。目標是我剛剛創建的 Lambda 函數。

圖 6: 用於加密貨幣挖礦 GuardDuty 發現的 EventBridge 規則
現在,EventBridge 規則已經設置,Lambda 函數作為目標,我可以使用 GuardDuty Tester 觸發比特幣挖礦發現並使用以下命令測試我的解決方案。
Python3 guardduty_tester.py --finding ‘CryptoCurrency:EC2/BitcoinTool.B!DNS’
生成發現後,我轉到我的 EC2 實例,看到有一個新的實例標籤,鍵為 infected,值為 cryptomining,如圖 7 所示。

圖 7: 自動化回應後的更新標籤
雖然這是一個一般示例,但您可以在回應 GuardDuty 發現時採取的各種行動中使用相同的方法,然後使用 GuardDuty Tester 測試它們。示例包括使用 Lambda 在 AWS WAF、網路訪問控制列表(網路 ACL)或 AWS 網路防火牆中添加邏輯以阻止可疑流量,或使用 Systems Manager Run Command 結束在主機上運行的惡意進程。
結論
更新的 GuardDuty Tester 代表了幫助組織驗證和增強對 GuardDuty 威脅檢測信心的重大進展。GuardDuty Tester 現在提供更全面的 GuardDuty 運行時監控和保護計劃覆蓋,涵蓋各種 AWS 服務。
通過使用 GuardDuty Tester 並遵循本文中的用例,您可以主動評估您的威脅檢測準備情況,識別潛在的漏洞,並實施必要的措施,以幫助您加強 AWS 環境以應對不斷變化的網絡威脅。
如果您對本文有反饋,請在下方的評論區提交評論。如果您對本文有疑問,請聯繫 AWS 支援。
本文由 AI 台灣 運用 AI 技術編撰,內容僅供參考,請自行核實相關資訊。
歡迎加入我們的 AI TAIWAN 台灣人工智慧中心 FB 社團,
隨時掌握最新 AI 動態與實用資訊!