harsh8509/AuthWatch
GitHub: harsh8509/AuthWatch
AuthWatch 是一个基于 Python 的认证日志分诊工具,通过可解释的规则从 CSV 登录事件中自动识别密码喷洒等可疑模式并生成按风险排序的安全报告。
Stars: 0 | Forks: 0
# AuthWatch
AuthWatch 是一个基于 Python 的认证日志分诊工具,用于识别可疑的登录行为,并将原始登录事件转换为清晰、按风险排序的安全报告。
该项目展示了简单的自动化如何帮助减少重复的人工审查,并支持更快速地调查潜在的可疑认证活动。
## 问题背景
认证系统每天都会生成大量的登录事件。
这些事件大多是无害的,例如:
- 用户输入了错误的密码
- 成功登录
- 少量的失败尝试
- 员工忘记凭据后重试
面临的挑战是,可疑活动可能隐藏在这些正常行为之中。
例如,一个 IP 地址可能会在短时间内尝试访问多个不同的用户账户。这可能表明存在密码喷洒(password-spraying)尝试。
手动审查每一个登录事件不仅速度慢、重复性高,而且效率低下。
## 解决方案
AuthWatch 自动化了认证日志分诊的第一阶段。
该脚本从 CSV 文件中读取登录事件,并按源 IP 地址对它们进行分组。
然后它会计算:
- 失败登录尝试总数
- 成功登录尝试总数
- 受到攻击的唯一用户名数量
- 五分钟时间窗口内的最大失败登录尝试次数
- 告警类别
- 风险评分
- 风险等级
- 易于理解的结果判定原因
最终输出会被写入 CSV 报告,并按从最高风险 IP 地址到最低风险的顺序进行排序。
## 检测逻辑
AuthWatch 使用简单且可解释的检测规则。
### 疑似密码喷洒
满足以下条件时触发此告警:
- 单个 IP 地址针对至少三个不同的账户
- 五分钟内发生至少五次失败的登录尝试
示例:
```
One IP attempts to access Alice, Bob, Charlie, and David within a short period.
```
### 快速连续登录失败
满足以下条件时触发此告警:
- 五分钟内发生至少五次失败的登录尝试
- 针对的账户少于三个
示例:
```
One IP repeatedly attempts to access the same user account.
```
### 多次登录失败
满足以下条件时触发此告警:
- 检测到至少三次失败的登录尝试
- 该活动不符合更严格的快速攻击条件
### 正常或低量活动
当未检测到明显的可疑模式时,将使用此类别。
## 风险评分
风险评分使用以下规则进行计算:
- 每次失败登录尝试记一分
- 如果针对三个或更多账户,则额外加五分
- 如果五分钟内出现五次或更多次失败,则额外加五分
- 如果失败尝试总数达到十次或更多,则额外加五分
风险等级划分如下:
- 分数为 15 或以上:`HIGH`
- 分数在 7 到 14 之间:`MEDIUM`
- 分数低于 7:`LOW`
## 示例输出
终端输出示例:
```
Analysed 4 unique IP addresses.
Report written to: security_report.csv
Top findings:
- 203.0.113.10: HIGH | Possible password spraying | score=25 | failures=10 | accounts=4 | max_5_min=10
- 198.51.100.22: MEDIUM | Rapid repeated login failures | score=10 | failures=5 | accounts=1 | max_5_min=5
- 192.0.2.15: LOW | Normal or low-volume activity | score=2 | failures=2 | accounts=1 | max_5_min=2
- 192.0.2.30: LOW | Normal or low-volume activity | score=0 | failures=0 | accounts=1 | max_5_min=0
```
## 项目结构
```
AuthWatch/
├── auth_log_analyser.py
├── sample_auth_logs.csv
├── security_report.csv
├── README.md
└── .gitignore
```
## 输入格式
输入的 CSV 文件必须包含以下列:
```
timestamp
source_ip
username
status
```
示例:
```
timestamp,source_ip,username,status
2026-07-18T09:00:01,203.0.113.10,alice,FAILED
2026-07-18T09:00:12,203.0.113.10,bob,FAILED
2026-07-18T09:00:25,203.0.113.10,charlie,FAILED
```
允许的状态值为:
```
FAILED
SUCCESS
```
## 如何运行
确保已安装 Python 3。
在 PyCharm、VS Code 或其他代码编辑器中打开项目文件夹。
运行:
```
python auth_log_analyser.py
```
在某些系统上,请使用:
```
python3 auth_log_analyser.py
```
该脚本会读取:
```
sample_auth_logs.csv
```
并生成:
```
security_report.csv
```
无需安装任何外部 Python 包。
## 输出报告
生成的 `security_report.csv` 包含:
- 源 IP 地址
- 失败登录尝试次数
- 成功登录尝试次数
- 受到攻击的唯一用户名数量
- 五分钟内的最大失败次数
- 告警类别
- 风险评分
- 风险等级
- 结果判定原因
报告按风险评分进行排序,以便最可疑的活动排在最前面。
## 学到了什么
该项目帮助我学会了如何:
- 使用 Python 读取和处理 CSV 数据
- 按源 IP 地址对安全事件进行分组
- 处理时间戳和滚动时间窗口
- 将可疑行为转化为检测规则
- 创建简单且可解释的风险评分
- 生成结构化的安全报告
- 从 SOC 分析师的角度思考自动化
- 区分正常登录活动与可疑模式
## 局限性
本项目有意设计得简单且具有教育意义。
它目前不包括:
- 实时日志接入
- 威胁情报丰富化
- IP 归属地定位
- 设备分析
- 用户行为分析
- 账户锁定信息
- 误报微调
- 数据库存储
- 仪表板或可视化
- SIEM 集成
- 自动拦截
- 自动化事件响应
检测阈值是固定的,可能并不适用于所有环境。
一个可用于生产环境的解决方案将需要更多的上下文、测试、微调和持续监控。
## 未来改进
可能的后续步骤包括:
- 使五分钟时间窗口可配置
- 添加命令行阈值设置
- 检测多次失败后的成功登录
- 添加威胁情报检查
- 添加 IP 归属地定位
- 生成图表或仪表板
- 支持 JSON 输出
- 将工具连接到实时认证日志
- 将检测逻辑与 SIEM 平台集成
- 针对高风险发现发送告警
## 作者
**Harsh Bhavsar**
软件开发 | DevSecOps | 信息安全 | AI
本项目是作为我的实践学习和职业作品集的一部分而开发的。
## 项目状态
作为作品集项目积极维护和开发中。
## 免责声明
AuthWatch 是一个出于学习和作品集展示目的而创建的教育项目。
未经进一步测试、验证和调优,不应将其视为可用于生产环境的入侵检测系统。
## 版权
版权所有 © 2026 Harsh Bhavsar。
标签:PB级数据处理, Python, 安全运维, 密码喷洒, 异常检测, 无后门, 逆向工具