AMFeedlyCustomerScripts/Feedly_CyberAttacks_Agent_ThreatConnect
GitHub: AMFeedlyCustomerScripts/Feedly_CyberAttacks_Agent_ThreatConnect
将 Feedly Cyberattacks Agent 的网络攻击情报自动同步至 ThreatConnect 的 Python 集成脚本,支持持续拉取、结构化映射与关联管理。
Stars: 0 | Forks: 0
# Feedly CyberAttacks Agent → ThreatConnect 集成
这是一个独立的 Python 脚本,可持续从已保存的 **Feedly Cyberattacks Agent** 视图中拉取网络攻击情报,
并通过 v3 REST API 将其作为 Incident Groups 推送到 **ThreatConnect** 中
—— 同时包含关联的 Adversary、Malware 和 Vulnerability Groups。
配套集成:[Feedly Vulnerability Agent → ThreatConnect](https://github.com/AMFeedlyCustomerScripts/Feedly_Vulnerability_Agent_ThreatConnect)
(Incident 通过共享的 CVE 名称与其 Vulnerability Groups 建立关联)。
Cyberattacks Agent 是一个由 POST endpoint
(`/v3/ml/relationships/cyber-attacks/dashboard/table`) 提供服务的仪表板
产品,而不是 stream,因此
应用无法直接访问它。此脚本直接提取 Agent 的结构化情报:
受害组织/国家/行业、攻击类型、攻击日期、
时间轴、分析师的 so-what 摘要,以及 threat actor / malware / CVE
关系。
## 专为不断演进的 Agent 配置而设计
您保存的 Agent 视图以 **JSON 文件的形式由脚本原封不动地发送至**
Feedly**(仅注入用于分页的 `continuation` token)。这
意味着:
- 您可以在同步运行的同时,继续在 Feedly UI 中优化 Agent。
- 当配置发生更改时,重新导出 JSON,覆盖视图文件即可
大功告成 —— **无需更改代码,无需重启**。
- 在 daemon 模式下,视图文件会在**每个周期开始时被重新读取**;
日志会打印出 config hash,以便您确认更新已被采纳。
- 响应解析采用防御性设计(每个字段包含多个候选键名),因此
payload 结构的偏移会优雅降级,而不会导致同步中断。
## 设置
```
pip install -r requirements.txt
cp config.yaml.template config.yaml
cp cyber_attacks_agent_view.json.template cyber_attacks_agent_view.json
```
通过环境变量或脚本旁的 `.env` 文件提供凭据:
```
# Feedly
FEEDLY_API_KEY=your_feedly_enterprise_token
# ThreatConnect (HMAC pair ...)
TC_API_URL=https://app.threatconnect.com
TC_ACCESS_ID=your_access_id
TC_SECRET_KEY=your_secret_key
TC_OWNER=Your Organization
# ... 或使用 API token 代替 HMAC pair
TC_API_TOKEN=your_api_token
```
## 导出您的 Agent 视图 JSON
1. 在 Feedly 中打开您保存的 Cyberattacks Agent 视图。
2. 打开浏览器开发者工具 → **Network** 标签页并重新加载视图。
3. 找到发送至 `cyber-attacks/dashboard/table` 的 POST 请求。
4. 复制**请求 payload**(右键点击 → Copy → Copy payload / request
body)并将其保存为 `cyber_attacks_agent_view.json`。
5. 每当您更改 Agent 配置时重复此操作 —— 正在运行的同步任务将在
下一个周期获取新文件。
内置的模板(过去 7 天的勒索软件攻击)是一个经过验证的
有效示例:
```
{
"period": {"type": "Last7Days", "label": "Last7Days"},
"layers": [{"filters": [{"field": "attackType", "value": "Ransomware"}]}]
}
```
## 用法
请务必先进行预览:
```
python feedly_cyberattacks_agent_threatconnect.py --dry-run -v
```
无需触碰 ThreatConnect 即可检查原始的 Agent 记录:
```
python feedly_cyberattacks_agent_threatconnect.py --dry-run --output records.json
```
一次性同步:
```
python feedly_cyberattacks_agent_threatconnect.py --tc-owner "My Org"
```
持续同步(每小时):
```
python feedly_cyberattacks_agent_threatconnect.py --daemon --interval 60
```
或者使用 cron 安排一次性运行,而不是使用 daemon 模式:
```
30 * * * * cd /opt/feedly-tc && python3 feedly_cyberattacks_agent_threatconnect.py >> cron.log 2>&1
```
## ThreatConnect 映射
- **Name**:攻击标题;**Event Date**:攻击日期;**Status**:New
- **Description attribute**:完整的结构化摘要(概述、what /
so-what / latest-activity 分析师备注、攻击类型、受害者、时间轴、
相关 CVE、参考资料)—— 始终会被写入,因此即使缺少自定义
attribute 类型,数据也不会丢失
- **Custom attributes**(可选):`Attack Type`、
`Victim Organization`、`Victim Country`、`Victim Industry`、`Attack Timeline`
- **Associations**:Adversary Groups(threat actors)、Malware Groups 以及
Vulnerability Groups(相关 CVE),在同一
请求中按名称创建/匹配(使用 `--no-associations` 禁用)
- **Tags**:`Feedly`、`Feedly Cyberattacks Agent`,每种攻击类型对应一个标签
### 自定义属性类型
结构化 attributes 要求您的 ThreatConnect owner 中存在与
Incident group 类型相匹配的 **attribute types**(Organization Settings →
Attribute Types)。如果某个类型不存在,ThreatConnect 将拒绝该
attribute,脚本会将其记录下来并继续执行 —— 相同的数据始终会存在于
Description 中。要使用不同的类型名称,请在
`config.yaml` 中的 `threatconnect.attribute_mapping` 下重新映射它们,或者使用
`--no-custom-attributes` 完全禁用此尝试。
## 去重与更新
该脚本维护着一个状态文件 (`feedly_tc_cyberattacks_state.json`),用于将
Feedly 攻击 ID 映射到 ThreatConnect group ID。在每个周期,已知记录
都会被**原地更新**(或使用 `--skip-existing` 跳过);未知记录
在创建前也会在 ThreatConnect 中通过精确名称进行核对,因此重新运行
绝不会导致 groups 重复。删除状态文件可强制进行全面的重新评估。
## 文件
- `feedly_cyberattacks_agent_threatconnect.py` —— 集成脚本
- `cyber_attacks_agent_view.json.template` —— Cyberattacks Agent 视图 payload 示例
- `config.yaml.template` —— 可选的 YAML 配置
- `requirements.txt` —— Python 依赖项 (`requests`, `PyYAML`)
## 测试检查清单
1. 首先运行 `--dry-run`,并加上 `-v` 以获取完整的 payload 预览。
2. 运行 `--dry-run --output records.json` 以准确检查 Agent 为您的
视图返回了什么内容。
3. 在投入生产环境之前,先同步到一个测试/沙箱 ThreatConnect owner 中。
标签:API集成, Feedly, Python, ThreatConnect, 可观测性, 威胁情报, 开发者工具, 恶意代码分类, 数据同步, 无后门, 逆向工具