
BlueTeam Log Analyzer (BLA) 是我最近持续打磨的一款蓝队日志分析工具。它不是云端黑箱,也不是把规则堆在一个脚本里的 demo,而是希望把现场常见的混杂日志,一次性整理成能被值守、复盘、工单和流水线继续使用的证据包。
项目地址:https://github.com/Hackerchen716/blueteam-log-analyzer
PyPI:https://pypi.org/project/blueteam-log-analyzer/
为什么做它
应急现场最烦人的地方,往往不是没有日志,而是日志太散。
Web access、Linux auth、Windows 安全日志、VPN、堡垒机、WAF、DNS、代理、EDR、数据库审计和云审计各在各的位置。值守人员要先判断入口,再追账号,再看主机,再拼时间线,最后还要把 IOC、风险结论和处置建议整理出来。
BLA 想解决的是这件事:把第一轮排查里最常见、最重复、最容易漏的动作自动化掉。它会把不同来源的日志统一解析成事件,做字段富化、威胁检测、跨源关联和证据输出,最后生成一份可以直接打开的离线报告包。
快速开始
安装后,两条命令就可以生成一份标准报告目录:
pip install -U blueteam-log-analyzer
bla logs/ --profile cn-hvv --out report/ --exit-on none
分析完成后打开 report/index.html 看报告。需要解释某个案件或告警时,可以继续追问同一份 JSON 报告:
bla explain inc-001 --report report/report.json
默认 --out report/ 会生成这些文件:
report/
├── index.html
├── report.json
├── events.csv
├── iocs.txt
└── report.sarif
也就是说,它既给人看,也给系统继续处理。
核心输出
BLA 的输出分成两层:一层是给应急人员快速判断的页面,另一层是给后续自动化流转的结构化数据。
| 输出 | 用处 |
|---|---|
| 风险评分 | 先判断这批日志有没有严重风险,风险集中在哪些资产和来源 |
| Incident | 把同一 IP、账号、主机、URL、session 或 trace 相关事件聚合成案件 |
| 时间线 | 按时间还原入口、执行、提权、持久化、横向移动和外联过程 |
| IOC | 提取 IP、域名、URL、Hash、账户、进程、命令和可疑路径 |
| SARIF | 接入 CI、GitHub Code Scanning 或其他安全流水线 |
| CSV/JSON | 便于 Excel 排查、二次分析、工单系统和 SIEM 导入 |
我更希望它不是“扫一下给一堆红字”,而是能把判断过程整理出来:先看风险,再看案件,再看证据,最后能落到处置动作。
支持的日志类型
目前 BLA 重点覆盖这些输入:
| 日志类型 | 说明 |
|---|---|
| Windows 事件日志 | XML 导出日志,以及可选的 EVTX 二进制解析 |
| Linux 认证日志 | auth.log、secure、SSH、Sudo、PAM、账号变更 |
| Web 访问日志 | Apache / Nginx Combined,覆盖 SQLi、XSS、LFI、RCE、扫描器等 |
| HVV/重保 P0 结构化日志 | CSV、JSONL、JSON 数组、key=value 格式 |
| 通用文本日志 | 关键字提取、基础告警和线索归档 |
针对国内护网、重保和企业应急场景,--profile cn-hvv 会增强 Shiro、Fastjson、Struts2、ThinkPHP、WebLogic、Spring、Webshell 等常见痕迹检测。
HVV / 重保采集思路
我在 BLA 里加了日志源采集矩阵,用来回答现场最实际的问题:第一轮到底先拿哪些日志。
bla --list-log-sources
第一轮 P0 我会优先覆盖这些方向:
| 类别 | 代表日志源 | 价值 |
|---|---|---|
| 边界入口 | WAF、CDN、SLB、反向代理 | 确认攻击载荷、真实源 IP、被打入口和转发链路 |
| Web 与应用 | access.log、业务应用日志 | 定位漏洞利用、Webshell、越权和异常访问 |
| 身份接入 | VPN、零信任、堡垒机 | 发现撞库、异地登录、命令审计和跳转路径 |
| 身份权限 | AD、域控、SSO、MFA | 识别账号爆破、票据滥用、提权和权限变更 |
| 主机终端 | EDR、Sysmon、Linux auth/auditd | 还原落地执行、横向移动、持久化和主机失陷 |
| 流量解析 | DNS、代理、防火墙、NAT、NDR | 发现 C2、恶意下载、数据外传和内网扫描 |
| 数据与云 | 数据库审计、云审计、Kubernetes API 审计 | 确认拖库、AK 滥用、Secret 读取和云上权限扩大 |
这些不是为了把功能列表写长,而是为了让工具更贴近现场:先支撑判断,再补全攻击链,最后服务处置闭环。
可扩展内核
当前版本把后续扩展需要的几个插槽先整理出来了。
| 能力 | 说明 |
|---|---|
| Parser Registry | 新日志源通过注册接入,不再不断扩大中心路由 |
| Detector Registry | 新检测器通过注册组合,避免把规则全部塞进一个引擎文件 |
parse_content() | 为远程采集、内存输入和未来 UI / 服务层预留统一入口 |
--type | 自动识别不准时可强制指定 web-access、linux-auth、p0-security 等解析器 |
| 单次 enrichment | 让解析、富化、检测、关联的边界更清楚 |
这部分对普通使用者不一定立刻可见,但对后续维护很重要。BLA 不应该只是一支脚本,它要能继续长出新的日志源、新规则、新报告出口和新的联动方式。
常用命令
# 自动识别日志类型
bla /var/log/auth.log
# 强制指定解析器
bla access.log --type web-access
bla hvv_chain.jsonl --type p0-security --profile cn-hvv
# 并行分析多个日志
bla logs/*.evtx -j 8
# 使用白名单压制可信噪音
bla logs/ --allowlist docs/allowlist-example.json --out report/
# 加载自定义 YAML 规则
bla logs/ --rules ./my-rules --profile cn-hvv --out report/
# 校验规则元数据和正则
bla validate-rules --strict-metadata
# CI 门禁:高危以上告警时退出 1
bla logs/ --exit-on high
设计边界
BLA 的核心取向是:离线优先、证据优先、现场优先。
离线优先,是因为真实日志里经常有账号、内网地址、路径、命令、业务接口甚至敏感数据,安全工具本身不应该变成泄露渠道。
证据优先,是因为应急不是“看起来很酷的告警面板”。一条告警最好能继续往下追:它来自哪行日志,影响哪个账号或主机,和哪些事件在同一条攻击链上,能提取哪些 IOC,下一步处置动作是什么。
现场优先,是因为蓝队工具最终要被人拿去用。报告要能打开,CSV 要能筛,IOC 要能流转,SARIF 要能进流水线,命令行要能在隔离网络里跑起来。
后面我会继续围绕真实日志源、误报压制、跨源关联和报告可读性继续补。也欢迎直接到 GitHub 提 Issue 或 PR:https://github.com/Hackerchen716/blueteam-log-analyzer