AMFeedlyCustomerScripts/Feedly_CyberAttacks_Agent_OpenCTI

GitHub: AMFeedlyCustomerScripts/Feedly_CyberAttacks_Agent_OpenCTI

将 Feedly Cyber Attacks Agent 的网络攻击情报自动同步到 OpenCTI,生成完整关联的 STIX2 威胁知识图谱。

Stars: 0 | Forks: 0

# Feedly Cyber Attacks Agent → OpenCTI 集成 从您的 **Feedly Cyber Attacks Agent** 获取网络攻击情报,并将其作为完全关联的 STIX2 图谱导入到 **OpenCTI** 中——包括 Incident(安全事件)、Threat Actor(威胁行为者)、Malware(恶意软件)、Attack Pattern(攻击模式)和 Location(位置),以及它们之间的关联关系。 ## 工作原理 1. 在给定时间段内,使用可选的过滤器调用 Feedly Cyber Attacks Agent API (`POST /v3/ml/relationships/cyber-attacks/dashboard/table`)。 2. 对于每条攻击记录,提取: - 标题、描述和日期 - 攻击类型(Ransomware、Data Breach、Phishing 等) - Threat Actor 名称及元数据 - 所使用的 Malware 家族 - 受害者国家及行业 - 用于外部引用的源文章 URL 3. 在 OpenCTI 中创建关联的 STIX2 对象: - **Incident** — 每条攻击记录对应一个 - **Threat Actor** — 在同步运行期间进行去重 - **Malware** — 在同步运行期间进行去重 - **Attack Pattern** — 每种不同的攻击类型对应一个 - **Location** — 每个受害者国家对应一个 4. 在对象之间创建 **关系 (relationships)**: - `Incident` → `attributed-to` → `Threat Actor` - `Incident` → `uses` → `Malware` - `Incident` → `uses` → `Attack Pattern` - `Incident` → `targets` → `Location` - `Threat Actor` → `uses` → `Malware` 5. (可选)在 OpenCTI 中创建一个 **Report**,将同步运行中的所有对象打包。 6. 持久化一个状态文件,以便在重复运行时记住上次使用的时间段。 ## 环境要求 - Python 3.8+ - 拥有 **Cyber Attacks Agent** 访问权限的 Feedly Enterprise 账户 - OpenCTI 实例 (v5.9+),且用户 token 具有 connector 权限 ### 安装依赖 ``` pip install -r requirements.txt ``` ## 配置 ### 选项 1 — 配置文件(推荐) 复制模板并填入您的值: ``` cp config.yaml.template config.yaml ``` 编辑 `config.yaml`: ``` feedly: api_key: "YOUR_FEEDLY_API_KEY" period: "Last7Days" opencti: url: "https://your-opencti-instance" token: "YOUR_OPENCTI_API_TOKEN" create_report: false sync: daemon: false interval: 1440 ``` ### 选项 2 — 环境变量 ``` export FEEDLY_API_KEY="your_feedly_api_key" export OPENCTI_URL="https://your-opencti-instance" export OPENCTI_TOKEN="your_opencti_token" ``` 或者将它们放在同一目录下的 `.env` 文件中: ``` FEEDLY_API_KEY=your_feedly_api_key OPENCTI_URL=https://your-opencti-instance OPENCTI_TOKEN=your_opencti_token ``` ### 选项 3 — CLI 标志 所有配置值都可以直接通过命令行传递(参见 [CLI 参考](#cli-reference))。 ## 使用方法 ### 预演(预览——不会向 OpenCTI 写入任何更改) ``` python Feedly_CyberAttacks_Agent_OpenCTI.py --dry-run -v ``` ### 单次同步(过去 7 天) ``` python Feedly_CyberAttacks_Agent_OpenCTI.py --period Last7Days ``` ### 按攻击类型过滤 ``` python Feedly_CyberAttacks_Agent_OpenCTI.py \ --period Last30Days \ --attack-type Ransomware ``` ### 按受害国家过滤 ``` python Feedly_CyberAttacks_Agent_OpenCTI.py \ --period Last7Days \ --victim-country US ``` ### 按威胁行为者过滤 ``` python Feedly_CyberAttacks_Agent_OpenCTI.py \ --threat-actor "LockBit" \ --period Last3Months ``` ### 按受害大洲过滤 ``` python Feedly_CyberAttacks_Agent_OpenCTI.py \ --period Last7Days \ --victim-continent "nlp/f/entity/gz:loc:46" ``` ### 同步并创建摘要报告 (Report) ``` python Feedly_CyberAttacks_Agent_OpenCTI.py \ --period Last30Days \ --create-report ``` ### 守护进程模式(每 24 小时运行一次) ``` python Feedly_CyberAttacks_Agent_OpenCTI.py \ --daemon \ --interval 1440 ``` ### 使用配置文件 ``` python Feedly_CyberAttacks_Agent_OpenCTI.py --config config.yaml ``` ## CLI 参考 ``` usage: Feedly_CyberAttacks_Agent_OpenCTI.py [options] Feedly: --feedly-api-key KEY Feedly API key --period PERIOD Time period: Last24Hours, Last7Days, Last30Days, Last3Months, Last6Months, LastYear (default: Last7Days) --attack-type TYPE Filter by attack type (see Attack Types below) --threat-actor ACTOR Filter by threat actor name or Feedly entity ID --malware-family MALWARE Filter by malware family name or Feedly entity ID --victim-country CODE Filter by victim country (ISO 3166-1 alpha-2, e.g. US, GB) --victim-industry INDUSTRY Filter by victim industry (Feedly entity ID or label) --victim-continent ENTITY_ID Filter by victim continent (Feedly entity ID) --max-results N Maximum attack records per sync cycle (default: 500) OpenCTI: --opencti-url URL OpenCTI platform URL --opencti-token TOKEN OpenCTI API token --create-report Create a summary threat-report linking all imported objects Automation: --daemon Run continuously on a fixed interval --interval MINUTES Interval between daemon cycles (default: 1440) General: --dry-run Preview actions without writing to OpenCTI --state-file FILE Path to sync state JSON file (default: feedly_opencti_cyber_attacks_state.json) --config FILE YAML config file (default: config.yaml) -v, --verbose Enable debug output ``` ## 攻击类型 | CLI 值 | 描述 | |-----------|-------------| | `Ransomware` | Ransomware 攻击 | | `DataBreachesAndExfiltration` | 数据泄露和窃取 | | `DenialOfService` | 拒绝服务 / DDoS | | `PhishingAndSocialEngineering` | 钓鱼和社会工程学 | | `SupplyChainAttack` | 供应链攻击 | | `ZeroDay` | 零日漏洞利用 | | `APT` | 高级持续性威胁 (APT) 活动 | | `Cryptojacking` | 加密劫持 / 非法挖矿 | | `Espionage` | 网络间谍活动 | | `Sabotage` | 破坏性 / 破坏攻击 | | `Wiper` | Wiper 恶意软件攻击 | | `BEC` | 商业电子邮件欺诈 (BEC) | ## 在 OpenCTI 中创建的内容 | STIX2 对象 | 填充的字段 | |---|---| | `Incident` | `name`、`description`、`incident_type`、`first_seen`、`last_seen`、`confidence`、外部引用 | | `Threat Actor` | `name`、`description`、`confidence` | | `Malware` | `name`、`description`、`confidence` | | `Attack Pattern` | `name`、`description`、`confidence` | | `Location` | `name`、`description`、`country`(ISO 代码)、`x_opencti_location_type` | | `Report` *(可选)* | `name`、`description`、`published`、`report_types`、关联的对象引用 | ### 创建的关系 | 源 (From) | 关系 (Relationship) | 目标 (To) | |---|---|---| | `Incident` | `attributed-to` | `Threat Actor` | | `Incident` | `uses` | `Malware` | | `Incident` | `uses` | `Attack Pattern` | | `Incident` | `targets` | `Location` | | `Threat Actor` | `uses` | `Malware` | ## OpenCTI 设置 1. 转到 **Settings → Security → Users**,创建一个专用的 connector 用户(例如:`feedly-connector`)。 2. 将该用户添加到 **Connectors** 组中。 3. 从用户的个人资料页复制 API token。 4. 在 `config.yaml` 中设置 `opencti.token`,或者配置 `OPENCTI_TOKEN` 环境变量。 ## 状态与增量同步 每次成功同步后,脚本会写入一个 `feedly_opencti_cyber_attacks_state.json` 文件(路径可通过 `--state-file` 配置)。它存储了上次使用的时间段,以便守护进程在重启之间保持一致。 删除或重置此文件即可重新开始。 ## 使用 Cron 进行调度 除了守护进程模式,您还可以通过 cron 调度脚本: ``` # 每日 06:00 同步 0 6 * * * /usr/bin/python3 /opt/feedly-opencti/Feedly_CyberAttacks_Agent_OpenCTI.py \ --config /opt/feedly-opencti/config.yaml \ >> /var/log/feedly_opencti_cyber_attacks.log 2>&1 ``` ## 故障排除 | 症状 | 解决方案 | |---------|-----------| | Feedly 返回 `403 Forbidden` | 检查您的 API key,并确认您的账户拥有 Cyber Attacks Agent 访问权限 | | OpenCTI 返回 `401 Unauthorized` | 验证 token 且该用户属于 Connectors 组 | | 未返回任何记录 | 尝试扩大时间段(例如 `Last30Days`)或移除过滤器以确认数据可用 | | 响应中的 `items` 为空 | 您的账户可能没有 Cyber Attacks Agent 访问权限——请联系 Feedly 支持 | | `pycti` 导入错误 | 运行 `pip install "pycti>=5.9.6"` | | OpenCTI 中出现重复对象 | 正常现象——pycti 中的 `create()` 调用会按名称执行 upsert,因此重复运行是安全的 | ## 许可证 © 2025 Feedly, Inc. 保留所有权利。完整免责声明请参见脚本标头。
标签:API集成, CISA项目, Feedly, Object Callbacks, OpenCTI, Python, STIX2, 勒索软件, 可观测性, 威胁情报, 威胁行为者, 安全响应, 安全态势感知, 安全数据可视化, 安全运营, 安全集成, 开发者工具, 恶意软件, 情报关联, 扫描框架, 攻击模式, 数据同步, 无后门, 网络安全, 网络钓鱼, 逆向工具, 隐私保护