dynacop/threat-feed-examples

GitHub: dynacop/threat-feed-examples

该项目提供 Dynacop Threat Feed API 的示例代码,帮助用户将自有 Windows 终端上观察到的第一方攻击源 IP 提取并集成到防火墙、SIEM 和自动化脚本中。

Stars: 0 | Forks: 0

# Dynacop Threat Feed — 示例 **Dynacop Threat Feed API** 的示例客户端 —— 获取来自您自有 Windows 终端的第一方攻击者数据,可直接用于防火墙、SIEM 或脚本。 [Dynacop](https://dynacop.com) 为 Windows 控制台和 RDP 登录添加了基于个人的 MFA,并自动封禁暴力破解的攻击者 IP。Threat Feed 让您能够将工作区中的攻击者信号提取出来,并在其他任何地方采取应对措施。 ## 获取 API 密钥 在面板中,打开 **Integrations → Create API key** 并选择作用域: - **workspace** — 仅限当前工作区的数据 - **provider** — 使用单个密钥涵盖您的整个 MSP 作用域(您自身及所管理的客户) 该密钥必须具有攻击读取权限 (`audit.view`)。完整的密钥(`dyn_live_…`)仅在创建时显示**一次** —— 请立即妥善保存。请将其保存在环境变量中,切勿存放在源代码控制系统中(参见 [`examples/.env.example`](examples/.env.example)): ``` export DYNACOP_API_KEY="dyn_live_XXXXXXXX" ``` ## 身份验证 请将密钥放入 `Authorization` header 中发送(切勿放在 URL 中 —— 以免泄露到代理或访问日志中): ``` curl --fail-with-body --show-error --silent \ -H "Authorization: Bearer $DYNACOP_API_KEY" \ "https://api.dynacop.com/api/v1/attacks" ``` ## Endpoint `GET https://api.dynacop.com/api/v1/attacks` — 获取针对您终端的攻击源 IP,包含尝试次数、服务、首次/最后一次出现时间以及封禁状态。 | 参数 | 含义 | | --- | --- | | `days` / `since` | `days=1..30`(默认为 7)或 ISO 8601 格式的 `since` 时间戳。如果同时提供,则以 `since` 为准。 | | `min_attempts` | 仅返回达到或超过此尝试次数的来源 | | `blocked` | `true` / `false` — 仅返回当前处于活动状态的封禁(或仅未封禁的)来源 | | `format` | `json`(默认)或 `text` — 纯文本 IP 列表,每行一个,供防火墙导入(`Accept: text/plain` 也会选择此项) | | `comments` | `true`(仅限文本)— 在开头添加包含生成时间和数量的 `#` header 行 | 响应包含 **ETag**;发送 `If-None-Match` 即可在数据未更改时快速获取 `304 Not Modified`(`304` 不消耗速率限制)。每个密钥的速率限制为每分钟 60 次请求(超出时返回 `429` 和 `Retry-After`) —— 请合理控制请求频率。 ### JSON 结构 ``` { "generatedAt": "2026-07-20T18:00:00.000Z", "window": { "since": "2026-07-13T18:00:00.000Z" }, "count": 2, "attacks": [ { "ip": "203.0.113.10", "attempts": 128, "firstSeenAt": "2026-07-19T02:11:00.000Z", "lastSeenAt": "2026-07-20T17:52:00.000Z", "resources": ["APP-SRV01"], "customers": ["Acme"], "blocked": true, "services": { "rdp": 120, "ssh": 8 }, "geo": { "country": "US", "city": "Ashburn", "isp": "Example ISP" } } ] } ``` `customers` 仅在 **provider** 作用域的密钥中出现。`services` 仅包含非零的统计项。`geo` 可能为 `null`。每个源 IP 仅出现一次(已在您的各个资源中进行汇总)。 ## 示例 | 文件 | 功能 | | --- | --- | | [`examples/curl.sh`](examples/curl.sh) | 常见请求:过滤器、纯文本列表、ETag/304 轮询 | | [`examples/fetch_threat_feed.py`](examples/fetch_threat_feed.py) | 获取 JSON 并打印被封禁的源(仅使用标准库,防御性编程) | | [`examples/Update-DynacopFirewall.ps1`](examples/Update-DynacopFirewall.ps1) | 在 Windows 防火墙中封禁 Feed 中的 IP(原子操作,可计划任务执行) | | [`examples/threat_feed_to_ipset.sh`](examples/threat_feed_to_ipset.sh) | 将 Feed 导入 Linux `ipset`(下载 → 验证 → 原子替换) | ## Feed 中包含(及不包含)的内容 Feed 的**作用域仅限于您的密钥**:workspace 密钥只能查看该工作区的数据;provider 密钥可以查看您所管理的客户数据。对于每个攻击者 IP,它都会返回**您自己的资源名称** —— 如果是 provider 密钥,还会返回您的**客户工作区名称** —— 这样您就能分辨出某个 IP 攻击了*您的*哪台机器。这些是您为自己资产定义的名称,且仅会返回给您具有相应作用域的密钥。 它**不**包含攻击者尝试使用的用户名(这些保留在面板中)或任何内部数据库标识符。可以通过任何资源的 **API export** 策略开关将其从所有 API 输出中排除(例如,域控制器) —— 排除设置在所有位置均具有最高优先级。 ## 常见问题解答 **这是一个全球性的威胁情报 Feed 吗?** 不是。它包含的是针对您自己导出的 Dynacop 资源所观察到的第一方攻击源 —— 而不是共享的或第三方的拦截列表。 **Feed 是否包含攻击者尝试使用的用户名?** 不包含。这些信息仅在面板中可见。 **Dynacop 会将 Windows 密码发送到 Feed 中吗?** 不会。Windows 密码绝不会成为 Threat Feed API 的一部分。 **Feed 是否包含我的机器或客户的名称?** 是的 —— 包含您自己的资源名称,以及(对于 provider 密钥)您的客户工作区名称,以便您将 IP 归因于特定的机器。它们仅会返回给您具有相应作用域的密钥。 **纯文本 (`format=text`) 响应是完整的快照吗?** 是的 —— 它是与您的过滤器匹配的当前源 IP 集合,每行一个,已去重。 ## 许可证 MIT — 详见 [LICENSE](LICENSE)。© 2026 Forty2 LLC。 文档:
标签:AI合规, API, PE 加载器, 威胁情报, 应用安全, 开发者工具, 逆向工具, 防火墙