WandsgYu/auth-log-auditor

GitHub: WandsgYu/auth-log-auditor

面向认证日志的本地化威胁狩猎工具,通过多维度检测器从 CSV 日志中提取暴力破解、撞库、账号探测等攻击证据。

Stars: 2 | Forks: 0

# Auth Log Auditor [![Python 3.10+](https://img.shields.io/badge/Python-3.10%2B-3776AB?logo=python&logoColor=white)](https://www.python.org/) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![Data: local only](https://img.shields.io/badge/Data-local%20only-2ea44f)](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, 异常检测, 无后门, 红队行动, 逆向工具