ntbnaren7/cyber-sentinel

GitHub: ntbnaren7/cyber-sentinel

一个基于OpenEnv标准的强化学习环境,用于模拟训练AI Agent处理SIEM分流、威胁狩猎和云加固等自主SOC运营任务。

Stars: 0 | Forks: 0

## 标题:Cyber-Sentinel emoji: 🛡️ colorFrom: blue colorTo: gray sdk: docker pinned: false app_port: 7860 # 🛡️ Cyber-Sentinel:自主 SOC Agent 环境 [![OpenEnv](https://img.shields.io/badge/OpenEnv-compliant-blue)](https://github.com/meta-pytorch/OpenEnv) [![Python 3.10+](https://img.shields.io/badge/python-3.10+-green.svg)](https://python.org) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) ## 🎯 动机 安全运营中心每天需要处理**成千上万条警报**。分析师面临警报疲劳、复杂的对手以及日益扩展的云基础设施。识别并控制漏洞的平均时间为**277 天**(IBM,2023 年)。 **Cyber-Sentinel** 模拟了 AI Agent 产生最大影响的三种核心 SOC 工作流: 1. **警报分流** — Agent 能否从噪声中区分出真正的攻击? 2. **威胁搜寻** — 它能否追踪攻击者在网络中的活动并控制漏洞? 3. **云加固** — 它能否在不导致停机的情况下修复基础设施配置错误? 这些都是高风险的现实任务,一旦出错后果严重:遗漏一条勒索软件警报可能造成数百万美元的损失;隔离错误的服务器则会扰乱业务运营。 ## 📋 任务 | # | 任务 | 难度 | 目标 | 最大步数 | |---|------|-----------|-----------|-----------| | 1 | **SIEM 警报分流** | 🟢 简单 | 将 8 条安全警报分类为良性/可疑/恶意 | 20 | | 2 | **取证威胁搜寻** | 🟡 中等 | 调查 6 台主机以查找、终止并隔离受损机器 | 20 | | 3 | **云边界加固** | 🔴 困难 | 修复 5 个云配置错误而不导致服务中断 | 25 | ### 评分 (0.0 – 1.0) 所有评分器都是**确定性且程序化的** — 不使用 LLM 作为评判。 #### 任务 1:警报分流 | 结果 | 奖励 | |---------|--------| | 分类正确 | `+1/total_alerts` (~0.125) | | 漏报 (恶意 → 良性) | `-0.15` | | 误报 (良性 → 恶意) | `-0.05` | #### 任务 2:威胁搜寻 | 结果 | 奖励 | |---------|--------| | 查询受损主机日志 | `+0.10` | | 查询正常主机 (排除) | `+0.02` | | 终止正确的恶意进程 | `+0.25` | | 终止错误的进程 | `-0.10` | | 隔离正确的主机 | `+0.40` | | 隔离错误的主机 | `-0.20` | #### 任务 3:云加固 | 结果 | 奖励 | |---------|--------| | 正确的补救措施 | `+0.15` | | 严重性顺序奖励 (CRITICAL 优先) | `+0.05` | | 阻断关键端口 (中断) | `-0.30` | | 错误的操作/策略 | `-0.05` | ## 🔌 动作空间 所有动作使用单个带有 `action_type` 判别器的 `CyberSentinelAction` 模型: ``` # Alert Triage {"action_type": "triage_alert", "alert_id": "alert_001", "classification": "malicious", "metadata": {}} # Forensic Hunting {"action_type": "query_logs", "host_id": "host_003", "indicator": "198.51.100.23", "metadata": {}} {"action_type": "kill_process", "host_id": "host_003", "process_id": "6666", "metadata": {}} {"action_type": "isolate_host", "host_id": "host_003", "metadata": {}} # Cloud Hardening {"action_type": "restrict_access", "asset_id": "customer-data-bucket", "policy": "deny_public", "metadata": {}} {"action_type": "enable_protection", "asset_id": "root-account", "policy": "enable_mfa", "metadata": {}} {"action_type": "apply_policy", "asset_id": "prod-web-server", "policy": "least_privilege", "metadata": {}} ``` ## 👁️ 观测空间 `CyberSentinelObservation` 包括: | 字段 | 类型 | 描述 | |-------|------|-------------| | `task_name` | str | 当前任务标识符 | | `task_description` | str | 人类可读的目标及约束 | | `step_count` / `max_steps` | int | 进度跟踪 | | `done` | bool | 当前回合是否结束 | | `reward` | float | 每步奖励增量 | | `current_score` | float | 累积分数 [0.0, 1.0] | | `last_action_success` | bool | 上一个动作是否有效 | | `last_action_error` | str? | 无效时的错误消息 | | `siem_alerts` | list? | SIEM 警报源 (仅限 alert_triage) | | `network_hosts` | list? | 网络主机 (仅限 threat_hunting) | | `threat_intel` | dict? | IoC 详情 (仅限 threat_hunting) | | `investigation_log` | list? | 查询结果历史 (仅限 threat_hunting) | | `cloud_assets` | list? | 云基础设施 (仅限 cloud_hardening) | | `vulnerabilities` | list? | 活跃的配置错误 (仅限 cloud_hardening) | | `service_status` | dict? | 关键服务运行时间 (仅限 cloud_hardening) | ## 🚀 安装与使用 ### 前置条件 - Python 3.10+ - [uv](https://docs.astral.sh/uv/) (推荐) 或 pip ### 本地开发 ``` # Clone the repo git clone cd corp-ops-env # Install dependencies with uv uv sync # Start the environment server (Terminal 1) uv run uvicorn server.app:app --host 0.0.0.0 --port 7860 # Run inference (Terminal 2) HF_TOKEN=your_token uv run python inference.py ``` ### Docker ``` # Build docker build -t cyber-sentinel . # Run docker run -p 7860:7860 cyber-sentinel # Run inference against the container HF_TOKEN=your_token python inference.py ``` ### 环境变量 | 变量 | 必需 | 默认值 | 描述 | |----------|----------|---------|-------------| | `HF_TOKEN` | ✅ 是 | — | Hugging Face API token | | `API_BASE_URL` | 否 | `https://api-inference.huggingface.co/v1/` | LLM API 端点 | | `MODEL_NAME` | 否 | `meta-llama/Llama-3.1-8B-Instruct` | 用于推理的模型 | | `ENV_BASE_URL` | 否 | `http://localhost:7860` | 环境服务器 URL | | `CYBER_SENTINEL_TASK` | 否 | `alert_triage` | 启动时的默认任务 | | `CYBER_SENTINEL_SEED` | 否 | `42` | 随机种子 | ## 📊 基准分数 | 任务 | 模型 | 分数 | 步数 | |------|-------|-------|-------| | Alert Triage | Llama-3.1-8B | ~0.75 | 8 | | Threat Hunting | Llama-3.1-8B | ~0.50 | 12 | | Cloud Hardening | Llama-3.1-8B | ~0.35 | 15 | ## 🏗️ 项目结构 ``` cyber-sentinel/ ├── openenv.yaml # OpenEnv manifest ├── Dockerfile # Container for HF Spaces ├── pyproject.toml # Dependencies (uv) ├── requirements.txt # Dependencies (Docker/pip) ├── models.py # Pydantic: Action, Observation, State ├── inference.py # Baseline evaluation script ├── README.md # This file ├── .env # Local env vars (git-ignored) ├── .gitignore # Git ignore rules └── server/ ├── __init__.py ├── app.py # FastAPI entry point ├── environment.py # Core OpenEnv Environment class └── tasks.py # Task definitions + graders ``` ## 🔍 OpenEnv 规范合规性 - ✅ 类型化的 `Action`、`Observation`、`State` 模型 (Pydantic) - ✅ `step(action)` → 带有 reward + done 的 observation - ✅ `reset()` → 初始 observation - ✅ `state()` -> 完整内部状态 - ✅ `openenv.yaml` 清单文件 - ✅ 程序化评分器 (0.0–1.0) - ✅ 带有部分进度信号的增量奖励 - ✅ 对不良行为的惩罚 (漏报、中断) - ✅ 确定性且可复现 (固定种子的 RNG) - ✅ 带有严格输出格式的基准 `inference.py` ## 📜 许可证 MIT
标签:AI代理, Docker, LLM, OpenAI, Python, Unmanaged PE, 仿真环境, 内存规避, 告警分诊, 基础设施加固, 安全运营, 安全防御评估, 强化学习, 扫描框架, 数据展示, 无后门, 红队, 结构化查询, 网络安全, 自动化安全, 请求拦截, 逆向工具, 隐私保护