Verified Exec(Veriexec)Junos OS用ファイル署名と検証
Veriexec のファイル署名と検証、利点とその使用方法について説明します。
デバイスの整合性を損なう可能性のある不正なソフトウェアやアクティビティからJunosオペレーティングシステム(OS)を保護するために、Verified Exec(Veriexec)は、承認された信頼できるソフトウェアのみが実行されるようにするファイル署名と検証のフレームワークを提供します。Junos OS は、もともと NetBSD 用に開発された Veriexec フレームワークを適応させ、デフォルトで有効にして、ファイル検証を通じてソフトウェアの整合性を確保します。
Veriexec は、承認された各 Junos OS ファイルに関連付けられたフィンガープリントを使用して、その整合性を検証し、ファイルを開いたり実行したりできるかどうかを判断します。
Veriexecは、システムで使用される前に整合性を検証することで、以下を含む重要なソフトウェアコンポーネントの保護をサポートします。
- カーネル
- カーネルモジュール
- 実行可能ファイル
- 共有ライブラリ
- ソフトウェアパッケージ
- その他の保護システムファイル
Veriexecの仕組み
Veriexec は、不変のままでなければならない実行可能ファイルのフィンガープリントを含む、デジタル署名されたマニフェストを使用します。
検証プロセスは通常、次の手順に従います。
- Veriexec ローダーは、マニフェストに関連付けられたデジタル署名を検証します。
- 検証に成功すると、ローダーはマニフェストの内容をカーネルに提供します。
- システムは起動時にカーネルを検証します。
- システムは、カーネル・モジュールがロードされたとき、起動時またはシステム操作中にそれを検証します。
- カーネルは、ファイルが期待されるフィンガープリントと一致していることを検証してから、使用を許可します。
Veriexec では、カーネル、ルート・ファイル・システム・イメージ、およびカーネル・モジュールが検証に合格してから、システムが使用できるようになる必要があります。
Veriexecの適用が有効になっている場合、検証済みのフィンガープリントを持つ実行可能ファイルのみが実行できます。また、保護されたファイルは書き込んだり、変更したり、変更したりすることはできません。
検証範囲
Veriexec は、複数の段階でソフトウェアの整合性を検証します。
| コンポーネント | 検証段階 |
| カーネル | システム起動時 |
| ルートファイルシステムイメージ | システム起動時 |
| カーネルモジュール | 起動時または実行時に読み込んだ場合 |
| ソフトウェアパッケージ | インストール前に |
| 保護されたファイル | 使用前の実行時 |
Veriexec フレームワークは、インストール前に、ソフトウェア パッケージが変更されておらず、信頼できることを確認します。パッケージ検証と実行時検証は、同じVeriexecフレームワークを使用し、同じハッシュアルゴリズムをサポートします。
スクリプト実行に関する考慮事項
-
Veriexec は、検証済みシェル スクリプトがマニフェストに記載されていない署名されていないスクリプトを実行するのをブロックします。
-
/bin/shファイルを使用して、任意のスクリプトを実行できます。セキュリティの観点から見ると、これらのスクリプトは、ユーザーの認証と権限によって実行が制御されるため、対話型コマンドと同様に扱われます。
検証の失敗
フィンガープリントが欠落しているか正しくない場合、ローダーまたはカーネルはファイルを拒否します。影響は、ファイルの種類とシステム内での役割によって異なります。
検証に失敗した場合:
- ローダーまたはカーネルは、影響を受けるファイルを拒否します。
- 影響はファイルの重要性によって異なります。
- デフォルトでは、ローダーは検証に失敗したファイルをスキップします。
- オプションで、不適切なハッシュに遭遇した場合にブートプロセスを停止するようにローダーを設定することもできます。
マニフェストおよびハッシュアルゴリズム
各インストールイメージには、保護されたファイルのフィンガープリントと関連属性を格納する読み取り専用マニフェストが含まれています。
このトピックのフィンガープリントの例では、説明目的でのみSHA-1ハッシュを使用しています。Veriexec は、SHA-1、SHA-256、SHA-384、および SHA-512 ハッシュ アルゴリズムをサポートします。Veriexec が検証に使用するハッシュ アルゴリズムは、Junos OS リリースとプラットフォームによって決まります。
マニフェストは、保護された各ファイルを識別し、その予期されるフィンガープリントと関連する属性を格納します。マニフェストには、次のようなエントリが含まれています。
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
指紋の不一致とログメッセージ
計算されたファイルのフィンガープリントがマニフェストに保存されているフィンガープリントと一致しない場合、Veriexecはログメッセージを生成します。
ログメッセージの形式は次のとおりです。
/kernel:veriexec:fingerprint for dev <deviceid>, file <fileid><calculatedfingerprint>!= <fingerprintinthemanifest>
ファイルが変更されていて、結果のフィンガープリントがマニフェストのフィンガープリントと異なる場合は、次のようなログメッセージが表示されます。
/kernel:veriexec:fingerprint for dev 100728577, file 70750 64ea873ed0ca43b113f87fa25fb30f9f60030cec!= 0d9457c041bb3646eb4b9708ba605facb84a2cd0
フィンガープリントの不一致は、ファイルの内容がマニフェストに保存されている信頼できるフィンガープリントと一致しないことを示します。この不一致は、ファイルの破損、ストレージの問題、または不正な変更が原因で発生する可能性があります。
検証に失敗した重要なファイルは信頼できません。JTACにお問い合わせください。
Veriexecのメリット
-
セキュアなシステム—ジュニパーネットワークスのルーター、スイッチ、ファイアウォールをセキュリティ侵害から保護します。
-
不正アクセスの防止—攻撃者が永続的な不正アクセスを取得したり、システム障害を引き起こすのをブロックします。
-
マルウェアの実行を防止—署名されていないバイナリ実行を防止することで、不正な変更やマルウェアをブロックします。
-
サポート認証コード—JET SDKを使用してVeriexecを適用し、署名された認証コードをJunos OSに追加します。SDKソリューションの詳細については、 ジュニパー Juniper Extension Toolkit 開発者ガイドを参照してください。
Veriexec適用ステータスの確認
サポートされているプラットフォームでは、Junos OS は Veriexec の適用を無効にしたオプション バージョンを提供します。この機能とそのユースケースについて、詳しくは Junos拡張自動化を参照してください。
Veriexecが適用されているかどうかを確認するには、Junos OS CLIシェルから以下のコマンドを実行します。
-
シェルを起動します。
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ファイルの適用を検証する
Veriexec の適用がアクティブであることを確認するには、以下に示すように、承認されたファイルをマニフェスト スコープ外の保護されていない場所 ( /usr/bin/id など) に新しい場所にコピーします。Veriexec は、マニフェストに /usr/bin/id の有効なエントリが含まれていますが、 /tmp/id の有効なエントリが含まれているため、コピーされたファイルの実行を妨げます。コピーしてもファイルの内容は変更されませんが、Veriexec はマニフェスト エントリ (パスや関連するメタデータを含む) に対してファイルを検証します。その結果、Veriexec は、保護されたマニフェストエントリーに一致しないという理由で、コピーされたファイルをブロックします。
-
シェルを起動します。
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 が強制されていない場合、ファイルは正常に実行されます。
Veriexecが適用されていない場合に生成される出力で、コピーされたファイルが正常に実行されることを示しています。
# /tmp/id /bin/sh: /tmp/id: Authentication error #
Veriexecが適用されていない場合に生成される出力で、ファイルがコピーされていることを示す
# /tmp/id #
Veriexec Loaderのインストール
Veriexec 対応ローダー(veloader)は、Junos OS リリース 19.2 以降の BSDX ベースの Junos プラットフォームで使用されています。ローダーは、Junos OSイメージが起動時に信頼される前に検証します。Veriexec ローダーは、TFTP(Trivial File Transfer Protocol)サーバーまたは USB ストレージ デバイスからインストールする Junos OS イメージを検証します。
-
TFTPサーバーからJunos OSイメージをインストールするには、以下のコマンドを使用します。
loader> install tftp://[host]/package
-
USBストレージデバイスからJunos OSイメージをインストールするには、以下のコマンドを使用します。
loader> install file:///package
ローダーは、フィンガープリントを含むJunos OSイメージのみを起動し、フィンガープリントや有効なカーネルを含まないイメージは起動しません。 nextboot 機能を使用して、現在の起動デバイスを確認できます。
username@hostname# nextboot
Platform: srx-sword
eUSB
usb
current bootdev is: eUSB
ブートアップグレードは、BIOSファームウェアのアップグレードをサポートするために、Junos OSパッケージで利用可能なツールです。 bootupgrade シェルコマンドを使用して、Veriexec対応ローダーのアップグレード、Uブートのチェック、手動でのロード、インストールを行うことができます。 bootupgrade -c loader コマンドは、現在のローダーのバージョン文字列を出力します。
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をインストールします。no-validateオプションはパッケージ署名の検証を無効にせず、システムは無効なパッケージを拒否し続けます。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 Verified 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 veloader support, 20.3 or higher.
この例では、Veriexec ローダーが 20.3R1 より前の Junos OS リリースをサポートしていないため、システムはインストールを終了します。
-