Jaischiefy/threatfox-s1-integration
GitHub: Jaischiefy/threatfox-s1-integration
将 ThreatFox 威胁指标自动导入 SentinelOne 的生产级集成方案,支持自动化 IOC 同步与生命周期管理。
Stars: 0 | Forks: 0
# ThreatFox 到 SentinelOne 威胁情报集成
一个安全、可用于生产环境的集成方案,用于将来自 ThreatFox 的威胁指标导入 SentinelOne 威胁情报,并带有可选的 STAR 规则生成功能,以检测出站 IOC 匹配。
## 功能
- ✅ 从 ThreatFox API 拉取当前威胁指标(24小时窗口可配置)
- ✅ 规范化并验证指标(IPv4、Domain、URL、SHA-256)
- ✅ 导入到 SentinelOne 威胁情报并进行源跟踪
- ✅ 将状态存储在 SQLite 中(避免重复导入活动指标)
- ✅ 默认采用 Dry-run 模式(未经明确确认不会进行实时写入)
- ✅ 结构化 JSON 日志
- ✅ 针对临时故障的指数退避 + 抖动
- ✅ 遵循 HTTP 429(速率限制)响应
- ✅ 支持账号级别和站点级别的 IOC 范围设定
- ✅ 可按 IOC 类型配置过期时间
- ✅ 包含 inspect、fetch、import、expire、status 命令的 CLI
## 项目结构
```
threatfox-s1-integration/
├── main.py # CLI entry point
├── pyproject.toml # Python project metadata
├── .env.example # Environment variable template
├── .gitignore # Git ignore rules
├── README.md # This file
├── threatfox_api.py # ThreatFox API client
├── sentinelone_api.py # SentinelOne API client
├── ioc_validator.py # IOC validation & normalization
├── state.py # SQLite state management
├── logger.py # Structured JSON logging
├── tests/
│ ├── test_validator.py # IOC validator tests
│ ├── test_threatfox.py # Mock ThreatFox responses
│ └── test_sentinelone.py # Mock S1 responses
├── systemd/
│ ├── threatfox-s1.service # Systemd service unit
│ └── threatfox-s1.timer # Systemd timer (4-hour interval)
└── docker/
└── Dockerfile # Docker image definition
```
## 安装说明
### 前置条件
- Python 3.11+
- pip
- SQLite3
### 设置
```
git clone
cd threatfox-s1-integration
# 创建虚拟环境
python3.11 -m venv venv
source venv/bin/activate
# 安装依赖
pip install -r pyproject.toml
# 复制环境模板并配置
cp .env.example .env
# 编辑 .env 填入你的 API 凭据
```
## 配置
### 环境变量
**必填项:**
```
THREATFOX_AUTH_KEY=your-threatfox-api-key
S1_CONSOLE_URL=https://usea1-020.sentinelone.net
S1_API_TOKEN=your-s1-api-token
S1_ACCOUNT_ID=your-account-id (optional if using S1_SITE_ID)
S1_SITE_ID=your-site-id (optional if using S1_ACCOUNT_ID)
```
**可选项:**
```
MIN_CONFIDENCE=90 # Default: 90
IOC_MAX_AGE_HOURS=24 # Default: 24
IP_EXPIRATION_DAYS=7 # Default: 7
DOMAIN_EXPIRATION_DAYS=14 # Default: 14
URL_EXPIRATION_DAYS=14 # Default: 14
HASH_EXPIRATION_DAYS=30 # Default: 30
MAX_IMPORTS_PER_RUN=250 # Default: 250 (safeguard)
BATCH_SIZE=25 # Default: 25 (per POST)
LOG_LEVEL=INFO # Default: INFO
DRY_RUN=true # Default: true (CRITICAL: set to 'false' to enable writes)
STATE_DB=threatfox_s1.db # Default: threatfox_s1.db
```
## 用法
### 命令
#### 检查配置
```
python main.py inspect
```
显示当前配置、API 连接状态和数据库状态。
#### 获取指标(不导入)
```
python main.py fetch --dry-run
```
从 ThreatFox 拉取指标、进行验证并去重。输出 JSON 摘要(不写入 S1)。
#### 导入到 SentinelOne(请先进行 Dry-run!)
```
# DRY RUN(请务必先执行此操作!)
python main.py import --dry-run
# ACTUAL IMPORT(需要明确确认)
python main.py import --confirm-write
```
#### 使旧指标过期
```
# 检查即将过期的内容
python main.py expire --dry-run
# 实际移除过期的 IOC
python main.py expire --confirm-write
```
#### 状态报告
```
python main.py status
```
显示:S1 中的 IOC 总数、活动的 ThreatFox 导入、上次导入时间、状态数据库大小。
#### 测试 SentinelOne 身份验证
```
python main.py test-s1-auth
```
验证 API token、账号访问权限和 scope 权限。
#### 测试 IOC 导入(带审查)
```
# 使用 5 个 IOC 进行测试,dry-run 模式
python main.py test-ioc-import --limit 5
# 实际写入测试 IOC(需要明确确认)
python main.py test-ioc-import --limit 5 --confirm-write
```
## Dry-run 模式(默认)
**默认情况下禁用所有写入操作。** 要启用写入:
1. 在 `.env` 中设置 `DRY_RUN=false`,或者
2. 在 import/expire/test-ioc-import 命令中传递 `--confirm-write` 标志
Dry-run 模式会记录将要发送的确切 API payload,以便在执行前进行审查。
## 示例工作流
```
# 1. 检查配置
python main.py inspect
# 2. 测试身份验证
python main.py test-s1-auth
# 3. 从 ThreatFox 获取 indicators(不写入)
python main.py fetch --dry-run
# 4. 审查将要导入的 IOC 样本
python main.py test-ioc-import --limit 5
# 5. 确认无误后,执行正式导入
python main.py import --confirm-write
# 6. 检查状态
python main.py status
# 7. 安排定期导入(systemd 或 cron)
```
## Systemd 设置 (Linux)
```
# 复制 service 和 timer
sudo cp systemd/threatfox-s1.service /etc/systemd/system/
sudo cp systemd/threatfox-s1.timer /etc/systemd/system/
# 启用并启动
sudo systemctl daemon-reload
sudo systemctl enable threatfox-s1.timer
sudo systemctl start threatfox-s1.timer
# 检查状态
sudo systemctl status threatfox-s1.timer
sudo journalctl -u threatfox-s1 -f # Follow logs
```
## Cron 替代方案
```
# 每 4 小时
0 */4 * * * cd /opt/threatfox-s1 && python main.py import >> logs/cron.log 2>&1
```
## Docker
```
docker build -f docker/Dockerfile -t threatfox-s1:latest .
docker run --rm \
-e THREATFOX_AUTH_KEY=$THREATFOX_AUTH_KEY \
-e S1_API_TOKEN=$S1_API_TOKEN \
-e S1_CONSOLE_URL=$S1_CONSOLE_URL \
-e S1_ACCOUNT_ID=$S1_ACCOUNT_ID \
-e DRY_RUN=false \
threatfox-s1:latest import
```
## 日志记录
日志以 JSON 格式写入 `logs/` 目录,便于解析:
```
{
"timestamp": "2026-07-15T16:30:00.123456Z",
"level": "INFO",
"component": "importer",
"message": "Imported 5 new IOCs from ThreatFox",
"iocs_imported": 5,
"iocs_updated": 2,
"iocs_skipped": 3,
"duration_seconds": 12.34
}
```
## 安全限制
✅ **已执行:**
- 默认启用 Dry-run
- 不自动创建 STAR 规则
- 无自动响应动作(隔离、终止、修复)
- 源代码中没有硬编码的机密
- 所有凭据均来自环境变量或 `.env`
- 启用证书验证(不使用 `--insecure`)
- SQLite 防止重复导入
- 状态跟踪防止重复导入活动的 IOC
## 已知限制
1. **IOC 创建 API**:在测试期间遇到 S1 POST endpoint 验证错误。可能需要 SentinelOne 支持或租户配置。
- 变通方法:通过控制台 UI 手动上传
- 测试:使用 `test-ioc-import --limit 5` 来验证 payload
2. **STAR 规则生成**:尚未实现。必须在 S1 控制台中手动创建规则。
- 计划中:在 `star-rules/` 目录中提供 STAR 规则模板
3. **Scope**:目前支持账号级别的 scope 设定。即将支持站点级别。
4. **批量大小**:每个 POST 请求限制为 25 个 IOC。大型导入将拆分为多个批次。
## 故障排除
### ThreatFox API 错误
- 检查 `THREATFOX_AUTH_KEY` 是否有效
- 验证 API 速率限制(通常为 1000次/天)
- 检查 `IOC_MAX_AGE_HOURS` 设置
### SentinelOne API 错误
- 运行 `python main.py test-s1-auth` 以验证连接
- 检查 `S1_API_TOKEN` 过期时间(8天有效期)
- 验证 `.env` 中的账号/站点 ID
- 确保账号具有“Threat Intelligence”权限
### 导入失败
- 检查 `logs/` 目录中的日志
- 使用 `--dry-run` 查看确切的 payload
- 首先使用 `test-ioc-import --limit 5` 进行测试
## 测试
```
# 运行单元测试
python -m pytest tests/ -v
# 使用 mock 数据测试(无实时 API 调用)
python -m pytest tests/ --mock
```
## 未来增强功能
- [ ] STAR 规则自动创建和管理
- [ ] 多源威胁情报(Wiz、Shodan、Censys)
- [ ] 基于置信度的严重性评分
- [ ] IOC 过期自动化
- [ ] 用于监控的 Web 仪表板
- [ ] 导入出错时的 Slack/电子邮件警报
- [ ] 站点级别的 scope 支持设定
## 支持
如有问题、疑问或功能请求:
1. 检查 `logs/` 目录中的日志
2. 运行 `python main.py inspect` 进行诊断
3. 如果 API 错误持续存在,请联系 SentinelOne 支持
## 许可证
仅供内部使用。请勿分发。
**最后更新:** 2026-07-15
**版本:** 0.1.0 (Beta)
**状态:** Dry-run 模式已激活。可安全用于生产环境测试。
标签:API集成, IP 地址批量处理, SentinelOne, SOC运营, ThreatFox, 可观测性, 威胁情报, 开发者工具, 漏洞探测, 网络信息收集, 请求拦截, 逆向工具