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, 可观测性, 威胁情报, 开发者工具, 恶意代码分类, 数据同步, 无后门, 逆向工具