brandonCS06/IDS-simulator
GitHub: brandonCS06/IDS-simulator
一个结合 Java 引擎与 Python 工具的入侵检测系统模拟器,通过可配置的基于规则的分析来处理安全事件并检测网络可疑活动。
Stars: 0 | Forks: 0
# IDS 模拟器
一个入侵检测系统 (IDS) 模拟器,使用可配置的检测规则处理安全事件并检测可疑活动。该系统结合了基于 Java 的事件处理引擎和 Python 实用工具,用于日志生成、解析和报告。
## 概述
IDS Simulator 旨在:
- **模拟真实的网络活动**,包含正常和攻击模式
- **实时处理安全事件**以匹配检测规则
- **检测威胁**,使用基于规则的分析(例如暴力破解攻击)
- **生成告警**,包含基于证据的发现
- **报告发现**,提供汇总统计和威胁分析
## 架构
### 核心组件
#### Java 引擎 (`src/main/java/com/ids/`)
- **IDSCore** - 主协调器,负责加载事件、通过规则引擎处理事件以及导出告警
- **RuleEngine** - 根据已注册的检测规则评估每个安全事件
- **RuleEngineRules** - 用于实现自定义威胁检测规则的接口
- **BruteForceRule** - 使用带有可配置阈值的滑动时间窗口检测暴力登录攻击
- **PortScanRule** - 检测单个源 IP 在 60 秒窗口内尝试连接到 30 个以上不同端口的情况
- **IcmpSweepRule** - 检测单个源主机在短时间窗口内 ping 许多不同目标 IP 的情况
- **SuspiciousDnsRule** - 在滑动窗口内使用重复的高熵或失败的 DNS 查询来检测可疑的 DNS 隧道模式
- **SlidingWindow** - 基于时间的窗口(默认 1 分钟),用于根据源 IP 和操作类型跟踪事件
- **Event** - 安全事件的规范表示(时间戳、源 IP、用户、操作、目标、元数据)
- **Alert** - 在规则检测到可疑活动时生成;包括严重程度、规则名称和支持性证据
- **AlertManager** - 管理告警收集并导出为 JSON 格式
#### Python 实用工具 (`python/`)
- **log_generator.py** - 生成具有可配置正常和攻击流量模式的合成安全事件
- **log_parser.py** - 将原始日志解析为标准化的事件格式
- **report_generator.py** - 按规则、源 IP 和顶级攻击者汇总告警统计信息
### 数据流
```
Events.json (input)
↓
IDSCore.loadEvents()
↓
RuleEngine.processEvent() [runs each event through all rules]
↓
[Insert Rule Name].onEvent() [evaluates against detection logic]
↓
AlertManager [accumulates alerts]
↓
Alerts.json (output) + Report
```
## 入门
### 前置条件
- **Java**: JDK 8 或更高版本
- **Maven**: 3.6+ 用于构建
- **Python**: 3.x 用于日志生成和报告工具
### 构建
```
mvn clean compile
mvn package
```
### 运行 IDS
#### 基本用法
```
java -cp target/classes com.ids.IDSCore Events.json
```
这将:
1. 从 `Events.json` 加载事件
2. 通过已注册的检测规则处理它们
3. 将检测到的告警导出到 `Alerts.json`
#### 使用自定义事件文件
```
java -cp target/classes com.ids.IDSCore path/to/events.json
```
### Python 实用工具
#### 生成合成事件
```
python python/log_generator.py --output Events.json --count 1000
```
生成混合了正常活动和攻击模式的事件。
要在示例流中包含可疑的 DNS 活动:
```
python python/log_generator.py --output Events.json --dnsattacks 1 --dns_queries_per_attack 6
```
这会添加带有 `protocol`、`query_name`、`qtype`、`rcode`、`response_size`、`label_length` 和 `entropy` 等元数据的 DNS 事件,以便 SuspiciousDnsRule 可以对其进行评估。
要在示例流中包含 ICMP 扫描活动:
```
python python/log_generator.py --output Events.json --icmpsweeps 1 --icmp_targets_per_sweep 30
```
这会添加带有 `protocol`、`icmp_type` 和 `destination_ip` 等元数据的 ICMP 回显请求事件,以便 IcmpSweepRule 可以对其进行评估。
#### 生成报告
```
python python/report_generator.py
```
输出告警摘要,包括:
- 告警总数
- 按检测规则分类的告警
- 主要攻击源 IP
### 当前规则
#### BruteForceRule
- **目的**:检测来自同一源 IP 的重复失败登录尝试
- **窗口**:1 分钟滑动窗口
- **阈值**:5 次以上失败登录事件
- **严重程度**:高
- **证据**:触发告警的失败登录事件列表
#### PortScanRule
- **目的**:检测单个源 IP 在 60 秒窗口内尝试连接到 30 个以上不同端口的情况
- **窗口**:1 分钟滑动窗口
- **阈值**:30 个以上不同端口
- **严重程度**:高
- **证据**:来自同一源 IP 的最近事件,显示在 60 秒窗口内有 30 个以上唯一目标端口
#### IcmpSweepRule
- **目的**:检测单个源主机在 60 秒窗口内 ping 30 个以上不同目标 IP 的情况
- **窗口**:1 分钟滑动窗口
- **阈值**:30 个以上不同目标 IP
- **严重程度**:高
- **证据**:来自同一源主机的最近 ICMP 回显请求,显示在 60 秒窗口内有 30 个以上唯一目标 IP
#### SuspiciousDnsRule
- **目的**:通过随时间推移结合多个 DNS 指标来检测可疑的 DNS 隧道或数据泄露模式
- **窗口**:1 分钟滑动窗口
- **指标**:长查询名称、高熵、可疑的 qtype(如 TXT 或 NULL)、失败的 DNS 响应(如 NXDOMAIN 或 SERVFAIL)以及异常大的响应
- **严重程度**:高
- **证据**:检测窗口内来自同一源 IP 的 DNS 事件
### 添加自定义规则
实现 `RuleEngineRules` 接口:
```
public class CustomRule implements RuleEngineRules {
@Override
public List onEvent(Event event) {
// Your detection logic here
if (threatDetected) {
return List.of(new Alert(...));
}
return new ArrayList<>();
}
}
```
然后在 `IDSCore` 中注册:
```
ruleEngine.registerRule(new CustomRule());
```
## 事件 Schema
事件遵循以下 JSON 结构:
```
{
"timestamp": 1234567890000,
"source_ip": "192.168.1.10",
"user": "alice",
"action": "LOGIN_SUCCESS",
"target": "web_server",
"metadata": {
"session_id": "abc123",
"duration_ms": 5000,
"protocol": "[Protocol Name]", //Ex: DNS, ICMP, etc.
"query_name": "token.exfil.example.com",
"qtype": "TXT",
"rcode": "NXDOMAIN",
"response_size": 600,
"label_length": 24,
"entropy": 4.8
}
}
```
ICMP 扫描事件应在 `metadata` 中包含 `icmp_type: 8` 和 `destination_ip`。
## 告警 Schema
生成的告警包括:
```
{
"timestamp": 1234567890000,
"rule_name": "BruteForceRule",
"severity": "high",
"source_ip": "10.0.0.5",
"evidence": [...]
}
```
## 项目结构
```
IDS-simulator/
├── pom.xml # Maven project configuration
├── Alerts.json # Generated alerts output
├── Events.json # Input events
├── README.md # This file
├── src/
│ └── main/java/com/ids/
│ ├── IDSCore.java # Main orchestrator
│ ├── RuleEngine.java # Rule evaluation engine
│ ├── RuleEngineRules.java # Rule interface
│ ├── BruteForceRule.java # Brute force detection
| ├── PortScanRule.java # Port scan Detection
│ ├── IcmpSweepRule.java # ICMP sweep detection
│ ├── Event.java # Event model
│ ├── Alert.java # Alert model
│ ├── AlertManager.java # Alert collection
│ ├── SlidingWindow.java # Time-based event window
| ├── SuspiciousDnsRule.java # DNS tunneling detection
└── python/
├── log_generator.py # Synthetic event generation
├── log_parser.py # Raw log parsing
└── report_generator.py # Alert report generation
```
## 依赖项
- **GSON 2.10.1** - JSON 序列化/反序列化
- **Java Compiler Source/Target**: Java 8
## 使用示例
### 示例 1:生成事件并运行 IDS
```
# 生成合成事件
python python/log_generator.py --output Events.json --count 500
# 编译 Java 项目
mvn clean compile
# 运行 IDS
java -cp target/classes com.ids.IDSCore Events.json
# 生成报告
python python/report_generator.py
```
### 示例 2:处理自定义事件
将您的 `Events.json` 文件放在项目根目录下,然后运行:
```
java -cp target/classes com.ids.IDSCore Events.json
```
## 配置
### 暴力破解规则设置
在 `BruteForceRule.java` 中,调整:
```
private static final long time_Window_ms = 60_000; // Time window in milliseconds
private static final int threshold = 5; // Failed login threshold
```
在 `PortScanRule.java` 中,调整:
```
private static final long WINDOW_MS = 60_000; // Time window in milliseconds
private static final int PORT_THRESHOLD = 30; // Port destination threshold
```
在 `IcmpSweepRule.java` 中,调整:
```
private static final long WINDOW_MS = 60_000; // Time window in milliseconds
private static final int ICMP_THRESHOLD = 30; // Unique destination IP threshold
```
在 `SuspiciousDnsRule.java` 中,调整:
```
private static final long WINDOW_MS = 60_000; // Time window in milliseconds
private static final int MIN_DNS_EVENTS = 5; // Minimum events needed to raise alerts
private static final int SCORE_THRESHOLD = 8; // Suspicion threshold
```
## 输出文件
- **Alerts.json** - 包含证据的完整告警数据
- 带有处理统计信息控制台输出
## 未来潜在增强功能
- 与虚拟机家庭实验室集成
- 额外的检测规则(DDoS、权限提升、异常行为)
- 针对大事件量的性能优化
- 基于机器学习的异常检测
- 与 SIEM 平台集成
## 许可证
阅读 License.md
## 作者
由 Brandon Le,罗格斯大学新布朗斯维克分校 计算机科学系学生开发。
标签:AMSI绕过, JS文件枚举, Python, 入侵检测系统, 域名枚举, 威胁检测, 安全事件处理, 安全仿真, 安全数据湖, 插件系统, 无后门, 红队行动, 逆向工具