ashpb07/LA-IDRS

GitHub: ashpb07/LA-IDRS

一款面向小规模网络的轻量级自治入侵检测与响应系统,结合实时流量监控、蜜罐诱骗与自动化封锁,提供可解释的威胁防御能力。

Stars: 1 | Forks: 2

# NetSentinel — LA-IDRS **轻量级自治入侵检测与响应系统** 一款专为小规模环境设计的即插即用、具备自我防御能力的网络入侵检测系统。它在数据包级别监控流量,结合基于规则和行为的分析来检测入侵,并在解释其做出的每一个决策的同时自主应对威胁。 ## 适用场景 - 小型企业 - 高校实验室与研究环境 - 家庭与个人网络 ## 功能特性 | 特性 | 描述 | |---|---| | 实时数据包捕获 | C + libpcap,极低的数据包处理开销 | | 特征检测 | 端口扫描、SYN flood、暴力破解(基于 JSON 的规则) | | 行为检测 | EMA 偏差评分、端口多样性异常、协议不匹配 | | 自适应基线 | 24小时被动观察阶段,支持按网络设定阈值 | | 风险评分 | 加权累计评分,包含三级响应机制 | | 微型蜜罐诱捕 | 动态伪造监听器——任何接触均触发即时拦截 | | 因果攻击图 | 以 JSON 格式存储的每个攻击者事件链,并在仪表板中渲染 | | XAI 封锁报告 | 为每次自动拦截操作提供结构化解释 | | 自动解封 | 基于 TTL 的定时 IP 释放(默认为 1 小时) | | P2P 威胁情报 | 向对等节点匿名广播 Gossip(默认关闭,需手动开启) | | REST API | 基于 FastAPI,提供实时引擎状态 | | 仪表板 | 单页 HTML/JS,每 5 秒自动刷新 | ## 风险评分表 | 评分 | 操作 | |---|---| | 0 - 30 | 仅记录日志 | | 31 - 70 | 通过 API 和仪表板发出告警 | | 71 - 100 | 通过 iptables 自动拦截 | | 蜜罐接触 | 无论评分多少,立即拦截 | ## 架构 ``` NIC | v Packet Engine (C / libpcap) | raw packet_meta_t structs over UNIX socket v Detection Engine (Python) |-- BaselineLearner 24-hour passive observation phase |-- EMATracker Per-IP exponential moving average |-- SignatureEngine JSON rule evaluation |-- BehaviorEngine Anomaly scoring against baseline |-- RiskScorer Cumulative weighted score per IP | v DecisionEngine |-- score 31-70 --> Alert via API |-- scan detected --> HoneypotManager (spawn fake listeners) | | | +-- contact --> instant block |-- score 71+ --> IPBlocker (iptables) |-- AttackGraphBuilder.finalize() |-- AttackGraphStore.save() |-- XAIReportGenerator.generate() |-- GossipNode.broadcast() [if P2P enabled] | v FastAPI --> Dashboard --> P2P Peer Nodes (opt-in) ``` ## 技术栈 | 层级 | 技术 | |---|---| | 数据包捕获 | C, libpcap | | 检测引擎 | Python | | 基线引擎 | Python, numpy | | 攻击图引擎 | Python, networkx | | 诱骗层 | Python, socket | | XAI 报告生成器 | Python | | 响应引擎 | Python, Bash | | 防火墙控制 | iptables | | API | FastAPI, uvicorn | | 仪表板 | HTML, CSS, JavaScript | | P2P 威胁情报 | Python, asyncio | | 操作系统 | Linux | ## 快速开始 环境要求:Linux、Python 3.11+、GCC、libpcap-dev、iptables、root 权限。 ``` git clone https://github.com/your-username/netsentinel-laidrs.git cd netsentinel-laidrs chmod +x scripts/setup.sh sudo ./scripts/setup.sh sudo ./scripts/run.sh ``` 首次运行时,系统将进入 24 小时的基线学习阶段。在此阶段不会执行任何拦截操作。如果仅为了测试想跳过此阶段,请在 `.env` 中设置 `NS_SKIP_BASELINE=true`。 ## 配置说明 将 `.env.example` 复制为 `.env`,并在运行前进行编辑: ``` cp .env.example .env ``` | 变量 | 默认值 | 描述 | |---|---|---| | `NS_IFACE` | `eth0` | 监控的网络接口 | | `NS_BASELINE_SEC` | `86400` | 基线学习时长(以秒为单位) | | `NS_SKIP_BASELINE` | `false` | 跳过基线阶段(仅供测试) | | `NS_API_HOST` | `0.0.0.0` | API 绑定地址 | | `NS_API_PORT` | `8000` | API 端口 | | `NS_LOG_LEVEL` | `INFO` | DEBUG / INFO / WARNING / ERROR | | `NS_BAN_TTL_SEC` | `3600` | 被拦截 IP 自动解封前的秒数 | | `NS_HP_PORTS` | `5` | 每次扫描事件开启的蜜罐端口数 | | `NS_P2P` | `false` | 启用 P2P 威胁情报共享 | | `NS_P2P_PORT` | `9999` | Gossip 监听端口 | | `NS_P2P_PEERS` | _(空)_ | 对等节点 IP 的逗号分隔列表 | ## API 端点 基础 URL:`http://:8000/api/v1` | 方法 | 路径 | 描述 | |---|---|---| | GET | `/status` | 系统状态、基线进度、拦截计数 | | GET | `/alerts` | 所有被追踪 IP 的风险评分与事件 | | GET | `/alerts/{ip}` | 单个 IP 的完整告警详情 | | GET | `/blocks` | 当前被拦截的 IP | | DELETE | `/blocks/{ip}` | 手动解封某个 IP | | GET | `/graphs` | 所有已记录的攻击图 | | GET | `/graphs/{id}` | 根据 ID 获取单个攻击图 | | GET | `/honeypots` | 蜜罐接触次数 | | GET | `/honeypots/contacts` | 近期的蜜罐接触记录 | | GET | `/reports` | 所有 XAI 拦截报告 | | GET | `/reports/{ip}` | 某个 IP 最近一次的拦截报告 | 交互式 API 文档可在 `http://:8000/docs` 查看。 ## 仪表板 启动系统后,在浏览器中打开 `http://localhost:8000`。 仪表板每 5 秒自动刷新一次,并显示以下内容: - 系统状态与基线学习进度 - 包含各 IP 风险评分的实时告警表 - 带有手动解封选项的被拦截 IP 列表 - 展示每个攻击者事件因果链的攻击图时间轴 - 包含各项原因细分的 XAI 拦截报告 ## 示例:nmap 扫描响应 攻击者执行: ``` nmap -sS ``` NetSentinel 响应序列: 1. 数据包引擎检测到跨多个端口的 SYN 数据包 2. 特征引擎触发 PORT_SCAN_001 规则——评分 +35 3. 行为引擎检测到偏离基线的速率异常——评分 +20 4. 决策引擎针对源 IP 触发蜜罐生成 5. 攻击者连接到蜜罐端口——评分设为 100,瞬间拦截 6. iptables 规则被添加到 NETSENTINEL_BLOCK 链中 7. 攻击图定型:`[TCP 端口扫描] --> [数据包速率异常] --> [蜜罐接触] --> [拦截]` 8. 生成 XAI 报告并推送到 API 9. 仪表板显示带有因果上下文的完整告警 10. 将匿名特征广播给对等节点(如果启用了 P2P) ## XAI 拦截报告格式 ``` { "ip": "192.168.1.45", "blocked_at": "2025-06-01T14:32:10Z", "risk_score": 87, "reasons": [ "TCP Port Scan: 24 unique ports in 5 seconds", "Packet Rate Anomaly: 4.2 standard deviations above baseline", "Honeypot Contact: connected to port 31337" ], "honeypot_contacts": 1, "attack_graph_id": "graph_192_168_1_45_1748784730" } ``` ## Docker ``` cd docker docker-compose up --build ``` 该容器使用 `network_mode: host`,并且需要 `NET_ADMIN` 和 `NET_RAW` 权限才能进行数据包捕获和访问 iptables。 ## 测试 ``` source .venv/bin/activate pytest tests/ -v ``` 测试覆盖率包括:检测引擎、EMA 基线、风险评分、攻击图构建器、XAI 报告生成器、P2P 数据清洗器和诱骗层。 ## 项目结构 ``` netsentinel-laidrs/ ├── packet_engine/ C layer — libpcap packet capture │ ├── src/ capture.c, parser.c, emitter.c, main.c │ ├── include/ capture.h, parser.h, emitter.h │ └── Makefile ├── detection_engine/ Core detection pipeline │ ├── core/ detector, signature, behavior, scorer, decision │ ├── baseline/ learner, ema, profile │ ├── rules/ port_scan.json, syn_flood.json, brute_force.json │ ├── state/ ip_state, cache │ └── utils/ logger, parser ├── attack_graph/ Causal event graph builder and store ├── deception/ Micro-honeypot spawner ├── xai/ Explainable block report generator ├── response_engine/ iptables blocker, unblocker, scheduler ├── p2p/ Gossip-based threat intelligence sharing ├── api/ FastAPI routes, services, schemas ├── dashboard/ Static HTML/CSS/JS dashboard ├── comms/ UNIX socket server and IPC protocol spec ├── orchestrator/ Startup runner, process supervisor, config loader ├── tests/ pytest test suite ├── docs/ Architecture notes ├── scripts/ setup.sh, run.sh, cleanup.sh ├── docker/ Dockerfile, docker-compose.yml ├── requirements.txt ├── .env.example └── main.py ``` ## 清理 ``` sudo ./scripts/cleanup.sh # flush iptables rules, remove socket sudo ./scripts/cleanup.sh --purge # also delete all logs and database files ``` ## 路线图 | 版本 | 特性 | 状态 | |---|---|---| | v1.0 | 数据包捕获、特征检测、iptables 拦截 | 完成 | | v1.1 | 自适应基线引擎 | 已规划 | | v1.2 | 微型蜜罐诱骗层 | 已规划 | | v1.3 | 因果攻击图引擎 | 已规划 | | v1.4 | XAI 拦截报告 | 已规划 | | v2.0 | 联邦 P2P 威胁情报 | 研究中 | | v2.1 | SDN 集成 | 研究中 | | v2.2 | 分布式检测节点 | 研究中 | ## 免责声明 本项目仅用于教育目的和小规模部署。它不能替代企业级的 IDS 解决方案。诱骗层和自动拦截功能只能部署在您自己拥有,或获得明确书面授权保护的网络上。在第三方网络上未经授权使用可能会违反相关法律法规。 ## 许可证 MIT License ## 作者 Anish G Prabhu — [github.com/ashpb07](https://github.com/ashpb07) Hithansh Arekere — [github.com/hithansharekere-debug](https://github.com/hithansharekere-debug)
标签:AV绕过, C, FastAPI, Python, 入侵检测与防御系统, 威胁情报, 开发者工具, 插件系统, 无后门, 网络流量分析, 网络测绘, 蜜罐技术, 计算机取证, 请求拦截, 逆向工具, 配置错误, 防御绕过