hetsonii/aegis-siem

GitHub: hetsonii/aegis-siem

Aegis 是一个基于 AWS 构建的云原生 SIEM 系统,通过蜜罐传感器采集安全遥测数据并运行双层检测引擎,配合 SOC 控制台实现从威胁检测到事件分诊与响应的完整流程。

Stars: 0 | Forks: 0

# Aegis — 构建于 AWS 的云原生轻量级 SIEM Aegis 从一个实时的、刻意暴露攻击面的 Web 应用程序 (**CloudJuice**)中采集安全遥测数据,以近实时的方式在其上运行双层 检测引擎,并在 SOC 控制台中展示调查结果以进行分诊。所有内容均 通过 Terraform 进行配置——无需手动创建任何资源。 ## 功能 - **CloudJuice**(ECS Fargate + ALB)是一个真实的 Web 应用程序,它会*识别并 记录*攻击行为,但绝不执行攻击者的输入——它是一个传感器,而 不是受害者。一个外部攻击脚本会驱动真实的流量访问它。 - 安全事件通过四个真实的通道传输:应用程序事件 (CloudWatch Logs)、ALB 访问日志、VPC Flow Logs 和 CloudTrail(全部发送至 S3)。 - 一个**订阅过滤器**将应用程序安全事件推送到**摄取 Lambda**,后者会将其标准化,将原始副本归档到 **S3 数据湖**中,并将它们排入 **SQS** 队列(带有 DLQ)。 - **检测 Lambda** 运行一个**声明式规则目录**(检测即代码: 涵盖 SQLi、XSS、命令注入、SSTI、Log4Shell、NoSQLi、XXE、 SSRF、LFI/RFI、路径遍历、IDOR、扫描器、敏感文件探测等 20 多种规则) **以及一个实时的统计层**(速率、暴力破解、凭证填充、熵、 首次发现的来源),使用 **DynamoDB** 中基于来源的窗口计数器——无需训练 模型。每条规则都映射到一种 **MITRE ATT&CK** 技术,调查结果通过 **缓存的 GeoIP** 威胁情报进行丰富,并且每一项都以 **OCSF** 检测 结果 schema 发出。调查结果发送到 DynamoDB,证据包发送到 S3,任何 `HIGH` 及以上的严重级别都会通过 **SNS** 扇出(发送到一个对其进行标记的 Lambda,并可选择发送至电子邮件)。 - **EventBridge** 运行一个计划内的关联扫描,用于检测缓慢的模式。 - **SOC 控制台**(S3 静态站点 → API Gateway → 仪表板 Lambda)是一个 多页面的、Kibana 风格的分析师工作区: - **Overview**(概览)—— KPI(调查结果、未解决事件、高危+严重、已封锁来源、 MTTA/MTTR)、随时间变化的调查结果图表、严重程度细分和主要来源。 - **Discover**(发现)—— 一个 KQL 风格的搜索栏、全局时间选择器、交互式 直方图、带有最高值的字段侧边栏、过滤器标签,以及可展开的行, 显示完整的调查结果 + OCSF 证据。 - **Incidents**(事件)—— 根据来源分组的调查结果,形成可分诊的案件。 - **Detections**(检测)—— 规则目录和一个实时的 **MITRE ATT&CK 覆盖矩阵**。 - **Threat Map**(威胁地图)—— 基于 GeoIP 丰富信息的攻击来源 Leaflet 地图。 - **Response**(响应)—— 黑名单:封锁来源(蜜罐会轮询该列表并 开始返回 `403`,并记录为调查结果)以及**解除封锁**以恢复其访问。 ## 仓库结构 ``` app/ CloudJuice honeypot (dependency-free Node.js) + public/ storefront + Dockerfile lambdas/ ingestion, detection (+detector.py catalog), alert, dashboard_api spa/ SOC console (index.html, styles.css, app.js, catalog.js, api.js, config template) attack/ external red-team script (stdlib only) tests/ unit tests for the detection logic infra/ Terraform for the entire stack .github/ CI/CD workflow ``` ## 前置条件 - AWS Academy Learner Lab 会话(区域为 `us-east-1`)、Terraform ≥ 1.5、 Docker、Python 3.12 以及 AWS CLI。 - 通过本地 `.env` 文件提供您的 Learner Lab 凭证(它们在每次 会话时都会轮换)。复制模板并填写: ``` cp .env.example .env # 然后用你当前的 Learner Lab session 值编辑 .env ``` `.env` 已被 gitignore 忽略;`.env.example` 是可共享的模板。(CI 改为使用 GitHub Actions secrets,并单独配置。) ## 部署 部署分为两个阶段的 apply:创建 ECR 仓库,构建并推送 CloudJuice 镜像,然后配置其他所有内容。之所以分为两个阶段,是因为 ECS 任务引用了一个镜像,该镜像必须在服务启动之前被推送。 执行镜像步骤时必须运行 Docker Desktop。 ### Windows (PowerShell) 从仓库根目录运行: ``` # 1. 从 .env 加载 credentials 到此 shell session Get-Content .env | Where-Object { $_ -and $_ -notmatch '^\s*#' } | ForEach-Object { $k, $v = $_ -split '=', 2 Set-Item "Env:$($k.Trim())" $v.Trim() } # 2. (可选)运行检测测试 python -m unittest discover -s tests # 3. Terraform 位于 infra/ 中 cd infra terraform init # already done if re-running # 阶段 1:创建 ECR repository terraform apply -auto-approve -target="aws_ecr_repository.cloudjuice" # 构建并推送 image $REPO = terraform output -raw ecr_repository_url aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin ($REPO -split '/')[0] docker build -t "${REPO}:latest" ..\app docker push "${REPO}:latest" # 阶段 2:配置所有其他内容 terraform apply -auto-approve # 显示 URL terraform output ``` ### macOS / Linux / Git Bash 从仓库根目录运行: ``` set -a; . ./.env; set +a # load credentials python3 -m unittest discover -s tests # optional tests cd infra terraform init terraform apply -auto-approve -target="aws_ecr_repository.cloudjuice" REPO=$(terraform output -raw ecr_repository_url) aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin "${REPO%/*}" docker build -t "$REPO:latest" ../app docker push "$REPO:latest" terraform apply -auto-approve terraform output ``` ## 演示 在 `infra/` 目录下,对已部署的目标发起攻击(这是原生遥测数据,不会 向 pipeline 中注入任何内容)。**campaign** 场景会重放来自 十几个伪造来源国家的攻击,从而填充事件列表和威胁地图: ``` # PowerShell python ..\attack\attack.py --target (terraform output -raw cloudjuice_url) --scenario campaign ``` ``` # bash python3 ../attack/attack.py --target "$(terraform output -raw cloudjuice_url)" --scenario campaign ``` 其他场景:`all`,或单一类型 —— `sqli`、`xss`、`cmd`、`ssti`、 `log4shell`、`ssrf`、`nosqli`、`xxe`、`lfi`、`traversal`、`idor`、`scanner`、 `sensitive`、`recon`、`brute`、`credstuff`、`benign`。添加 `--source-ip ` 以 将流量归因于特定的来源。 然后打开 `terraform output` 中的 **console URL**,并浏览各个页面: **Overview** 查看整体情况,**Discover** 搜索/过滤事件,**Incidents** 按来源进行分诊,**Detections** 查看 ATT&CK 矩阵,**Threat Map** 查看 来源,以及 **Response** 封锁嘈杂的来源并观察其收到 `403` 响应 —— 然后 再解除封锁。 ## 更改后重新部署 应用程序/容器更改(重新构建镜像并让 ECS 拉取它),在 `infra/` 目录下: ``` docker build -t "${REPO}:latest" ..\app # $REPO from terraform output -raw ecr_repository_url docker push "${REPO}:latest" aws ecs update-service --cluster aegis-cluster --service aegis-cloudjuice --force-new-deployment ``` 基础设施更改:只需重新运行 `terraform apply -auto-approve`。 ## 销毁 在 `infra/` 目录下: ``` terraform destroy -auto-approve ``` Buckets 使用 `force_destroy`,ECR 使用 `force_delete`,因此销毁是干净彻底的。 ## 测试 ``` python -m unittest discover -s tests # stdlib, no install (python3 on macOS/Linux) pytest -q # same tests under pytest (used in CI) ``` ## Learner Lab 说明(已记录,非隐藏) - **单一共享角色。** 不允许创建角色,因此每个资源都 附加到预先存在的 `LabRole` 上。在生产环境中,每个函数都将拥有 其自身的最小权限角色;预期的按函数策略在 设计文档中有所描述,并被标记为受环境限制的偏差。 - **CloudTrail → 仅限 S3。** 实验室不允许在 trail 上启用 CloudWatch Logs 交付,因此 trail 将数据交付到 S3。 - **电子邮件警报是可选的。** 默认情况下,警报使用 SNS → Lambda(无需 点击确认)。设置 `alert_email`(参见 `.env.example`)将添加一个 SNS → 电子邮件订阅;AWS 会发送一封确认电子邮件,您只需点击一次即可 激活。使用 `terraform apply -var "alert_email=$ALERT_EMAIL"` 进行应用。 - **轮换凭证。** 在每次实验室会话开始 pipeline 运行之前,刷新三个 GitHub Actions secrets (`AWS_ACCESS_KEY_ID`、`AWS_SECRET_ACCESS_KEY`、`AWS_SESSION_TOKEN`)。 - **公网 IP 任务。** Fargate 任务在具有锁定安全 组(ALB 是唯一的入口)的公有子网中运行,以避免使用 NAT gateway;在生产环境中,会将 它们放置在 NAT 或 VPC endpoint 后的私有子网中。 - **控制台托管。** 控制台作为公共 S3 静态站点提供服务。如果 账户强制执行 S3 Block Public Access,公共站点将被阻止 —— 在这种 情况下,在将 `spa/config.js` 中的 `API_BASE` 设置为 `api_base` 输出后,在本地打开 `spa/index.html`;API 的 CORS 允许这样做。
标签:AWS, CISA项目, DPI, MITM代理, 安全日志分析, 安全运营, 扫描框架, 漏洞利用检测, 漏洞探索, 自动化响应, 请求拦截, 逆向工具