Flor1an-B/SentinelOne-ThreatAnalyser
GitHub: Flor1an-B/SentinelOne-ThreatAnalyser
基于SentinelOne API的威胁深度取证分析工具,从单个Storyline ID自动拉取事件并生成多格式分析报告
Stars: 1 | Forks: 0
# SentinelOne Threats Analyzer
SentinelOne Threats Analyzer 是一个 Python CLI 工具,它连接到您的 SentinelOne 控制台,提取特定威胁的所有可用取证数据(事件、时间线、Agent 信息),对其进行分析,并同时生成四种输出格式:
| 格式 | 描述 |
|--------|-------------|
| **Terminal** | 基于 Rich 的交互式报告,包含颜色编码的表格、进程树和 SOC 建议 |
| **HTML** | 自包含的交互式仪表板 —— 深色 SOC 主题、侧边栏导航、搜索、图表、VT/Shodan 链接 |
| **Markdown** | 结构化的分析报告,适用于工单系统、Wiki 和文档 |
| **CSV** | 原始事件导出,用于 SIEM 摄取或自定义分析 |
## 功能特性
### 分析引擎
- **智能叙事** — 动态的分阶段事件重建(初始执行 → 进程链 → 文件系统 → 注册表 → 网络/C2 → 凭据 → 持久化 → 勒索软件 → MITRE Kill Chain → 检测与响应),根据可用数据自动调整,无需 LLM
- **执行摘要** — 自动生成的通俗英语叙述,回答 *发生了什么、何时、何地以及如何发生*
- **攻击类型分类** — 启发式级联:勒索软件 → 进程注入 → 横向移动 → RAT/C2 → 持久化 → 凭据访问 → MITRE 回退 → 通用恶意软件
- **MITRE ATT&CK 映射** — 从 SentinelOne 指标中提取,包含战术/技术/链接
- **进程树重建** — 从 `processUniqueKey` / `parentProcessUniqueKey` 构建完整的父子执行链
- **加密 / 勒索软件检测** — `.locked` 扩展名启发式检测 + 来自威胁进程的高文件修改量
- **IOC 提取** — 网络 IOC(IP、域名、URL),文件哈希 IOC(SHA1、SHA256、MD5),可疑注册表键
- **威胁进程范围** — 严格的基于种子的过滤(`core_process_keys`)防止兄弟进程和良性后代进程(浏览器、AI 工具、git 等)污染 IOC 和叙述证据,即使 SentinelOne 将整个故事线标记为 `relatedToThreat`
- **SOC 建议** — 根据发现生成的上下文相关、按优先级排序的行动项(CRITICAL/HIGH/MEDIUM/LOW)
### HTML 报告
- 深色玻璃拟态 SOC 仪表板(零外部依赖 —— 纯 CSS + 原生 JS)
- 侧边栏导航,带有每个部分的事件计数徽章
- 动画统计计数器和事件类型分布条形图
- 可排序表格,每个部分都有实时搜索过滤器
- 所有哈希、IP、路径和命令均可点击复制到剪贴板
- 所有 IOC 值上的 **VirusTotal** 和 **Shodan** 外部查询链接
- “All Events”中的 **仅触发器切换** — 即时隔离与检测相关的事件
- **计划任务** 专用标签页
- **登录异常检测** — 高亮显示 FAILED 登录和 SUSPICIOUS 账户(管理员、来自威胁进程的 INTERACTIVE、NETWORK/BATCH/SERVICE)
- 键盘快捷键:`1`–`0` 跳转到部分,`Ctrl+F` 聚焦活动搜索,`?` 打开快捷键模态框
- 打印友好的 CSS
### 终端报告
- 基于 Rich,具有颜色编码的严重性、Unicode 树形视图、键/值面板
- 执行摘要,包含 When? / Origin? / Key Indicators 面板
- 触发检测的命令表
- 带有优先级颜色的 SOC 建议
- 带有 FAILED/SUSPICIOUS 标志的登录异常警告
- 按类别筛选出的与威胁相关进程的事件表
## 环境要求
- Python **3.9+**
- 拥有 API token 的 SentinelOne 控制台访问权限
```
requests>=2.31.0
rich>=13.7.0
python-dateutil>=2.8.2
urllib3>=2.0.0
```
安装:
```
pip install -r requirements.txt
```
## 快速开始
### 1. 设置您的 API token(推荐)
```
# Linux / macOS
export S1_API_KEY="your_api_token_here"
# Windows (PowerShell)
$env:S1_API_KEY = "your_api_token_here"
# Windows (CMD)
set S1_API_KEY=your_api_token_here
```
### 2. 运行分析器
```
python main.py \
--url https://your-console.sentinelone.net \
--storyline 0000C2E97648XXXX
```
如果未设置 `S1_API_KEY`,系统将安全地提示您输入(输入是隐藏的,从不存储)。
### 3. 查找您的报告
所有报告都保存在一个专用的子文件夹中:
```
/YYYY-MM-DD_HH-MM-SS_/
S1_Events__.csv
S1_ThreatReport__.md
S1_ThreatReport__.html
```
示例:`./reports/2026-02-25_14-30-00_0000C2E97648XXXX/`
## 用法
```
usage: sentinelone_threats_analyzer [-h] -u SERVER_URL -s STORYLINE_ID
[-o DIR]
[--no-csv] [--no-markdown] [--no-html] [--no-terminal]
[-v]
required arguments:
-u, --url SERVER_URL SentinelOne console URL (e.g. https://your-console.sentinelone.net)
-s, --storyline STORYLINE_ID
Storyline ID of the threat to analyse
output options:
-o, --output DIR Output directory (default: current directory)
--no-csv Skip CSV export
--no-markdown Skip Markdown report
--no-html Skip HTML report
--no-terminal Skip terminal output
-v, --verbose Show full API errors and HTTP debug details
```
### 示例
```
# 基础分析,所有报告
python main.py -u https://acme.sentinelone.net -s 0000C2E97648XXXX
# 将报告保存到指定文件夹,跳过终端输出
python main.py -u https://acme.sentinelone.net -s 0000C2E97648XXXX -o /var/reports --no-terminal
# 仅 HTML 及详细 API 日志
python main.py -u https://acme.sentinelone.net -s 0000C2E97648XXXX --no-csv --no-markdown -v
# CI / 非交互模式
S1_API_KEY="$TOKEN" python main.py -u "$S1_URL" -s "$STORYLINE" --no-terminal
```
## API Token 要求
API token 必须具有以下 SentinelOne 权限:
| 范围 | 权限 |
|-------|-----------|
| Threats | View |
| Endpoint Forensics | View |
| Threat Forensics | View |
## 项目结构
```
S1_ThreatAnalyser/
├── main.py # CLI entry point
├── requirements.txt
├── README.md
├── CHANGELOG.md
├── LICENSE
│
└── s1_analyser/
├── __init__.py
├── api_client.py # SentinelOne REST API v2.1 client
│ # – pagination, retry, rate-limit handling
├── data_collector.py # Orchestrates API calls → AnalysisBundle
├── analyzer.py # Core analysis engine
│ # – event categorisation
│ # – IOC extraction
│ # – MITRE ATT&CK mapping
│ # – ExecutiveSummary generation
│ # – SocRecommendation engine
│ # – threat process scoping
├── process_tree.py # ProcessNode tree from event keys
│
└── reporters/
├── terminal_reporter.py # Rich-powered console output
├── csv_reporter.py # Raw events CSV export
├── markdown_reporter.py # Structured Markdown analyst report
└── html_reporter.py # Self-contained interactive HTML dashboard
```
## 工作原理
```
SentinelOne API v2.1
│
▼
DataCollector
┌─────────────────────────────────────────────┐
│ GET /threats?storyline__contains= │ → threat info, agent info
│ GET /threats/{id}/explore/events (paginated)│ → all forensic events
│ GET /threats/{id}/timeline │ → activity timeline
└─────────────────────────────────────────────┘
│
▼ AnalysisBundle
ThreatAnalyzer
┌─────────────────────────────────────────────┐
│ categorise_events() → by objectType │
│ build_threat_keys() → seed + ancestors │
│ detect_encryption() → ransomware heur. │
│ extract_mitre() → techniques/links │
│ build_iocs() → net + file hashes │
│ build_executive_summary()→ narrative, chain │
│ build_soc_recommendations()→ action items │
└─────────────────────────────────────────────┘
│
▼ AnalysisResult
┌──────────┬─────────┬─────────────┬──────────┐
│ Terminal │ CSV │ Markdown │ HTML │
└──────────┴─────────┴─────────────┴──────────┘
```
## 输出详情
### HTML 仪表板部分
| 按键 | 部分 | 描述 |
|-----|---------|-------------|
| `1` | Overview | 执行摘要、SOC 建议、警报、威胁和主机详情、检测触发器 |
| `2` | Narrative | 分阶段的智能事件重建,带有严重性徽章和 MITRE 标签 |
| `3` | Process Tree | 交互式可折叠树 —— 红色 = 恶意/触发 |
| `4` | All Events | 完整时间线,带搜索 + 仅触发器切换 |
| `5` | Files | 文件创建/修改/重命名/删除事件 |
| `6` | Registry | 注册表操作(高亮显示持久化键) |
| `7` | Network | 连接和 DNS 查询 |
| `8` | Login | 带有异常检测的账户活动 |
| `9` | Sched. Tasks | 计划任务创建/修改事件 |
| `0` | IOCs | 网络 IOC(IP、域名)、文件哈希、可疑注册表键 |
| — | MITRE ATT&CK | 按战术分组的技术卡片 |
### Markdown 报告部分
1. Executive Summary (narrative + When/Origin/Key Indicators sub-sections)
2. Incident Narrative (phase-by-phase reconstruction)
3. Threat Details
4. Host Information
5. Detection Analysis
6. MITRE ATT&CK Mapping
7. Process Tree (ASCII)
8. File Activity
9. Registry Activity
10. Network Activity
11. Login & Account Activity
12. Scheduled Tasks
13. Ransomware / Encryption Indicators
14. Indicators of Compromise
15. SOC Analyst Recommendations
16. Attack Timeline (first 100 events)
17. Appendix: Statistics
## 故障排除
| 现象 | 可能原因 | 修复方法 |
|---------|-------------|-----|
| `Connection failed` | URL 错误或 token 过期 | 验证控制台 URL 包含 `https://`;检查 token 有效期 |
| `No threat found for storyline` | ID 错误或缺少权限 | 检查 Storyline ID 前后是否有空格;验证 *Threats View* 权限 |
| Zero events collected | 缺少取证权限 | 在 API token 中添加 *Endpoint Forensics* + *Threat Forensics View* |
| Windows 上终端输出乱码 | 控制台编码问题 | 该工具会将 stdout 补丁为 UTF-8;如果仍有问题,请先运行 `chcp 65001` |
| Empty process tree | 事件仍在处理中 | 等待几分钟后重新运行;部分 Agent 会批量上传事件 |
## 安全说明
- API token **绝不**存储到磁盘、记录到日志或作为 CLI 参数传递
- 所有生成的 HTML 报告都是**完全自包含的**(渲染时不调用外部 CDN)—— 适用于物理隔离环境
- HTML 报告中的外部链接仅在用户明确点击时才向外指向—— 无自动出站调用
## 许可证
MIT — 见 [LICENSE](LICENSE)
## 作者
**Florian Bertaux**
标签:CLI 工具, Cloudflare, CSV 导出, DAST, EDR, HTML 报告, HTTP/HTTPS抓包, IOC 提取, IP 地址批量处理, Markdown, MITRE ATT&CK, PE 加载器, Python, SentinelOne, 仪表盘, 勒索软件检测, 多模态安全, 威胁分析, 安全运营, 态势感知, 恶意软件分析, 扫描框架, 数字取证, 无后门, 杀伤链, 网络威胁情报, 脆弱性评估, 自动化侦查工具, 自动化脚本, 进程树, 逆向工具, 防御加固