MansourMutlaq/infrastructure-security-analytics
GitHub: MansourMutlaq/infrastructure-security-analytics
将 AWS、Linux 和 Cisco 异构日志统一解析、规范化并进行威胁检测、风险评分和跨源关联的安全分析 pipeline。
Stars: 0 | Forks: 0
# 基础设施安全分析
[](https://github.com/MansourMutlaq/infrastructure-security-analytics/actions/workflows/ci.yml)





一个多源安全分析 pipeline,用于解析、规范化、检测、
评分、关联和报告 AWS CloudTrail、Linux 身份验证日志和
Cisco IOS 基础设施遥测中的可疑活动。
该项目展示了在云基础设施监控、检测工程和 SIEM pipeline 中常用的
实用安全工程概念。
## 为何重要
云、操作系统和网络遥测数据很少以通用的 schema 呈现。当这些数据源保持孤立时,安全团队将失去跨身份、地址、资源和时间戳的调查上下文。
该项目展示了一种实用的方法,将 AWS CloudTrail、Linux 身份验证和 Cisco IOS 遥测数据统一到一个安全分析 pipeline 中。它应用了确定性检测、风险评分和跨源关联,最终生成可直接用于调查的报告和可选的 OpenSearch 索引。
## 工程主导
我设计并实现了这个仓库,将其作为一个端到端的基础设施安全分析项目。这项工作包括特定源的解析器、受 ECS 启发的事件模型、通过 YAML 配置的检测规则、风险评分、跨源关联、HTML/JSON/CSV 报告、可选的 OpenSearch 索引、基于 Docker 的本地验证、自动化测试,以及多版本的 GitHub Actions CI。
架构决策、实现权衡、遇到的问题、当前的局限性和计划的扩展都已记录在案,以便对该仓库进行审查和复现,而不是仅仅将其视为一个黑盒演示。
## 概述
基础设施环境产生的遥测数据格式互不兼容:
- AWS CloudTrail 事件使用结构化的 JSON。
- Linux 身份验证事件使用 syslog 风格的文本。
- Cisco IOS 事件使用特定于供应商的网络日志格式。
该项目将这些异构记录转换为通用的安全事件
模型,应用确定性的检测规则,分配风险评分,关联
相关活动,并导出可直接用于调查的报告。
## 架构

该图将运行时分析 pipeline 与横切验证和交付控制分离开来。虚线表示的保障层不属于运行时事件流的一部分。
详细的架构和设计决策记录在 [docs/architecture.md](docs/architecture.md) 中。
## 核心能力
- AWS CloudTrail JSON Lines 解析
- Linux SSH、身份验证和 sudo 事件解析
- Cisco IOS 安全和配置事件解析
- 受 ECS 启发的事件规范化
- 基于规则的威胁检测
- 风险评分和严重性分级
- 跨源事件关联
- MITRE ATT&CK 技术映射
- HTML、JSON 和 CSV 报告
- 兼容 OpenSearch 的文档导出
- 基于 Typer 的命令行界面
- 自动化的质量、安全和测试验证
- 针对 Python 3.12、3.13 和 3.14 的多版本 CI
## 处理 Pipeline
1. **接入**
特定源的解析器读取 AWS、Linux 和 Cisco 遥测数据。
2. **规范化**
将事件转换为通用的、受 ECS 启发的安全模型。
3. **检测**
确定性规则评估规范化后的事件,以发现可疑行为。
4. **风险评分**
警报会获得数值型的风险评分和严重性分级。
5. **关联**
将相关的信号组合成具有更丰富上下文的安全发现。
6. **报告**
结果以 HTML、JSON、CSV 或 OpenSearch 文档的形式导出。
## 检测覆盖范围
示例环境展示了包括以下内容的检测和关联:
- AWS CloudTrail 日志中断
- 可疑的 AWS 身份和访问活动
- 反复出现的 Linux 身份验证失败
- 反复失败后的成功登录
- 可疑的高权限 Linux 命令
- Cisco 配置和安全事件
- 跨源的基础设施活动关联
检测输出可以包括:
- 规则标识符
- 警报标题和描述
- 严重性和风险评分
- MITRE ATT&CK 技术
- 源地址
- 用户身份
- 资源上下文
- 匹配的指标
- 支持性事件证据
## 风险分级
| 风险评分 | 严重性 |
|---:|---|
| 90-100 | Critical |
| 70-89 | High |
| 40-69 | Medium |
| 20-39 | Low |
| 0-19 | Informational |
所有严重性边界均通过参数化的自动化测试进行了验证。
## 分析证据
以下证据是由所包含的合成遥测数据和经过验证的本地执行路径生成的。
### 安全报告概述

### AWS Critical 检测

### 实时 OpenSearch 索引

### Linux 关联警报

### Cisco IOS 检测

### 自动化验证

### CLI 分析结果

## 快速开始
### 要求
- Python 3.12 或更高版本
- Git
- 可选:用于本地 OpenSearch 验证的 Docker 和 Docker Compose
### 安装
```
git clone https://github.com/MansourMutlaq/infrastructure-security-analytics.git
cd infrastructure-security-analytics
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"
```
### 运行示例分析
```
security-analytics analyze \
--cisco samples/cisco_ios/security_events.log \
--linux samples/linux/auth_attack.log \
--aws samples/aws/cloudtrail_events.jsonl \
--config config/detection_rules.yml \
--output reports
```
生成的输出包括:
```
reports/
├── security-alerts.csv
├── security-analysis.json
└── security-report.html
```
操作报告被有意排除在 Git 之外,因为它们可能
包含特定于环境的数据。
### 显示 CLI 帮助
```
security-analytics --help
```
## OpenSearch 集成
OpenSearch 导出是可选的,并与主要的分析工作流实现了故障隔离。
如果 OpenSearch 不可用,本地的 HTML、JSON 和 CSV 报告仍然可用。
启动本地开发环境:
```
docker compose up -d
docker compose ps
```
运行带有实时索引的 pipeline:
```
security-analytics analyze \
--cisco samples/cisco_ios/security_events.log \
--linux samples/linux/auth_attack.log \
--aws samples/aws/cloudtrail_events.jsonl \
--config config/detection_rules.yml \
--output reports/live-opensearch \
--opensearch-endpoint http://localhost:9200 \
--opensearch-index-prefix security-analytics-live
```
经过验证的实时运行索引了 **15 个规范化事件**和 **10 个关联警报**。
在所包含的单节点环境中,预期会出现 `yellow` 索引状态,因为副本分片无法分配给第二个节点。主分片仍然可用于索引和查询。
Docker 配置禁用了 OpenSearch 安全插件,这仅用于本地验证。生产部署需要 TLS、身份验证、授权、私有网络、受管理的密钥、监控、索引模板和生命周期策略。
完成后停止本地环境:
```
docker compose down
```
## 质量与安全验证
当前的验证基线包括:
| 控制措施 | 结果 |
|---|---:|
| 自动化测试 | 47 个通过 |
| 语句覆盖率 | 92.98% |
| 最低 CI 覆盖率 | 80% |
| 风险评分覆盖率 | 100% |
| Ruff 静态分析 | 通过 |
| Bandit 安全扫描 | 无发现 |
| 依赖验证 | 通过 |
| CLI 冒烟测试 | 通过 |
| 本地路径泄露回归测试 | 通过 |
| 实时 OpenSearch 索引 | 15 个事件和 10 个警报 |
运行完整的本地验证套件:
```
python -m ruff check security_analytics tests
python -m bandit \
-c pyproject.toml \
-r security_analytics
python -m pytest \
--cov=security_analytics \
--cov-report=term-missing \
--cov-fail-under=80
python -m pip check
security-analytics --help
```
## 持续集成
GitHub Actions 会自动运行:
- 依赖验证
- Ruff 静态分析
- Bandit 安全扫描
- CLI 冒烟测试
- 带有覆盖率强制要求的自动化测试
- Python 3.12、3.13 和 3.14 兼容性测试
该工作流使用只读仓库权限、执行超时,
并对被取代的运行执行并发取消。
## 工程挑战与解决方案
详细的实现决策和权衡记录在 [`docs/engineering-notes.md`](docs/engineering-notes.md) 中。
| 挑战 | 解决方案 |
|---|---|
| AWS、Linux 和 Cisco 格式互不兼容 | 专用解析器馈送到一个共享的规范化事件模型中 |
| 孤立的事件缺乏调查上下文 | 跨源关联结合了身份、地址、资源和时间戳 |
| 严重性边界未经过充分测试 | 参数化测试现在会验证每一个评分边界 |
| HTML 报告暴露了本地文件系统路径 | 报告保留了安全的文件名,同时移除了工作站目录路径 |
| Windows 和 WSL 引入了路径和换行符差异 | Linux 验证、隔离环境和 `.gitattributes` 确保了一致性 |
| 生成的报告和覆盖率文件造成了仓库噪音 | 通过 `.gitignore` 排除了运行时 artifact |
| 安全声明需要可重复的证据 | Ruff、Bandit、Pytest、coverage、依赖项检查和 CI 提供了自动化验证 |
## 安全设计
- 没有硬编码的凭据、token 或 AWS 访问密钥
- 环境文件和私钥已从 Git 中排除
- 合成的示例身份和文档安全的 IP 地址
- 从生成的报告中移除了本地工作站路径
- 运行时报告和临时测试 artifact 已被排除在源代码控制之外
- 在本地和 CI 中均执行了 Bandit 安全扫描
- GitHub Actions 被限制为只读仓库权限
## 项目结构
```
.
├── .github/
│ └── workflows/
│ └── ci.yml
├── config/
│ └── detection_rules.yml
├── docs/
│ ├── architecture.md
│ ├── engineering-notes.md
│ ├── diagrams/
│ │ └── architecture.dot
│ └── evidence/
├── reports/
├── samples/
│ ├── aws/
│ ├── cisco_ios/
│ └── linux/
├── security_analytics/
│ ├── detection/
│ ├── exporters/
│ ├── normalization/
│ ├── parsers/
│ ├── cli.py
│ ├── config.py
│ ├── models.py
│ └── pipeline.py
├── templates/
├── tests/
├── docker-compose.yml
└── pyproject.toml
```
## 当前局限性
- 当前的实现是面向批处理的,而不是实时的。
- 检测阈值需要针对每个组织进行调整。
- 包含的遥测数据是合成的,并且在大小上被有意限制。
- OpenSearch 集成旨在用于本地验证和演示。
- 该系统是一个工程项目,而不是为了取代生产环境的
SIEM 平台。
## 路线图
计划的扩展包括:
- Amazon S3 和 AWS Security Lake 接入
- Amazon Kinesis 或 Apache Kafka 流处理
- 兼容 Sigma 的检测规则
- Windows Event Log 和防火墙解析器
- 威胁情报富化
- 检测抑制规则和白名单
- OpenSearch dashboards 和告警
- 基于 Terraform 的 AWS 部署
- 更大的数据集和性能基准测试
## 许可证
该项目基于 MIT 许可证授权。详见 [`LICENSE`](LICENSE)。
目录
- [为何重要](#why-it-matters) - [工程主导](#engineering-ownership) - [概述](#overview) - [架构](#architecture) - [核心能力](#key-capabilities) - [处理 Pipeline](#processing-pipeline) - [检测覆盖范围](#detection-coverage) - [风险分级](#risk-classification) - [分析证据](#analysis-evidence) - [快速开始](#quick-start) - [OpenSearch 集成](#opensearch-integration) - [质量与安全验证](#quality-and-security-validation) - [持续集成](#continuous-integration) - [工程挑战与解决方案](#engineering-challenges-and-solutions) - [安全设计](#security-design) - [项目结构](#project-structure) - [当前局限性](#current-limitations) - [路线图](#roadmap) - [许可证](#license)标签:PKI安全, Python, 数据管道, 无后门, 请求拦截, 软件工程, 逆向工具