kevinlupera/aws-incident-response-security-ecuador-demo

GitHub: kevinlupera/aws-incident-response-security-ecuador-demo

这是一个利用 AWS CDK 和 Lambda 构建的无服务器自动化响应管道,旨在 GuardDuty 检测到高危威胁时自动隔离受损资源并通知安全团队。

Stars: 0 | Forks: 0

# 🔐 aws-incident-response 无服务器管道,当 GuardDuty 发现高严重性威胁时自动检测、隔离并通知——无需人工干预。 ## 架构图 ``` ┌─────────────────────────────────────────────────────────────────────────────┐ │ Pipeline de Respuesta Automática │ │ │ │ ┌────────────┐ ┌──────────────┐ ┌─────────────────────────────┐ │ │ │ │ │ │ │ EventBridge Rule │ │ │ │ GuardDuty │────▶│ Security Hub │────▶│ severity >= 7 (HIGH/CRIT) │ │ │ │ │ │ ASFF │ │ source: aws.guardduty │ │ │ └────────────┘ └──────────────┘ └──────────────┬──────────────┘ │ │ │ │ │ ▼ │ │ ┌───────────────────────┐ │ │ │ Lambda: isolate- │ │ │ │ resource (Node 22) │ │ │ └─────────┬─────────────┘ │ │ │ │ │ ┌─────────────────────────┼────────────────┐ │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ ┌──────────────────┐ ┌────────────────────┐ ┌───────┐ │ │ │ EC2 Instance │ │ IAM AccessKey │ │ SNS │ │ │ │ → SG Cuarentena│ │ → Policy DenyAll │ │ Email │ │ │ │ (sin reglas) │ │ (usuario aislado) │ │ Alert │ │ │ └──────────────────┘ └────────────────────┘ └───────┘ │ │ │ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │ │ CloudTrail → S3 (RETAIN + Glacier 365d) + CloudWatch Logs (1 año) │ │ │ └─────────────────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────────────────┘ ``` ## 使用的 AWS 服务 | 服务 | 功能 | Stack CDK | |------------------------|------------------------------------------------------|--------------------| | Amazon GuardDuty | 使用 ML + 威胁情报进行威胁检测 | `GuardDutyStack` | | AWS CloudTrail | 多区域 API 调用审计 | `CloudTrailStack` | | AWS Security Hub | 查找结果的聚合与标准化 (ASFF) | `SecurityHubStack` | | Amazon SNS | 通过电子邮件向安全团队发送通知 | `NotificationStack`| | Amazon EventBridge | 按严重性 (>= 7) 路由事件 | `ResponseStack` | | AWS Lambda | 自动隔离受感染的资源 | `ResponseStack` | | Amazon EC2 (SG) | 不含任何规则的隔离安全组 | Lambda | | AWS IAM | 针对已泄露 Access Keys 的 DenyAll 策略 | Lambda | | Amazon S3 | CloudTrail 日志存储 (RETAIN 永久保留) | `CloudTrailStack` | | Amazon CloudWatch Logs | CloudTrail 和 Lambda 的实时日志 | 两个 stacks | ## 仓库结构 ``` aws-incident-response/ ├── bin/ │ └── app.ts # Punto de entrada CDK — instancia todos los stacks ├── lib/ │ ├── config.ts # ⚙️ Configuración central (email, región, severidad) │ ├── guardduty-stack.ts # Stack: detector + protecciones S3/EKS/Malware │ ├── cloudtrail-stack.ts # Stack: trail multi-región + S3 + CloudWatch │ ├── securityhub-stack.ts # Stack: Security Hub + estándar FSBP │ ├── notification-stack.ts # Stack: SNS topic + suscripción email │ └── response-stack.ts # Stack: EventBridge + Lambda + IAM Role ├── lambdas/ │ └── isolate-resource/ │ └── index.ts # Lambda handler — aislamiento EC2/IAM + SNS ├── scripts/ │ └── simulate.sh # Script de simulación con GuardDuty sample findings ├── package.json ├── tsconfig.json ├── cdk.json └── README.md ``` ## 配置前置条件 ### 1. 配置告警电子邮件 编辑 `lib/config.ts` 并更改电子邮件: ``` alertEmail: 'tu-email-real@example.com', // ← Cambia esto ``` ### 2. (可选) 调整区域 ``` region: 'us-east-1', // Cambia si prefieres otra región ``` ### 3. (可选) 调整隔离的最小严重性 ``` minSeverityToIsolate: 7, // 7 = HIGH, 9 = solo CRITICAL ``` ### 4. 验证 AWS 前置条件 ``` # 验证 AWS 活跃凭证 aws sts get-caller-identity # 验证 CDK 是否已安装 cdk --version # 如果是首次在此账户/区域使用 CDK: cdk bootstrap ``` ## 部署命令 ### 步骤 1 — 安装依赖 ``` npm install ``` ### 步骤 2 — 编译 TypeScript ``` npm run build ``` ### 步骤 3 — 部署所有基础设施 ``` cdk deploy --all --require-approval never ``` ## 如何运行模拟 ``` # 授予执行权限(仅第一次) chmod +x scripts/simulate.sh # 运行模拟 ./scripts/simulate.sh ``` 该脚本会自动: 1. 检测 GuardDuty 探测器 ID 2. 创建一个类型为 `UnauthorizedAccess:IAMUser/MaliciousIPCaller` 的示例查找结果 3. 显示需要观察的内容以及预计的传播时间 4. 打印用于实时监控管道的有用命令 ### 预计传播时间 | 阶段 | 服务 | 预计时间 | |------------------|--------------------|----------------| | 查找结果已创建 | GuardDuty | 立即 | | 标准化 | Security Hub | 1–2 分钟 | | 规则触发 | EventBridge | 2–3 分钟 | | Lambda 执行 | Lambda + CloudWatch| 3–5 分钟 | | 收到电子邮件 | SNS | 5–7 分钟 | ## Teardown (删除资源) ``` # 删除所有 stacks(通过 RETAIN 保留的 CloudTrail S3 bucket 除外) cdk destroy --all # 要手动删除 S3 bucket(包含审计日志): # 前往 AWS 控制台 → S3 → 清空 bucket → 删除 bucket ``` ## GuardDuty 严重性表 | 级别 | 范围 | 颜色 | 是否触发管道? | 威胁示例 | |----------|------------|--------|----------------|-----------------------------------------------| | LOW | 1.0 – 3.9 | 🟢 | 否 | 来自已知 IP 的端口扫描 | | MEDIUM | 4.0 – 6.9 | 🟡 | 否 | 来自匿名 IP 的 S3 访问 | | HIGH | 7.0 – 8.9 | 🔴 | **是** (默认) | 来自已知恶意 IP 的 API 调用 | | CRITICAL | 9.0 – 10.0 | 🚨 | **是** | 凭证的主动外泄 | 触发管道的最小严重性在 `lib/config.ts` 中配置。 ## 演示说明 - GuardDuty 的 **sample findings** 是合成查找结果——并不代表你账户中的真实威胁 - 自动隔离仅用于**演示**——在生产环境中,对于高严重性事件应实施人工审批 - 对于生产环境,建议启用 **GuardDuty Multi-Account** 和 **Security Hub Organizations** - 设置为 `RETAIN` 的 CloudTrail 日志可确保即使在执行 `cdk destroy` 后取证证据仍然保留 *为演讲 "Nadie Apretó un Botón: Respuesta Automática a Incidentes con AWS Nativo" 生成* *AWS Security Community Ecuador*
标签:AMSI绕过, ASFF, AWS, DevSecOps, DPI, EventBridge, GNU通用公共许可证, GuardDuty, Lambda, Node.js, Security Hub, Serverless, 上游代理, 威胁检测, 安全运营, 扫描框架, 无服务器, 网络调试, 自动化, 自动化攻击, 资源隔离, 通知, 高严重性