问题描述
在 KunLun 系列鲲鹏服务器(iBMC 0.21.00 / ipmi_core 1.121.10)上验证 IPMI 命令屏蔽(Firmware Firewall)特性,按客户测试用例执行 8 组场景,出现以下与预期不符的现象:
- uTool 关闭白名单后再开启,白名单列表未被清空(用例期望开启即清空)
- 白名单模式(Mode=1,列表为空)下,带内仍能执行 0x06 0x60 Set Command Enables 并返回成功
- 设置类命令 0x06 0x09 / 0x0A / 0x60 / 0x61 与 OEM 0x30 0x93 可以被"配置"、也可以被加白名单
- GetNetFnSupport(0x06 0x09)返回的支持集中不含 0x30 / 0x38 / 0x3A,但路由表里 0x30 有 572 条命令
- 0x06 0x0A / 0x0C 上报 0x02 等命令"已支持/可配置",但用 0x06 0x60 去设置却失败
- 白名单模式下删除默认白名单中的 0x06 0x01 返回成功(用例期望失败)
- 加白后删除,带内执行 0xff 0x01 / 0x77 0x77 等 8 组非法 NetFn/Cmd,未返回 D4h/D6h
- 0x06 0x61 查到的 0x06 0x60 使能状态与
ipmitool firewall info展示不一致(工具侧三条子功能全 “Invalid command”)
环境信息
- 操作系统:iBMC(openUBMC 系)Active 0.21.00 Build 001,构建时间 2026-10-14 21:02:03
- 软件版本:ipmi_core/1.121.10@openubmc/stable(commit 14e815a0),BMCSDK 5.14.00.11,IPMI 版本 2.0
- 硬件配置:KunLun 系列鲲鹏服务器,2× Kunpeng 920 72A2C,BIOS (U75)0.03.06,Uboot 23.1.10.0
- 测试工具:uTool(setipmiwhitelist / getipmiwhitelist)、ipmitool 1.8.x
重现步骤
- 带外执行
raw 0x30 0x93 0xdb 0x07 0x00 0x4a 0x01 0x01 0x00开启防火墙、白名单模式(ClearFlag=0) - 带外查询:
raw 0x30 0x93 0xdb 0x07 0x00 0x4b 0x01 0x00 0x00(白名单列表)、raw 0x06 0x61 0x0f 0x06 0x00(使能掩码)、raw 0x06 0x0a 0x0f 0x06 0x00(支持位)、raw 0x06 0x0c 0x0f 0x06 0x00(可配置位)、raw 0x06 0x09 0x0f(NetFn 支持集) - 带内(OS 侧 ipmitool)执行
raw 0x06 0x60 0x0f 0x06 0x00 0xde 0x17 0x00 0x00 0x34 0xc0 0xfb 0x3f 0xff 0xff 0xf4 0x03 0x03 0x00 0x00 0x00 - 带内依次执行
raw 0xff 0x01/raw 0x77 0x01/raw 0xff 0x00/raw 0x77 0x77等非法组合 - 带外执行
raw 0x30 0x93 0xdb 0x07 0x00 0x3f 0x01 0x01 0x00 0x06 0x01 0x08删除默认白名单条目 - 执行
ipmitool ... firewall info channel 0x0f lun 0x00 netfn 0x06 command 0x60
期望结果
- 白名单开启后(或带 ClearFlag=1 时)白名单列表被清空
- 白名单模式下带内非白名单命令(含 0x06 0x60)被拒绝,返回 0xD4 Insufficient Privilege
- 防火墙自管理命令不可被配置、不可被加白
- GetNetFnSupport 明确反映"是否支持该 NetFn 的防火墙管理"语义
- 能力位(Support / Configurable / Enables)与实际可设置性一致,Set 失败时不留部分配置
- 删除默认名单条目返回失败(非 0x00)
- 非法 NetFn/Cmd 返回规范错误码,且白名单模式下带内应被防火墙拦截
ipmitool firewall info能正确显示使能状态
实际结果
- 开启后分页查询白名单仍有条目(11:22:19–11:22:30 连续 20+ 次
Query White User List均成功,说明列表非空),operation.log 中无任何 clear 记录 - 带内 0x06 0x60 返回成功;白名单模式下带内 0x0C 0x02(lan print)等命令同样成功
- 0x06 09/0A/60/61 与 30h/93h 3F~4C 均可被 3Fh 加白;默认黑名单仅 3 条(06h 02/60/61)
raw 0x06 0x09 0x0f返回集合 = {0x00, 0x04, 0x06, 0x0A, 0x0C, 0x2C},不含 0x30/0x38/0x3A- 0x06 0x0A 支持位为 1、0x0C 可配置位为 1 的命令,用 0x06 0x60 设置返回 0x80
- 删除 0x06 0x01 返回成功:
IPMI white list delete commands(RAW=06-01-08-ff) successfully - 非法组合返回 0xC1(Invalid Command),全量日志中 0xD4/0xD6 出现 0 次
firewall info三条子功能全部command failed: Invalid command,A/C/E 列全 X
尝试过的解决方案
- 核对 30h/93h 规格书 3Fh/4Ah/4Bh/4Ch:确认 ClearFlag 需显式下发、默认名单来源未定义、3Fh 未定义"默认条目不可删"
- 一键收集日志分析:
PoweroffPer.json:t_white_list 50 条、t_black_list 3 条(06-02-08 / 06-60-08 / 06-61-08)、t_list_mode=255route_table.txt:06/60、06/61 各 1 条;06/0B、06/0D、06/62、06/63 均为 0 条;netfn 0x30=572 条net_stream.log:firewall info 的请求序列包含 0x0B/0x0D/0x62/0x63,4 条均ret=0xc1operation.log:add 记录 0 次、clear 记录 0 次、删除 55 次全部成功;两次 Reset BMC 后删除被启动重建任务回滚
- 反查产品字节码常量池:4Ah 确有 ClearFlag 分支与 clear_list;
ipmi_core_app.lua启动时重建默认黑白名单 - 对照同源开源实现
openUBMC/ipmi_mgmt@1.0.118:std_firewall_mgr.h:31constexpr uint8_t STD_FIREWALL_NETFN_MAX = 0x2F;⇒ 解释了 #4firewall_filter.h存在"BIOS POST 未完成时带内放行"分支 ⇒ 可能是 #2/#7 的原因set_cmd_enables命中默认黑名单返回 0x80 且不回滚已应用位;del_whitelist不校验默认名单,一律返回 0x00 ⇒ 解释了 #5/#6
分析结论
- #4 不是缺陷而是设计边界:标准 Firmware Firewall 仅覆盖 NetFn ≤ 0x2F(
STD_FIREWALL_NETFN_MAX),故 0x30/0x38/0x3A 不会出现在 GetNetFnSupport;日志get all netfn is [0, 6, 10, 44, 4, 12](44=0x2C ≤ 0x2F)与此完全吻合。求确认:是否要把 OEM NetFn 纳入标准防火墙? - #8 是工具与固件能力不匹配:BMC 未实现 0x0B/0x0D/0x62/0x63 子功能级查询(路由 0 条、请求返回 0xC1),ipmitool 因此无法判断子功能并全标 X;0x61 的 16 字节使能掩码本身与路由表/默认名单可逐位对齐,未见计算错误。求确认:是否计划实现这 4 条子功能查询?
- #5/#6 属返回码与原子性实现缺陷:能力位语义不一致(Support/Configurable/Enables 三套判据)、Set 中途返回 0x80 且不回滚、删除默认条目报成功。
- #2/#7 疑为同一根因:白名单模式下带内请求未被拦截(可能是"BIOS POST 未完成时带内不限制"分支,或该过滤器未覆盖带内通道)。求确认:BIOS POST 未完成时带内全放行是否为正式设计? 我们将在主机正常进 OS 后复测以定性。
- #1/#3 属规格缺口:4Ah 的清空是显式 ClearFlag 而非"开启即清空";规格未定义默认名单可否修改、未定义"不可配置/不可加白"清单。
希望社区协助确认: 上述 2、4、5 项在 openUBMC 主线(ipmi_mgmt 1.118+ / ipmi_core 1.121.x)上的预期设计与后续计划;若有对应 issue/MR 或规格补丁,麻烦指路,我们可配合提供完整 dump 与复测脚本。