security
A
信頼度ランク
| S | 公式ソース確認済み |
| A | 成功実績多数・失敗例少数 |
| B | 賛否両論 |
| C | 動作未確認・セキュリティリスク高 |
| Z | 個人所感 |
Amazon GuardDuty — 脅威インテリジェンス・検出カテゴリ・自動対応設計
GuardDutyが検出する脅威の種類(UnauthorizedAccess, Backdoor, CryptoCurrency等)、データソース(CloudTrail/VPCフローログ/DNS)、S3 Protection、EKS Protection、EventBridgeとの自動対応を解説。
一言結論
GuardDutyはエージェント不要で既存ログを分析するため有効化コストが低く、InstanceCredentialExfiltration等の高SeverityなFindingにはEventBridge+Lambdaで自動隔離・クレデンシャル無効化を組み込むことでインシデント初動対応の人的負担を大幅に削減できる。
GuardDutyとは
Amazon GuardDutyは機械学習と脅威インテリジェンスを使って、AWSアカウントの脅威を自動検出するマネージドサービスだ。エージェントや設定変更なしに有効化でき、既存のログを分析する。
GuardDutyが分析するデータソース
デフォルトデータソース:
CloudTrail Management Events: AWSアカウントのAPIコール
VPC Flow Logs: ネットワークトラフィック
DNS Logs: DNSクエリ(AWSのDNSリゾルバー)
追加の保護機能(オプション):
S3 Protection: S3データイベントの分析(S3バケットへのアクセス)
EKS Protection: EKS監査ログ・EC2内のK8sアクティビティ
RDS Protection: RDSログイン試行の分析
Lambda Protection: Lambda実行ネットワーク分析
Malware Protection: EC2/ECSのマルウェアスキャン
Runtime Monitoring: EC2/ECS/EKSのランタイム動作分析
検出カテゴリとFindingの例
不正アクセス(UnauthorizedAccess)
UnauthorizedAccess:IAMUser/TorIPCaller
→ TorネットワークからIAMユーザーがAPIを呼び出している
UnauthorizedAccess:EC2/SSHBruteForce
→ EC2インスタンスへのSSHブルートフォース攻撃
UnauthorizedAccess:IAMUser/ConsoleLoginSuccess.B
→ 通常と異なる場所からのコンソールログイン
仮想通貨マイニング(CryptoCurrency)
CryptoCurrency:EC2/BitcoinTool.B!DNS
→ EC2インスタンスが仮想通貨マイニングプールのドメインに問い合わせ
CryptoCurrency:EC2/BitcoinTool.B
→ 既知のマイニングプールのIPアドレスへの通信
バックドア(Backdoor)
Backdoor:EC2/C&CActivity.B!DNS
→ EC2インスタンスが既知のC2(コマンドアンドコントロール)サーバーと通信
Backdoor:Lambda/C&CActivity.B
→ Lambda関数がC2通信
資格情報の流出(CredentialAccess)
CredentialAccess:IAMUser/AnomalousBehavior
→ 通常とは異なるパターンのAPIアクセス
UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration.OutsideAWS
→ EC2インスタンスのロールクレデンシャルがAWS外から使用されている
(SSRF等でクレデンシャルが盗まれた可能性)
Findingの重要度
Critical (9.0+): 即時対応が必要
High (7.0-8.9): 高優先度、速やかに調査
Medium (4.0-6.9): 調査が必要
Low (1.0-3.9): 情報として確認
サンプル:
Critical: 既知のマルウェアとの通信
High: EC2クレデンシャルの外部使用
Medium: 通常と異なる場所からのAPIアクセス
Low: ポートスキャンの検出
EventBridgeと連携した自動対応
# EventBridgeルール: GuardDutyのHigh/Criticalな検出を自動対応
{
"source": ["aws.guardduty"],
"detail-type": ["GuardDuty Finding"],
"detail": {
"severity": [{"numeric": [">=", 7]}]
}
}
# Lambda関数での自動対応例
def handler(event, context):
finding = event['detail']
severity = finding['severity']
finding_type = finding['type']
# EC2インスタンスのクレデンシャル漏洩
if 'CredentialAccess' in finding_type or 'InstanceCredentialExfiltration' in finding_type:
instance_id = finding['resource']['instanceDetails']['instanceId']
# 1. インスタンスのネットワークを隔離
ec2 = boto3.client('ec2')
ec2.modify_instance_attribute(
InstanceId=instance_id,
Groups=['sg-quarantine'] # アウトバウンド全拒否のSG
)
# 2. IAMロールをRevoke(クレデンシャル失効)
iam = boto3.client('iam')
# ロールにDenyポリシーを追加して即時無効化
# 3. SNSでセキュリティチームに通知
sns = boto3.client('sns')
sns.publish(
TopicArn='arn:aws:sns:...:security-alerts',
Subject=f'Critical: EC2 Credential Exfiltration - {instance_id}',
Message=json.dumps(finding, indent=2)
)
マルチアカウントでのGuardDuty管理
# GuardDuty管理アカウントの設定(Organizations連携)
aws guardduty create-detector --enable --region ap-northeast-1
aws guardduty update-organization-configuration \
--detector-id xxx \
--auto-enable \
--features '[
{"Name": "S3_DATA_EVENTS", "AutoEnable": "NEW"},
{"Name": "EKS_AUDIT_LOGS", "AutoEnable": "NEW"},
{"Name": "RDS_LOGIN_EVENTS", "AutoEnable": "NEW"}
]'
抑制ルール(Suppression Rules)
誤検知(False Positive)を抑制してFindings一覧をクリーンに保つ。
# 特定のIPからのSSHをFindingから除外
aws guardduty create-filter \
--detector-id xxx \
--name "known-admin-ip" \
--action SUPPRESS \
--finding-criteria '{
"Criterion": {
"type": {"Eq": ["UnauthorizedAccess:EC2/SSHBruteForce"]},
"service.action.networkConnectionAction.remoteIpDetails.ipAddressV4": {
"Eq": ["203.0.113.10"]
}
}
}'
試験頻出ポイント
- GuardDutyはエージェントなしで有効化できる(既存ログを分析)
- データソースは自動(VPCフローログ等を個別有効化不要)
- S3 ProtectionはデフォルトのGuardDutyとは別オプション
InstanceCredentialExfiltration.OutsideAWSはSSRF攻撃の典型的なFinding- マルチアカウントはOrganizations委任管理者から一括管理
- 30日間の無料トライアルあり
まとめ
GuardDutyはAWS環境の継続的な脅威監視に不可欠なサービスだ。特にCredentialExfiltration等の高Severityなfindingに対してEventBridgeとLambdaで自動対応を構築することで、インシデントへの初動対応を自動化できる。