Dracarus08/LogSentry
GitHub: Dracarus08/LogSentry
LogSentry 将 Windows 安全日志和 Linux 身份验证日志归一化后关联为安全事件,生成映射 MITRE ATT&CK 的每日摘要报告。
Stars: 0 | Forks: 0
# LogSentry
将 Windows 和 Linux 安全日志转换为包含关联事件的简短每日摘要。





## 问题所在
信号已经存在于日志中了。登录失败、账户锁定和权限授予在发生的那一刻就会被记录下来。问题在于没有人去读它们。它们被搁置在 Windows 安全日志和 syslog 中,直到发生安全事件迫使某人去寻找,而那时早期的信号已经被成千上万行常规记录淹没了。
LogSentry 读取这些日志并生成单页报告。它会提取出重要的事件,并将它们关联为安全事件。
## 功能特性
- 解析导出为 CSV 的 Windows 安全事件和 syslog 格式的 Linux 身份验证日志。
- 将两者统一归一化为单一的事件结构,因此每种检测都能以相同的方式针对任一数据源运行。
- 将事件关联为安全事件。包括暴力破解、密码喷射、在密集登录失败后立即成功、账户锁定、权限授予、日志清除和非工作时间管理员登录。
- 将摘要编写为纯文本(适用于终端或 cron 邮件),以及一个独立的 HTML 页面。
- 将每个检测映射到 MITRE ATT&CK 技术。
## 截图
摘要以概述开始,然后按严重程度由高到低列出事件,每个事件都附带有背后的证据记录。

## 架构
```
flowchart LR
A[Windows Security CSV] --> C[Normalized events]
B[Linux syslog] --> C
C --> D[Detections]
D --> E[Correlated incidents]
E --> F[Text digest]
E --> G[HTML digest]
```
解析器是唯一了解日志格式的部分。在归一化事件之后的所有处理都与数据源无关。这就是为什么相同的暴力破解规则可以毫无特例地捕获 Windows 4625 风暴和 sshd 失败风暴。
## 快速开始
演示模式不需要任何日志或主机。它可以在几秒钟内在任何地方运行。
```
pip install -e .
logsentry --demo --out digest.html
```
这会打印出一个文本概述,并生成一个可以在任何浏览器中打开的 HTML 摘要。演示数据集是合成的,其中的每一行记录都是虚构的。
## 使用说明
针对真实日志运行:
```
# Windows,在使用捆绑的 helper 导出事件后
logsentry --windows-csv security-events.csv --out digest.html
# Linux
logsentry --syslog /var/log/auth.log --out digest.html
# 两者同时
logsentry --windows-csv security-events.csv --syslog /var/log/auth.log --out digest.html
```
要从你管理的主机上收集 Windows CSV,请运行随附的辅助工具。它是只读的。
```
.\tools\Export-SecurityEvents.ps1 -Hours 24 -OutputPath security-events.csv
```
## 检测规则
| ID | 捕获内容 | ATT&CK |
|----|-----------------|--------|
| BRUTE-FORCE | 短时间窗口内来自单一源的大量登录失败 | T1110 |
| SPRAY-SUCCESS | 来自同一源的密集登录失败后紧接着一次成功的登录 | T1110, T1078 |
| LOCKOUT | 账户锁定 | T1110 |
| PRIV-GRANT | 被加入特权组、分配特殊权限或 sudo 到 root | T1098, T1078 |
| LOG-CLEARED | Windows 安全审计日志被清除 | T1070.001 |
| OFF-HOURS-ADMIN | 在非工作时间进行的成功特权登录 | T1078 |
## 工作原理
最有趣的检测是那些基于关联的检测。
**暴力破解** 会按来源对登录失败进行分组,然后在每个源的失败记录上滑动一个时间窗口,并找出最密集的爆发。如果该爆发超过阈值,就会被视为一个安全事件。按来源分组能够将一个攻击者对主机的猛烈攻击与四十个用户各自偶尔输错一次密码区分开来。当相同的爆发涉及三个或更多账户时,LogSentry 会将其称为密码喷射,因为这就是密码喷射的实际特征。
**失败后的成功** 是最重要的检测。一连串的失败在其中一个成功之前都只是噪音。LogSentry 会监视每个源,寻找在连续失败之后紧接着成功的登录,并将其警报级别提升为 High。这就是被阻断的攻击与被攻破的系统之间的区别。
包含 **日志清除** 是因为清除安全日志是入侵者为了掩盖踪迹所做的第一件事。单个 1102 事件本身就值得被标记为 High。
摘要报告的是数据中存在的日期范围,而不是实时系统时间。给它输入昨天的日志,它就会总结昨天的情况。
## 演示数据
演示数据集是由 `demo/generate_demo.py` 生成的。每一行都是虚构的。日期是固定的,因此无论何时运行,摘要输出都是稳定的。该数据集植入了常规活动以及每种类型的安全事件,以便审查者能看到每种检测规则被触发。
## 路线图
- 直接从 EVTX 采集 Windows 事件,从而无需导出步骤。
- 添加 JSON 输出,以便接入 SIEM 或工单系统。
- 添加可按计划运行并发送摘要邮件的监视模式(watch mode)。
- 增加 sshd 和 sudo 之外的更多 syslog 来源。
## 经验总结
回报最高的设计决策是将所有格式知识都放在解析器中,除此之外 nowhere else。一旦每条日志都变成了相同的事件结构,检测逻辑就变得非常简单,而且我可以在不涉及任何文件的情况下,针对少数几个手工编写的事件进行测试。暴力破解的时间窗口是我最初弄错的地方。我的第一个版本计算了一个源全天的所有失败,这导致它标记了缓慢的背景噪音。滑动一个真实的时间窗口修复了这个问题,并且与实际攻击的呈现方式相符。
## 关于本作品集的说明
本作品集中的项目都是通过我的自动化开发流水线构建的。我负责设计它们、审查输出结果,并运营发布它们的系统。这条流水线本身也是该系列中的最后一个项目。
## 许可证
MIT。详见 [LICENSE](LICENSE)。
标签:AI合规, Python, 事件关联, 多模态安全, 子域名变形, 安全日志分析, 无后门, 红队行动, 逆向工具