Fleet 仪表盘“Vulnerability exposure”图表解析追踪哪些软件、为什么以及位图实现如何保证大规模部署下的渲染性能【免费下载链接】fleetOpen device management项目地址: https://gitcode.com/GitHub_Trending/fl/fleetFleet 仪表盘中的Vulnerability exposure漏洞暴露面图表用于一次性回答“我的多少台主机带着高危CriticalCVE 在跑”这个问题——但它只统计一组精心挑选的高危软件浏览器、Microsoft Office、Adobe、Linux 内核而非设备上安装的全部软件。本文基于 Fleet 仓库的官方文章 dashboard-vulnerability-exposure 展开并结合 图表查询实现 与 图表 API 定义 中的源码说明该图表的软件清单、筛选逻辑、设计取舍覆盖面/风险 与 性能背后的工程原因以及当你要查看清单之外的软件漏洞时该走哪条路径。图表统计范围一个“精选集”而非全量软件Fleet 能够检测漏洞的软件范围远大于该图表所追踪的范围——完整的检测范围见 Vulnerability processing。而 Vulnerability exposure 图表只覆盖以下四类软件类别软件浏览器Google Chrome、Mozilla Firefox、Brave、Safari、OperaMicrosoft OfficeWord、Excel、PowerPoint、Outlook以及独立安装的 OfficeAdobeAcrobat、Flash、Shockwave FlashLinux 内核Debian / Ubuntu 上的linux-image与linux-signed-image包RHEL、Fedora、Amazon Linux 上的kernel-*包这个清单不是靠逐一枚举软件名硬编码的而是用“宽前缀 通配”的方式吸收各种打包变体。从源码 trackedCVESoftwareMatchers 可以看到完整的匹配规则var trackedCVESoftwareMatchers []cveSoftwareMatcher{ // Browsers. {api.CVECategoryBrowsers, Google Chrome%, nil}, {api.CVECategoryBrowsers, Firefox%, nil}, {api.CVECategoryBrowsers, Mozilla Firefox%, nil}, {api.CVECategoryBrowsers, Brave Browser%, nil}, {api.CVECategoryBrowsers, Safari%, []string{apps}}, {api.CVECategoryBrowsers, Opera%, nil}, // Microsoft Office. {api.CVECategoryOffice, Microsoft Word%, nil}, {api.CVECategoryOffice, Microsoft Excel%, nil}, {api.CVECategoryOffice, Microsoft PowerPoint%, nil}, {api.CVECategoryOffice, Microsoft Outlook%, nil}, {api.CVECategoryOffice, Microsoft Office%, nil}, // Adobe. {api.CVECategoryAdobe, Adobe Flash%, nil}, {api.CVECategoryAdobe, Shockwave Flash%, nil}, {api.CVECategoryAdobe, Adobe Acrobat%, nil}, // Linux kernel (OS category). Debian/Ubuntu metapackages are linux-image-* // and linux-signed-image-*; RHEL/Fedora/Amazon Linux are kernel-* {api.CVECategoryOS, linux-image-%, []string{deb_packages}}, {api.CVECategoryOS, linux-signed-image-%, []string{deb_packages}}, {api.CVECategoryOS, kernel-%, []string{rpm_packages}}, }每条规则由三部分组成Category类别键。取值定义在 chart API 中CVECategoryOS os、CVECategoryBrowsers browsers、CVECategoryOffice office、CVECategoryAdobe adobe。类别的作用是在读取时把匹配项按类整体包含/排除。NamePattern对software表做的 MySQLLIKE匹配模式。模式末尾刻意保留%见 charts.go 中的注释“Patterns are deliberately broad (trailing%) so packaging variants … are absorbed without maintenance”因此Chrome Beta/Canary、Firefox ESR/Nightly、内核元包metapackage等变体无需额外配置即可被命中。Sources可选来源白名单空值表示任意来源。两个值得注意的例外Safari 只从apps来源匹配避免误伤同名的非浏览器软件内核匹配项则限定包管理器来源——Debian/Ubuntu 元包限定deb_packagesRHEL 系kernel-*限定rpm_packages。源码注释指出 RHEL 内核包名规则已在 OSV 分析器rhelKernelPackages中经过确认。为什么不是“所有软件”两个设计约束官方文章明确给出了两条决定图表统计范围的约束理解它们有助于判断该图表适合回答什么级别的问题。1. 覆盖面与风险Reach and risk。该图表的定位是一次“快速读取”a single, quick read用最少的数字给出整个机队最糟糕的漏洞暴露面。浏览器、Office 和 Linux 内核是高危 CVE 最容易转化为真实利用的软件同时也是部署面最广的软件Adobe 因同样的理由入选——PDF 与文档处理程序至今仍是常见的攻击立足点。换言之图表回答的是“哪里最容易被打穿”而不是“所有漏洞的普查”。2. 性能Performance。每一个被追踪的 CVE 都以**按主机位图per-host bitmap**的形式存储以保证在大规模部署中仪表盘的渲染速度。因此“把清单扩展到精选集之外”并不是免费的更大的清单意味着更多的存储和查询开销。官方文章同时提到位图压缩bitmap compression与按用户过滤per-user filtering在路线图上这意味着当前的实现假设是单一全局视图 固定精选清单。源码印证位图是如何做到“大机队不卡”的上述性能取舍在 AffectedHostIDsByCVE 的实现中有直接印证// AffectedHostIDsByCVE returns a bitmap of affected host IDs per CVE, scoped // to the given cves set. It streams two joins (software-level and OS-level // vulnerabilities) and merges the results into a single map, setting bits // while scanning so the raw (cve, host_id) rows — millions on a large fleet — // are never materialized. func (ds *Datastore) AffectedHostIDsByCVE(ctx context.Context, disabledFleetIDs []uint, cves []string) (map[string]*roaring.Bitmap, error)实现上有几个关键点两条 JOIN 流式扫描边扫边置位。软件级漏洞查software_cve JOIN host_softwareOS 级漏洞查operating_system_vulnerabilities JOIN host_operating_system见 查询构造扫描过程中直接把主机 ID 作为位写入 roaring bitmap原始(cve, host_id)行——在大机队上是百万级——永远不被物化到内存。跨来源的重复行无害因为Bitmap.Add是幂等的。匹配器清单本身的定位随实现演进而变化。源码注释 说明流式置位之后收集内存不再是瓶颈这份硬编码清单现在的约束对象是JOIN 的规模和每个桶内host_scd_data的行数——即它现在约束的是数据库侧的查询规模而非应用侧的内存。团队fleet级禁用是按需拼接的。只有存在需要排除的团队时子查询才会追加hostsJOIN 与team_id NOT IN (...)过滤没有排除项时保持原有查询计划不变见 条件拼接逻辑这是典型的“常见路径零开销”设计。查看清单之外的软件去哪个页面对于精选集之外的一切——Python、Homebrew、npm、Chocolatey、浏览器扩展、IDE 扩展、完整的操作系统包等——官方文档给出的路径是打开Software Vulnerabilities页面查看完整漏洞数据或在主机列表中按 CVE 过滤filter the host list by CVE按具体 CVE 定位受影响主机。也就是说Vulnerability exposure 图表是“顶层快速读数”而 Software 页面与主机列表过滤器承担的是“下钻与长尾排查”的职责两者是互补关系而非替代关系。小结这个图表适合什么场景结合文档与源码可以把它的使用边界概括为适合在仪表盘上一眼确认“浏览器 / Office / Adobe / Linux 内核这些高危重灾区的 Critical CVE 暴露面有多少台主机”作为日常安全态势的快速读数不适合用它评估长尾软件npm 依赖、Python 包、OS 全量包等的漏洞状况——请走 Software Vulnerabilities 或主机列表的 CVE 过滤实现前提数据以按主机位图存储并由流式 JOIN 计算因此查询开销被限定在“精选清单对应的 JOIN 规模”内位图压缩与按用户过滤尚属路线图能力当前实现面向全局视图。对想深入验证细节的读者建议按以下路径阅读仓库charts.go 中的匹配器清单与位图查询、chart API 的类别常量定义、OSV 分析器中 RHEL 内核包名规则以及配套文章 Vulnerability processingFleet 完整漏洞检测范围与 Vulnerability management按漏洞过滤软件的操作路径。【免费下载链接】fleetOpen device management项目地址: https://gitcode.com/GitHub_Trending/fl/fleet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考