软件签名增强
软件签名增强
功能简介
“软件签名增强”功能是 FortiOS 7 推出的新功能,对重要的系统文件和可执行文件实现了 BIOS 级别签名和文件完整性检查。首先要保证在引导系统时加载的内核版本是经过签名的。系统一旦启动,将在活动系统上运行定期检查,以确认系统内核和进程以及 AV/IPS 引擎是经过签名的。此功能从 6.4.13、7.0.12、7.2.5、7.4.0、7.6.0 开始生效。
“软件签名增强”功能主要有三个模块:
- 启动保护
- 系统安全保障
- 定期检查系统
启动保护
固件和 AV/IPS 引擎的签名及完整性检查发生在以下三个阶段:
- 文件上传:FortiOS 运行期间,在上传固件、AV 引擎和 IPS 引擎文件时验证签名,按照安全级别决定接受、告警或拒绝。
- 系统引导:在内核挂载前,检查上述文件的签名及证书对应的安全 Hash,检查失败时可能阻止启动。
- 文件挂载和加载:在重要文件系统挂载、可执行文件和共享库加载到用户空间前,验证其签名 Hash。保存各文件 Hash 的清单本身也会先进行完整性验证。
BIOS 启动保护安全级别分为 Low 和 High:
旧版本安全级别
FortiOS 7.0.16、7.2.11、7.4.6、7.6.1 之前的版本使用 Level 0、Level 1、Level 2 三档名称。从上述版本开始统一为 Low 和 High,旧 Level 0、Level 1 对应 Low,Level 2 对应 High。较旧的 BIOS 菜单可能仍显示数字选项。
Low:接受经过认证的固件。固件没有有效的 Fortinet CA 签名时,产生告警信息,但允许继续运行。


High(大多数设备默认):当固件没有有效的 Fortinet CA 签名时,阻止运行。如果固件有有效的 Fortinet CA 签名,但缺少第三方 CA 签名,则告警后允许运行。FortiOS GA 固件、AV 引擎和 IPS 引擎文件由 Fortinet CA 和第三方 CA 双重签名。
Initializing firewall... System is starting... System file integrity init check failed! The system is going down NOW !! The system is halted.
系统安全保障
篡改文件系统或文件的尝试将立即被检测到,会触发设备重新启动,并生成事件日志。
定期检查系统
系统将定期(每 6 小时)检查进程和文件名、权限,并对它们执行签名检查。这种定期检查每 6 小时进行一次。如果检测到异常,将触发设备重启,并生成事件日志,相关日志如下所示:

固件签名检查
High 和 Low 安全级别对不同签名类型的处理如下。固件是否能被接受取决于签名状态,不能只根据 GA、特殊版本或临时版本名称判断。
| 固件类型 | 签名证书 | 安全级别对应行为 | ||
|---|---|---|---|---|
| Fortinet CA | 第三方 CA | High | Low | |
| GA 认证镜像,包括 GA、Beta、Special Technical Support 最终版本 | 有 | 有 | 接受 | 接受 |
| 非 GA 认证的特殊版本,包括 Special Technical Support、NPI 快速构建版本 | 有 | 无 | 告警后接受 | 接受 |
| Interim、Dev 或未知镜像 | 无 | 有或无 | 拒绝 | 告警后允许继续 |
上传和引导时的典型提示
High 安全级别下,通过 CLI 恢复只有 Fortinet CA 签名的非 GA 认证镜像时,上传和引导阶段会分别显示以下告警,但允许启动。
Warning: This firmware image is no GA certified! ... Warning: Non GA FOS image!High 安全级别下,通过 BIOS 菜单使用 TFTP 加载未认证的临时镜像时,会中止安装。通过 CLI 恢复同类镜像时,会显示
Image verification failed!并拒绝上传。Checking image... This firmware image is not certified! Aborting firmware installation. Please power cycle. System halted.Low 安全级别下,通过 CLI 恢复未认证的临时镜像时,会提示风险并要求确认,允许继续上传。引导时仍会显示未认证提示,启动后也可能显示完整性初始化检查失败。
Image verification failed! ... Please continue only if you understand and are willing to accept the risks. Do you want to continue? (y/n)Warning: FOS is not authenticated! Continue booting under security level 1... Initializing firewall... ... System file integrity init check failed!
相关信息
以上提示用于区分签名类型和拒绝发生的阶段,具体文字可能随型号、版本和校验失败原因变化。Low 下允许未认证镜像继续启动,不代表重要文件的签名 Hash 校验也被关闭。
启动时文件完整性检查
FortiOS 启动过程中,内核会验证重要文件系统及对象文件的签名 Hash,防止被篡改的文件系统被挂载,或未经授权的对象加载到用户空间。
重要
该检查独立于 BIOS 安全级别。GA、SA、Beta 或 Top3 类型镜像始终执行此检查,签名 Hash 验证失败时系统会在启动阶段停止。将安全级别调低不能绕过这项检查。
例如,启动时检测到 IPS 库文件被修改,Console 中可能显示以下信息并停止启动:
Booting OS...
Reading boot image... 2891501 bytes.
Initializing firewall...
fos_ima: System Integrity check failed....
CPU3: stopping
CPU1: stopping
CPU0: stoppingIPS/AV 特征库签名
AV 和 IPS 包现在由 Fortinet CA 签名,以确保包的真实性。FortiGate 更新时将进行如下检查:
- 自动更新时,只接受经过签名和验证的 IPS/AV 包。
- 手动更新时,将接受签名和验证的 IPS/AV 包。如果 IPS/AV 包未签名,则有以下情况:
- Low 安全级别:显示警告并要求用户确认接受。
- High 安全级别:显示错误并拒绝 AV 和 IPS 包。
对于 HA,备设备将在保存签名包的同时从主设备同步签名文件。
在 CLI 下,可以查看当前的 IPS/AV 特征库是否通过签名验证。
FortiGate # diagnose autoupdate signature check-all aven(7,33) signature is valid. virdb(2,2) signature is valid. etdb(2,7) signature is valid. exdb(2,4) signature is valid. fcni(9,0) signature N/A. contract(10,0) signature N/A. idsen(30,80) signature is valid. ipscfgscr(30,50) signature is valid. fldb(34,2) signature is valid. idsdb(4,24) signature is valid. idsetdb(4,27) signature is valid. idsurldb(5,1) signature is valid. appdb(38,1) signature is valid. isdb(39,1) signature is valid. iot_detec(40,1) signature is valid. geoip(28,0) signature N/A. certdb(33,0) signature N/A. update objects signature check finished. FortiGate # diagnose autoupdate versions AV Engine --------- Version: 6.00288 signed Contract Expiry Date: n/a Last Updated using manual update on Mon May 15 18:35:00 2023 Last Update Attempt: n/a Result: Updates Installed Virus Definitions --------- Version: 1.00000 signed Contract Expiry Date: n/a Last Updated using manual update on Mon Apr 9 19:07:00 2018 Last Update Attempt: n/a Result: Updates Installed Extended set --------- Version: 1.00000 signed Contract Expiry Date: n/a Last Updated using manual update on Mon Apr 9 19:07:00 2018 Last Update Attempt: n/a Result: Updates InstalledFortiGate 向 FortiGuard 自动更新时的验证签名 Debug 如下。
... installUpdateObject[321]-Signature verified for obj 9, ret=0, data_len=90, obj_len=90, sig_len=0. installUpdateObject[358]-Step 2:Prepare temp file for obj 9 installUpdObjRest[827]-Step 3:Signal parent not to respawn installUpdObjRest[837]-Step 4:Kill daemon(s) installUpdObjRest[871]-Step 5:Backup /etc/fcni.dat->/tmp/update.backup installUpdObjRest[899]-Step 6:Copy new object /tmp/updrbmfhS->/etc/fcni.dat installUpdObjRest[984]-Step 7:Validate object ...
功能影响
- 当固件缺少有效的 Fortinet CA 签名时,BIOS 安全级别为 High 会拒绝安装或阻止启动。只有 Fortinet CA 签名、缺少第三方 CA 签名的特殊版本会告警后放行。
- 当 BIOS 安全级别为 High 时,不能降级到一些较旧的版本(6.0、6.2 或是 6.4.13、7.0.12、7.2.5、7.4.0 以下的版本)。如需降级,需先将安全级别调整为 Low。
- 在 RMA 期间,旧设备可能被替换为支持 BIOS 安全级别的新硬件(默认 High)。恢复非 GA 版本前,应先确认镜像的签名状态。具有双重签名的最终版本可正常使用,只有 Fortinet CA 签名的特殊版本会告警后放行,缺少有效 Fortinet CA 签名的版本会被拒绝。
- 当 FortiGate 被攻击时,作为一种保护措施,试图篡改系统文件会导致 FortiGate 立即重启。修改 BIOS 安全级别不会影响此行为。
- 如果系统文件校验和不匹配,在文件系统定期检查期间,FortiGate 也会重新启动。修改 BIOS 安全级别不会影响此行为。
查看 BIOS 安全级别
执行以下命令,查看当前安全级别和固件签名状态,安全级别显示为 High 或 Low。
相关信息
部分机型具有 Signed Firmware LED,可显示 BIOS 安全级别。涉及物理开关的操作见系统管理 → 固件与配置管理 → 固件版本管理 → G 系列设备修改级别。
修改 BIOS 安全级别
警告
请注意,调低该参数将影响设备或网络的整体安全状态。可能允许访问设备的用户在系统中安装或运行修改过的恶意代码。 强烈建议将 FortiOS 升级到支持 BIOS 安全检查的版本,最大限度地提高设备的安全等级。
如果 FortiGate 设备运行的 BIOS 版本为 5000100 或 6000100(或更新版本),用户将无法降级到 6.0、6.2 或这些:6.4.13、7.0.12、7.2.5、7.4.0 以下的 FortiOS 版本。设备将无法正常启动,启动时将显示以下错误信息:
Booting OS... Fatal error: Loading FOS fails! Please power cycle. System halted.如果因为特殊要求,需要在已经具备 BIOS 安全级别功能的 FortiOS 版本上降级到以上 FortiOS 版本,请按照以下步骤更改 BIOS 安全级别。
G 系列机型说明
对于 50G/51G、70G/71G、90G/91G Gen2、120G/121G Gen2、200G/201G、700G/701G 等机型,BIOS 菜单通常不提供 [U] Set security level 选项,请参考系统管理 → 固件与配置管理 → 固件版本管理 → FortiGate G 系列修改安全级别。
使用终端连接设备的 Console 接口,重启 FortiGate。在重启过程中,FortiGate 会在 Console 中打印一条信息“press any key to display configuration menu”,然后按任意键进入 BIOS。
Ver:05000009 Serial number: FGT60XXXXXXXXXXXXXX CPU: 1200MHz Total RAM: 2 GB Initializing boot device... Initializing MAC... NP6XLITE#0 Please wait for OS to boot, or press any key to display configuration menu...键入
I,进入System information。[C]: Configure TFTP parameters. [R]: Review TFTP parameters. [T]: Initiate TFTP firmware transfer. [F]: Format boot device. [I]: System information. <--键入I [B]: Boot with backup firmware and set as default. [Q]: Quit menu and continue to boot. [H]: Display this list of options.键入
U,进入Set security level。Enter C,R,T,F,I,B,Q,or H: [S]: Set serial port baudrate. [R]: Set restricted mode. [T]: Set menu timeout. [U]: Set security level. <--键入U [I]: Display system information. [E]: Reset system configuration. [P]: Normal POST test. [Q]: Quit this menu. [H]: Display this list of options.选择目标安全级别。以下菜单中,输入
1设置为 Low,输入2设置为 High。Enter S,R,T,U,I,E,P,Q,or H: [1]: Level Low - Check image with result only [2]: Level High - Check image and reinforce validity Enter security level setting [2]: <--输入1选择Low,输入2选择High随后按照说明退出 BIOS 菜单并启动设备(通常是键入 2 次
Q)。
常见问题
安全级别是否对 VM 有影响?
- FortiGate-VM 无法通过硬件 BIOS 菜单调整安全级别,FortiOS 默认按 High 安全级别执行镜像检查。
- High 安全级别的 VM 会拒绝缺少有效 Fortinet CA 签名的临时镜像。只有 Fortinet CA 签名的特殊版本会告警后放行,不应将所有非 GA 版本都视为无法上传。
旧版本 VM 行为
- 6.4.16、7.0.16、7.2.9、7.4.4、7.6.0 及之后版本按 High 执行检查,在采用数字名称的版本中显示为 Level 2。
- 6.4.13 ~ 6.4.15、7.0.12 ~ 7.0.15、7.2.5 ~ 7.2.8、7.4.0 ~ 7.4.3 按 Low 执行检查,显示为 Level 1。
如果 BIOS 设置为 High,但启动的固件不支持软件签名增强,预期的行为是什么?
- 在引导时和系统启动时都不执行检查。
如果 BIOS 安全级别设置为 Low,在启动时是否还会执行检查?
- 会执行签名检查。没有有效的 Fortinet CA 签名时会告警,但允许继续启动,结果可以在
get system status中看到。
- 会执行签名检查。没有有效的 Fortinet CA 签名时会告警,但允许继续启动,结果可以在
如果 BIOS 安全级别设置为 Low,系统安全保障和定期检查是否会激活?
- 是的,如果加载的固件支持该特性,仍然会执行系统安全保障和定期检查。
如何查看一个系统文件的 MD5 校验和?
FortiGate # diagnose sys csum /bin/init //该命令需要指定具体的文件// /bin/init: df c1 b2 8f d9 a6 82 c5 d2 1e 45 87 e5 ec 98 f6 FortiGate # diagnose sys filesystem hash //列出所有敏感文件的hash,从 7.4 开始支持// 12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8 /data/etc/fdsm_mgmt_id.dat 00664fbc0fdafced6c4e0f77570f371cf0d0b85e0429c10d1376a81941f17289 /data/etc/cloudinit.log 48bd618e47b0dc185ff512b75c9fc6f7c5437d8aec6d7f3527c41d6687375d59 /data/etc/ips.mudb.rules.x 3af43771ffc8990ed38c7bd10ad37e60391e565c51a133e0acdc63539661ef11 /data/etc/applications.csv 423720df1a74eca781eaa37a388d86f438541d7f0624cd8f0c5781c843a5bded /data/etc/sample.pac db057221b788f6ed5c8b629ad83d6f8fca8dc35274bce13be6520595c09f1f65 /data/etc/modem_list_fex.conf 2e29084d86f3925a0fb6bf96c4d83a6d3025fdd9cf8059ebcfc307153b9fd63b /data/etc/virexdb 0ceb39183d6ce36e7bd6bb5edfe6beacac702be9bfeac3bf0e2066df3643af1d /data/etc/ips.iot.rules a38bba93dc8691ca7367d134f575df31ba51c5c591309447338d10d08812910c /data/etc/geoip_db.gz 2e29084d86f3925a0fb6bf96c4d83a6d3025fdd9cf8059ebcfc307153b9fd63b /data/etc/virext 0cbf59ea97ced14b3dd844cb4dcd784ddcae7d5ef38c2a6081c9e369c25d5ac6 /data/etc/protocols.csv 896b71b3d9b209d339213f9d4af4088d3addd891cd292e93b5168eddb36b599a /data/etc/virfldb.x dbe703c06735797ac86570442b39827ca1844fea6312e48fee8c2d80647392d0 /data/etc/fgt.crt 3e36debe496618432707dc680ef78fc59c2d9ecc38b3f65a2f055dc826492492 /data/etc/fcni.dat如果遇到系统文件被篡改或是误报,我应该怎么办?
如下所示,设备 Console 打印信息:
fos_ima: fos_process_appraise 99: Suspicous Executable File(/data2/libcrashpad.so) is missing hash fos_ima: fos_process_appraise 99: Suspicous Executable File(/data2/flatkc_info) is missing hash如果您看到文件缺失散列值,如以下(但不限于),可能是攻击造成,可以访问此链接联系 PSIRT 团队:https://www.fortiguard.com/faq/psirt-contact,会有 Fortinet 相关人员与您取得联系,或联系 Fortinet 技术支持,并请提前收集以下信息:
系统分区文件内容:
cofig global (如果开启了多VDOM) config system console set output standard end ↓↓↓请分行执行,不要一次性粘贴↓↓↓ get system status fnsysctl ls -la / fnsysctl ls -la /bin fnsysctl ls -la /sbin fnsysctl ls -la /lib fnsysctl ls -la /tmp fnsysctl ls -la /usr fnsysctl ls -la /usr/bin fnsysctl ls -la /var fnsysctl ls -la /data fnsysctl ls -la /data2 fnsysctl ls -la /data/lib fnsysctl ls -la /data/etc fnsysctl ls -la /data/bin fnsysctl ls -la /data/cmdb fnsysctl ls -la /data/config diagnose sys csum /data/rootfs.gz diagnose sys csum /data/flatkc diagnose sys csum /data/lib diagnose sys csum /bin diagnose sys csum /bin/sysctl diagnose sys csum /bin/smit diagnose sys csum /bin/init diagnose sys csum /bin/smartctl diagnose sys csum /bin/lspci diagnose sys csum /sbin/init fnsysctl ps execute tac report文件系统 Hash 信息:
cofig global (如果开启了多VDOM) get system status diagnose sys filesystem hash系统配置文件。
系统事件日志。