服务器固件层安全威胁分析
服务器安全加固通常聚焦操作系统和应用层,固件层往往被忽视。固件位于硬件和操作系统之间,一旦被攻陷,攻击者可以获得比操作系统更高权限的控制能力,且传统安全工具几乎无法检测。近年来针对服务器固件的攻击事件频增,BMC(Baseboard Management Controller)漏洞成为APT攻击的重要入口。
固件层攻击的核心特征:持久性强(重装系统无法清除)、隐蔽性高(OS层安全工具无感知)、权限极高(Ring -1至Ring -3级别)。这类攻击不需要文件落地,不产生系统日志,传统EDR和杀毒软件完全失效。
UEFI Secure Boot配置与验证
Secure Boot是UEFI规范定义的固件安全机制,通过数字签名链验证启动过程中每个组件的完整性,防止未经授权的引导加载程序和内核模块运行。
配置步骤:
第一步,进入服务器BIOS/UEFI设置界面,将Boot Mode设为UEFI Only,开启Secure Boot。大部分服务器出厂默认关闭此功能。
第二步,确认平台密钥(PK)和密钥交换密钥(KEK)已正确注入。OEM出厂的服务器通常已预置微软的PK,自建环境需要自行生成和注册。
# 生成自定义Secure Boot密钥
openssl req -new -x509 -newkey rsa:2048 \
-keyout PK.key -out PK.crt \
-days 3650 -subj "/CN=Custom Platform Key/"
openssl req -new -x509 -newkey rsa:2048 \
-keyout KEK.key -out KEK.crt \
-days 3650 -subj "/CN=Custom KEK/"
# 将签名密钥注册到UEFI固件
# 不同厂商工具不同,以Dell为例
# dell SecureBoot --enable --pk-key PK.key --pk-cert PK.crt
第三步,为自定义内核和驱动模块签名:
# 签名内核模块
SIGN_KEY=/etc/pki/secureboot/db.key
SIGN_CERT=/etc/pki/secureboot/db.crt
# 对内核签名(MOK方式)
sbsign --key $SIGN_KEY --cert $SIGN_CERT \
--output /boot/vmlinuz-signed /boot/vmlinuz
# 对第三方驱动模块签名
kmodsign sha256 \
$SIGN_CERT $SIGN_KEY \
/path/to/module.ko
第四步,验证Secure Boot状态:
# Linux系统内验证Secure Boot状态
mokutil --sb-state
# 输出: SecureBoot enabled
dmesg | grep -i secure
BMC安全漏洞与防护策略
BMC是服务器独立的管理子系统,即使在服务器关机状态下也保持运行,通过IPMI协议提供远程管理能力。BMC运行独立的固件(通常是Linux精简环境),其攻击面包括Web管理界面、IPMI协议栈、Redfish API、SNMP服务等。
常见BMC漏洞类型:
1. 默认凭证:大量服务器BMC使用出厂默认账号密码,这是最普遍的入口。
2. IPMI认证绕过:IPMI 2.0的Rakp协议存在已知设计缺陷,攻击者可以获取密码哈希后离线破解。
3. 固件降级攻击:部分BMC实现未校验固件版本号,允许刷入含已知漏洞的旧版固件。
4. Redfish API未授权访问:部分厂商Redfish实现存在路径遍历或认证绕过。
BMC加固措施:
# 1. 禁用IPMI 1.5协议(仅保留2.0)
ipmitool lan set 1 cipherprivs aaaaaaaaaaaaaaa
# 2. 修改默认密码(强制16位以上)
ipmitool user set password 2 "$(openssl rand -base64 24)"
# 3. 限制BMC网络访问(仅管理网段)
ipmitool lan set 1 access on
ipmitool lan set 1 arp respond on
# 4. 禁用未使用的服务
# 通过BMC Web界面禁用SNMP、SMTP、NTP等不必要服务
# 5. 检查固件版本并升级
ipmitool mc info
固件完整性持续监控
仅配置Secure Boot和BMC加固还不够,需要建立固件完整性的持续监控机制,及时发现固件篡改行为。
#!/bin/bash
# 固件基线采集与对比脚本
BASELINE_DIR=/var/lib/firmware-baseline
CURRENT_DIR=/var/lib/firmware-current
# 采集当前固件信息
collect_firmware_info() {
mkdir -p $CURRENT_DIR
efivar -l > $CURRENT_DIR/uefi_vars.txt 2>/dev/null
cp /sys/firmware/acpi/tables/* $CURRENT_DIR/ 2>/dev/null
ipmitool mc info > $CURRENT_DIR/bmc_info.txt 2>/dev/null
dmesg > $CURRENT_DIR/boot_log.txt
sha256sum /boot/vmlinuz-* > $CURRENT_DIR/kernel_hashes.txt
}
# 对比基线
compare_baseline() {
if [ ! -d $BASELINE_DIR ]; then
echo "基线不存在,创建初始基线"
cp -r $CURRENT_DIR $BASELINE_DIR
return 0
fi
DIFF=$(diff -r $BASELINE_DIR $CURRENT_DIR)
if [ -n "$DIFF" ]; then
echo "[ALERT] 固件基线偏移检测:"
echo "$DIFF"
return 1
fi
echo "固件完整性验证通过"
return 0
}
collect_firmware_info
compare_baseline
将此脚本加入cron定期执行(建议每天一次),配合告警通知通道,可以及时发现固件层面的异常变更。结合Secure Boot的启动验证和BMC的访问控制,构建从引导到管理的全链路固件安全防护体系。
固件安全加固检查清单
– BIOS/UEFI设置管理员密码,禁用未使用的启动选项
– 启用Secure Boot,注册自定义签名密钥
– BMC修改默认凭证,密码复杂度16位以上
– 禁用IPMI 1.5和弱加密套件
– BMC固件保持最新,关注厂商安全公告
– BMC管理网络与业务网络隔离,仅管理网段可达
– 建立固件基线并定期对比检测
– 服务器物理访问控制(防止物理刷写攻击)
– PXE/TFTP服务仅在需要时启用
– 记录所有固件变更操作的审计日志
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/fu-wu-qi-gu-jian-an-quan-jia-gu-uefisecureboot-pei-zhi-yu/