ilyesHamdiii/signalproof
GitHub: ilyesHamdiii/signalproof
SignalProof 是一个基于合约驱动的遥测与检测验证平台,用于在 ATT&CK 映射的受控测试后验证安全事件、字段完整性、接入路径和检测告警是否符合预期。
Stars: 0 | Forks: 0
# SignalProof
SignalProof 用于验证在执行受控的 ATT&CK 映射测试后,是否存在预期的安全事件、必需字段、接入路径和检测告警。

## 为什么开发 SignalProof
安全团队在编写检测规则时,通常会假设遥测数据存在且已正确规范化。但在实际应用中,Agent 可能会出现异常、必需字段可能缺失、数据接入可能会延迟,并且规则可能永远不会触发。
SignalProof 将这些假设转化为显式的、可测试的遥测合约。
## 核心功能
- YAML 遥测合约
- 事件和字段级别的断言
- 接入和检测延迟验证
- Wazuh/OpenSearch 告警收集
- 监控盲点分类
- 包含 SHA-256 清单的证据报告
- PostgreSQL 验证历史记录
- 回归和恢复对比
- FastAPI REST API
- Streamlit 仪表板
- 自动化测试和 GitHub Actions CI
## 架构

SignalProof 将收集、验证、诊断、持久化和展示环节分离开来,这样就可以在不更改核心验证引擎的情况下添加额外的 SIEM 收集器。
## 遥测合约
合约定义了一项技术要达到“具备检测能力”所必须存在的条件:
```
contract:
id: windows-powershell-t1059-001
version: "1.0"
attack:
technique_id: T1059.001
technique_name: PowerShell
events:
- assertion_id: sysmon-process-create
source: sysmon
event_id: 1
required: true
required_fields:
- win.eventdata.image
- win.eventdata.commandLine
- win.eventdata.processGuid
maximum_ingestion_latency_seconds: 30
detection:
required: true
backend: wazuh
rule_id: "100201"
minimum_alert_level: 8
maximum_detection_latency_seconds: 60
```
## 验证结果
SignalProof 会将一次运行标记为以下状态:
- `passed`
- `degraded`
- `failed`
它还会生成基于证据的诊断结果,例如:
- `telemetry_unobserved`
- `collection_failure`
- `forwarding_failure`
- `parsing_failure`
- `ingestion_latency_failure`
- `detection_failure`
- `detection_quality_failure`
- `detection_latency_failure`
- `workflow_failure`
- `multiple_failures`

## 回归测试
SignalProof 会对比历史持久化的运行记录,以检测回归和恢复情况。
```
signalproof compare-runs `
--previous "SP-DEMO-BASELINE-001" `
--current "SP-DEMO-DETECTION-MISSING-001"
```

## Wazuh 集成
Wazuh 收集器通过 Wazuh Indexer API 使用只读工作流来查询告警证据。
当前的实时实验室模式:
- `wazuh-alerts-*`:已支持
- `wazuh-archives-*`:可选,未在共享实验室中启用
- 实时模式:检测验证
- Fixture 模式:完整的事件和字段验证

## 证据报告
每次验证运行都可以生成:
- `report.json`
- `report.md`
- `manifest.json`
- 为生成的和原始的证据生成 SHA-256 哈希值

经过脱敏处理的示例可在 [`reports/samples`](reports/samples) 中查看。
## REST API
SignalProof 通过 FastAPI 暴露了合约验证、Fixture 执行、Wazuh 健康状态、历史记录以及回归测试等接口。

使用以下命令启动:
```
uvicorn signalproof.api.app:app --reload
```
然后打开:
```
http://127.0.0.1:8000/docs
```
## 快速开始
### 环境要求
- Python 3.12 或 3.13
- Docker
- 通过 Docker Compose 运行的 PostgreSQL
- 可选的用于实时告警验证的 Wazuh 实验室
### 安装
```
git clone https://github.com/YOUR-USERNAME/signalproof.git
cd signalproof
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -e ".[dev]"
```
### 启动 PostgreSQL
```
docker compose -f docker-compose.phase9.yml up -d
```
### 配置数据库
```
$env:SIGNALPROOF_DATABASE_URL = `
"postgresql+psycopg://signalproof:signalproof@127.0.0.1:5433/signalproof"
```
### 初始化数据表
```
signalproof init-db
```
### 导入演示运行数据
```
.\scripts\seed_demo_runs.ps1
```
### 启动仪表板
```
streamlit run signalproof/dashboard/app.py
```
## 测试
```
python -m compileall signalproof
ruff check signalproof tests
pytest -v
```
## 安全模型
SignalProof 专为授权的防御性验证而设计。
- 它不会执行攻击技术。
- 实时收集是只读的。
- 受控测试必须在独立的隔离实验室中单独执行。
- 凭据通过环境变量提供。
- `.env` 文件和私有证据绝不能被提交。
- 拒绝重复的运行 ID,以保护证据历史记录。
## 局限性
- 当前的 Wazuh 实验室公开了告警索引,但没有公开原始归档索引。
- 未实现实时原始事件规范化。
- 身份验证和 RBAC 不在当前的 MVP(最小可行性产品)范围内。
- Streamlit 被用作工程仪表板,而不是生产级前端。
## 路线图
- Wazuh 归档数据规范化
- Elastic 和 Splunk 收集器
- 计划任务验证套件
- 多技术测试活动
- 身份验证和 RBAC
- 基于 Web 的遥测合约编辑器
## 许可证
MIT
标签:AV绕过, FastAPI, Kubernetes, Streamlit, Wazuh, 测试用例, 版权保护, 网络测绘, 访问控制, 请求拦截, 逆向工具, 遥测测试