The-Christopher-Robin/autonomy-evaluation-harness
GitHub: The-Christopher-Robin/autonomy-evaluation-harness
一个面向自主系统的标准化红蓝队对抗评估框架,提供可复现的攻击测试、ML异常检测和自适应防御闭环能力。
Stars: 0 | Forks: 0
# 自主安全评估框架
一个标准化的 **红蓝队对抗评估框架**,用于
AI 控制的自主系统及信息物理系统 (CPS)。
大多数 CPS 安全论文仅孤立地测试单一攻击或防御,使用
临时搭建的测试环境,且很少共享可复用的环境。本项目通过
工程级的框架填补了这一空白,该框架能够启动任务、调度
攻击、并行运行防御、记录同步事件,并
自动计算 **可比较的** 指标,例如检测率、误报率、延迟、拦截率和任务影响。
## 架构
```
┌──────────────────────────────────────────────────────────────────┐
│ Orchestrator (run_demo.py) │
│ launches sim · starts detector · schedules attacks · logs events│
├──────────┬──────────────┬────────────────┬───────────────────────┤
│ Platform │ Attacks │ Detector + │ Live Dashboard │
│ Simulator│ (pluggable) │ Defence │ (live_plotter.py) │
│ │ │ (pluggable) │ │
│ sitl_sim │ heartbeat │ Isolation │ 3-panel real-time │
│ .py │ ping │ Forest │ matplotlib window │
│ │ param_req │ Markov model │ │
│ MAVLink │ mitm_spoof │ Adaptive │ accuracy · anomaly │
│ UDP │ replay │ filter │ score · blocked msgs │
│ │ cmd_inject │ │ │
└──────────┴──────────────┴────────────────┴───────────────────────┘
▼ ▼ ▼
out/attack_*.csv out/detector_accuracy.csv out/live_data.jsonl
out/defense_adaptive.csv
out/metrics.json
```
### 关键设计原则
| 原则 | 实现方式 |
|---|---|
| **攻击是首要模块** | 每个攻击都是具有统一 CLI (`--udp`, `--rate`, `--duration`, `--out-dir`) 的独立脚本。新攻击只需实现 `BaseAttack`。 |
| **防御可插拔** | 检测器和自适应过滤器各自实现 `BaseDetector` / `BaseDefense` ABCs。可以在不接触编排器 (orchestrator) 的情况下,将 Isolation Forest 替换为神经网络或规则引擎。 |
| **同步日志记录** | 编排器、检测器和攻击都通过毫秒级时间戳和事件标记追加到共享的 `live_data.jsonl` 流中。 |
| **可比较的指标** | `framework/metrics.py` 提供 `ScenarioResult` —— 一个从原始事件日志计算检测率、误报率、延迟、拦截率、精度恢复和任务影响的单一类。 |
| **默认可复现** | 固定的随机种子、确定性的基线、可配置的持续时间和速率。 |
## 快速开始
```
# 克隆并设置
git clone && cd autonomy-security-harness
python -m venv .venv
# Linux / macOS
source .venv/bin/activate
# Windows PowerShell
.venv\Scripts\Activate.ps1
pip install -r requirements.txt
```
### 仅运行检测
```
python run_demo.py --mode all
```
### 运行检测 + 自适应 ML 防御
```
python run_demo.py --mode all --defense
```
### 自定义场景
```
python run_demo.py \
--mode all \
--defense \
--baseline-seconds 15 \
--attack-seconds 12 \
--attack-rate 250 \
--threshold 0.85 \
--defense-threshold 0.3
```
### 禁用实时仪表盘
```
python run_demo.py --mode all --defense --no-live-plot
```
查看 [DEMO.md](DEMO.md) 获取完整演示。
## 项目结构
```
.
├── framework/ # Harness abstractions & utilities
│ ├── base.py # ABCs: BaseAttack, BaseDefense, BaseDetector, BasePlatform
│ └── metrics.py # Standardised ScenarioResult metric computation
│
├── detector/ # Reference defence implementation
│ ├── detector.py # Main detection loop (Isolation Forest + Markov)
│ ├── feature_engine.py # 11-dim sliding-window feature extraction
│ ├── ml_model.py # Isolation Forest anomaly scorer
│ └── adaptive_defense.py # Score-threshold adaptive message filter
│
├── attacks/ # Attack catalogue (one script per vector)
│ ├── heartbeat_flood.py
│ ├── ping_flood.py
│ ├── param_request_flood.py
│ ├── mitm_identity_spoof.py
│ ├── replay_pattern_attack.py
│ └── command_injection_burst.py
│
├── run_demo.py # Scenario orchestrator
├── sitl_sim.py # Platform simulator (MAVLink SITL substitute)
├── live_plotter.py # Real-time 3-panel dashboard
├── requirements.txt
├── DEMO.md # Step-by-step demo walkthrough
└── LICENSE
```
## 工作原理
### 1. 基线训练
检测器监听正常的平台流量并构建两个模型:
* **Markov 模型** — 学习消息 ID 转移概率。
* **Isolation Forest** — 基于从每条消息中提取的 11 维特征向量(速率、熵、源多样性、Markov 概率、到达间隔时间和各类型频率比)进行训练。
### 2. 攻击阶段
六个攻击脚本按顺序(或单独)运行,每个脚本通过 UDP 注入恶意流量:
| 攻击 | 技术 | 速率 |
|--------|-----------|------|
| Heartbeat flood | 来自恶意源的高频 HEARTBEAT | 200 msg/s |
| Ping flood | 来自恶意源的高频 PING | 200 msg/s |
| Param-request flood | 来自恶意源的高频 PARAM\_REQUEST\_LIST | 200 msg/s |
| MITM 身份欺骗 | 伪造带有受信任 src\_system 的 HEARTBEAT + STATUSTEXT | 80 msg/s |
| 重放模式 | 重复播放固定的陈旧序列 | 120 iter/s |
| 命令注入 | ARM / TAKEOFF / LAND 命令突发 | 25 burst/s |
### 3. 检测
每一条传入消息都被转换为特征向量,由 Isolation Forest 评分(0 = 异常,1 = 正常),并通过移动平均预测精度指标进行跟踪。当精度降至配置阈值(默认 0.9)以下时触发警报。
### 4. 自适应防御
当启用 (`--defense`) 时,异常分数低于防御阈值(默认 0.3)的消息会在到达精度跟踪器之前被 **拦截**。这会产生闭环反馈效应:拦截恶意流量使得剩余流看起来更正常,从而使精度指标 **恢复** —— 即展示主动缓解效果的“上升曲线”。
### 5. 实时仪表盘
一个包含三个面板的实时 matplotlib 弹出窗口:
* **检测健康状况** — 带有阈值线的移动平均精度
* **异常分数** — 每条消息的 Isolation Forest 分数
* **防御动作** — 累积拦截消息计数
攻击开始/结束标记实时绘制为垂直线。
## 特征向量 (11 维)
| # | 特征 | 捕获内容 |
|---|---------|----------|
| 1 | `msg_rate` | 2 秒滑动窗口内的每秒消息数 |
| 2 | `type_entropy` | 消息类型分布的香农熵 |
| 3 | `src_system_count` | 窗口内唯一源系统的数量 |
| 4 | `src_msg_rate` | 来自当前源的每秒消息数 |
| 5 | `markov_prob` | 来自学习到的 Markov 模型的转移概率 |
| 6 | `inter_arrival_delta` | 距离上一条消息经过的时间 |
| 7–11 | `ratio_*` | HEARTBEAT, PING, PARAM\_REQUEST, COMMAND\_LONG, STATUSTEXT 的归一化频率 |
## 输出指标
`out/metrics.json` 至少包含:
```
{
"detection_latency_sec": 1.23,
"total_alerts": 3,
"model_type": "isolation_forest",
"total_blocked": 1890,
"block_rate": 0.597,
"blocked_by_msg_type": {"0": 109, "4": 1049, "21": 723},
"blocked_by_src_system": {"250": 13, "251": 1029, "252": 709}
}
```
对于跨场景比较,使用 `framework.metrics.ScenarioResult` 从原始事件日志计算检测率、误报率、延迟、精度恢复和任务影响。
## 扩展框架
### 添加新攻击
1. 使用标准 CLI 标志 (`--udp`, `--rate`, `--duration`, `--out-dir`) 创建 `attacks/my_new_attack.py`。
2. 在 `run_demo.py` 中的 `ATTACK_SCRIPTS` 列表中注册它。
3. (可选)继承 `framework.BaseAttack` 以获得 IDE 自动补全和验证。
### 添加新防御/检测器
1. 实现 `framework.BaseDetector` 或 `framework.BaseDefense`。
2. 将其接入 `detector/detector.py`,与 Isolation Forest 并存或取而代之。
### 添加新平台
1. 实现 `framework.BasePlatform`。
2. 创建新的模拟器脚本并将编排器指向它。
## 路线图
- [ ] 容器化执行 (Docker Compose 用于 sim + attacks + detector)
- [ ] 场景配置文件 (YAML/TOML)
- [ ] 额外的检测器后端 (autoencoder, LSTM, rule engine)
- [ ] 多平台支持 (ROS 2, CAN bus, ADS-B)
- [ ] 符合出版质量的 LaTeX 表格/图表导出
- [ ] 带有自动化回归场景的 CI 流水线
## 许可证
[MIT](LICENSE)
标签:AI安全, Chat Copilot, FTP漏洞扫描, MAVLink, WSL, 中间人攻击, 仿真环境, 信息物理系统, 命令注入, 安全度量, 安全编排, 异常检测, 攻击模拟, 无人机安全, 机器人安全, 欺骗攻击, 漏洞靶场, 红队评估, 网络攻防, 自动驾驶安全, 自适应滤波, 评估框架, 逆向工具, 配置错误, 重放攻击, 防御检测, 隔离森林, 马尔可夫模型, 驱动签名利用