byfranke/sheep-feeds-cli

GitHub: byfranke/sheep-feeds-cli

一个命令行客户端,用于从Sheep威胁情报API拉取JSON格式数据,简化安全情报在SIEM、SOAR和脚本中的集成与监控。

Stars: 0 | Forks: 0

# Sheep Feeds 命令行界面 **Sheep 威胁情报 feeds API** 的命令行客户端,地址为 [sheep.byfranke.com](https://sheep.byfranke.com)。用于拉取经过整理的 feeds (CVE、勒索软件受害者、IOC、APT 基础设施、ICS/SCADA 公告、威胁情报文章),并输出为 JSON 格式,供 SIEM、SOAR 剧本、脚本和临时终端查询使用。 ``` sheep-feeds list # list every feed with last update sheep-feeds latest cve --count 20 # 20 most recent CVE entries sheep-feeds get ransomware --since 2026-05-01 --json # raw JSON sheep-feeds stats cve # per-feed statistics sheep-feeds summary # dashboard-style overview sheep-feeds plan # show your plan, quota and active token # 监视 — 当信息源匹配时通知您的本地规则引擎 sheep-feeds watch add nginx-high --feed cve --contains nginx --severity high --notify desktop sheep-feeds watch run --once # one scan (cron / systemd timer) sheep-feeds watch run # loop in the foreground / inside a service ``` ## 存在的意义 我们已提供给客户的一些使用示例: - **SIEM 摄取:** 定时任务调用 `sheep-feeds get cve --since "$LAST" --json | jq …` 并将新行推送到 Wazuh / Splunk / Elastic。 - **SOAR 剧本:** 工作流节点(Tines、Shuffle 或您自己的 Python worker 等)轮询 `sheep-feeds latest ransomware --count 50 --json` 并按 国家/行业过滤后,呼叫事件响应团队。 - **每日摘要:** 定时任务(cron、Kubernetes CronJob、计划的 GitHub Actions)运行 `sheep-feeds summary` 并将结果打印到 SOC 的共享终端。 - **终端快速检查:** `sheep-feeds get cve --severity high` 在站会前快速查看高严重性漏洞。 ## 安装 ### 快速安装 ``` curl -fsSL https://raw.githubusercontent.com/byfranke/sheep-feeds-cli/main/install.sh | bash ``` ### 手动安装 ``` git clone https://github.com/byfranke/sheep-feeds-cli.git ~/.sheep-feeds-cli cd ~/.sheep-feeds-cli pip install -r requirements.txt python3 setup.py ``` ### 卸载 ``` ~/.sheep-feeds-cli/uninstall.sh ``` ## 配置 安装向导 (`setup.py`) 完成三件事: 1. 要求输入您的 API 令牌(以 `shp_` 开头)。 2. 使用主密码(PBKDF2-HMAC-SHA256,60万次迭代)对其加密并存储在 `~/.sheep-feeds-cli/config.ini`(权限 0600)。 3. 可选地全局安装 `sheep-feeds`。 您**每次终端会话只需输入一次主密码** — CLI 会将解密后的令牌缓存在 `/tmp/` 下的会话专用文件中(权限 0600,仅所有者可访问),后续命令无需提示即可运行。 ### 令牌解析顺序 ``` $SHEEP_API_TOKEN (env var, highest priority — useful for CI/CD) system keyring (when populated by setup.py and available) encrypted config (config.ini decrypted with master password) --token (one-shot override, never persisted) ``` 您**无需**使用 CLI 来管理密钥链 — setup.py 默认只将加密后的数据块存储在配置文件中。密钥链路径用于无法输入主密码的非交互式工作流。 ### 如何获取令牌 - Sheep Pro / Pro Max / Enterprise — 在 [sheep.byfranke.com/pages/store](https://sheep.byfranke.com/pages/store) 注册, 令牌将通过电子邮件发送给您。 - Black Sheep 礼品卡 — 在 Discord 上使用 `/token` 兑换。 ## 命令 ### `sheep-feeds list` 列出每个 feed 及其最后更新时间戳。 ### `sheep-feeds categories` 按类别对 feeds 进行分组。 ### `sheep-feeds summary` 所有 feeds 的紧凑、仪表板式概览,包含项目计数和 状态。适用于 cron 驱动的监控。 ### `sheep-feeds get ` *(主力命令)* 从单个 feed 拉取项目。 选项: | 标志 | 默认值 | 备注 | |---|---|---| | `--limit` | 50 | 每次调用的最大项目数(1-500)。 | | `--offset` | 0 | 分页偏移量。 | | `--last` | 无 | 时间窗口快捷方式:`24h`、`3d`、`2w`,或别名 `today` / `yesterday` / `week` / `month`。上限为 30 天(服务器保留期限)。与 `--since` 互斥。 | | `--since` | 无 | ISO-8601 时间戳;获取严格晚于此时间的项目。当您不需要精确到秒时,请使用 `--last`。 | | `--severity` | 无 | 对 `severity` 进行子字符串匹配(不区分大小写)。 | | `--category` | 无 | 对 `category` 进行子字符串匹配。 | | `--json` | 关闭 | 打印原始 API JSON 而非表格。 | 示例: ``` # 过去24小时的所有内容 sheep-feeds get cve --last 24h # 三天内的勒索软件泄露数据,以JSON格式准备好通过管道传输到jq sheep-feeds get ransomware --last 3d --json | jq '.items[].title' # 上周的高严重性公告 sheep-feeds get cve --last week --severity high # ICS公告的第3页(无时间窗口) sheep-feeds get ics_scada --limit 25 --offset 50 ``` ### `sheep-feeds latest ` 获取最新 N 个项目的快捷方式。可与 `--last` 结合使用,在选取最新项之前限定搜索时间窗口。 ``` sheep-feeds latest cve --count 20 sheep-feeds latest ioc_stream --count 5 --last 24h --json ``` ### `sheep-feeds stats ` 每个 feed 的统计信息(按严重性/类别/来源计数)。 ### `sheep-feeds plan` 显示您的计划、状态、计费周期结束日期、当前周期令牌使用量以及绑定到同一邮箱的任何并行令牌。在调度大量摄取任务前,可用作预检查。添加 `--json` 以获得机器可读输出。 ``` sheep-feeds plan sheep-feeds plan --json | jq '.usage.tokens_remaining' ``` ## Watch — 当 feeds 匹配时发出本地警报 Watch 将 CLI 变成一个安静的哨兵:为您关心的 feeds 定义规则,让代理保持运行,当有新的匹配项时立即收到桌面或 webhook 警报。 Watch **不消耗任何 AI 令牌** — 它仅读取 feeds(已在所有付费计划中免费提供)并在本地应用您的规则。 ### 构建规则 ``` # 提及nginx且严重性为高的CVE sheep-feeds watch add nginx-high --feed cve --contains nginx --severity high --notify desktop # 来自特定攻击者的任何勒索软件相关内容,在Slack中发出警报 sheep-feeds watch add lockbit-radar --feed ransomware --contains lockbit \ --notify "https://hooks.slack.com/services/AAA/BBB/CCC" # 跨所有信息源的严重项目,两个频道 sheep-feeds watch add crit-fanout --feed '*' --severity critical \ --notify desktop \ --notify "https://your-soar.example/sheep-hook" # 在标题和内容上使用正则表达式 sheep-feeds watch add cisco-asa --feed cve --regex "cisco\\s+asa" --notify desktop ``` 规则字段: | 标志 | 行为 | |---|---| | `--feed ` | `cve`、`ransomware`、`threat_intel`、`apt_infrastructure`、`data_leak`、`ics_scada`、`kaspersky`、`ioc_stream`、`rss_news` 中的一个,或 `*` 表示所有 feeds。 | | `--severity` | `low`、`medium`、`high`、`critical` 中的一个。作为不区分大小写的子字符串与项目的 `severity` 匹配。 | | `--category` | 对项目的 `category` 进行不区分大小写的子字符串匹配。 | | `--contains` | 对 `title` + `content` 进行不区分大小写的子字符串匹配。 | | `--regex` | 对 `title` + `content` 应用 Python 正则表达式。仅编译一次;输入长度有上限以限制最坏情况的回溯。 | | `--notify` | 可为每个通道重复指定。值:`desktop`(使用 libnotify / osascript / PowerShell BurntToast,stderr 作为回退),或任何 `https://` webhook URL(POST JSON,10秒超时,无重试)。 | 规则上的所有匹配条件都是 AND 关系。包含**零**个匹配过滤器的规则将被拒绝(否则会触发每个项目)。 ### 列出和管理 ``` sheep-feeds watch list # table sheep-feeds watch list --json # machine-readable sheep-feeds watch pause nginx-high # disable without removing sheep-feeds watch resume nginx-high sheep-feeds watch remove nginx-high # delete the rule ``` ### 检查命中记录 ``` sheep-feeds watch hits # last 24h sheep-feeds watch hits --last 7d sheep-feeds watch hits --rule nginx-high sheep-feeds watch hits --json --limit 500 # SIEM ingest ``` 命中记录按 `(rule, feed, item_id)` 去重 — 同一项目不会触发同一规则两次。 ### 运行 watcher ``` # 一次性扫描(适用于cron / systemd计时器) sheep-feeds watch run --once # 前台循环 — 每N秒轮询一次(默认900) sheep-feeds watch run sheep-feeds watch run --interval 600 # every 10 minutes ``` ### systemd 用户单元(推荐) 将以下内容放入 `~/.config/systemd/user/sheep-feeds-watch.service`: ``` [Unit] Description=Sheep Feeds Watch After=network-online.target [Service] Type=simple ExecStart=%h/.local/bin/sheep-feeds watch run --interval 900 Restart=on-failure RestartSec=30s [Install] WantedBy=default.target ``` ``` systemctl --user daemon-reload systemctl --user enable --now sheep-feeds-watch systemctl --user status sheep-feeds-watch journalctl --user -u sheep-feeds-watch -f ``` ### cron 替代方案 ``` */15 * * * * /usr/local/bin/sheep-feeds watch run --once >> ~/.sheep-feeds-cli/watch/cron.log 2>&1 ``` ### 文件位置 | 路径 | 内容 | |---|---| | `~/.sheep-feeds-cli/watch/rules.yml` | 您的规则(权限 0600,可手动编辑)。 | | `~/.sheep-feeds-cli/watch/hits.db` | 每个触发事件的 SQLite 日志(权限 0600)。 | | `~/.sheep-feeds-cli/watch/state.json` | 每个 feed 的游标,确保每个周期只获取新项目。 | watch 目录在首次使用时以权限 0700 创建。 ### 限制和默认值 - 每次安装最多 50 条规则(防止本地代理遭受 DoS 攻击)。 - 每个周期每个 feed 获取 100 个项目。 - 间隔:最小 60 秒,最大 6 小时(默认 900 秒 = 15 分钟)。 - Webhook 超时:10 秒,无重试 — 下一个周期会自然重试尚未确认为命中的项目。 ## 维护 ``` sheep-feeds --about # Product info, links, features sheep-feeds --version # Print the installed version sheep-feeds --init # Create an empty config.ini with mode 0600 sheep-feeds --setup # Re-run the interactive setup wizard sheep-feeds --update # git pull + pip upgrade sheep-feeds --logout # Clear the per-session decrypted-token cache ``` 在不触碰您令牌的情况下完全清除 Watch 状态: ``` rm -rf ~/.sheep-feeds-cli/watch/ ``` `--logout` 仅移除 `/tmp/` 下的每会话缓存。`~/.sheep-feeds-cli/` 下的加密配置文件不受影响;下次调用时会再次要求输入主密码。 ## 可用 feeds | `feed_id` | 内容 | 类别 | |---|---|---| | `cve` | 关键漏洞(NVD) | vulnerabilities | | `ransomware` | 来自泄密网站的勒索软件受害者 | ransomware | | `threat_intel` | APT 报告、恶意软件分析 | threat_intelligence | | `apt_infrastructure` | C2 / 恶意软件基础设施 | infrastructure | | `data_leak` | 数据泄露和转储 | data_breach | | `ics_scada` | ICS/SCADA 公告 | ics | | `kaspersky` | 卡巴斯基 SecureList 文章 | threat_intelligence | | `ioc_stream` | 恶意 IP/URL/哈希的实时流 | iocs | | `rss_news` | 来自供应商 RSS 源的聚合安全新闻 | news | 服务器端是权威来源 — CLI 维护一个本地允许列表以防止输入错误,但如果您传递一个它无法识别的 feed,仍会调用 API。运行 `sheep-feeds list` 获取规范的、服务器端列表。 ## 输出 ### 人类可读(默认) 富文本渲染的表格和面板。自动截断长字段以保持终端可读性。默认限制为 30 个项目;使用 `--limit` 和 `--json` 获取更多。 ### JSON(`--json`) 原始 API 响应,格式化后输出,可直接管道传输到 `jq`、重定向到文件或馈送到下游工具。这是集成模式 — 用于 cron、您的 SOAR / SIEM 或任何管道工具。 ## 退出代码 | 代码 | 含义 | |---|---| | 0 | 成功 | | 1 | API 错误(速率限制、网络、服务器、验证) | | 2 | CLI 用法错误(缺少令牌、参数错误) | | 130 | 被中断(Ctrl-C) | 这些代码是稳定的 — 自动化脚本可以基于它们进行分支。 ## 安全模型 - 令牌永远不会出现在命令行参数中,除非您使用 `--token`(即使如此,也会从任何错误输出中剥离)。 - 服务器字段在渲染前会被清理掉 ASCII 控制字符和富文本标记元字符 — 恶意的 API 响应无法伪造可点击链接或重写您的终端。 - 配置文件权限为 0600;向导拒绝加载权限宽松的配置(会警告您使用 `chmod 600`)。 - 加密令牌使用 PBKDF2-HMAC-SHA256,60万次迭代(OWASP 2023 推荐)和随机的每安装盐。 - 每会话解密令牌缓存(`/tmp/sheep-feeds-cli-sess--`)使用 `O_NOFOLLOW` 以防止符号链接指向预植攻击。 ## 隐私与法律 - **隐私政策:** https://sheep.byfranke.com/pages/privacy.html - **服务条款:** https://sheep.byfranke.com/pages/terms.html - **支持:** support@byfranke.com - **许可证:** byFranke 许可证(见 `LICENSE`)。 ## 路线图 - 面向长生命周期集成的流式模式(Server-Sent Events)。 - OpenIOC / STIX 2.1 / MISP 的输出适配器。 - 针对每个 feed 的、模式感知的输出(为 `cve` 带 CVSS 颜色的表格,为 `ransomware` 带国家旗帜表情符号等)。 问题和功能请求:https://github.com/byfranke/sheep-feeds-cli/issues
标签:API客户端, APT情报, Homebrew安装, ICS/SCADA安全, JSON数据, masscan, meg, SIEM集成, SOAR自动化, 云计算, 信息安全, 勒索软件情报, 威胁情报, 威胁情报平台, 安全运营, 安装脚本, 应用安全, 开发者工具, 情报feed, 扫描框架, 数据摘要, 终端查询, 网络安全, 脚本工具, 自动化监控, 规则引擎, 逆向工具, 隐私保护