WandsgYu/auth-log-auditor
GitHub: WandsgYu/auth-log-auditor
面向认证日志的本地化威胁狩猎工具,通过多维度检测器从 CSV 日志中提取暴力破解、撞库、账号探测等攻击证据。
Stars: 2 | Forks: 0
# Auth Log Auditor
[](https://www.python.org/)
[](LICENSE)
[](SECURITY.md)
面向统一身份认证、VPN、SSO 和 Web 登录日志的本地安全分析工具。输入一份 CSV,即可从暴力破解、撞库、异常时段、账号锁定、User-Agent 自动化、用户名探测和地理跳变等维度提取证据,并汇总跨模块高风险账号与 IP。
## 为什么做这个项目
认证日志通常量大、字段杂,单看“失败次数”很容易漏掉分布式尝试,也容易把普通用户误判成攻击者。这个项目把常见排查思路拆成可解释的检测器,每条结果都保留时间窗口、账号、IP、阈值和原始事件 ID,便于继续人工复核。
## 检测能力
| 模块 | 检测场景 | 核心信号 |
|---|---|---|
| A | 暴力破解 | 同一账号 + IP 在滑动窗口内连续失败 |
| B | 撞库 / 密码喷洒 | 单 IP 短时间尝试大量账号且失败率高 |
| C | 地理异常 | 异地登录、短时间跨省的“不可能旅行” |
| D | 异常时段 | 深夜失败或成功登录同时触发 IP 风险 |
| F | 账号锁定 | 还原被锁账号的攻击时间线和多 IP 协同 |
| G | UA 异常 | 空 UA、非浏览器 UA、UA 多账号复用 |
| H | 用户名探测 | 系统账号、SQL 注入片段和非法格式枚举 |
## 快速开始
git clone
cd auth-log-auditor
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
# 直接运行内置的虚构样例
python audit.py
# 分析你自己的 CSV
python audit.py /absolute/path/to/auth-log.csv
结果写入 `output/`:
- `high_risk_accounts.csv`:被至少两个检测模块同时命中的账号
- `high_risk_ips.csv`:被至少两个检测模块同时命中的来源 IP
- `A_...csv` 至 `H_...csv`:各检测器的明细证据与摘要
## 输入日志长什么样
完整运行至少需要以下 7 列,列顺序不限,字段名区分大小写:
username,login_ip,login_time,login_status,auth_type,risk_trigger,user_agent
100001,198.51.100.23,1/1/2026 01:00:00,0,webLocalAuth,用户名或密码错误,curl/8.0
约定:
- 一行代表一次认证尝试;文件编码为 UTF-8。
- `login_status`:`1` 成功,`0` 失败。
- `login_time`:`日/月/年 时:分:秒`,例如 `1/1/2026 01:00:00`。
- `username` 按字符串读取,不会丢失前导零。
- `risk_trigger` 和 `user_agent` 可以为空,但列必须存在。
- `198.51.100.0/24` 等演示 IP 来自文档保留网段,不对应真实攻击来源。
字段字典、可选列和语义假设见 [输入结构说明](docs/INPUT_SCHEMA.md),可直接参考 [虚构样例](data/sample.csv)。
## 可选:启用 IP 地理分析
地理模块使用离线 `ip2region_v4.xdb`。从 [ip2region 官方仓库](https://github.com/lionsoul2014/ip2region)取得数据库后放到:
data/ip2region_v4.xdb
然后在 `config.py` 中设置组织常驻地,例如:
LOCATION_WHITELIST = ("某省", "某市")
如果数据库不存在,`audit.py` 会明确跳过地理模块,其他检测正常运行;也可以显式使用 `--skip-geo`。
## 调整规则
所有阈值都集中在 `config.py`,包括失败次数、滑动窗口、撞库失败率、异常时段、用户名格式和 UA 复用阈值。默认值适合作为排查起点,不是适用于所有组织的最终基线。建议先用历史正常流量建立基线,再逐步调整。
## 数据安全
`.gitignore` 默认排除真实 CSV、生成结果、IP 数据库、压缩包和虚拟环境。提交前仍应执行:
git status --short
git ls-files data output
第二条命令正常情况下只应显示 `data/sample.csv` 和 `output/.gitkeep`。更多注意事项见 [SECURITY.md](SECURITY.md)。
## 项目结构
auth-log-auditor/
├── audit.py # 一键运行全部检测器
├── config.py # 阈值与规则配置
├── loader.py # CSV 加载和时间解析
├── ip_geo.py # 离线 IP 地理查询
├── summary_report.py # 跨模块风险汇总
├── detectors/ # 独立检测模块
├── data/sample.csv # 纯虚构演示数据
├── docs/INPUT_SCHEMA.md # 输入字段契约
└── output/ # 本地结果,不提交
## 适用边界
- 这是辅助排查工具,不会自动封禁账号或 IP。
- IP 地理位置只能作为风险信号,不能单独证明攻击。
- UA、失败率和夜间登录都可能有合理业务解释,应结合资产、人员和网络上下文复核。
- 当前内置业务文案偏向中文认证系统,接入其他产品时请修改 `config.py` 中的关键字。
## License
[MIT](LICENSE)
标签:Python, 异常检测, 无后门, 红队行动, 逆向工具