azizpage/simple-ids

GitHub: azizpage/simple-ids

基于 Python 标准库实现的轻量级 SSH 入侵检测系统,通过解析认证日志并运用滑动窗口模式识别暴力破解与撞库等攻击行为。

Stars: 0 | Forks: 0

# Simple IDS — SSH 暴力破解检测器 一个轻量级的入侵检测系统,监控 SSH 身份验证日志,并实时检测暴力破解、撞库和分布式登录攻击模式。 构建该项目是为了理解真正的 IDS/fail2ban 风格工具是*如何*推断攻击者行为的——不仅是盲目地封锁 IP,而是从原始日志行中识别出攻击的特征。 ## 检测规则 | 规则 | 检测模式 | 默认阈值 | |---|---|---| | **暴力破解(单一 IP)** | 单个 IP 反复尝试登录相同或不同账户失败 | 60秒内失败5次 | | **撞库** | 单个 IP 快速尝试多个*不同*的用户名 | 120秒内出现4个不同的用户名 | | **分布式攻击** | 多个*不同*的 IP 同时瞄准同一个用户名(例如 `admin`) | 300秒内出现4个不同的 IP | 所有阈值均可在 `detector.py` 中通过 `DetectorConfig` 进行配置。 ## 工作原理 1. `log_parser.py` — 使用 regex 将原始 syslog 格式的 SSH 日志行(`Failed password`、`Invalid user`、`Accepted password`)解析为结构化的 `AuthEvent` 对象。 2. `detector.py` — 一个滑动窗口检测器,跟踪每个 IP 和每个用户名的失败尝试,剔除时间窗口之外的事件,并在越过阈值时触发 `Alert`。 3. `main.py` — 具有两种模式的 CLI:一次性分析静态日志文件,或者实时跟踪日志文件(类似于 `tail -f`)并即时打印警报。 ## 用法 **一次性分析日志文件(包含用于测试的带有合成攻击的示例日志):** ``` python3 main.py --file sample_auth.log ``` **实时监控您真实的 SSH 日志**(需要读取权限,可能需要 sudo): ``` sudo python3 main.py --live /var/log/auth.log ``` ## 输出示例 ``` ⚠️ 3 alert(s) triggered: [HIGH] Brute Force (single IP) | IP: 203.0.113.50 | User: root | 5 events in 60s [HIGH] Credential Stuffing (distinct usernames) | IP: 198.51.100.20 | User: 4 distinct users | 4 events in 120s [MEDIUM] Distributed Attack (single user, many IPs) | IP: 4 distinct IPs | User: admin | 4 events in 300s ``` ## 自行测试 想看它检测真实的攻击吗?在实验环境中(例如您的 Metasploitable2 虚拟机或备用虚拟机),运行 Hydra 针对 SSH 进行测试: ``` hydra -l root -P /usr/share/wordlists/rockyou.txt ssh://TARGET_IP ``` 然后将此工具指向该目标的 `/var/log/auth.log` 并观察触发的警报。 ## 为什么这很重要 Fail2ban 和商业 IDS/IPS 工具都使用同样的核心理念——滑动时间窗口和基于阈值的模式匹配——通常会结合更先进的技术(ML 异常检测、信誉源)。从头开始构建这个系统,能让底层逻辑变得一目了然,而不是一个黑盒。 ## 技术栈 - Python 3,仅使用标准库(`re`、`dataclasses`、`collections`、`datetime`)——无外部依赖 ## 免责声明 这是一个用于学习入侵检测概念的教育项目。请仅在您拥有或获得明确授权监控的系统和日志上运行实时监控。
标签:PB级数据处理, Python, 安全运维, 无后门, 红队行动