uzobola/iam-cross-account-detection-pipeline

GitHub: uzobola/iam-cross-account-detection-pipeline

基于 AWS 原生无服务器架构的实时 IAM AssumeRole 检测与告警管道,结合严重性评分和合规映射,帮助安全团队快速识别和分诊跨账户角色代入活动。

Stars: 1 | Forks: 0

# IAM 跨账户检测管道 ![IAM 跨账户检测管道架构](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/bb335e5898165410.png) 侧重于身份监控、检测工程和使用 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 之间建立了一座桥梁,展示了云遥测如何为安全监控和控制有效性提供证据。 ## 架构 ![实时 AWS AssumeRole 检测与警报架构](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/b383b3db35165415.png) 管道流程: ``` 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 合规, 严重性评分, 事件驱动, 协议分析, 威胁检测, 安全告警, 安全运营, 扫描框架, 无后门, 无服务器, 权限提升, 横向移动, 私有化部署, 编程规范, 跨账户访问, 身份监控, 逆向工具, 防御规避