Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Verified Exec(Veriexec)Junos OS用ファイル署名と検証

Veriexec のファイル署名と検証、利点とその使用方法について説明します。

デバイスの整合性を損なう可能性のある不正なソフトウェアやアクティビティからJunosオペレーティングシステム(OS)を保護するために、Verified Exec(Veriexec)は、承認された信頼できるソフトウェアのみが実行されるようにするファイル署名と検証のフレームワークを提供します。Junos OS は、もともと NetBSD 用に開発された Veriexec フレームワークを適応させ、デフォルトで有効にして、ファイル検証を通じてソフトウェアの整合性を確保します。

Veriexec は、承認された各 Junos OS ファイルに関連付けられたフィンガープリントを使用して、その整合性を検証し、ファイルを開いたり実行したりできるかどうかを判断します。

Veriexecは、システムで使用される前に整合性を検証することで、以下を含む重要なソフトウェアコンポーネントの保護をサポートします。

  • カーネル
  • カーネルモジュール
  • 実行可能ファイル
  • 共有ライブラリ
  • ソフトウェアパッケージ
  • その他の保護システムファイル

Veriexecの仕組み

Veriexec は、不変のままでなければならない実行可能ファイルのフィンガープリントを含む、デジタル署名されたマニフェストを使用します。

検証プロセスは通常、次の手順に従います。

  1. Veriexec ローダーは、マニフェストに関連付けられたデジタル署名を検証します。
  2. 検証に成功すると、ローダーはマニフェストの内容をカーネルに提供します。
  3. システムは起動時にカーネルを検証します。
  4. システムは、カーネル・モジュールがロードされたとき、起動時またはシステム操作中にそれを検証します。
  5. カーネルは、ファイルが期待されるフィンガープリントと一致していることを検証してから、使用を許可します。

Veriexec では、カーネル、ルート・ファイル・システム・イメージ、およびカーネル・モジュールが検証に合格してから、システムが使用できるようになる必要があります。

Veriexecの適用が有効になっている場合、検証済みのフィンガープリントを持つ実行可能ファイルのみが実行できます。また、保護されたファイルは書き込んだり、変更したり、変更したりすることはできません。

検証範囲

Veriexec は、複数の段階でソフトウェアの整合性を検証します。

コンポーネント 検証段階
カーネル システム起動時
ルートファイルシステムイメージ システム起動時
カーネルモジュール 起動時または実行時に読み込んだ場合
ソフトウェアパッケージ インストール前に
保護されたファイル 使用前の実行時

Veriexec フレームワークは、インストール前に、ソフトウェア パッケージが変更されておらず、信頼できることを確認します。パッケージ検証と実行時検証は、同じVeriexecフレームワークを使用し、同じハッシュアルゴリズムをサポートします。

スクリプト実行に関する考慮事項

  • Veriexec は、検証済みシェル スクリプトがマニフェストに記載されていない署名されていないスクリプトを実行するのをブロックします。

  • /bin/shファイルを使用して、任意のスクリプトを実行できます。セキュリティの観点から見ると、これらのスクリプトは、ユーザーの認証と権限によって実行が制御されるため、対話型コマンドと同様に扱われます。

検証の失敗

フィンガープリントが欠落しているか正しくない場合、ローダーまたはカーネルはファイルを拒否します。影響は、ファイルの種類とシステム内での役割によって異なります。

検証に失敗した場合:

  • ローダーまたはカーネルは、影響を受けるファイルを拒否します。
  • 影響はファイルの重要性によって異なります。
  • デフォルトでは、ローダーは検証に失敗したファイルをスキップします。
  • オプションで、不適切なハッシュに遭遇した場合にブートプロセスを停止するようにローダーを設定することもできます。

マニフェストおよびハッシュアルゴリズム

各インストールイメージには、保護されたファイルのフィンガープリントと関連属性を格納する読み取り専用マニフェストが含まれています。

このトピックのフィンガープリントの例では、説明目的でのみSHA-1ハッシュを使用しています。Veriexec は、SHA-1、SHA-256、SHA-384、および SHA-512 ハッシュ アルゴリズムをサポートします。Veriexec が検証に使用するハッシュ アルゴリズムは、Junos OS リリースとプラットフォームによって決まります。

マニフェストは、保護された各ファイルを識別し、その予期されるフィンガープリントと関連する属性を格納します。マニフェストには、次のようなエントリが含まれています。

指紋の不一致とログメッセージ

計算されたファイルのフィンガープリントがマニフェストに保存されているフィンガープリントと一致しない場合、Veriexecはログメッセージを生成します。

ログメッセージの形式は次のとおりです。

ファイルが変更されていて、結果のフィンガープリントがマニフェストのフィンガープリントと異なる場合は、次のようなログメッセージが表示されます。

フィンガープリントの不一致は、ファイルの内容がマニフェストに保存されている信頼できるフィンガープリントと一致しないことを示します。この不一致は、ファイルの破損、ストレージの問題、または不正な変更が原因で発生する可能性があります。

検証に失敗した重要なファイルは信頼できません。JTACにお問い合わせください。

Veriexecのメリット

  • セキュアなシステム—ジュニパーネットワークスのルーター、スイッチ、ファイアウォールをセキュリティ侵害から保護します。

  • 不正アクセスの防止—攻撃者が永続的な不正アクセスを取得したり、システム障害を引き起こすのをブロックします。

  • マルウェアの実行を防止—署名されていないバイナリ実行を防止することで、不正な変更やマルウェアをブロックします。

  • サポート認証コード—JET SDKを使用してVeriexecを適用し、署名された認証コードをJunos OSに追加します。SDKソリューションの詳細については、 ジュニパー Juniper Extension Toolkit 開発者ガイドを参照してください。

Veriexec適用ステータスの確認

サポートされているプラットフォームでは、Junos OS は Veriexec の適用を無効にしたオプション バージョンを提供します。この機能とそのユースケースについて、詳しくは Junos拡張自動化を参照してください。

Veriexecが適用されているかどうかを確認するには、Junos OS CLIシェルから以下のコマンドを実行します。

  1. シェルを起動します。

  2. sysctl security.mac.veriexec.stateコマンドを使用します。

    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 は、保護されたマニフェストエントリーに一致しないという理由で、コピーされたファイルをブロックします。

  1. シェルを起動します。

  2. ディレクトリーを変更してから、許可されたファイル ( 例えば /usr/bin/id) を新しい場所にコピーします。

結果

Veriexecが適用されると、システムは認証エラーを生成します。Veriexec が強制されていない場合、ファイルは正常に実行されます。

Veriexecが適用されていない場合に生成される出力で、コピーされたファイルが正常に実行されることを示しています。

Veriexecが適用されていない場合に生成される出力で、ファイルがコピーされていることを示す

Veriexec Loaderのインストール

Veriexec 対応ローダー(veloader)は、Junos OS リリース 19.2 以降の BSDX ベースの Junos プラットフォームで使用されています。ローダーは、Junos OSイメージが起動時に信頼される前に検証します。Veriexec ローダーは、TFTP(Trivial File Transfer Protocol)サーバーまたは USB ストレージ デバイスからインストールする Junos OS イメージを検証します。

  • TFTPサーバーからJunos OSイメージをインストールするには、以下のコマンドを使用します。

  • USBストレージデバイスからJunos OSイメージをインストールするには、以下のコマンドを使用します。

Veriexec対応ローダーが、Junos OSイメージを検証します。

ローダーは、フィンガープリントを含むJunos OSイメージのみを起動し、フィンガープリントや有効なカーネルを含まないイメージは起動しません。 nextboot 機能を使用して、現在の起動デバイスを確認できます。

ブートアップグレードは、BIOSファームウェアのアップグレードをサポートするために、Junos OSパッケージで利用可能なツールです。 bootupgrade シェルコマンドを使用して、Veriexec対応ローダーのアップグレード、Uブートのチェック、手動でのロード、インストールを行うことができます。 bootupgrade -c loader コマンドは、現在のローダーのバージョン文字列を出力します。

Veriexec対応ローダーをインストールする前に、システムは両方のデュアルルートパーティションにJunos OSフィンガープリントが含まれていることを検証します。

Junos OS CLIシェルからVeriexec対応ローダーをインストールします。

  1. シェルを起動します。

  2. bootupgrade -l /boot/veloaderコマンドを使用して、Veriexec対応ローダーをインストールします。

  3. ここでは、さまざまなシナリオを確認できます。

    • request system software add /var/tmp/xxx.tgz no-copy no-validateコマンドを使用して、フィンガープリント付きのJunos OSをインストールします。no-validateオプションはパッケージ署名の検証を無効にせず、システムは無効なパッケージを拒否し続けます。

    • Veriexec 対応ローダーが以前のリリースのターゲット Junos OS イメージをサポートしていない場合、ローダーをそのリリースと互換性のあるバージョンにダウングレードできます。 request system software add /var/tmp/xxx.tgz no-copy no-validate コマンドを使用すると、以前のバージョンのローダーに自動的にダウングレードできます。
    • request system software add /var/tmp/xxx コマンドを使用して、Junos OS パッケージが Veriexec ローダーと互換性があるかどうかを確認します。

      この例では、Veriexec ローダーが 20.3R1 より前の Junos OS リリースをサポートしていないため、システムはインストールを終了します。