cdx-hbom (英语)
cdx-hbom 是一个小型的,无依赖的硬件单 材料(HBOM)收集器,用于CirponDX BOM工具.
它目前支持以下OS主机:
darwin/arm64(苹果硅麦克斯)linux/amd64linux/arm64win32/amd64win32/arm64
安装
无
npm install @cdxgen/cdx-hbom
日 尔
npx jsr add @cdxgen/cdx-hbom
国 际
为当前主机创建硬件目录 :
npx @cdxgen/cdx-hbom --pretty > host-hbom.json
共同选项 :
--pretty漂亮地打印 JSON 输出--dry-run块命令执行和跟踪计划收集活动--platform <value>覆盖平台检测--arch <value>覆盖架构检测--sensitive包含原始标识符而不是被编辑的默认--no-command-enrichment禁用基于命令的可选浓缩( Linux 命令; 在 macOS 上, 每个界面ifconfig财务报告和审定财务报表pmset调用被跳过;仅在 Windows 上windows-cim-platform批量运行)--privileged收集需要提高权利的源。 在Linux上,它使特权浓缩和明确的非互动sudo -n重试选择使用的文件权限敏感命令( 目前)drm_info) (中文(简体) ). 在视窗上,它添加windows-cim-privileged(TPM、BitLocker、存储可靠性计数器、,Confirm-SecureBootUEFI)),只有管理员才能读取;cdx-hbom从不提升自身,因此从提升的会话运行到获取数据并期望permission-denied其他诊断--plist-enrichment允许额外的基于达尔文列表的浓缩--strict在浓缩失败时不返回部分结果--spec-version <value>发布 CircleDX 版本 :1.7(违约)或2.0。在 旋风DX 2.0 输出--timeout <ms>设定每个命令的超时
实例:
npx @cdxgen/cdx-hbom --pretty
npx @cdxgen/cdx-hbom --privileged --pretty > host-hbom.json
npx @cdxgen/cdx-hbom --plist-enrichment --pretty > mac-hbom.json
npx @cdxgen/cdx-hbom --spec-version 2.0 --pretty > host-hbom-2.0.json
图书馆使用情况
import {
collectHardware,
createCollectorTrace,
buildHardwareFromSources,
getCollectorTrace,
getCommandPlan,
} from "@cdxgen/cdx-hbom";
const trace = createCollectorTrace();
const bom = await collectHardware({
dryRun: true,
includePlistEnrichment: true,
trace,
});
const collectedTrace = getCollectorTrace(bom) ?? trace;
console.log(collectedTrace.activities);
const plan = getCommandPlan({ platform: "linux", architecture: "amd64" });
// Some plan entries are templates; their final arguments are resolved per
// device or interface at runtime when live collection expands the plan.
const rebuilt = buildHardwareFromSources({
platform: "linux",
architecture: "amd64",
sources: {
osRelease: { NAME: "Ubuntu", VERSION_ID: "24.04" },
cpuInfo: [{ processor: "0", "model name": "AMD Ryzen 7" }],
},
});
从库读取命令诊断
cdx-hbom 保持JSON对BOM本身的输出,并在所附的采集器追踪和BOM证据属性中记录可选指令问题.
import {
collectHardware,
createCollectorTrace,
getCollectorTrace,
} from "@cdxgen/cdx-hbom";
const trace = createCollectorTrace();
const bom = await collectHardware({
platform: "linux",
architecture: "amd64",
includeCommandEnrichment: true,
includePrivilegedEnrichment: true,
allowPartial: true,
trace,
});
const collectedTrace = getCollectorTrace(bom) ?? trace;
const commandDiagnostics = collectedTrace.activities.filter(
(entry) =>
entry.kind === "command-diagnostic" || entry.kind === "command-warning",
);
for (const entry of commandDiagnostics) {
if (entry.issue === "missing-command") {
console.error(
`Install hint for ${entry.command}: ${entry.hint ?? "see package docs"}`,
);
}
if (entry.issue === "permission-denied") {
console.error(
`Privilege hint for ${entry.command}: ${entry.hint ?? "retry with --privileged"}`,
);
}
}
也可以通过检查从 BOM 根读取序列化命令诊断 cdx:hbom:evidence:commandDiagnostic* 属性.
旋风DX 2.0 输出
collectHardware({ specVersion: "2.0" }) 财务报告和审定财务报表 --spec-version 2.0 发射
旋风DX 2.0草案(CycloneDX/规格2.0-dev at
ea8c3605829d1da13339a0790b6da73548e42a6b) (中文(简体) ). 收藏家们还在建造
1.7 文档; 2.0 信封来自它, 因此1.7 输出不
变化。 在2.0文档中:
- 主机组件是
inventories[0].subject其他组成部分 为:inventories[0].components; 每一个bom-ref变成refId - 工具条目携带
version(当软件包版本不能时离开) 读取,例如,在不包含package.json和refId: "pkg:npm/@cdxgen/cdx-hbom"(保留1.7个工具条目){ type, name }(中文(简体) ) manufacturer变成一个parties[]条目manufacturer角色cdx:hbom:hardwareClass变成classification.category,以及cdx:hbom:pciClassCode编号 :cdx:hbom:usbClass变成classification.codes条目({ standard: "PCI-SIG class code" | "USB-IF class code", value }(中文(简体) )- 单位标识符
serial-number, (中文(简体) ),asset-tag, (中文(简体) ),mac-address, (中文(简体) ),imei)仅在收藏随同运行时才被放出includeSensitiveIdentifiers编号 :--sensitive而该值不是 编辑标记.model-number命名一个产品而不是一个单位,所以 当其值不是编辑标记时,就会释放。 编辑标记 是一个空值或从redacted或者说withheld比较 没有大小写和周围的空白空间( c)redacted, (中文(简体) ),redacted:<last4>, (中文(简体) ),redacted-serial, (中文(简体) ),Withheld(中文(简体) ) - 标识符由
party-cdx-hbom政党(作用)asserter, (中文(简体) ), 系统类型automation,与system.ref设置到 cdx- hbom 工具条目, 否ref当元数据没有这样的条目时, 以definitions.parties仅在标识符时 参考 boardLocation未释放 :boardLocation.designators预留用于 多氯联苯参考代号,例如:U5或者说R12,所以固件槽标签 例如DIMM3留下来cdx:hbom:*属性- 每个
cdx:hbom:*保存属性
制作自己的 2. 0 文档的工具,例如 cdxgen, 可以重新使用
绘制 @cdxgen/cdx-hbom/cdx20 导出 :
import { mapCdx20HardwareComponent } from "@cdxgen/cdx-hbom/cdx20";
const { component, partyRefIds } = mapCdx20HardwareComponent(hbomComponent, {
partyRefId: "party-cdxgen", // a declared party, never a tool refId
includeSensitiveIdentifiers: false, // default; true only for --sensitive runs
});
// Existing identifiers (for example purl identities) are kept and the hardware
// identities are appended. Declare every refId in partyRefIds in
// definitions.parties.
逐地表在 文件/硬件-财产。 。 。 .
目前覆盖的土著富集
cdx-hbom 使用固定的命令登记册和以阵列为基础的程序产卵,但上游包装和整装人员负责任何更严格的命令许可名单, PATH 硬化,或执行政策控制 围绕收集程序.
干流和微量支持
dryRun: true块命令执行cdx-hbom而不是依赖呼叫方的后退.getCommandPlan()曝光静态命令注册,包括模板条目,每个设备或接口在运行时都会解决其具体参数.- 成功的文件读取和目录发现,加上完成/封锁/失败的命令尝试,都记录在收集器的追踪中.
- 过
trace: createCollectorTrace()将活动收集到呼叫者拥有的分类账中,或稍后通过getCollectorTrace(bom)。 。 。 . - 所附的痕迹是不可想象的,所以
JSON.stringify(bom)仍然发出一个正常的 CircleDX 文件 .
链接
/proc财务报告和审定财务报表/sys基线发现- CPU,内存,存储,PCI,USB,DRM显示,音频,MMC/SDIO,和网络库存
- USB 设备的地貌显示中心等级, 包括每个设备驱动程序、 车道和接口驱动程序
- USB-C连接器、电子标记电缆和远端对等器
/sys/class/typec,有解码数据率、电流、送电瓦、公示电源简介、替代模式和充电判决 - USB-C同位素与所列举的USB设备和发电节点相关,可用时从UCSI供电中实时充电读取
hwmon、热区、TPM和NVMe控制器浓缩- 可选命令浓缩通过
lscpu, (中文(简体) ),lsblk, (中文(简体) ),ip, (中文(简体) ),lsmem, (中文(简体) ),hostnamectl, (中文(简体) ),lspci, (中文(简体) ),lsusb, (中文(简体) ),ethtool, (中文(简体) ),cpupower, (中文(简体) ),drm_info, (中文(简体) ),upower, (中文(简体) ),fwupdmgr, (中文(简体) ),boltctl, (中文(简体) ),mmcli,以及edid-decode - 对缺失的公用事业、部分支持和对许可敏感的浓缩进行指令性诊断
如果您想要通过安装可选主机工具来提高 Linux 的浓缩范围, 请参见 linux-troubleshooting.md。 。 。 .
达尔文臂64
system_profiler硬件、存储、显示、Wi-Fi、USB、音频、相机、蓝牙、霹雳和电力数据networksetup硬件端口映射- 现场直播
ifconfig网络接口浓缩 - 可选 plist 浓缩通过
diskutil, (中文(简体) ),diskutil apfs list -plist,以及ioreg
视窗( E)win32/amd64, (中文(简体) ), win32/arm64(中文(简体) )
Windows 库存来自 CIM/WMI 类和一些注册密钥,由
内置 Windows PowerShell 5.1 (%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe(中文(简体) )
每批运行一个固定的单行脚本。 平台值在
bOM是: 英国海洋局 windows· ; --platform windows 财务报告和审定财务报表 --platform win32 双向
这个 一个节点 os- 模块基线(处理器、内存、OS发布)总是
所以PowerShell被屏蔽的宿主 仍然产生有效的BOM.
命令编号及其来源(清单与登记册对照核对:
测试,和 getCommandPlan({ platform: "win32" }) 返回完整命令
线条 :
windows-cim-platform数字 :root/cimv2数字 :Win32_ComputerSystem, (中文(简体) ),Win32_ComputerSystemProduct, (中文(简体) ),Win32_BIOS, (中文(简体) ),Win32_BaseBoard, (中文(简体) ),Win32_SystemEnclosure, (中文(简体) ),Win32_Processor, (中文(简体) ),Win32_PhysicalMemory, (中文(简体) ),Win32_PhysicalMemoryArray, (中文(简体) ),Win32_OperatingSystem· ;root/wmi数字 :MS_SystemInformationwindows-cim-storage-network数字 :root/Microsoft/Windows/Storage数字 :MSFT_PhysicalDisk· ;root/cimv2数字 :Win32_DiskDrive, (中文(简体) ),Win32_Volume, (中文(简体) ),Win32_NetworkAdapter· ;root/StandardCimv2数字 :MSFT_NetAdapter, (中文(简体) ),MSFT_NetAdapterHardwareInfoSettingDatawindows-cim-display-media数字 :root/cimv2数字 :Win32_VideoController, (中文(简体) ),Win32_SoundDevice, (中文(简体) ),Win32_PnPEntity· ;root/wmi数字 :WmiMonitorID, (中文(简体) ),WmiMonitorBasicDisplayParams, (中文(简体) ),WmiMonitorConnectionParamswindows-pnp-devices数字 :root/cimv2数字 :Win32_PnPEntity, (中文(简体) ),Win32_PnPSignedDriver· ;Get-PnpDevice -PresentOnly财务报告和审定财务报表Get-PnpDeviceProperty(单位:千美元)DEVPKEY_Device_Parent, (中文(简体) ),DEVPKEY_Device_LocationPaths, (中文(简体) ),DEVPKEY_Device_DriverVersion, (中文(简体) ),DEVPKEY_Device_DriverProvider, (中文(简体) ),DEVPKEY_Device_DriverDate, (中文(简体) ),DEVPKEY_Device_BusReportedDeviceDesc, (中文(简体) ),DEVPKEY_Device_BusNumber, (中文(简体) ),DEVPKEY_Device_Address(中文(简体) )windows-cim-trust数字 :root/Microsoft/Windows/DeviceGuard数字 :Win32_DeviceGuard· ;root/cimv2数字 :Win32_Battery; 登记册HKLM:\SYSTEM\CurrentControlSet\Control\SecureBoot\State(单位:千美元)UEFISecureBootEnabled; 登记子密钥HKLM:\SYSTEM\CurrentControlSet\Control\FirmwareResources(单位:千美元)LastAttemptStatus, (中文(简体) ),LastAttemptVersion, (中文(简体) ),Version(中文(简体) )windows-cim-privileged数字 :root/cimv2/Security/MicrosoftTpm数字 :Win32_Tpm· ;root/cimv2/Security/MicrosoftVolumeEncryption数字 :Win32_EncryptableVolume· ;root/Microsoft/Windows/Storage数字 :MSFT_StorageReliabilityCounter; 缩写Confirm-SecureBootUEFI
内容覆盖范围:主机元数据、处理器、内存和内存模块,
板、固件(BIOS)和底盘;存储(Win32_DiskDrive 丰富
MSFT_PhysicalDisk)和卷;网络和无线适配器;显示
适配器和显示器; 音频控制器和端点;相机; USB
控制器和设备、PCI设备和蓝牙收音机和设备
驱动程序版本和签名及父/子 dependencies 图;TPM,
固件装置和电池;以及主机安全态势
(虚拟化安全、代码完整性、安全靴、BitLocker)
音量为 --privileged) (中文(简体) ). 财产名称记录于
docs/hardware-properties.md。 。 。 .
窗口上的选项语义 :
--privileged添加windows-cim-privileged批量(TPM、BitLocker、, 存储可靠性计数器,Confirm-SecureBootUEFI) (中文(简体) ). 那些班级否认 (cdx-hbom 从未升级,从未打电话)sudo.exe财务报告和审定财务报表 永远不要提示,所以从一个提升的会话中运行来获取数据. 无 提升批次记录permission-denied诊断和运行 仍然成功.--no-command-enrichment仅保留windows-cim-platform(和节点) 基线).--dry-run仅生成节点基线并跟踪每个计划 PowerShell 命令为blocked。 。 。 .--plist-enrichment不适用于 Windows.--timeout <ms>超过每个批次的超时(每CIM批次60 s, 90 s为windows-pnp-devices) (中文(简体) ).- 何时
powershell.exe无法启动( 丢失, 被 AppLocker 、 WDAC 或 命令允许列表)或运行于 Constract Language 模式,设备 库存来自pnputil /enum-devices /connected /relations /drivers(单位:千美元)windows-fallbackpartial-support诊断被记录下来。 pnputil 语录 标签是本地化的,因此一个非英语主机只获得节点基线. 后退命令不在命令计划中; 许可列表必须列出名称pnputil.exe允许它. - 命令允许列表条目与 Windows 命令不敏感大小写匹配
(单位:千美元)
POWERSHELL.EXE允许powershell.exe); POSIX 命令完全匹配.
权限、 PowerShell 限制、 EDR 允许列表、 慢速提供者和
x64-on-ARM64案件涵盖在以下几起:
windows-troubleshooting.md。 。 。 .
权限
简短回答: 运行 cdx- hbom 作为普通本地用户. 这几乎给了
每一个支持的操作系统上的全部硬件库存. 电梯(管理员或
(b) 增加一些与安全和保健有关的细节。 cdx-hbom 从不提示
对于一个密码, 并且从未在 Windows; 在 Linux 上升级, --privileged 重试
几个有文件记录的、非交互命令 sudo -n。 。 。 .
| 平台 | 正常用户, 本地会话 | 管理员或根 | SSH 或 WinRM 上的非管理员 |
|---|---|---|---|
| 马科斯 (苹果硅) | 完整目录; 每个收藏器命令作为普通用户运行 | 没有额外的 | 未计量;预期与当地相同 |
| 链接 | /proc 财务报告和审定财务报表 /sys 基线加安装的可选工具 | --privileged 运行 dmidecode 重试 drm_info 与非交互式 sudo -n (见 linux-troubleshooting.md(中文(简体) ) | 未计量;预期与当地相同 |
| 窗口 | 几乎所有; 参见测量矩阵 windows-troubleshooting.md | --privileged 添加 TPM 细节, BitLocker 状态, 固件确认的安全靴状态和磁盘可靠性计数器 | 每个 WMI 查询都被拒绝; 只生成基线( 处理器和内存) , 有一个 permission-denied 诊断说明原因 在5个命名空间上授予账户WMI"Remote Election",恢复了本地目录的大部分(参见故障排除页面) |
在Windows上,还有一个细节取决于状态而不是权利:磁盘总线
类型、媒体类型和健康MSFT_PhysicalDisk)仅达到标准用户
存储空格 SMP 服务时 (smphost) 已经运行中。 这是
在解决问题的一页里解释了.
每个平台的隐私默认:序列号、UUID、MAC地址和
PnP 实例段被修改为 redacted:<last 4>; 主机名称, 用户
名称和域名从未被收集。 过 --sensitive 仅在生时
需要识别资料.
发展
npm test
许可证
麻省理工学院