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, 入侵检测系统, 域名枚举, 威胁检测, 安全事件处理, 安全仿真, 安全数据湖, 插件系统, 无后门, 红队行动, 逆向工具