AMFeedlyCustomerScripts/Feedly_Vulnerability_Agent_ThreatConnect

GitHub: AMFeedlyCustomerScripts/Feedly_Vulnerability_Agent_ThreatConnect

一个 Python 集成脚本,将 Feedly Vulnerability Agent 的结构化漏洞情报持续同步到 ThreatConnect 平台,实现漏洞情报的自动化导入与关联。

Stars: 0 | Forks: 0

# Feedly Vulnerability Agent → ThreatConnect 集成 这是一个独立的 Python 脚本,可持续从已保存的 **Feedly Vulnerability Agent** 视图中拉取漏洞情报,并通过 v3 REST API 将其推送到 **ThreatConnect** 中作为 Vulnerability Groups。 配套集成:[Feedly CyberAttacks Agent → ThreatConnect](https://github.com/AMFeedlyCustomerScripts/Feedly_CyberAttacks_Agent_ThreatConnect) (其 Incident Groups 会通过共享的 CVE 名称,与此脚本创建的 Vulnerability Groups 建立关联)。 Vulnerability Agent 是一个由 POST endpoint (`/v3/trends/vulnerability-dashboard`) 提供服务的仪表板产品,而不是流式数据,因此应用程序无法直接访问它。此脚本可直接提取 Agent 的结构化情报:EPSS 评分、CVSS 评分/向量、漏洞利用状态、补丁详情、受影响的产品以及 CWE 分类。 ## 专为不断演进的 Agent 配置而设计 你保存的 Agent 视图以 **JSON 文件的形式提供,脚本会原封不动地将其发送给 Feedly**(仅注入用于分页的 `continuation` token)。这意味着: - 你可以在同步运行的同时,继续在 Feedly UI 中优化 Agent。 - 当配置发生更改时,重新导出 JSON,覆盖视图文件即可大功告成 —— **无需更改代码,无需重启**。 - 在 daemon 模式下,视图文件会在**每个周期开始时被重新读取**;日志会打印出配置哈希值,以便你确认更新是否已被成功采纳。 - 响应解析采用防御性设计(每个字段有多个候选键名),因此 payload 结构的偏移会优雅降级,而不会导致同步中断。 ## 设置 ``` pip install -r requirements.txt cp config.yaml.template config.yaml cp vuln_agent_view.json.template vuln_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 中打开你保存的 Vulnerability Agent 视图。 2. 打开浏览器开发者工具 → **Network** 标签页,然后重新加载该视图。 3. 找到发送至 `vulnerability-dashboard` 的 POST 请求。 4. 复制**请求 payload**(右键点击 → Copy → Copy payload / request body),并将其保存为 `vuln_agent_view.json`。 5. 每当你更改 Agent 配置时,请重复此操作 —— 正在运行的同步任务会在下一个周期自动读取新文件。 内置的模板(过去 7 天内被利用的 CVE)是一个经过验证的可用示例: ``` { "period": {"type": "Last7Days", "label": "Last7Days"}, "layers": [{"filters": [{"field": "exploited", "value": true}]}] } ``` ## 用法 请始终先进行预览: ``` python feedly_vuln_agent_threatconnect.py --dry-run -v ``` 在不影响 ThreatConnect 的情况下检查原始 Agent 记录: ``` python feedly_vuln_agent_threatconnect.py --dry-run --output records.json ``` 一次性同步: ``` python feedly_vuln_agent_threatconnect.py --tc-owner "My Org" ``` 持续同步(每小时): ``` python feedly_vuln_agent_threatconnect.py --daemon --interval 60 ``` 或者使用 cron 安排一次性运行,而不是使用 daemon 模式: ``` 0 * * * * cd /opt/feedly-tc && python3 feedly_vuln_agent_threatconnect.py >> cron.log 2>&1 ``` ## ThreatConnect 映射 - **Name**:CVE ID - **Description attribute**:完整的结构化摘要(描述、what / so-what / mitigation 分析师笔记、CVSS、EPSS、漏洞利用情况、补丁详情、受影响的产品、CWE、参考资料)—— 始终会被写入,因此即使缺少自定义属性类型也不会丢失任何数据 - **Custom attributes**(可选):`CVSS Score`、`CVSS Vector`、`EPSS Score`、`Exploitation Status`、`Patch Details`、`Affected Products` - **Tags**:`Feedly`、`Feedly Vulnerability Agent`、`CVSS: `、`Exploited`(适用时) ### 自定义属性类型 结构化属性要求你的 ThreatConnect owner 中必须存在与 Vulnerability group 类型相匹配的**属性类型**(Organization Settings → Attribute Types)。如果某个类型不存在,ThreatConnect 将拒绝该属性,脚本会将其记录下来并继续执行 —— 同样的数据始终会存在于 Description 中。要使用不同的类型名称,请在 `config.yaml` 中的 `threatconnect.attribute_mapping` 下重新映射它们,或者使用 `--no-custom-attributes` 完全禁用此尝试。 ## 去重与更新 该脚本维护着一个状态文件 (`feedly_tc_vuln_state.json`),用于将 Feedly ID 映射到 ThreatConnect group ID。在每个周期中,已知记录会被就地**更新**(或使用 `--skip-existing` 跳过);未知记录在创建前也会在 ThreatConnect 中通过确切名称进行检查,因此重新运行绝不会导致 group 重复。删除状态文件可强制进行全面的重新评估。 ## 文件 - `feedly_vuln_agent_threatconnect.py` — 集成脚本 - `vuln_agent_view.json.template` — Vulnerability 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 中。
标签:Feedly, GPT, Python, ThreatConnect, 威胁情报, 开发者工具, 数据同步, 无后门, 漏洞管理, 逆向工具