Veriexec 概述
已验证执行(也称为 veriexec)是一种文件签名和验证方案,可保护 Junos 操作系统 (OS) 免受可能危及设备完整性的未经授权软件和活动的侵害。veriexec 最初是为 NetBSD OS 开发的,后来针对 Junos OS 进行了调整,并从 Junos OS 7.5 版开始默认启用。
授权文件(即 Junos OS 附带的某些文件)具有关联的指纹,veriexec 会检查该指纹以确定文件是否可以使用(执行,甚至打开)。任何缺少有效指纹的文件都无法由需要验证输入的应用程序执行或读取。
请注意, /bin/sh 不需要经过验证的输入。它可用于运行任意脚本,因为从风险的角度来看,它们与交互式命令相同,后者已经通过用户身份验证和权限进行控制。但是,如果经过验证的 shell 脚本包含运行任意脚本(即清单中没有签名的文件)的指令,则将阻止执行该文件。
Veriexec 的工作原理
Veriexec 为内核提供了一个数字签名的清单,其中包含所有可执行文件和其他应保持不可变的文件的一组指纹。仅当成功验证清单的数字签名时,veriexec 加载程序才会将清单的内容馈送到内核。然后,内核可以验证文件是否与其指纹匹配。如果强制执行 veriexec,则只会运行具有已验证指纹的可执行文件。无法写入、修改或更改受保护的文件。
每个安装映像都包含一个清单。清单是只读的。它包含如下条目:
etc/rc sha1=478eeda6750c455fbfc18eeb06093e32a341911b uid=0 gid=0 mode=644 etc/rc.verify sha1=15566bb2731abee890fabd0ae8799e02071e006c uid=0 gid=0 mode=644 usr/libexec/veriexec-ext.so.1 sha1=8929292d008d12cd5beb2b9d9537458d4974dd22 uid=0 gid=0 mode=550 no_fips sbin/verify-sig sha1=cd3ffd45f30f1f9441e1d4a366955d8e2c284834 uid=0 gid=0 mode=555 no_ptrace sbin/veriexec sha1=7b40c1eae9658f4a450eb1aa3df74506be701baf uid=0 gid=0 mode=555 no_ptrace jail/usr/bin/php sha1=c444144fef5d65f7bbc376dc3ebb24373f1433a2 uid=0 gid=0 mode=555 indirect no_fips usr/sbin/chassisd sha1=61b82b36da9c6fb7eeb413d809ae2764a8a3cebc uid=0 gid=0 mode=555 trusted
如果文件已被修改,并且生成的指纹与清单中的指纹不同,您将看到一条日志消息,如以下示例所示:
/kernel:veriexec:fingerprintfordev100728577,file70750 64ea873ed0ca43b113f87fa25fb30f9f60030cec!= 0d9457c041bb3646eb4b9708ba605facb84a2cd0
日志消息采用以下格式:
/kernel:veriexec:fingerprintfordev<deviceid>,file<fileid><calculatedfingerprint>!= <fingerprintinthemanifest>
指纹不匹配表示文件已被修改。不要尝试运行该文件。它可能包含损坏的代码。联系 JTAC。
Veriexec 的重要性
Veriexec 是一种有效且重要的工具,可防止那些试图破坏瞻博网络路由器、交换机和防火墙系统安全的人。它可以阻止可能想要在系统上站稳脚跟、获得持续未经授权的访问或以其他方式将系统转换为故障状态的威胁参与者。如果此类参与者可以运行任意未签名的二进制文件,则他们可以进行未经授权的修改并运行违反安全策略的恶意软件或其他代码。
客户可以使用 JET SDK 将强制执行 veriexec 的签名和授权代码添加到 Junos OS。有关 SDK 解决方案的更多信息,请参阅《瞻博网络扩展工具包开发人员指南》中的开发设备上 JET 应用程序。
如何验证是否在运行 Junos OS 的设备上强制执行 Veriexec
以下小节提供了有关如何检查是否强制执行 veriexec 的过程。
某些 Junos OS 平台提供禁用 veriexec 强制的 Junos OS 可选版本(称为 Junos 增强自动化或 Junos Flex)。有关 Junos 增强型自动化的详细信息,请参阅 运行具有增强自动化功能的 Junos OS 的设备上的 Junos 自动化增强功能概述。
对 Junos OS 15.1 版及更高版本使用 sysctl security.mac.veriexec.state 命令
管理员可以通过从 Junos OS CLI 外壳运行以下命令来检查是否强制执行了 veriexec:
启动外壳程序。
username@hostname> start shell %
使用
sysctl security.mac.veriexec.state
命令。% sysctl security.mac.veriexec.state security.mac.veriexec.state: loaded active enforce %
如果强制执行 veriexec,则输出为
security.mac.veriexec.state: loaded active enforce
。如果未强制执行 veriexec,则输出为security.mac.veriexec.state: loaded active
。
该 security.mac.veriexec.state
命令仅在 Junos OS 15.1 版及更高版本中有效。
检查Veriexec是否正常工作的另一种方法
您可以通过将授权文件(此处为 /usr/bin/id)复制到新位置来确认 veriexec 是否正常工作,如下所示。Veriexec 阻止该操作,因为尽管 /usr/bin/id 存在有效的指纹,但即使文件相同,也没有 /tmp/id 的指纹。正在发生的事情是,veriexec 评估文件的底层 Linux 属性,这些属性在复制后并不相同,而不是文件本身。
启动外壳程序。
username@hostname> start shell #
更改目录,然后将示例文件 /usr/bin/id 复制到新位置。
# /usr/bin/id uid=928(username) gid=20 groups=20,0(wheel),10(field) # cp /usr/bin/id /tmp
结果
如果正在强制执行 veriexec,则会显示身份验证错误。否则,文件将正常运行。
强制执行 veriexec 时的输出(文件被阻止):
# /tmp/id /bin/sh: /tmp/id: Authentication error #
未强制执行 veriexec 时的输出(复制文件):
# /tmp/id #
适用于 SRX 系列设备的支持 Veriexec 的加载程序
支持 veriexec 的加载程序使用 TFTP 服务器或 USB 存储设备中的命令安装 install
Junos OS 映像。
使用 install 命令从
install tftp://[host]/
tftp 服务器安装 Junos OS 映像。loader> install tftp://[host]/package
使用安装命令从
install file:///
USB 存储设备安装 Junos OS 映像。loader> install file:///package
支持 veriexec 的加载程序验证 Junos OS 映像。支持 veriexec 的加载程序仅启动带有指纹的新 Junos OS 映像,不会启动没有指纹或内核的现有 Junos OS 映像。您可以使用该功能 nextboot
检查当前的启动设备。
username@hostname# nextboot Platform: srx-sword eUSB usb current bootdev is: eUSB
Bootupgrade 是 Junos OS 软件包中提供的一项工具,用于支持 BIOS 固件升级。您可以使用该 bootupgrade
命令升级、检查 uboot、手动加载和安装更大尺寸的 veriexec 加载程序。该 bootupgrade -c loader
命令将打印当前加载程序的版本字符串。
在将支持 veriexec 的加载程序安装到 Junos OS 映像之前,将在两个双根分区中执行 Junos OS 指纹识别。仅当两个双根分区都具有带指纹的 Junos OS 时,才允许安装支持 veriexec 的加载程序。
从 Junos OS CLI shell 安装支持 veriexec 的加载程序:
启动外壳程序。
username@hostname> start shell %
-
使用命令安装
bootupgrade -l /boot/veloader
支持 veriexec 的加载程序。% bootupgrade -l /boot/veloader Checking Loader CRC... veloader size 1251641 OK
您可以在此处看到不同的方案:
对于 Junos OS 20.3R1 版及更高版本,请使用命令正常
request system software add /var/tmp/xxx.tgz no-copy no-validate
安装带指纹的 Junos OS。username@hostname> request system software add /var/tmp/junos-srxsme-20.4I-20200810_dev_common.0.0833.tgz no-copy no-validate Formatting alternate root (/dev/ad0s2a)... /dev/ad0s2a: 600.0MB (1228732 sectors) block size 16384, fragment size 2048 using 4 cylinder groups of 150.00MB, 9600 blks, 19200 inodes. super-block backups (for fsck -b #) at: 32, 307232, 614432, 921632 Installing package '/altroot/cf/packages/install-tmp/junos-20.4I-20200810_dev_common.0.0833' ... Verified junos-boot-srxsme.tgz signed by PackageDevelopmentECP256_2020 method ECDSA256+SHA256 Verified junos-srxsme-domestic signed by PackageDevelopmentECP256_2020 method ECDSA256+SHA256 Verified manifest signed by PackageDevelopmentECP256_2020 method ECDSA256+SHA256 WARNING: The software that is being installed has limited support. WARNING: Run 'file show /etc/notices/unsupported.txt' for details. JUNOS 20.4I-20200810_dev_common.0.0833 will become active at next reboot WARNING: A reboot is required to load this software correctly WARNING: Use the 'request system reboot' command WARNING: when software installation is complete Saving state for rollback ...
-
对于 20.3R1 之前的 Junos OS 版本,如果正在使用支持 veriexec 的加载程序,并且支持 veriexec 的加载程序不支持以前版本的目标 Junos OS 映像,请使用命令
request system software add /var/tmp/xxx.tgz no-copy no-validate
从支持 veriexec 的加载程序自动降级到旧加载程序。username@hostname> request system software add /var/tmp/junos-srxsme-19.4R1.3.tgz no-copy no-validate WARNING: Package junos-19.4R1.3 version 19.4R1.3 is not compatible with current loader WARNING: Automatic recovering loader, please wait ... Upgrading Loader... ##################################### Verifying the loader image... OK WARNING: The new boot firmware will take effect when the system is rebooted. WARNING: Loader recover finish. Formatting alternate root (/dev/ad0s1a)... /dev/ad0s1a: 598.5MB (1225692 sectors) block size 16384, fragment size 2048 using 4 cylinder groups of 149.62MB, 9576 blks, 19200 inodes. super-block backups (for fsck -b #) at: 32, 306464, 612896, 919328 Installing package '/altroot/cf/packages/install-tmp/junos-19.4R1.3' ... Verified junos-boot-srxsme-19.4R1.3.tgz signed by PackageProductionEc_2019 method ECDSA256+SHA256 Verified junos-srxsme-19.4R1.3-domestic signed by PackageProductionEc_2019 method ECDSA256+SHA256 Verified junos-boot-srxsme-19.4R1.3.tgz signed by PackageProductionEc_2019 method ECDSA256+SHA256 V erified junos-srxsme-19.4R1.3-domestic signed by PackageProductionEc_2019 method ECDSA256+SHA256 JUNOS 19.4R1.3 will become active at next reboot WARNING: A reboot is required to load this software correctly WARNING: Use the 'request system reboot' command WARNING: when software installation is complete Saving state for rollback ...
-
使用命令检查
request system software add /var/tmp/xxx
Junos OS 软件包是否与安装兼容。username@hostname> request system software add /var/tmp/junos-srxsme-19.4R2.3.tgz WARNING: Package junos-19.4R2.3 version 19.4R2.3 is not compatible with this system. WARNING: Please install a package with veloadr support, 20.3 or higher.
安装将终止,因为 20.3R1 之前的 Junos OS 版本不支持支持 veriexec 的加载程序。