Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
fleet-cve-scanner — 一个开源的单脚本CVE扫描器,用于RMM管理的设备群。纯PowerShell 7 — 将你的RMM软件清单与NVD、CISA KEV、EPSS和SSVC关联,以回答:该版本是否存在漏洞,以及紧急程度如何? | Kitploit
工具/GitHubGitHub/boostedchaos/fleet-cve-scanner
漏洞扫描器漏洞分析配置审计威胁情报事件响应日志分析
GitHubboostedchaos/fleet-cve-scanner

fleet-cve-scanner

一个开源的单脚本CVE扫描器,用于RMM管理的设备群。纯PowerShell 7 — 将你的RMM软件清单与NVD、CISA KEV、EPSS和SSVC关联,以回答:该版本是否存在漏洞,以及紧急程度如何?

查看仓库
1211个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

fleet-cve-scanner

一个轻量开源、单脚本的CVE扫描器,专为RMM管理的设备集群而设计。纯PowerShell 7,无需代理、无需设备、无需许可费用。

对于您管理的每台终端上的每款软件,它只回答一个问题:已安装的版本是否已知存在漏洞,以及紧急程度如何? —— 通过将RMM的软件清单与免费、权威的安全数据源进行关联:

  • NIST NVD —— 已知CVE及受影响的版本范围
  • CISA KEV —— 实际在野外被利用(绕过评分阈值)
  • EPSS —— 未来30天内被利用的概率
  • CISA SSVC —— 操作/关注/跟踪优先级决策
  • MSRC —— 证明微软补丁已覆盖该发现
  • endoflife.date —— 将不会再收到补丁的软件

输出:每设备的CSV报告、带SLA时钟和逐周变化事件的SQLite历史记录、自包含的HTML Dashboard,以及可选的Markdown暴露报告。

状态

v1.0.0。 引擎已从曾在生产环境中针对Windows设备集群每周运行的扫描器以干净室方式移植(参见 docs/HISTORY.md)。在此版本发布之前,两者针对同一生产设备集群运行并逐行比较:在数万个两者都看到相同(设备, 软件, 版本)的发现中,所有计算字段——状态、CVSS、严重性、KEV标志、SSVC决策、修复版本——完全一致。

该比较覆盖了判定逻辑。它并未测试历史/SLA层,也不能替代在您自己的环境中验证该工具。在信任它之前,请阅读 docs/known-limitations.md —— 它诚实而非奉承。

快速开始

您需要 PowerShell 7(pwsh)。有两种运行方式:

A. 实时 NinjaOne 扫描

root@kitploit:~
cp config.example.json config.json
# 编辑 config.json:填写 ninjaone.client_id / client_secret / base_url,
# 设置 output.report_dir,并(推荐)nvd.api_key
pwsh -File fleet-cve-scan.ps1

B. 离线模式 —— 任意RMM、SCCM或Intune(无需API访问)

将您的清单导出为包含列 hostname, software, version(可选 device_id, os)的CSV,然后:

root@kitploit:~
cp config.example.json config.json   # 此处只需 output.report_dir
pwsh -File fleet-cve-scan.ps1 -InputCsv inventory.csv

-InputCsv 使得零次 NinjaOne 调用 —— 无OAuth、无API。它仍会查询NVD和其他公共数据源,因此您仍需在 config.json 中提供 nvd.api_key 和有效的 output.report_dir。有关输入合同和针对不同RMM的导出方法,请参见 docs/rmm-adapters.md。

安装先决条件

  • PowerShell 7 —— macOS: brew install powershell;Windows: winget install Microsoft.PowerShell;Debian/Ubuntu: 从Microsoft包仓库安装(packages.microsoft.com)。
  • sqlite3(可选,支持历史/趋势)—— macOS: 预装或 brew install sqlite;Debian/Ubuntu: apt-get install sqlite3;Windows: 从sqlite.org下载SQLite “tools” 包,并将 sqlite3.exe 放在 PATH 或脚本旁边。没有它扫描仍会运行;first_seen 将回退为运行日期。

要求

  • PowerShell 7(推荐7.4+)。并行扫描需要7.0+。
  • sqlite3 —— 可选;启用历史数据库、趋势和SLA的 first_seen 跟踪。缺失 = 这些功能跳过,扫描仍完成。
  • 网络出站 至 NVD、CISA (KEV)、epss.empiricalsecurity.com(EPSS批量评分主机——FIRST已将EPSS数据托管移至此处)、MSRC、endoflife.date和GitHub原始内容(CVE Program cvelistV5)——此外在实时模式下还需访问NinjaOne API。
  • 凭据 —— 实时模式需要NinjaOne OAuth2客户端ID/密钥;离线模式仅需一份清单CSV。NVD API密钥在技术上可选,但在设备集群规模下实际上必需:NVD允许有密钥时每30秒50次请求,无密钥时仅5次/30秒。扫描器会检测您使用的是哪种并相应地节流,因此无密钥的运行是正确的但大约慢10倍——对少量产品尚可,对真实设备集群不切实际。 密钥免费申请。

配置参考

配置是一个JSON文件(默认位于脚本旁边的 config.json;可用 -ConfigPath 覆盖)。从 config.example.json 开始。扫描器读取的每个键、省略时的默认值以及作用说明:

ninjaone(实时模式)

nvd

键默认值用途
nvd.api_key""NVD API密钥,作为 apiKey 头发送。留空表示未认证,这会将默认的 nvd_rate_limit 和 nvd_min_spacing_ms 降至NVD的匿名上限(4/30s、6500ms),而不是认证后的上限(48/30s、700ms)。免费,且快约10倍。

扫描与评分

缓存与速率限制

nvd_min_spacing_ms、nvd_rate_limit 和 parallel_throttle 会被扫描器读取,但未出现在 config.example.json 中 —— 仅当需要调整时才添加它们。参见 docs/rate-limiting.md。

丰富化与SLA

output

输出

以下所有内容均放置在 output.report_dir 中。

  • vuln-report-YYYY-MM-DD.csv —— 逐发现项的报告。共28列(模式见下文)。
  • vuln-history.db —— SQLite历史数据库(需要 sqlite3):runs(每次运行的汇总)、findings(按 (device, software, cve) 的开放发现项历史,包含 first_seen / last_seen / resolved_date / epss_score),以及 changes(带类型的逐周变化事件)。
  • cve-dashboard.html —— 自包含的HTML Dashboard(图表库内联,无外部请求)。可选复制到 output.dashboard_share。
  • eol-report-YYYY-MM-DD.csv —— 当检测到已终止支持的产品系列时写入。

CSV 模式(28列)

列集是固定的,并通过发布门禁进行强制。按顺序:

调度

Run-WeeklyScan.ps1 是用于计划运行的封装脚本:它从自身目录运行扫描器,将所有输出流捕获到 <脚本目录>/logs/ 下的带日期的日志中(可用 -LogDir 覆盖),并传递扫描器的退出码,以便调度器看到失败。

Windows 任务计划程序:

root@kitploit:~
schtasks /Create /TN "CVE-Scan-Weekly" ^
  /TR "pwsh -NoProfile -File C:\path\to\Run-WeeklyScan.ps1" ^
  /SC WEEKLY /D SUN /ST 22:00 /RU SYSTEM

cron(Linux/macOS):

root@kitploit:~
0 22 * * 0  pwsh -File /path/to/Run-WeeklyScan.ps1

Dashboard 托管

cve-dashboard.html 完全自包含——直接打开它,放到任何静态主机或文件共享上,或通过 output.dashboard_share 在每次运行时自动复制。对于需要访问控制的主机,dashboard-auth/ 目录提供了一个最小的ASP.NET主机,集成Microsoft Entra(Azure AD)认证;详见其 README 和 RUNBOOK。

诚实的局限性(在信任之前请阅读)

  • CPE匹配本质上是模糊的。 典型清单中有40–60%没有NVD条目而被跳过(已记录日志,绝不静默)。基于名称的CPE选择可能选错产品;之所以存在抑制工作流,是因为必须如此。这是免费NVD方法的天花板——具有精选检测目录的付费扫描器会更准确。该工具的价值在于免费、透明和可审计。
  • UNKNOWN(未知)是一等的判决结果。 当扫描器无法证明有漏洞或已修补时,它会如实声明而不是猜测。
  • 仅针对 NinjaOne 验证过。 扫描引擎与RMM无关(输入仅为设备+软件+版本);-InputCsv 模式允许任何RMM/SCCM/Intune导出来提供数据,但只有NinjaOne适配器在生产中运行过。

完整的、不加粉饰的清单——CPE跳过率、去重键掩码、第一页 totalResults、MSRC取代漏洞、以及更多——在 docs/known-limitations.md 中。

设计说明

一些看似非常规的结构性选择是有意为之的:

  • 单文件,而非模块。 扫描热路径在 ForEach-Object -Parallel 内部运行,而这些运行空间无法看到外部作用域的函数——这就是为什么在并行块内有意重复了少数辅助函数。按函数拆分的模块布局并不会消除这种重复(并行主体仍然需要在每个运行空间中注入源码);它只会增加一个构建步骤并破坏“复制一个文件即可部署”的模式。如果项目将来超出单文件范围,打包将是v2形状的变更,而不是补丁。
  • [PSCustomObject] 记录,而非类。 发现记录在并行运行空间内产生,然后封送回主运行空间。PowerShell 类实例无法可靠地穿越该边界;[PSCustomObject] 可以,并且CSV列合同通过发布门禁而非类型系统来强制。
  • 纯PS7测试脚本,而非Pester。 tests/ 中的套件是无依赖的脚本,带有退出码断言,可在任何有 pwsh 的地方运行——包括扫描服务器——无需安装任何东西。CI在Windows和Ubuntu上运行所有这些脚本。

文档

  • docs/how-it-works.md —— 扫描管道的逐阶段说明、判定逻辑、缓存纪律以及故障降级合同。
  • docs/known-limitations.md —— 扫描器可能出错的每种已知方式及其原因。
  • docs/rate-limiting.md —— 作为操作指南和调整表的NVD速率限制经验。
  • docs/rmm-adapters.md —— 输入合同、两个内置清单路径以及如何添加原生适配器。
  • docs/HISTORY.md —— 压缩、消毒的版本历史以及每个版本背后的工程经验教训。

贡献

欢迎PR——尤其是RMM适配器。参见 CONTRIBUTING.md 了解基本规则和安全方向要求(状态逻辑只能朝着 更多 可见性方向出错,绝不能无声地朝向 PATCHED)。

数据源与归属

该工具的有效性依赖于它所关联的免费、权威数据源。每次扫描都会查询以下每个来源;如果您在此基础上构建,请尊重它们的条款。

  • NIST National Vulnerability Database (NVD) —— 通过NVD API提供的CVE记录和受影响的版本范围。本产品使用NVD API,但未经NVD认可或认证。https://nvd.nist.gov/
  • CISA Known Exploited Vulnerabilities (KEV) Catalog —— 已知在野外被利用的CVE的权威目录。https://www.cisa.gov/known-exploited-vulnerabilities-catalog
  • CVE Program — cvelistV5 —— CVE记录以及CISA ADP贡献的SSVC / vulnrichment数据。CVE® 是 MITRE Corporation 的注册商标。https://github.com/CVEProject/cvelistV5
  • SSVC (Stakeholder-Specific Vulnerability Categorization) —— 本工具中的操作/关注/跟踪决策逻辑源自CERT/CC SSVC(卡内基梅隆大学软件工程研究所)和CISA SSVC协调员决策树,版本2.0.3。需注明CERT/CC和CISA。https://www.cisa.gov/ssvc · https://github.com/CERTCC/SSVC
  • FIRST.org EPSS (Exploit Prediction Scoring System) —— 未来30天内被利用的概率。EPSS数据由FIRST提供。参见 Jay Jacobs、Sasha Romanosky、Benjamin Edwards、Michael Roytman、Idris Adjerid(2021),《Exploit Prediction Scoring System》, Digital Threats: Research and Practice, 2(3)。https://www.first.org/epss/
  • Microsoft Security Response Center (MSRC) —— CVRF API,用于确认Microsoft安全更新是否已覆盖某个发现。© Microsoft Corporation。https://api.msrc.microsoft.com/ · https://msrc.microsoft.com/
  • endoflife.date —— 将永远不会再收到补丁的软件的生命周期终止和支持终止日期。数据由 endoflife.date 项目提供。https://endoflife.date/

许可

Apache-2.0 —— 参见 LICENSE。

下载工具
键默认值用途
ninjaone.client_id""NinjaOne API OAuth2 客户端ID。实时扫描必需;使用 -InputCsv 时留空。
ninjaone.client_secret""NinjaOne API OAuth2 客户端密钥。
ninjaone.base_url—(示例中自带 https://app.ninjarmm.com)NinjaOne API 基础URL;实时扫描必需,无内建回退。使用您所在区域的主机(例如 eu.ninjarmm.com、oc.ninjarmm.com)。
键默认值用途
cvss_threshold7.0用于报告为 VULNERABLE(有漏洞)的CVE的最低CVSS基本评分。KEV列表中的CVE绕过此下限。
ssvc_mission_prevalencehighSSVC 任务普遍性利益相关方输入(low / medium / high)。
ssvc_public_wellbeinghighSSVC 公共福祉利益相关方输入(low / medium / high)。
键默认值用途
nvd_cache_ttl_days7NVD结果(按软件名称)在重新查询前缓存的天数。
nvd_cache_flush_every500每完成 N 项时将NVD缓存检查点到磁盘,以便被终止的扫描保留已获取的数据。0 禁用(扫描结束时保存仍会运行)。
nvd_min_spacing_ms有API密钥时为 700,无密钥时为 6500NVD调用之间的最小毫秒数。绑定速率约束——优先调整此值。
nvd_rate_limit有API密钥时为 48,无密钥时为 4每30秒内NVD调用的滑动窗口上限(后盾)。最小值为1。
parallel_throttle20ForEach-Object -Parallel 的运行空间数量。NVD调用无论如何都是序列化的;此值仅限制缓存命中的并发性。最小值为1。
kev_cache_ttl_hours24缓存的CISA KEV目录的TTL。
epss_cache_ttl_hours24缓存的FIRST.org EPSS评分文件的TTL。
eol_cache_ttl_days7缓存的endoflife.date查询的TTL。
msrc_cache_ttl_days30缓存的MSRC CVRF数据的TTL。
cvelist_cache_ttl_days7缓存的CVE Program (cvelistV5) / CISA-ADP SSVC数据的TTL。
cvelist_fetch_budget300每次运行中用于SSVC/vulnrichment丰富化的最大CVE记录获取次数;其余推迟到下次运行。
键默认值用途
epss_spike_threshold0.10两次扫描间发现项的EPSS评分最小上升值,用于触发 EPSS_SPIKE 变化事件。
sla_days_critical14CRITICAL(严重)发现项的SLA窗口(从 first_seen 起的天数)。
sla_days_high30其他有评分严重性的发现项的SLA窗口。
denied_software_csv""可选的拒绝软件CSV交叉检查路径。留空则禁用该检查。
键默认值用途
output.report_dir(必需)所有输出的目录——CSV、历史数据库、Dashboard和缓存。
output.wiki_security_page""可选的Markdown暴露页面路径。仅当设置时才会写入。
output.dashboard_share""可选路径/共享位置,每次运行时会复制一份Dashboard到此处。留空为仅本地。
  • denied-report-YYYY-MM-DD.csv —— 当配置了 denied_software_csv 且匹配时写入。
  • 缓存文件 —— nvd-cache.json、kev-cache.json、epss-cache.json、eol-cache.json、msrc-cache.json、cvelist-cache.json(均已列入 gitignore)。
  • Markdown 暴露页面 —— 位于 output.wiki_security_page,仅在设置时生成。
  • #列名含义
    1device_idRMM设备ID(或 -InputCsv 模式下的确定性合成ID)。
    2hostname设备主机名。
    3os操作系统字符串(可能为空)。
    4software清单中的产品名称。
    5installed_version清单中的版本字符串。
    6cve_idCVE标识符。
    7cvss_scoreCVSS基本评分(若无法则填 0)。
    8severityCVSS严重性标签。
    9cvss_version产生评分的CVSS标准版本(4.0/3.1/3.0/2.0/空)。
    10epss_scoreFIRST.org EPSS概率(若该CVE不在目录中则为空)。
    11epss_percentileEPSS百分位数(若不在目录中则为空)。
    12ssvc_exploitation原始CISA SSVC利用选项(none/poc/active;无ADP数据则为空)。
    13ssvc_decisionSSVC决策 Act/Attend/Track(无ADP数据则为空)。
    14statusVULNERABLE(有漏洞) / PATCHED(已修补) / UNKNOWN(未知)。
    15published_dateCVE发布日期。
    16unknown_reason行状态为 UNKNOWN 的原因(SUSPECT_VERSION / NO_VERSION_BOUND / VERSION_PARSE_ERROR;否则为空)。
    17is_kev当CVE在CISA KEV目录中时为 True。
    18kev_due_dateCISA KEV 修复截止日期。
    19kev_ransomware_useKEV 勒索软件活动使用标志。
    20fix_version计算出的修复边界版本。
    21fix_boundary_inclusive修复边界是否包含在内。
    22advisory_url厂商公告或NVD详情URL。
    23patch_evidence当微软的 UNKNOWN 被翻转为 PATCHED 时的证据。
    24triage_status来自 triage.json 的分诊处置(若无则为空)。
    25triage_note分诊备注。
    26first_seen发现项首次被观察到的时间(来自历史数据库)。
    27sla_dueSLA截止日期。
    28sla_breachSLA是否已违反。