AAKASHKUMARAN7/cloudguard-ai
GitHub: AAKASHKUMARAN7/cloudguard-ai
一款基于 NIST SP 800-53 SI 控制族的 AI 驱动 AWS 云安全监控平台,集成了 CVE 漏洞扫描、YARA 恶意软件检测、CloudTrail 机器学习异常分析和威胁情报匹配,并通过仪表板和 PDF 报告可视化安全态势。
Stars: 0 | Forks: 0
# CloudGuard AI
[](https://github.com/AAKASHKUMARAN7/cloudguard-ai/actions/workflows/ci.yml)
[](https://www.python.org/)
[](https://csrc.nist.gov/pubs/sp/800/53/r5/upd1/final)
我开发这款云安全监控工具是为了练习实现 NIST SP 800-53 SI 控制。它监控 AWS 基础设施中的异常、恶意软件、CVE 和文件完整性问题——然后将其全部可视化在仪表板上。
这是我为了准备安全认证考试,花了几周时间编写的。其中机器学习部分(使用 Isolation Forest 进行 CloudTrail 异常检测)是探索过程中最有趣的一环。
## 截图
内置的 Web 控制台——包含一个页面,四个选项卡(概述 / 威胁 / 合规 / 发现),展示了来自最新扫描的实时发现:

基于 Elasticsearch 中相同数据的 Grafana 视图——严重程度和控制细分、SI-4 事件时间线,以及原始发现表格:

## 功能说明
六个安全模块作为一个扫描器运行:
- **SI-2** — 根据 NVD CVE 数据库检查您的软件栈。标记 Log4j、OpenSSH、Apache、OpenSSL 中的严重/高危漏洞
- **SI-3** — 使用 YARA 规则扫描恶意软件模式(勒索软件、PowerShell 投放程序、凭证收集器)
- **SI-4** — 在 CloudTrail 日志上应用 Isolation Forest 机器学习模型,捕捉诸如凌晨 3 点 root 登录或来自 Tor 出口节点的 API 调用等异常行为
- **SI-5** — 威胁情报源——检查是否有任何 CloudTrail 源 IP 与黑名单匹配,并发送 Slack 警报
- **SI-6** — 健康检查:验证所有依赖项、Python 版本和 env 配置
- **SI-7** — 对受监控文件进行 SHA-256 基线校验,检测修改/添加/删除操作
## 架构
```
main.py (orchestrator)
|
+----------------+------------------+
| | | | |
SI-2 SI-3 SI-4 SI-5 SI-6/7
CVE YARA ML Threat Health/
Checker Scan Anomaly Intel Integrity
|
CloudTrail
(local JSON or real S3)
|
+----------+----------+
| |
PDF Report ELK Pipeline
(ReportLab) Logstash → ES
|
Grafana + HTML Dashboard
```
**AWS(第二阶段):**
```
CloudTrail → S3 → Lambda (anomaly alerts to Slack)
↓
python main.py --aws (pulls logs, runs ML)
```
## 安装说明
### 本地(无需 AWS)
```
git clone https://github.com/AAKASHKUMARAN7/cloudguard-ai.git
cd cloudguard-ai
pip install -r requirements.txt
python main.py
```
### HTML 仪表板
```
python -m src.dashboard.app
# 打开 http://localhost:8080
```
仪表板每 30 秒自动刷新一次。它有 4 个选项卡:概述、威胁、合规、发现。您可以将发现筛选并导出为 CSV。
Chart.js 保留在 `src/dashboard/static/` 中,因此无需连接互联网即可使用。
仪表板显示实时的安全发现,且前端没有设置身份验证,因此默认情况下它仅绑定到 loopback。如果您希望在您信任的网络中通过其他设备访问它:
```
DASHBOARD_HOST=0.0.0.0 DASHBOARD_PORT=8080 python -m src.dashboard.app
```
统计卡片、发现和威胁面板描述的是**最近一次扫描**——
每个事件都标记有 `run_id`,因此这些数字反映的是当前的安全态势,而不是以往所有扫描的累计总数。时间线图表仍然涵盖了文件记录的完整历史记录。
### ELK Stack + Grafana
您需要 Docker Desktop。首次拉取镜像需要一些时间(约 1.5GB)。
```
.\start_dashboard.ps1
```
这将启动 Elasticsearch + Logstash + Kibana + Grafana,等待它们准备就绪,然后运行扫描器以填充数据。
```
Grafana: http://localhost:3000 (admin / cloudguard)
Kibana: http://localhost:5601
```
### AWS(第二阶段)
```
# 部署 infrastructure
.\deploy_phase2.ps1
# 针对真实的 CloudTrail 日志运行
python main.py --aws
```
部署:S3 存储桶(已加密、已启用版本控制)、CloudTrail 跟踪、Lambda 函数(由新的日志文件触发)、具有最小权限策略的 IAM 角色。
## 项目结构
```
cloudguard-ai/
├── main.py # runs all 6 modules, generates report
├── requirements.txt
├── docker-compose.yml
├── start_dashboard.ps1 # one-click ELK + scan
├── deploy_phase2.ps1 # AWS infra deploy
│
├── src/
│ ├── si2_flaw_remediation/ # NVD CVE API
│ ├── si3_malware_protection/ # YARA rules + scanner
│ ├── si4_system_monitoring/ # Isolation Forest, CloudTrail, GuardDuty
│ ├── si5_threat_intelligence/ # blocklist matching + Slack
│ ├── si6_security_verification/ # health checks
│ ├── si7_integrity_monitoring/ # SHA-256 baseline
│ ├── dashboard/ # HTML dashboard (Chart.js vendored in static/)
│ └── reporting/ # PDF report
│
├── terraform/ # S3, CloudTrail, Lambda, IAM
├── lambda_functions/ # rule-based detector (stdlib only)
├── docker/ # Logstash pipeline, Grafana provisioning
├── sample_data/ # test CloudTrail logs + sample malware files
└── tests/ # pytest (80 tests)
```
## 配置
创建一个 `.env` 文件(从 `.env.example` 复制):
```
AWS_REGION=ap-south-1
S3_BUCKET_NAME=your-bucket-name
# 可选 - 更高的 NVD API rate limits
NVD_API_KEY=your-key
# 可选 - Slack 警报
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/...
# 可选 - 如果你手动启用了 GuardDuty
GUARDDUTY_DETECTOR_ID=your-detector-id
```
## CLI 参数
```
python main.py # local mode (uses sample_data/)
python main.py --aws # pull real CloudTrail logs from S3
python main.py --reset # delete integrity baseline
```
## 测试
```
pip install pytest
python -m pytest tests/ -v
```
测试范围涵盖:SHA-256 哈希、基线创建/篡改检测、CVE 严重性映射、API 回退逻辑、ML 特征提取、异常评分。
## 运行输出示例
```
============================================================
CloudGuard AI - Intelligent Cloud Security Platform
============================================================
NIST SP 800-53: SI-2 | SI-3 | SI-4 | SI-5 | SI-6 | SI-7
Mode: Phase 1 - Local Mode
[SI-6] All security components verified and operational.
[SI-7] VIOLATION: security_policy.json — SHA-256 mismatch detected
[SI-2] CVE-2021-44228 Apache Log4j 2.14.1 [CRITICAL] CVSS 10.0
Log4Shell remote code execution via JNDI lookup
[SI-3] ransomware_sample.txt matched rule 'Ransomware_Indicators' [CRITICAL]
[SI-4] 5 anomalous events out of 35 CloudTrail records
DeleteTrail | 185.220.101.45 | 03:17 AM [HIGH]
GetSecretValue | 185.220.101.45 | 03:55 AM [HIGH]
[SI-5] 3 threat intel matches — 185.220.101.45, 45.33.32.156, 198.199.119.175
Compliance Score: 17% (1/6 controls passing)
Report saved: reports/cloudguard_report_20260507_143022.pdf
```
## 审计我自己的工具
一个未经审计的安全工具本身就是一个隐患。我专门回头审查了这份代码,寻找审查者可能会发现的问题,并修复了它们:
**仪表板中的存储型 XSS。** 发现中包含了受攻击者影响的文本——
扫描到的文件名、CloudTrail 事件名称和源 IP,以及从 NVD 提取的 CVE 描述。所有这些内容都未经过转义,就被直接拼接到 8 个渲染位置的 `innerHTML` 中,因此,精心构造的日志行会在仪表板中执行 JavaScript。这是针对面向分析师视图的日志注入:正是你最不希望它出现的地方,因为打开页面的人正在调查安全事件。已通过对每个插值进行转义来修复此问题,并通过针对 `
` 运行页面自身的渲染函数进行验证,断言 payload 在所有三个接收器中输出时均处于无效状态。
**不适用于所扫描版本的 CVE。** NVD 查询使用了 `keywordSearch`,这会匹配 CVE 文本中任意位置出现的产品名称。Log4j 2.14.1 返回了一个 2008 年的 CVSS-2.1 问题,而 OpenSSH 8.9 返回了一个 1999 年的问题——同时完全漏掉了 Log4Shell。现已切换为通过 `virtualMatchString` 进行 CPE 匹配,它会根据受影响的版本范围进行解析。现在 Log4j 能正确报告 CVE-2021-44228 了。
**在时间上撒谎的合规报告。** 报告盖上的是 `datetime.now()` 的时间戳,但标记的却是 UTC,导致审计产出物偏差了 5 小时 30 分钟。
**看起来卡死的仪表板。** 单线程的 `HTTPServer` 意味着 30 秒的自动刷新和 200KB 的资源获取请求会在彼此后面排队——在打开浏览器的情况下,每个请求大约需要 3.9 秒。`ThreadingHTTPServer` 将耗时降到了 0.06 秒。
**需要互联网的仪表板。** Chart.js 以前是从 CDN 加载的,因此在锁定的网络环境下所有图表都会失效。现已实现在本地内置;该页面现在完全自包含。
## 备注
- 示例 CloudTrail 数据包含 30 个正常事件和 5 个植入的异常(非工作时间、Tor 出口节点 IP、root 账户使用、破坏性 API 调用)
- YARA 回退机制:如果 yara-python 安装失败(在没有 Visual C++ 的 Windows 上很常见),扫描器将回退到字符串模式匹配
- CVE 检查器通过 CPE (`virtualMatchString`) 查询 NVD,而不是使用关键词——关键词搜索会匹配文本中任意位置的产品名称,并返回 20 世纪 90 年代无关的 CVE。结果按 CVSS 排序,每个产品最多限制 5 条。限制速率为 1 次请求/600 毫秒;如果 API 宕机,它会使用硬编码的回退数据(如 Log4Shell 等)
- Chart.js 实现在 `src/dashboard/static/` 本地,而不是从 CDN 加载,因此仪表板可以在没有互联网连接的情况下渲染
- ELK 仪表板使用索引模式 `cloudguard-events-*`,并以 `@timestamp` 作为时间字段
## 技术栈
Python 3.11 · scikit-learn · yara-python · boto3 · reportlab · requests · colorama · Elasticsearch 8.12 · Logstash · Kibana · Grafana · Terraform · AWS (CloudTrail、S3、Lambda、GuardDuty)
标签:AMSI绕过, DNS 反向解析, GPT, PE 加载器, x64dbg, 内容过滤, 威胁检测, 异常检测, 恶意软件扫描, 漏洞管理, 请求拦截, 越狱测试, 逆向工具