NovocaineX/intrusion-detection-system
GitHub: NovocaineX/intrusion-detection-system
基于 Python raw socket 和 Snort 风格规则的网络入侵检测系统,通过阈值匹配实时流量并生成分级告警。
Stars: 0 | Forks: 0
# 入侵检测系统 (IDS)
这是一个基于规则的网络入侵检测系统,由 **Aadarsh Bonthula** 开发,是专注于网络安全和道德黑客基础的网络安全作品集系列的一部分。
受 **Snort IDS** 架构启发——通过 raw socket 捕获实时流量,根据可配置的规则集评估每个数据包,并生成带有严重性分类的带时间戳的警报。
## 功能
- 在 raw socket 级别捕获**实时网络流量**
- 根据**受 Snort 启发的检测规则**评估数据包
- 检测常见攻击模式:**暴力破解、端口扫描、ICMP 泛洪、SMB 漏洞利用、DDoS 指标**
- **基于阈值的警报** —— 防止单包噪音导致的警报疲劳
- 将警报分类为 **HIGH / MED / LOW** 严重级别
- 导出结构化的**警报日志**,用于事件响应审查
## 应用概念
| 概念 | 参考资料 |
|---------|-----------|
| IDS 架构 (NIDS) | 第 2.4 章 — 防火墙、IDS 与 IPS (CodTech 材料) |
| 网络取证 | 第 11.4 章 — 网络取证与日志分析 |
| Snort 作为 IDS 工具 | 第 11.4 章 — 网络取证工具 (Snort 参考) |
| 暴力破解 / DDoS 检测 | 第 5.5 章 — 密码破解与暴力破解攻击 |
| SMB 漏洞利用检测 | 第 5.2 章 — Metasploit (EternalBlue / MS17-010) |
| 事件响应 | 第 11.5 章 — 事件响应与威胁狩猎 |
## 环境要求
- Python 3.7+
- Linux OS
- **Root / sudo 权限**
- 无需外部库
## 项目结构
```
ids-snort/
├── ids.py # Main IDS engine
├── rules/
│ └── default.rules # Detection rule set (Snort-compatible syntax)
├── demo/
│ └── sample_alerts.log # Example alert output
└── README.md
```
## 用法
```
# 使用默认规则运行
sudo python3 ids.py
# 使用自定义规则文件运行
sudo python3 ids.py --rules rules/custom.rules
# 运行并将警报保存到日志
sudo python3 ids.py --rules rules/default.rules --log alerts.log
```
### 参数
| 标志 | 描述 | 默认值 |
|------|-------------|---------|
| `--rules` | `.rules` 文件的路径 | `rules/default.rules` |
| `--log` | 将警报日志保存到文件 | 仅控制台 |
## 规则语法
规则遵循简化的 Snort 格式:
```
alert -> (msg:"..."; threshold:N; sid:N; severity:LEVEL;)
```
**示例:**
```
# SSH brute force — 同一来源命中 5 次触发 HIGH 警报
alert tcp any any -> any 22 (msg:"SSH Brute Force Attempt"; threshold:5; sid:1001; severity:HIGH;)
# ICMP flood 检测
alert icmp any any -> any any (msg:"ICMP Flood Detected"; threshold:20; sid:1004; severity:HIGH;)
# Telnet — 未加密,首次出现即发出警报
alert tcp any any -> any 23 (msg:"Telnet Connection Detected"; threshold:1; sid:1003; severity:MED;)
```
**规则字段:**
| 字段 | 描述 |
|-------|-------------|
| `proto` | `tcp`、`udp`、`icmp` 或 `any` |
| `src_ip` / `dst_ip` | IP 地址或 `any` |
| `src_port` / `dst_port` | 端口号或 `any` |
| `msg` | 警报描述 |
| `threshold` | 触发警报前的最小命中次数 |
| `sid` | 唯一规则 ID |
| `severity` | `HIGH`、`MED` 或 `LOW` |
| `content` | 可选的 payload 关键词匹配 |
## 示例输出
```
============================================================
Intrusion Detection System — Aadarsh Bonthula
Rules : 11 loaded
Log : alerts.log
Started : 2025-06-10 15:30:00
============================================================
Monitoring traffic. Press Ctrl+C to stop.
[ALERT] [2025-06-10 15:30:12] [SID:1001] [HIGH] SSH Brute Force Attempt
TCP 192.168.1.100:54921 → 192.168.1.10:22 | Hits: 5
[ALERT] [2025-06-10 15:30:45] [SID:1004] [HIGH] ICMP Flood Detected
ICMP 10.0.0.5 → 192.168.1.10 | Hits: 20
[ALERT] [2025-06-10 15:31:02] [SID:1008] [HIGH] SMB Attack Attempt — EternalBlue Risk
TCP 192.168.1.200:49150 → 192.168.1.10:445 | Hits: 3
[*] IDS stopped. 3 alert(s) generated.
[*] Alert log saved to: alerts.log
```
## 工作原理
### 规则引擎
每个数据包都会根据所有已加载的规则进行评估。当协议、源 IP/端口和目标 IP/端口均满足规则条件时,规则匹配成功。基于内容的规则还会检查数据包 payload 以进行关键词匹配。
### 阈值逻辑
每个规则维护一个按源 IP 划分的命中计数器。仅当计数器达到配置的阈值时才会触发警报。这模仿了 Snort 的 threshold 指令——防止单个端口扫描生成数百个单独的警报。
### 警报分类
- **HIGH** — 主动漏洞利用尝试或已确认的攻击模式(暴力破解、EternalBlue、泛洪)
- **MED** — 需要调查的可疑活动(扫描、异常协议)
- **LOW** — 信息性——异常但并非立即构成危险
## 法律免责声明
此工具专为**教育目的和授权的网络监控**而开发。请仅在您拥有或获得明确书面授权监控的网络上部署。
## 作者
**Aadarsh Bonthula**
B.Tech 计算机科学(网络安全专业)
Manav Rachna 国际研究与研究学院
GitHub: [NovocaineX](https://github.com/NovocaineX)
*作为专注于网络安全和道德黑客基础的网络安全作品集系列的一部分而开发。*
标签:Python, XXE攻击, 入侵检测系统, 安全数据湖, 插件系统, 无后门, 红队行动, 网络安全, 网络流量分析, 逆向工具, 隐私保护