Veriexec ファイル署名と検証 for Junos OS
Veriexec のファイル署名と検証、利点とその使用方法について説明します。
Verified Exec(veriexec とも呼ばれる)は、デバイスの整合性を損なう可能性のある不正なソフトウェアやアクティビティからJunosオペレーティングシステム(OS)を保護するファイル署名および検証スキームです。もともと NetBSD OS 用に開発された veriexec は Junos OS 用に適応され、デフォルトで有効になっています。
許可されたファイル、つまり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:fingerprintfordev<deviceid>,file<fileid><calculatedfingerprint>!= <fingerprintinthemanifest>
ファイルが変更され、結果のフィンガープリントがマニフェストのフィンガープリントと異なる場合は、次の例のようなログメッセージが表示されます。
/kernel:veriexec:fingerprintfordev100728577,file70750 64ea873ed0ca43b113f87fa25fb30f9f60030cec!= 0d9457c041bb3646eb4b9708ba605facb84a2cd0
指紋の不一致は、ファイルが変更されたことを示します。このようなファイルには破損したコードが含まれている可能性があるため、実行しようとしないでください。JTACにお問い合わせください。
Veriexecのメリット
-
セキュアなシステム—ジュニパーネットワークスのルーター、スイッチ、ファイアウォールをセキュリティ侵害から保護します。
-
不正アクセスの防止—攻撃者が永続的な不正アクセスを取得したり、システム障害を引き起こすのをブロックします。
-
マルウェアの実行を防止—署名されていないバイナリ実行を防止することで、不正な変更やマルウェアをブロックします。
-
サポート認証コード—JET SDKを使用して認証を適用し、署名された認証コードをJunos OSに追加します。SDKソリューションの詳細については、 ジュニパー Juniper Extension Toolkit 開発者ガイドを参照してください。
Veriexec が動作するかを確認する方法 — オプション 1
一部の Junos OS プラットフォームでは、veriexec の適用を無効にしたオプション バージョンの Junos OS が提供されています。詳細については、「 Junos 拡張自動化」を参照してください。
管理者は、Junos OS CLIシェルから以下のコマンドを実行することで、veriexecが適用されているかどうかを確認できます。
シェルを起動します。
username@hostname> start shell %
Junos OSリリース15.1以降では
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
veriexec が動作しているかどうかを確認するには、以下に示すように、承認されたファイル( 例:/usr/bin/id)を新しい場所にコピーします。ファイルが同一であっても、有効なフィンガープリントは /usr/bin/id にのみ存在し、 /tmp/id には存在しないため、Veriexec は操作を阻止します。ファイルの整合性を検証するために、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 #
Veriexec Loaderのインストール
veriexec ローダーは、TFTP(Trivial File Transfer Protocol)サーバーまたは USB ストレージ デバイスからインストールする Junos OS イメージを検証します。
-
TFTPサーバーからJunos OSイメージをインストールするには、次のコマンドを使用します。
loader> install tftp://[host]/package
-
以下のコマンドを使用して、USBストレージ デバイスからJunos OSイメージをインストールします。
loader> install file:///package
nextboot機能を使用して、現在の起動デバイスを確認できます。
username@hostname# nextboot
Platform: srx-sword
eUSB
usb
current bootdev is: eUSB
ブートアップグレードは、BIOSファームウェアのアップグレードをサポートするために、Junos OSパッケージで利用可能なツールです。 bootupgrade コマンドを使用して、アップグレード、Uブートのチェック、手動でのロード、およびveriexec対応ローダーのインストールを行うことができます。 bootupgrade -c loader コマンドは、現在のローダーのバージョン文字列を出力します。
Veriexec対応ローダーをJunos OSイメージにインストールする前に、両方のデュアルルートパーティションでJunos OSフィンガープリントの識別が実行されます。veriexec対応ローダーは、両方のデュアルルートパーティションにフィンガープリント付きのJunos OSがある場合にのみインストールできます。
Junos OS CLIシェルからveriexec対応ローダーをインストールします。
シェルを起動します。
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 ...- veriexec対応ローダーが以前のリリースのターゲットJunos OSイメージをサポートしていない場合、そのリリースと互換性のある以前のバージョンのローダーにダウングレードできます。
request system software add /var/tmp/xxx.tgz no-copy no-validateコマンドを使用すると、以前のバージョンのローダーに自動的にダウングレードできます。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 パッケージが veriexec ローダーを使用したインストールと互換性があるかどうかを確認します。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 リリースでサポートされていないため、インストールが終了していることがわかります。