Veriexec の概要
検証済み Exec(veriexec とも呼ばれます)は、デバイスの整合性を損なう可能性のある不正なソフトウェアやアクティビティから Junos オペレーティング システム(OS)を保護するファイル署名および検証スキームです。もともとNetBSD OS用に開発されたveriexecは、Junos OSに適合し、Junos OSリリース7.5以降でデフォルトで有効になっています。
承認されたファイル、つまりJunos OSに同梱されている特定のファイルにはフィンガープリントが関連付けられており、veriexecはこれをチェックして、ファイルが使用可能(実行可能、または開く可能)かどうかを判断します。有効なフィンガープリントがないファイルは、検証済みの入力を必要とするアプリケーションで実行または読み取ることはできません。
/bin/sh は検証済みの入力を必要としないことに注意してください。リスクの観点からは、ユーザー認証とアクセス許可によってすでに制御されている対話型コマンドと同じであるため、任意のスクリプトを実行するために使用できます。ただし、検証済みのシェルスクリプトに任意のスクリプト、つまりマニフェストに署名がないファイルを実行する命令が含まれている場合、そのファイルの実行は防止されます。
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を使用して、Junos OSにveriexecを適用した署名および承認済みコードを追加することができます。SDKソリューションの詳細については、『Juniper Extension Toolkit開発者ガイド』の「オンデバイスJETアプリケーションの開発」を参照してください。
Junos OSを実行しているデバイスにVeriexecが適用されているかどうかを確認する方法
次のサブセクションでは、veriexec が適用されているかどうかを確認する手順について説明します。
一部のJunos OSプラットフォームでは、veriexecの適用が無効になったJunos OSのオプションバージョンを提供しています(Junos Enhanced AutomationまたはJunos Flexと呼ばれます)。Junos 拡張自動化の詳細については、自動化 が強化された Junos OS を実行するデバイスにおける Junos 自動化拡張機能の概要を参照してください。
- Junos OS リリース 15.1 以降の sysctl security.mac.veriexec.state コマンドを使用します。
- Veriexecが動作しているかどうかを確認する別の方法
- 業績
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 Release 15.1 以降でのみ有効です。
Veriexecが動作しているかどうかを確認する別の方法
veriexec が動作しているかどうかを確認するには、以下のように認証済みファイル (ここでは /usr/bin/id) を新しい場所にコピーします。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 tftp://[host]/
install コマンドを使用して、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
ブートアップグレードは、BIOS ファームウェアのアップグレードをサポートするために Junos OS パッケージに含まれるツールです。 bootupgrade
コマンドを使用して、アップグレード、uboot のチェック、手動ロード、およびより大きなサイズの veriexec 対応ローダーのインストールを行うことができます。 bootupgrade -c loader
コマンドは、現在のローダーのバージョン文字列を出力します。
veriexec対応ローダーをJunos OSイメージにインストールする前に、両方のデュアルルートパーティションでJunos OSフィンガープリント識別が実行されます。両方のデュアルルートパーティションにフィンガープリント付きのJunos OSが搭載されている場合にのみ、veriexec対応ローダーのインストールが許可されます。
Junos OS CLI シェルから 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対応ローダーが使用されており、以前のリリースのターゲットJunos OSイメージがveriexec対応ローダーでサポートされていない場合、
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.
veriexec対応ローダーは20.3R1より前のJunos OSリリースでサポートされていないため、インストールは終了します。