dreighton90/Cloud-Security-Alerting-System-AWS-PostgreSQL

GitHub: dreighton90/Cloud-Security-Alerting-System-AWS-PostgreSQL

基于 AWS CloudTrail 和 CloudWatch 构建的云端安全事件检测与 IAM 权限提升攻击自动告警响应实验系统。

Stars: 0 | Forks: 0

# 🔐 云事件响应 + IAM 锁定 **利用 AWS CloudTrail、CloudWatch、SNS 和 CLI 驱动的策略执行,实现自动化威胁检测和 IAM 遏制。** ## 🧩 问题背景 在云环境中,权限提升是最常见且最具破坏性的攻击模式之一。攻击者——或受损的内部账户——一旦获得创建或修改 IAM 策略的能力,就能在几分钟内实际控制整个 AWS 环境。 面临的挑战是:大多数云团队都是在*损失造成之后*,通过手动日志审查或延迟的 SIEM 警报才检测到这些事件。本项目的目标是构建一个从检测到响应的管道,使其从可疑 IAM 事件触发的那一刻起,到访问受限的那一刻止,全流程自动运行——在遏制步骤中无需人工干预。 ## 🛠️ 实施方法 ### 架构 ``` CloudTrail → CloudWatch Logs → Metric Filter → CloudWatch Alarm → SNS → IAM Lockdown (CLI) ``` | 组件 | 作用 | |---|---| | AWS CloudTrail | 捕获所有 API 活动,包括 IAM 事件 | | CloudWatch Logs + Metric Filter | 解析日志以检测 `CreatePolicyVersion` 和侦察模式 | | CloudWatch Alarm | 当筛选指标越过阈值时触发 | | Amazon SNS | 发送电子邮件警报并发出遏制信号 | | IAM Policy (CLI) | 应用拒绝策略以限制受损用户 | | EventBridge | 将 IAM 变更事件路由到目标日志组 | ### 模拟攻击场景 使用 `suspect-user` 账户来模拟内部威胁或凭证泄露。该场景分两个阶段运行: **阶段 1 — 权限提升** - 通过 `attach-user-policy` 授予可疑账户 AdministratorAccess 权限 - 生成新的访问密钥,模拟凭证盗窃 - 使用被盗密钥配置 AWS CLI 配置文件 - 攻击者进行侦察:查询日志组,枚举 IAM 结构 **阶段 2 — 检测与响应** - CloudTrail 记录来自可疑配置文件的 `CreatePolicyVersion` 事件 - 指标筛选器标记该事件;CloudWatch 警报突破阈值 - SNS 向安全团队发送电子邮件警报 - 通过 CLI 应用 IAM 拒绝策略以锁定可疑用户 ### 关键技术决策 - **选用指标筛选器而非仅使用 EventBridge:** EventBridge 提供近实时的路由,但原生不支持基于阈值的警报。CloudWatch 指标筛选器允许设置警报逻辑(例如,“如果此事件在 5 分钟内出现不止一次则触发”),这对于避免针对一次性 API 调用的误报至关重要。 - **选用 CLI 驱动的锁定而非 Lambda 自动化:** 对于本次实验,IAM 锁定是通过 CLI 手动执行的,旨在逐步演示分析人员的工作流程。该架构已为 Lambda 做好准备——SNS 主题可以触发 Lambda 函数以自动应用拒绝策略,这是此模式在生产环境中的延伸。 - **作用域拒绝策略:** 锁定策略对 `iam:*` 和 `sts:AssumeRole` 使用显式拒绝,而不是全面拒绝整个账户,以避免在遏制期间中断合法的 CloudWatch 代理和 EC2 服务调用。 ## ✅ 成果 | 里程碑 | 结果 | |---|---| | CloudTrail 初始化并记录日志 | ✅ 已确认 | | Root 登录警报配置并触发 | ✅ 收到电子邮件警报 | | 模拟可疑用户权限提升 | ✅ 已附加 AdministratorAccess,已创建访问密钥 | | 通过指标筛选器检测到侦察活动 | ✅ 触发 SNS 警报 | | 检测到 `CreatePolicyVersion` 提升 | ✅ 越过警报阈值 | | 已应用 IAM 锁定策略 | ✅ 通过 CLI 限制访问 | 完整的检测到警报管道已端到端运行。可疑配置文件的 `CreatePolicyVersion` 事件在指标评估窗口内触发了 CloudWatch 警报,并送达了 SNS 电子邮件通知。随后应用了 IAM 拒绝策略,限制了受损账户对 IAM 和角色扮演的访问。 ## 📸 操作演示 ### 基础设施设置 ![已创建 CloudTrail](https://raw.githubusercontent.com/dreighton90/Cloud-Security-Alerting-System-AWS-PostgreSQL/main/screenshots/01-cloudtrail-creation.png) *CloudTrail 已初始化用于 API 活动记录* ![CloudTrail 日志记录已启用](https://raw.githubusercontent.com/dreighton90/Cloud-Security-Alerting-System-AWS-PostgreSQL/main/screenshots/03-enable-logging.png) *已为所有区域启用日志记录以实现全面治理覆盖* ![已创建 EventBridge 规则](https://raw.githubusercontent.com/dreighton90/Cloud-Security-Alerting-System-AWS-PostgreSQL/main/screenshots/04-eventbridge-rule-created.png) *EventBridge 规则将 IAM 变更事件路由到 CloudWatch 日志组* ### 检测管道 ![CloudWatch 指标筛选器](https://raw.githubusercontent.com/dreighton90/Cloud-Security-Alerting-System-AWS-PostgreSQL/main/screenshots/08-cloudwatch-metric-check.png) *针对 CloudTrail 日志组中 `CreatePolicyVersion` 事件的指标筛选器* ![日志组筛选器修复](https://raw.githubusercontent.com/dreighton90/Cloud-Security-Alerting-System-AWS-PostgreSQL/main/screenshots/11-cloudwatch-metric-filter-loggroup-fix.png) *已更正筛选器目标——初始配置错误指向了错误的日志组;通过验证日志组 ARN 修复* ![Root 登录警报](https://raw.githubusercontent.com/dreighton90/Cloud-Security-Alerting-System-AWS-PostgreSQL/main/screenshots/15-cloudwatch-root-login-alarm-configured.png) *监控 Root 账户登录的 CloudWatch 警报——任何 Root API 活动都会触发* ![收到电子邮件警报](https://raw.githubusercontent.com/dreighton90/Cloud-Security-Alerting-System-AWS-PostgreSQL/main/screenshots/16-root-login-alarm-email.png) *警报违规时送达的 SNS 电子邮件通知* ![CloudTrail Root 事件](https://raw.githubusercontent.com/dreighton90/Cloud-Security-Alerting-System-AWS-PostgreSQL/main/screenshots/18-cloudtrail-root-events.png) *Root 登录事件被捕获并在 CloudTrail 事件历史记录中可见* ### 攻击模拟 ![可疑用户已存在](https://raw.githubusercontent.com/dreighton90/Cloud-Security-Alerting-System-AWS-PostgreSQL/main/screenshots/19-iam-user-already-exists-suspect-user.png) *账户中已确认存在可疑 IAM 用户* ![已附加管理员策略](https://raw.githubusercontent.com/dreighton90/Cloud-Security-Alerting-System-AWS-PostgreSQL/main/screenshots/22-iam-attach-admin-policy-to-suspect-user.png) *已附加 AdministratorAccess 策略——执行权限提升* ![已创建访问密钥](https://raw.githubusercontent.com/dreighton90/Cloud-Security-Alerting-System-AWS-PostgreSQL/main/screenshots/24-access-key-created-suspect-user-aws-compromise.png) *为可疑用户生成了新访问密钥——模拟凭证渗出* ![已配置 Profile](https://raw.githubusercontent.com/dreighton90/Cloud-Security-Alerting-System-AWS-PostgreSQL/main/screenshots/suspect-configure-profile.PNG) *使用被盗凭证配置的 AWS CLI 配置文件* ![侦察活动](https://raw.githubusercontent.com/dreighton90/Cloud-Security-Alerting-System-AWS-PostgreSQL/main/screenshots/28-identity-log-groups-output.png) *攻击者通过 CLI 枚举日志组——侦察行为已记录* ### 响应 ![已应用侦察筛选器](https://raw.githubusercontent.com/dreighton90/Cloud-Security-Alerting-System-AWS-PostgreSQL/main/screenshots/29-put-metric-filter-recon.png) *添加了指标筛选器以检测日志组枚举模式* ![已确认警报](https://raw.githubusercontent.com/dreighton90/Cloud-Security-Alerting-System-AWS-PostgreSQL/main/screenshots/31-cloudwatch-alarm-confirmation..png) *为侦察检测阈值创建的 CloudWatch 警报* ![SNS 警报已触发](https://raw.githubusercontent.com/dreighton90/Cloud-Security-Alerting-System-AWS-PostgreSQL/main/screenshots/33-sns-recon-alarm.png) *当突破侦察阈值时发出的警报* ![权限提升筛选器](https://raw.githubusercontent.com/dreighton90/Cloud-Security-Alerting-System-AWS-PostgreSQL/main/screenshots/34-filter-escalation.png) *为 `CreatePolicyVersion` 权限提升检测添加了第二个指标筛选器* ![锁定策略 JSON](https://raw.githubusercontent.com/dreighton90/Cloud-Security-Alerting-System-AWS-PostgreSQL/main/screenshots/36-policy-json..png) *针对 IAM 和 STS 操作起草的自定义拒绝策略* ![已创建策略](https://raw.githubusercontent.com/dreighton90/Cloud-Security-Alerting-System-AWS-PostgreSQL/main/screenshots/38-create-policy-v1.png) *锁定策略成功部署到账户* ![权限提升警报已触发](https://raw.githubusercontent.com/dreighton90/Cloud-Security-Alerting-System-AWS-PostgreSQL/main/screenshots/39-create-policy-v2-alarm-trigger.png) *可疑配置文件的 `CreatePolicyVersion` 事件触发警报* ![已越过阈值](https://raw.githubusercontent.com/dreighton90/Cloud-Security-Alerting-System-AWS-PostgreSQL/main/screenshots/40-alarm-threshold-crossed.PNG) *CloudWatch 确认警报违规——事件严重性已确认* ## 📚 经验教训 **日志组定位比筛选器本身更重要。** 指标筛选器的编写是正确的,但最初指向了错误的日志组——CloudTrail 记录到一个组,而筛选器监视的是另一个。直到我明确验证了 ARN,警报才触发。在生产环境中,这将是一个无声的故障——检测已配置但无法运行。教训:在宣布检测规则上线之前,务必使用测试事件进行端到端验证。 **阈值调优是真正的权衡。** 将警报阈值设置为 1(任何单次出现都触发)适用于像非管理员账户执行 `CreatePolicyVersion` 这样的高置信度事件。对于像日志组枚举这样噪声较大的事件,阈值为 1 会在真实环境中产生误报。区分信号与噪声是检测工程的核心技能。 **CLI 锁定速度快,但 Lambda 是生产模式。** 通过 CLI 手动应用拒绝策略在实验室中可行,并且清晰地展示了分析人员的工作流程。在生产中,SNS 主题应触发 Lambda 函数,在警报发出后的几秒钟内自动应用锁定——从而完全消除遏制步骤中的人工延迟。 ## 🔧 工具与服务 - AWS CloudTrail - AWS CloudWatch Logs & Alarms - Amazon SNS - Amazon EventBridge - AWS IAM - AWS CLI - Ubuntu 24.04 (VirtualBox) ## 🚀 计划扩展 - **Lambda 自动化:** 用 SNS 触发的 Lambda 替换手动 CLI 锁定,以实现 60 秒内的自动遏制 - **Terraform 配置:** 使用基础设施即代码 实现完整检测管道的可重复部署 - **额外的检测规则:** 扩展指标筛选器以覆盖 `AttachUserPolicy`、`CreateUser` 和 `AssumeRole` 滥用模式 - **与云安全警报系统集成:** 将 IAM 事件输入 PostgreSQL 警报管道以进行跨系统关联 ## ⚠️ 免责声明 本项目完全在个人 AWS 账户内使用模拟测试身份进行。未发生未经授权的访问、凭证使用或与外部系统的交互。所有内容仅用于教育和专业发展目的。
标签:AWS, CloudTrail, CloudWatch, containment, DPI, FOFA, FTP漏洞扫描, IAM 策略, JSONLines, PostgreSQL, 云端防御, 内部威胁, 威胁情报, 安全编排, 开发者工具, 攻击模拟, 测试用例, 特权升级, 蜜罐技术, 足迹分析, 身份与访问管理, 零信任, 驱动签名利用