uzobola/iam-cross-account-detection-pipeline
GitHub: uzobola/iam-cross-account-detection-pipeline
基于 AWS 原生无服务器架构的实时 IAM AssumeRole 检测与告警管道,结合严重性评分和合规映射,帮助安全团队快速识别和分诊跨账户角色代入活动。
Stars: 1 | Forks: 0
# IAM 跨账户检测管道

侧重于身份监控、检测工程和使用 Python CDK 的安全自动化的 AWS 云安全工程实战项目。
## 特色项目:实时 AssumeRole 检测管道
近乎实时地检测来自 CloudTrail 的 AWS `AssumeRole` 活动,提取与调查相关的上下文,并发送格式化的 SNS 电子邮件警报以便快速分类。
**技术栈:** CloudTrail → EventBridge → Lambda → SNS
**IaC:** AWS CDK (Python)
## 为什么 AssumeRole 很重要
`AssumeRole` 是一种高信号身份事件,可能出现在凭证窃取、横向移动、权限提升和跨账户访问滥用等场景中。近实时的可见性可以提高调查速度并缩短检测时间。
## 这展示了什么
- AWS 原生检测工程
- AWS 中以身份为中心的监控
- 事件驱动的安全自动化
- 使用 Lambda 的无服务器警报
- 使用 Python CDK 的基础设施即代码
## 威胁感知的检测映射
此检测映射到 MITRE ATT&CK 框架中描述的对抗行为。
| 框架 | 技术 | 为什么重要 |
|---|---|---|
| MITRE ATT&CK | T1078 - 有效账户 | AssumeRole 活动可能表明使用了有效的云凭证进行持久化、权限提升或横向移动。 |
| MITRE ATT&CK | T1550.001 - 应用访问令牌 | 当攻击者获取或重放有效的身份验证材料时,临时凭证和基于会话的访问可能会被滥用。 |
AssumeRole 是一种正常的 AWS 操作,因此目的不是将每个事件都视为恶意事件。目标是根据账户边界、已知的自动化和风险上下文,识别出值得更快审查的角色代入活动。
## 严重性评分
Lambda 函数添加了基本的严重性评分,使警报更具可操作性。
| 严重性 | 条件 | 分类含义 |
|---|---|---|
| 高 | 主体账户与目标角色账户不同 | 潜在的跨账户访问风险,需要更快的审查。 |
| 中 | 主体账户与目标角色账户匹配 | 预期的同账户角色活动,但对审计和监控仍然有用。 |
| 低 | 主体 ARN 或目标角色 ARN 已明确加入白名单 | 已知的自动化或已批准的服务角色活动。 |
这通过将预期的自动化与较高风险的跨账户 AssumeRole 活动分离开来,从而减少了警报噪音。
## 可信角色白名单
已知的自动化或已批准的服务角色可以使用 `TRUSTED_ROLE_ARNS` 环境变量传递到 Lambda 函数中。在这个 CDK 项目中,该值可以通过 CDK 上下文提供:
```
cdk deploy \
-c alert_email=you@example.com \
-c trusted_roles=arn:aws:iam::123456789012:role/GitHubActionsDeploymentRole,arn:aws:iam::123456789012:role/SecurityAuditRole
```
白名单由安全团队或云所有者有意配置。它不是自动发现的。这使得分类决定与批准的 IAM 治理保持联系,而不是假设每个现有角色都是受信任的。
## 合规性与控制映射
此检测还通过将 AWS 身份活动映射到常见的控制框架,支持安全监控和审计证据用例。
| 框架 | 控制 | 本项目如何支持它 |
|---|---|---|
| NIST CSF | DE.CM-3 | 通过 CloudTrail AssumeRole 事件监控人员活动并生成近实时警报。 |
| SOC 2 | CC7.2 | 检测异常的身份活动,并为调查和风险评估提供警报上下文。 |
| CIS Controls | 审计日志管理 | 使用 CloudTrail 事件支持基于日志的监控、警报以及安全相关活动的审查。 |
这在检测工程和 GRC 之间建立了一座桥梁,展示了云遥测如何为安全监控和控制有效性提供证据。
## 架构

管道流程:
```
CloudTrail (API events)
→ EventBridge (AssumeRole filter)
→ Lambda (parse + enrich)
→ SNS (email alert)
```
### EventBridge 规则模式
```
{
"source": ["aws.sts"],
"detail-type": ["AWS API Call via CloudTrail"],
"detail": {
"eventSource": ["sts.amazonaws.com"],
"eventName": ["AssumeRole"]
}
}
```
## 警报字段
每个警报包括:
- 事件时间和名称
- 账户 ID 和区域
- 源 IP 和用户代理
- 主体类型和 ARN
- 主体账户
- 目标角色 ARN
- 角色会话名称
- 严重性评分
## 警报复示例
```
Subject: [AWS Alert][High] AssumeRole detected in account 123456789012
AWS AssumeRole activity detected.
Time: 2025-03-27T18:42:11Z
Event Name: AssumeRole
Account ID: 123456789012
Region: us-east-1
Source IP: 203.0.113.10
User Agent: aws-cli/2.15.0
Principal Type: IAMUser
Principal ARN: arn:aws:iam::111111111111:user/admin-user
Principal Account: 111111111111
Target Role ARN: arn:aws:iam::123456789012:role/SecurityAuditRole
Role Session Name: security-audit-session
Severity: High
```
## 证据
部署和测试证明:
- `evidence/01-sns-subscription-confirmed.png` — SNS 订阅已确认
- `evidence/02-cdk-deploy-success.png` — CDK 部署:15/15 资源 CREATE_COMPLETE
- `evidence/03-lambda-test-success.png` — Lambda 测试:statusCode 200,已返回 messageId
- `evidence/04-alert-email.png` — 警报电子邮件已发送至收件箱,包含完整上下文
- `evidence/05-eventbridge-rule.png` — EventBridge 规则已启用且模式已确认
- `evidence/06-cloudtrail-trail.png` — CloudTrail 跟踪处于活动状态且正在记录
- `evidence/07-severity-tests-passed.png` — 高/中/低严重性评分单元测试已通过
## 部署
```
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cdk bootstrap
cdk deploy -c alert_email=you@example.com
```
这将部署 CloudTrail 跟踪、EventBridge 规则、Lambda 函数、SNS 主题和电子邮件订阅。
部署后,在警报到达之前确认 SNS 订阅电子邮件。
## 检测覆盖路线图
- 为 root 登录、IAM 策略更改和 S3 公共访问更改添加额外的 EventBridge 检测
- 为非工作时间访问和特权角色使用添加高级可疑活动逻辑
- 直接在 SNS 警报消息中添加补救指南
- 为失败的 Lambda 调用添加死信队列
- 将高严重性发现发布到 AWS Security Hub
- 扩展单元测试以涵盖完整的 CloudTrail 事件解析和警报格式化
## 仓库结构
```
iam-cross-account-detection-pipeline/
├── README.md
├── app.py
├── requirements.txt
├── assumerole_alerting/
│ ├── __init__.py
│ └── assumerole_alerting_stack.py
├── lambda/
│ └── handler.py
├── examples/
│ └── sample-cloudtrail-assumerole-event.json
├── tests/
│ └── unit/
│ └── test_severity.py
└── evidence/
├── architecture-diagram.png
├── 01-sns-subscription-confirmed.png
├── 02-cdk-deploy-success.png
├── 03-lambda-test-success.png
├── 04-alert-email.png
└── 05-eventbridge-rule.png
```
标签:AMSI绕过, AssumeRole, AWS, CDK, CloudTrail, DPI, EC2, EventBridge, IaC, IAM, Lambda, MITRE ATT&CK 映射, NIST CSF, Python, SNS, SOC 2 合规, 严重性评分, 事件驱动, 协议分析, 威胁检测, 安全告警, 安全运营, 扫描框架, 无后门, 无服务器, 权限提升, 横向移动, 私有化部署, 编程规范, 跨账户访问, 身份监控, 逆向工具, 防御规避