GunesArici/Security-Log-Pipeline
GitHub: GunesArici/Security-Log-Pipeline
基于 Python 的本地安全日志分析管道,通过 ETL、规则检测和 Streamlit 仪表板实现认证日志的威胁发现与准确性评估。
Stars: 0 | Forks: 0
# 认证日志异常 Pipeline
一个小型的端到端 pipeline,负责接收认证日志,通过基于规则的安全检测器(暴力破解、不可能的旅行、非工作时间访问、首次国家访问)对其进行检测,并在交互式仪表板中展示结果——同时附带一个评估脚本,根据已知的注入异常对检测器的准确性进行评分。
该项目旨在将数据工程/BI 工作(ETL、SQL、仪表板)与网络安全视角(检测逻辑、误报分析、评估方法)结合起来。完全在本地运行,无需云账户或付费服务。
## 架构
```
generate_logs.py ---> auth_logs.csv ---> SQLite (auth_logs)
(synthetic data, |
+ injected v
ground truth) detectors.py (4 rules)
|
v
SQLite (flagged_events)
/ \
v v
dashboard/app.py evaluate.py
(Streamlit UI) (precision/recall
vs. ground truth)
```
## 为什么选择这些工具
选择每一个组件都是为了确保 **$0 成本,零外部账户**:
使用 SQLite 而不是托管数据库,使用 Streamlit 作为仪表板而不是购买 BI 平台许可证,并使用 GitHub Actions 的免费层级进行 CI。无需 API 密钥,无需云订阅。
## 设置
```
git clone
cd security-log-pipeline
python3 -m venv .venv && source .venv/bin/activate # optional but recommended
pip install -r requirements.txt
python pipeline/etl.py # generates data, loads it, runs detectors
python pipeline/evaluate.py # scores detector accuracy
streamlit run dashboard/app.py # opens the dashboard in your browser
pytest tests/ -v # runs the unit tests
```
## 检测规则
| 检测器 | 逻辑 | 严重程度 |
|---|---|---|
| **暴力破解** | 某个用户在 10 分钟窗口内出现 ≥5 次失败登录 | 高 |
| **不可能的旅行** | 两次成功登录隐含的移动速度 >500 mph(大圆距离 / 时间间隔) | 高 |
| **非工作时间访问** | 在当地时间上午 7 点至晚上 8 点之外成功登录 | 中 |
| **新国家** | 某用户首次从之前未见过的国家成功登录 | 中 |
这些规则被有意设计得简单且易于解释,而不是基于 ML —— 在事件响应的背景下,分析师需要知道*为什么*会触发警报,而不仅仅是模型给出的评分超过了某个阈值。
## 评估结果
`generate_logs.py` 向原本正常的流量中注入 4 个已知异常,并将其记录为真实标签(`data/scenarios.json`,检测器自身从不读取该文件)。`evaluate.py` 会将检测器的输出与该真实标签进行比对:
```
Injected scenarios detected: 4/4 (100% recall)
Flags matching a known scenario: 5/9 (56% precision)
```
**那些“额外”的标记并不是误报——这是相关检测的一个真实特性。** 例如,一个注入的异常(从新国家登录)也会顺理成章地触发“不可能的旅行”规则,因为同一此登录既是新国家登录,*也是*相对于用户上次所在位置的物理上极其不合理的跳跃。此外,一旦用户的“最后已知位置”被设置为一个异常城市,他们*下一次从家里的正常登录*也会被判定为不可能的旅行——因为在检测器看来,该用户刚刚被传送回来了。这是生产环境中基于位置的检测系统的现实行为,也是为什么真正的 SOC 工具会按事件关联并对告警去重,而不是将每一次规则触发视为独立事件的部分原因。值得指出的是:本项目并未尝试实现该关联层——如果我进一步扩展此项目,这将是自然的“下一次迭代”。
## 可能的扩展
- 告警关联/去重(将标记按事件分组,而不是独立对待每一个标记)
- 结合同一用户上同时触发的多个标记的 `severity score`(严重程度评分)
- 针对高严重性标记的 Slack/email webhook
- 将合成数据生成器替换为真实数据集(例如,公开的认证日志数据集)以测试泛化能力
## 项目结构
```
security-log-pipeline/
├── data/
│ └── generate_logs.py # synthetic log + ground-truth generator
├── pipeline/
│ ├── db.py # SQLite schema + load/save
│ ├── detectors.py # the 4 rule-based detectors
│ ├── etl.py # orchestrates generate -> load -> detect
│ └── evaluate.py # precision/recall vs. ground truth
├── dashboard/
│ └── app.py # Streamlit dashboard
├── tests/
│ └── test_detectors.py # unit tests for each detector
└── .github/workflows/ci.yml # runs tests + full pipeline on every push
```
标签:AMSI绕过, Kubernetes, Python, SQLite, Streamlit, 云计算, 威胁检测, 安全日志分析, 数据管道, 无后门, 红队行动, 规则引擎, 访问控制, 软件工程, 逆向工具