IAM AKSK泄漏自动响应
GuardDuty Findings被发送到默认的 AWS EventBridge 事件总线。我们根据 InstanceCredentialExfiltration
发现的自定义事件模式配置了一个触发规则。该规则接收 GuardDuty 发现的 JSON 并提取被入侵的 IAM 角色及其最后看到的时间戳,然后将这些内容注入包含 IAM 策略的新 JSON 文档,并将其发送到我们的 Step Function 状态机。状态机通过其内置 SDK 集成调用 IAM PutRolePolicy API,针对 IAM 角色应用该策略,该策略会立即撤销所有活动会话。这将使攻击者窃取的凭据失去作用,从而在我们建立的保护措施都无效时中断攻击。
适用的发现类型
如果您的 EC2 实例凭据被用于从一个 IP 地址调用 API,而该 IP 地址的所有者是与相关 EC2 实例运行账户不同的 AWS 账户,则该发现会通知您。
配置Step Function
创建状态机
状态机名称
revoke-old-sessions
类型
标准
code
{
"StartAt": "RevokeOldSessions",
"States": {
"RevokeOldSessions": {
"End": true,
"Parameters": {
"PolicyDocument.$": "$.PolicyDocument",
"PolicyName": "RevokeOldSessions",
"RoleName.$": "$.RoleName"
},
"Resource": "arn:aws:states:::aws-sdk:iam:putRolePolicy",
"Type": "Task"
}
}
}
配置EventBridge
打开 EventBridge console 。
点击 创建规则 按钮。
名称
IAM-AKSK-Leak-RemediationRule
描述
GuardDuty EC2 Credential Remediation Rule
规则类型
具有事件模式的规则
事件源
AWS 事件或 EventBridge 合作伙伴事件
创建方法
使用模式表单
事件模式
{ "detail-type": ["GuardDuty Finding"], "source": ["aws.guardduty"], "detail": { "type": ["UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration.OutsideAWS", "UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration.InsideAWS"] } }
选择目标
AWS 服务-Step Function状态机-revoke-old-sessions
我们不希望将之前查看过的整个 GuardDuty 发现 JSON 发送到步骤函数,而是想提取几个关键属性,并用它们来制定 IAM 策略,以撤销受损 IAM 角色的活动会话。为此,我们使用输入转换器和 JSON 选择器语法来提取 IAM 角色名称和时间戳。
在目标中展开其他设置,配置目标输入选择输入转换器,配置输入转换器:
输入路径:
{
"role_name": "$.detail.resource.accessKeyDetails.userName",
"timestamp": "$.detail.service.eventLastSeen"
}
输入模版:
{
"RoleName": "<role_name>",
"PolicyDocument": {
"Version": "2012-10-17",
"Statement": {
"Effect": "Deny",
"Action": "*",
"Resource": "*",
"Condition": {
"DateLessThan": {
"aws:TokenIssueTime": "<timestamp>"
}
}
}
}
}
验证效果
模拟获取IAM安全凭据的攻击过程,会触发GuardDuty的告警。
然后查看模拟中使用的IAM role是否新增加一个策略:"RevokeOldSession"

最后更新于