Veriexec Junos OS 文件签名和验证
了解 Veriexec 文件签名和验证、优势以及如何在 SRX 系列防火墙上使用它。
Verified Exec(也称为 veriexec)是一种文件签名和验证方案,可保护 Junos作系统 (OS) 免受可能损害设备完整性的未经授权的软件和活动的侵害。veriexec 最初是为 NetBSD OS 开发的,经过 Junos OS 的调整,默认启用。
授权文件(即 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的主要优势:
-
保护系统安全: Veriexec 保护瞻博网络路由器、交换机和防火墙免受安全漏洞侵害。
-
防止未经授权的访问: 它可以阻止威胁行为者进行持久的、未经授权的访问或导致系统故障。
-
阻止恶意软件的执行: 通过防止执行未签名的二进制文件,它可以阻止未经授权的修改和恶意软件。
-
支持授权代码: 客户可以使用 JET SDK 将签名、授权的代码添加到 Junos OS,并实施 Veriexec。
-
请参阅 SDK 指南: 有关 SDK 解决方案的更多信息,请参阅《瞻博网络扩展工具包开发人员指南》中的 开发设备上的 JET 应用程序 。
如何验证是否在运行 Junos OS 的设备上实施了 Veriexec - 选项 1
以下小节提供了有关如何检查是否强制执行 veriexec 的过程。
某些 Junos OS 平台提供禁用 veriexec 实施的可选版本的 Junos OS(称为 Junos Enhanced Automation 或 Junos Flex)。有关 Junos 增强型自动化的详细信息,请参阅 在具有增强型自动化功能的情况下运行 Junos OS 的设备上的 Junos 自动化增强功能概述。
对 Junos OS 15.1 及更高版本使用 sysctl security.mac.veriexec.state 命令
管理员可以通过从 Junos OS CLI shell 运行以下命令来检查是否强制执行了 veriexec:
启动 shell。
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
。
如何验证 Veriexec 是否有效 - 选项 2
您可以通过将授权文件(此处 为 /usr/bin/id)复制到新位置来确认 veriexec 是否正常工作,如下所示。Veriexec 会阻止该作。/usr/bin/id 具有有效的指纹,但 /tmp/id 没有,即使文件相同。正在发生的事情是veriexec评估文件的底层Linux属性,这些属性在复制后并不相同,而不是文件本身。
启动 shell。
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 的加载程序使用 install
TFTP 服务器或 USB 存储设备的命令安装 Junos OS 映像。
-
使用
install tftp://[host]/
install 命令从 tftp 服务器安装 Junos OS 映像。loader> install tftp://[host]/package
-
使用
install file:///
install 命令从 USB 存储设备安装 Junos OS 映像。loader> install file:///package
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 的加载程序:
启动 shell。
username@hostname> start shell %
-
bootupgrade -l /boot/veloader
使用命令安装支持 veriexec 的加载程序。% bootupgrade -l /boot/veloader Checking Loader CRC... veloader size 1251641 OK
您可以在此处看到不同的方案:
使用
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 ...
-
对于较旧的 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 的加载程序。