AttadaManoj/dtac-ir

GitHub: AttadaManoj/dtac-ir

结合规则引擎与 ML 分类器的实时网络入侵检测平台,通过动态信任评分机制对网络设备进行持续行为评估与分级响应。

Stars: 0 | Forks: 0

# DTAC-IR — 动态信任评估与控制,事件响应 这是一个实时网络入侵检测与响应平台,结合了基于规则的检测、训练有素的 ML 分类器以及自定义的信任评分引擎,并配备了一个实时的 SOC dashboard 以提供可视化和响应能力。 该项目的架构设计可媲美开源 SOC 工具(Wazuh, Suricata),作为作品集项目,它展示了端到端的安全工程:数据包捕获 → 特征提取 → 混合检测 → 自适应信任评分 → 数据持久化 → 实时可视化。 ![Dashboard 截图 — 演示模式](https://static.pigsec.cn/wp-content/uploads/repos/cas/1e/1e19ede82ca33f4f04dea3b410a2d06be179b8a7819393690b69c5d827de2775.png) ## 项目初衷 大多数学生的 IDS 项目仅仅停留在“判断数据包是否为恶意”的层面。DTAC-IR 提出了一个不同的问题:**基于设备随时间推移的行为,我们当前应该对特定设备给予多大的信任度** —— 以及系统应该如何自动应对? 这就是 **Trust Scoring Engine**(信任评分引擎)的工作,也是该项目的核心差异化所在。网络上的每个设备初始均处于完全信任状态(100)。检测到的威胁会根据严重程度进行加权惩罚,并通过指数时间衰减来降低该评分,使设备经历以下四种状态: ``` TRUSTED (70–100) → SUSPICIOUS (30–69) → QUARANTINED (10–29) → BLOCKED (0–9) ``` 这为 SOC 分析师(或自动化响应层)提供了持续信号,而非简单的二元告警 —— 一个设备在一周内出现五次微小异常,与在最后一分钟内出现五次异常的情况截然不同,而评分机制准确地反映了这一点。 ## 架构 ``` ┌─────────────┐ ┌──────────────────┐ ┌───────────────────┐ │ Scapy │────▶│ Detection Engine │────▶│ Trust Scorer │ │ (live pkts) │ │ Rules + ML │ │ (severity decay) │ └─────────────┘ └──────────────────┘ └───────────────────┘ │ │ ▼ ▼ ┌─────────────────┐ ┌──────────────────┐ │ PostgreSQL │◀────▶│ FastAPI REST │ │ (devices/alerts) │ │ + WebSocket │ └─────────────────┘ └──────────────────┘ │ ▼ ┌────────────────────────┐ │ React SOC Dashboard │ │ (hex trust grid, live │ │ alerts, timeline) │ └────────────────────────┘ ``` **检测是混合式的,而非纯粹依赖 ML:** 首先运行规则(速度快,对于端口扫描和 SYN 泛洪等已知特征,误报率几乎为零);如果没有规则触发,则由 ML 分类器对流量进行评估。这使得对于已充分了解的攻击,系统可以保持低延迟,同时仍能捕获规则未覆盖的新型模式。 ## 技术栈 **后端** - FastAPI (异步), SQLAlchemy 2.0 (异步), PostgreSQL, Redis - 使用 Scapy 进行实时数据包捕获 - scikit-learn 随机森林分类器,基于 CICIDS2017 衍生的合成数据集(通过 SMOTE 对 6 个类别进行平衡)进行训练 - WebSocket 流式传输,用于实时 dashboard 更新 **前端** - React 18 + Vite 5, Tailwind CSS, Zustand 用于状态管理 - 使用 Recharts 展示实时威胁时间线 - 自定义基于 SVG 的六边形设备信任网格(未使用任何图表库 —— 专门构建以契合独特的 SOC 风格,而非通用的 dashboard 模板) - 内置离线演示/模拟模式,方便在无实时网络访问的情况下进行作品集展示 **基础设施** - 使用 Docker Compose 部署 Postgres/Redis(并支持可选的完全容器化部署) - 专为 WSL2/Linux 设计,因为原始数据包捕获需要 root 权限及 `NET_ADMIN`/`NET_RAW` 权限 ## 本地运行 ### 前置条件 - Python 3.10+, Node 18+, Docker - Linux/WSL2(Scapy 数据包捕获需要真实的网络接口和 root 权限 —— 在没有桥接接口的沙盒/虚拟机环境中无法完全正常运行) ### 1. 启动 Postgres + Redis ``` cd docker docker compose up -d postgres redis ``` ### 2. 后端 ``` cd backend python3 -m venv venv source venv/bin/activate pip install -r requirements.txt cp .env.example .env # then edit SECRET_KEY and CAPTURE_INTERFACE (check with `ip a`) sudo venv/bin/uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload ``` Scapy 需要通过原始套接字访问来捕获实时流量,因此需要 root 权限。 ### 3. 前端 ``` cd frontend npm install npm run dev ``` 打开 `http://localhost:5173`。页面在加载时会检查后端的 `/health` endpoint —— 如果无法访问,它会自动切换到**演示模式**,该模式会模拟真实的设备/告警活动,因此即使在离线状态下,dashboard 也能随时进行演示。 ### 4. API 文档 FastAPI 的交互式 Swagger UI 可在 `http://localhost:8000/api/docs` 访问。 ## 真实检测实战 顶部的截图是演示模式 —— 专为离线作品集演示模拟的流量。以下是在同一 dashboard 上针对**实时网络流量**运行的截图,在几个小时内,少数外部 IP 持续对主机进行端口扫描。信任引擎正确地将其评分降至接近零,并将它们的状态更改为 `QUARANTINED`/`BLOCKED`。然而,这并非永久性的黑名单 —— 一旦设备停止异常行为,其评分会以指数级速度恢复至基准线(100),因此安静下来的设备有机会重新获得受信任状态,而不是永远处于被标记状态。 ![Dashboard 截图 — 真实检测](https://static.pigsec.cn/wp-content/uploads/repos/cas/e2/e2cb0b323e2e9ac53e9a17ee9601cb64faadf83482d603b1e450de81bdd8646b.png) ## 核心设计决策 - **规则优先,ML 兜底** 而非纯 ML:确保常见攻击的检测快速且可解释,将模型保留用于规则无法捕获的场景。 - **信任评分作为持续信号,而非二元告警**:反映了真实 SOC 分级响应的工作方式 —— 随时间推移的上下文和模式比任何单一事件都更为重要。 - **在检测前显式过滤多播/广播流量**:mDNS (`224.0.0.251:5353`)、SSDP 和受限广播 (`255.255.255.255`) 属于正常的本地网络通信,简单的分类器很容易将其误判为扫描行为。从源头上过滤掉这些流量,可以保证信噪比的真实性,而不是用无害流量虚增威胁数量。 - **针对告警采用 WebSocket 推送,而不仅仅是轮询**:新的检测会立即广播到已连接的 dashboard,无需等待下一次轮询间隔。 ## 已知局限性 坦诚地说,这些局限性恰恰是面试中最值得探讨的有趣部分: - **ML/规则分类体系不匹配**:第一阶段的规则引擎和第二阶段的 ML 分类器是基于略微不同的攻击分类体系开发的(规则包括:`PORT_SCAN`、`SYN_FLOOD`、`DNS_EXFILTRATION`、`BRUTE_FORCE`、`ARP_SPOOFING`;ML 包括:`BENIGN`、`BOTNET`、`BRUTE_FORCE`、`DOS`、`PORT_SCAN`、`WEB_ATTACK`)。数据库 schema 中的 `AttackType` 枚举随后已进行扩展以覆盖两者,但当检测子系统独立演进时,这是一个很好的例子,说明在 pipeline 中保持共享分类体系同步是多么重要的一课。 - **内存中的信任评分**:Trust Scoring Engine 为了追求速度,将实时评分保留在内存中,并定期同步到 Postgres。重启会重置进行中的衰减状态(数据库中持久化的历史记录将保持完好)。 - **单主机数据包捕获**:目前仅能观察其运行主机可见的流量。要扩展到全网可见性,意味着需要将其部署为 span-port/mirror listener,或者部署多个分布式传感器以向中央信任引擎报告。 - **API/dashboard 尚未支持身份验证**:对于本地演示来说还可以,但在任何多用户或面向互联网的部署之前,需要引入 JWT/session 认证机制。 ## 项目背景 本项目作为大学课程作业的刻意升级,旨在打造一个作品集级别的平台,并分阶段进行开发: - **第一阶段 (Phase 1)**:FastAPI 后端,SQLAlchemy 模型,基于规则的检测引擎,带指数衰减的信任评分,Docker Compose,WebSocket endpoints - **第二阶段 (Phase 2)**:完整的 ML 训练 pipeline —— CICIDS2017 数据加载器,SMOTE 平衡,随机森林分类器,混合检测架构 - **第三阶段 (Phase 3)**:React SOC dashboard —— 六边形信任网格,实时威胁时间线,终端风格告警推送,离线演示模式 ## 演示视频 https://github.com/user-attachments/assets/2c1e1c5c-802b-4360-8234-203a4059cc31 ## 作者 Attada Manoj — B.Tech Cybersecurity, CMR College of Engineering and Technology, Hyderabad CEH v13 | Cisco CCNA | Cisco Junior Cybersecurity Analyst Career Path
标签:Apex, 威胁可视化, 安全运营中心, 库, 应急响应, 搜索引擎查询, 机器学习, 测试用例, 版权保护, 网络安全, 网络映射, 逆向工具, 隐私保护