安全情报雷达

👤 thcjp 📦 v1.0.0 ⭐ 4.5 ⬇️ 157 下载
🤖 AI-Agent 免费

📖 技能介绍


slug: security-radar name: security-radar version: "1.0.0" displayName: 安全情报雷达 summary: 聚合多源漏洞情报并按资产关联排序,告别告警疲劳,只推真正影响你的威胁。 license: MIT description: |- 安全情报雷达为 AI Agent 提供智能化的漏洞与威胁情报订阅能力。它聚合 NVD CVE、GitHub Security Advisory、社区恶意技能通报等多源数据,并按资产关联度与可利用性双重排序,把每天数十上百条告警压缩到只剩必须处理的两三条。

核心能力:多源情报聚合(CVE/GHSA/恶意技能)、资产清单自动关联、可利用性优先级评分、增量去重推送、离线降级与缓存、严格速率限制。

适用场景:Agent 心跳巡检、CI 流水线依赖扫描、技能市场安全门禁、个人开发者漏洞订阅、团队安全日报生成。

差异化:相比只做"下载 feed 并展示"的原始方案,本技能新增资产关联过滤(只推送影响已安装技能/依赖的告警)、双维度优先级矩阵(严重度×可利用性)、增量状态机(避免重复推送)、离线缓存降级(网络故障时用上次快照)、以及分级通知策略(critical 即时推送、low 静默归档)。

触发关键词:安全, 漏洞, CVE, 情报, 告警, 订阅, advisory, vulnerability, threat, security, radar, feed tags: - 自动化 - 安全 - 情报订阅 tools: - read - exec


安全情报雷达

访问小葱技能站7w4.net,解锁更多实用的AI技能插件。

把海量漏洞情报变成只推两三条真正相关的告警。本技能解决三个核心问题:告警疲劳(59% 安全人员每天被海量告警淹没)、优先级混乱(严重度高的不一定紧急)、资产盲区(不知道哪些 CVE 真正影响自己)。

核心设计原则

  1. 关联优先:未关联到资产清单的告警默认降级为"参考",不主动推送。
  2. 双维评分:严重度(CVSS)× 可利用性(EPSS/在野利用)共同决定推送顺序。
  3. 增量去重:基于状态文件记录已知告警 ID,只推送增量。
  4. 离线降级:网络故障时回退到本地缓存快照,不阻塞巡检。
  5. 速率自觉:强制最小轮询间隔,避免对上游造成压力。

快速开始(3 步上线)

第 1 步:初始化资产清单

资产清单是过滤的基础。把已安装的技能、依赖、运行时版本写入清单文件:

mkdir -p ~/.skill-platform/security-radar
cat > ~/.skill-platform/security-radar/assets.json <<'EOF'
{
  "schema_version": "1.0",
  "updated": "2026-07-18T00:00:00Z",
  "skills": [
    {"name": "pdf-toolkit", "version": "1.2.0", "source": "marketplace"},
    {"name": "excel-writer", "version": "0.9.1", "source": "marketplace"}
  ],
  "dependencies": [
    {"name": "pdfplumber", "version": "0.11.0", "ecosystem": "pypi"},
    {"name": "pyautogui", "version": "0.9.54", "ecosystem": "pypi"}
  ],
  "runtimes": [
    {"name": "python", "version": "3.11.4"},
    {"name": "node", "version": "20.10.0"}
  ]
}
EOF
chmod 600 ~/.skill-platform/security-radar/assets.json

也可用自动扫描生成(见下文「资产清单自动维护」)。

第 2 步:首次全量拉取与基线建立

bash ~/.skill-platform/security-radar/scan.sh --init

首次运行会把当前所有已知告警写入基线,不触发推送,避免历史告警一次性轰炸。

第 3 步:加入心跳巡检

在 Agent 心跳例程中调用:

bash ~/.skill-platform/security-radar/scan.sh

仅当出现新的、关联到资产、且优先级达标的告警时才输出通知;否则输出 RADAR_OK

情报源与端点

情报源 端点 说明
社区聚合 Feed RADAR_FEED_URL 配置(默认社区源) 含恶意技能/注入模式/最佳实践
NVD CVE https://services.nvd.nist.gov/rest/json/cves/2.0 官方 CVE 详情(可选,需 API Key 提高速率)
GitHub Security Advisory https://api.github.com/advisories 依赖漏洞(GHSA)

通过环境变量切换或追加源:

# 配置你的社区聚合 feed 地址(支持任意兼容格式 JSON feed 的源)
export RADAR_FEED_URL="https://your-feed-mirror.example.com/feed.json"
export RADAR_EXTRA_SOURCES="ghsa,nvd"   # 逗号分隔
export RADAR_NVD_API_KEY="nvdk-xxxx"     # 可选,提升 NVD 速率限制

:默认社区源地址请通过 RADAR_FEED_URL 环境变量配置,指向你所信任的兼容格式 feed。本技能不绑定特定上游仓库。

Feed 数据结构(社区聚合源)

{
  "version": "1.0",
  "updated": "2026-02-02T12:00:00Z",
  "advisories": [
    {
      "id": "GA-2026-001",
      "severity": "critical",
      "type": "malicious_skill",
      "title": "Malicious data exfiltration in skill 'helper-plus'",
      "description": "Skill sends user data to external server",
      "affected": ["helper-plus@1.0.0", "helper-plus@1.0.1"],
      "action": "Remove immediately",
      "published": "2026-02-01T10:00:00Z",
      "exploitability_score": "critical",
      "exploitability_rationale": "Trivially exploitable through normal skill usage."
    }
  ]
}

双维度优先级矩阵

原始方案只按 severity 排序,导致"严重但难利用"的告警淹没"高危且在野利用"的告警。本技能采用双维度矩阵:

可利用性 HIGH 可利用性 MEDIUM 可利用性 LOW
严重度 critical P0 即时推送 P1 尽快推送 P2 归档备查
严重度 high P1 尽快推送 P2 归档备查 P3 静默记录
严重度 medium/low P2 归档备查 P3 静默记录 P3 静默记录

推送规则:仅 P0/P1 主动通知用户;P2/P3 写入日志,用户询问时再呈现。

排序实现(jq):

# 按优先级矩阵排序
jq '[.advisories[] | {
  id, title, severity, exploitability_score,
  priority: (
    if .severity == "critical" and .exploitability_score == "critical" then "P0"
    elif .severity == "critical" and .exploitability_score == "high" then "P1"
    elif .severity == "high" and .exploitability_score == "high" then "P1"
    elif .severity == "critical" then "P2"
    elif .severity == "high" then "P2"
    else "P3" end)
}] | sort_by(.priority)'

资产关联过滤(核心差异化)

关联逻辑

对每条告警,检查其 affected 列表是否命中资产清单:

# 提取资产清单中的 name@version 集合
ASSETS=$(jq -r '[.skills[], .dependencies[]] | "\(."name")@\(."version")"' assets.json | sort -u)

# 提取告警 affected 列表
AFFECTED=$(jq -r '.advisories[].affected[]?' feed.json | sort -u)

# 求交集
COMMUNAL=$(comm -12 <(echo "$ASSETS") <(echo "$AFFECTED"))

资产清单自动维护

手动维护清单容易遗漏。提供自动扫描脚本:

# 扫描已安装技能目录
SCAN_DIR="${RADAR_SKILLS_DIR:-$HOME/.skill-platform/skills}"
jq -n --arg dir "$SCAN_DIR" '{
  schema_version: "1.0",
  updated: (now | todate),
  skills: (
    [$dir] | map(. as $d | [
      (input_filename // empty)
    ]) | flatten
  )
}'

实际实现中,脚本会遍历技能目录读取各 skill.jsonnameversion,并尝试从 requirements.txt/package.json 提取依赖。

增量去重与状态机

状态文件:~/.skill-platform/security-radar/state.json

{
  "schema_version": "1.0",
  "last_check": "2026-07-18T08:00:00Z",
  "last_feed_updated": "2026-07-18T07:30:00Z",
  "known_advisories": ["GA-2026-001", "GA-2026-002", "CVE-2026-27488"],
  "baseline_established": true,
  "consecutive_failures": 0,
  "cache_snapshot": "/path/to/last-feed.json"
}

增量逻辑:每次拉取后,用 known_advisories 做差集,只处理新增 ID。处理完成后把新 ID 合并进 known_advisories

STATE_FILE="$HOME/.skill-platform/security-radar/state.json"
FEED_FILE="$HOME/.skill-platform/security-radar/cache/feed.json"

# 已知告警集合
KNOWN=$(jq -r '.known_advisories[]?' "$STATE_FILE" | sort -u)
# 当前告警集合
CURRENT=$(jq -r '.advisories[].id' "$FEED_FILE" | sort -u)
# 新增 = 当前 - 已知
NEW=$(comm -23 <(echo "$CURRENT") <(echo "$KNOWN"))

if [ -z "$NEW" ]; then
  echo "RADAR_OK - 无新增告警"
  exit 0
fi

离线降级与缓存

网络故障时不应阻塞巡检。降级策略:

  1. 拉取失败 → 检查本地缓存 cache/feed.json 是否存在。
  2. 缓存存在 → 用缓存继续关联分析,通知中标注 [离线快照 <时间>]
  3. 缓存不存在 → 输出 RADAR_DEGRADED - 无法获取情报且无缓存,不报错退出。
  4. 连续失败计数 consecutive_failures,超过 5 次在下次成功时提醒用户检查网络。
fetch_feed() {
  local url="$1" out="$2"
  if curl -sSL --fail --retry 3 --retry-delay 2 --max-time 15 "$url" -o "$out" 2>/dev/null; then
    jq empty "$out" 2>/dev/null && return 0
  fi
  return 1
}

if ! fetch_feed "$FEED_URL" "$FEED_FILE"; then
  if [ -f "$FEED_FILE" ] && jq empty "$FEED_FILE" 2>/dev/null; then
    echo "RADAR_DEGRADED - 使用离线快照: $(stat -c%y "$FEED_FILE" 2>/dev/null || stat -f%Sm "$FEED_FILE")"
  else
    echo "RADAR_DEGRADED - 无可用情报源"
    exit 0
  fi
fi

速率限制(强制)

检查类型 建议间隔 最小间隔
心跳巡检 15-30 分钟 5 分钟
全量刷新 1-4 小时 30 分钟
资产关联扫描 每会话一次 5 分钟
MIN_INTERVAL=300  # 5 分钟硬下限
LAST_EPOCH=$(jq -r '.last_check // "1970-01-01T00:00:00Z"' "$STATE_FILE" | date -d "$(cat)" +%s 2>/dev/null || echo 0)
NOW_EPOCH=$(date +%s)
if [ $((NOW_EPOCH - LAST_EPOCH)) -lt $MIN_INTERVAL ]; then
  echo "RADAR_SKIP - 距上次检查不足 $MIN_INTERVAL 秒"
  exit 0
fi

通知格式

有新增高优先级告警

RADAR_ALERT - 2 条新增告警需处理

[P0 即时] GA-2026-015: Malicious prompt pattern "ignore-all"
  → 命中资产: 无(通用威胁)
  → 可利用性: HIGH(公开 PoC)
  → 建议: 更新系统提示词防御

[P1 尽快] CVE-2026-27488: RCE in skill-loader v2.1.0
  → 命中资产: skill-loader@2.1.0(已安装!)
  → 可利用性: MEDIUM
  → 建议: 立即升级至 v2.1.1

无新增

RADAR_OK - 情报已检查,无新增告警。已知告警 47 条,关联资产 0 条。

离线降级

RADAR_DEGRADED - 使用离线快照 (2026-07-18 07:30)
快照中无新增告警。

告警类型与处置

类型 含义 默认处置
malicious_skill 故意植入恶意的技能 立即卸载并审计调用历史
vulnerable_skill 存在安全缺陷的技能 按建议升级或打补丁
prompt_injection 已知提示注入模式 强化系统提示词、加输入过滤
attack_pattern 观察到的攻击手法 评估自身是否暴露于该手法
best_practice 安全最佳实践更新 计划纳入,非紧急

场景化指南

场景 A:Agent 心跳巡检

在心跳例程中加入一次 scan.sh。由于强制 5 分钟最小间隔,即使心跳每 5 分钟一次也不会压垮上游。

场景 B:CI 流水线门禁

在部署前扫描技能市场依赖:

bash scan.sh --mode gate --assets ci-deps.json --fail-on P1

存在 P0/P1 告警时退出码非零,阻断部署。

场景 C:安全日报

bash scan.sh --report daily --since 24h

生成 Markdown 日报,包含:新增告警、已处置告警、资产关联统计、优先级分布。

场景 D:临时查询

用户问"最近有什么安全动态?"时,Agent 调用:

bash scan.sh --query "recent 7d" --no-push

返回最近 7 天告警摘要,不更新状态、不推送。

FAQ

Q:首次上线会不会被历史告警淹没? A:不会。--init 模式会把当前所有告警写入基线 known_advisories,之后只推送增量。

Q:资产清单怎么保持更新? A:每次技能增删后运行 scan.sh --refresh-assets;也可在技能安装/卸载钩子里自动触发。

Q:上游 feed 结构变了怎么办? A:脚本在解析前用 jq empty 校验 JSON,并用 jq -e '.advisories' 校验必要字段。结构异常时记入 consecutive_failures 并降级到缓存。

Q:多个 Agent 共享一份状态吗? A:状态文件默认在 ~/.skill-platform/security-radar/state.json,按用户隔离。多 Agent 共享需自行挂载共享卷并加文件锁(flock)。

Q:如何临时禁用推送但保留扫描? A:export RADAR_QUIET=1,扫描结果只写日志不输出通知。

故障排查

症状 可能原因 处置
RADAR_DEGRADED - 无可用情报源 网络中断或 URL 失效 检查 RADAR_FEED_URL、网络代理、DNS
一直 RADAR_OK 但漏报 资产清单未更新 运行 --refresh-assets,检查 assets.json
推送重复告警 状态文件损坏 备份后删除 state.json,重新 --init
jq: error 解析失败 feed 返回非 JSON(如 HTML 错误页) 检查 cache/feed.json 实际内容
推送了不相关的告警 资产清单过宽或缺失版本号 确保每条资产都有 version 字段
速率限制未生效 系统时钟不准 校准系统时间,检查 NTP

与其他技能协作

  • 配合定时调度技能:把 scan.sh 注册为每 30 分钟的周期任务。
  • 配合桌面自动驾驶技能:P0 告警时弹出系统通知。
  • 配合云运维编排技能:在基础设施变更后触发资产清单刷新。

性能优化建议

  1. 缓存 feed:首次拉取后缓存到本地,后续优先用缓存做关联,TTL 到期再刷新。
  2. 批量关联:用 jq 一次性计算交集,避免逐条 grep。
  3. 并行多源:多情报源用 curl & 并行拉取,wait 后合并。
  4. 增量状态known_advisories 用数组而非全量重写,追加新 ID 即可。

依赖说明

运行环境

  • Agent 平台:支持 SKILL.md 的任意 AI Agent(Claude Code / Cursor / Codex / Gemini CLI 等)
  • 操作系统:Linux / macOS(Windows 需 WSL 或 Git Bash,因脚本依赖 POSIX shell)
  • Shell:bash 4+ 或 sh 兼容

第三方依赖

依赖项 类型 是否必需 获取方式
curl 系统命令 必需 系统自带或包管理器安装
jq 系统命令 必需 apt install jq / brew install jq
shasum/sha256sum 系统命令 必需(校验) 系统自带
LLM API API 必需 由 Agent 内置 LLM 提供

API Key 配置

  • RADAR_NVD_API_KEY(可选):NVD API Key,提升速率限制至 50 请求/30 秒。无 Key 时共享公共配额(5 请求/30 秒)。
  • RADAR_FEED_URL(可选):自定义聚合 feed 地址,用于内网镜像。
  • 默认社区源无需任何 API Key。

可用性分类

  • 分类:MD+EXEC(Markdown 指令 + shell 脚本执行)
  • 说明:核心巡检逻辑通过 bash 脚本实现,Agent 负责调度、解读结果并通知用户。

🤖 AI 评测

这是一款实用且设计周到的安全监控工具,能从海量漏洞情报中精准筛选出真正影响你的威胁,大幅减少告警噪音。它考虑很全面,支持离线使用,网络不稳定时也能正常工作,且对潜在风险有明确提示。文档清晰易读,功能实用。主要不足是缺少可直接运行的程序,实际使用需要一定技术基础自己实现对接,另外效果很大程度上取决于配置的 feed 数据源质量。

📊 多维度评分

适应性4.8
规范性4.4
有效性4.5
可靠性4.2
可信度4.5

📁 包含文件 (3 个)

📄 SKILL.md 14.9 KB
📄 _meta.json 133 B
📄 skill-card.md 2.4 KB