Junos OS用のVeriexecファイル署名と検証
Veriexecのファイル署名と検証、メリット、SRXシリーズファイアウォールでの使用方法について説明します。
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:fingerprintfordev100728577,file70750 64ea873ed0ca43b113f87fa25fb30f9f60030cec!= 0d9457c041bb3646eb4b9708ba605facb84a2cd0
ログメッセージの形式は次のとおりです。
/kernel:veriexec:fingerprintfordev<deviceid>,file<fileid><calculatedfingerprint>!= <fingerprintinthemanifest>
フィンガープリントの不一致は、ファイルが変更されたことを示します。ファイルを実行しようとしないでください。破損したコードが含まれている可能性があります。JTACにお問い合わせください。
Veriexecの利点
Veriexecの主な利点を以下に示します。
-
システムのセキュリティを保護します。 Veriexecは、ジュニパーネットワークスのルーター、スイッチ、ファイアウォールをセキュリティ侵害から保護します。
-
不正アクセスの防止: これにより、攻撃者が持続的に不正アクセスを取得したり、システム障害が発生したりするのを防ぎます。
-
マルウェアの実行を阻止する: 署名されていないバイナリの実行を防ぐことで、不正な変更やマルウェアを阻止します。
-
認定コードをサポート: お客様は、JET SDKを使用してVeriexecの適用により、署名済みの認証済みコードをJunos OSに追加できます。
-
SDKガイドを参照してください: SDKソリューションの詳細については、Juniper Juniper Extension Toolkit開発者ガイドの「 オンデバイスJETアプリケーションの開発 」を参照してください。
Junos OS を実行しているデバイスで Veriexec が適用されているかどうかを確認する方法 - オプション 1
次のサブセクションでは、veriexecが適用されているかどうかを確認する手順について説明します。
一部のJunos OSプラットフォームでは、Veriexecの強制を無効にしたオプションのJunos OSバージョン(Junos Enhanced AutomationまたはJunos Flexと呼ばれます)が提供されています。Junos Enhanced Automation の詳細については、 Junos OS と拡張自動化を実行 するデバイスでの Junos Automation 拡張機能の概要を参照してください。
- Junos OS リリース 15.1 以降では、sysctl security.mac.veriexec.state コマンドを使用します。
- Veriexecが動作するかどうかを確認する方法 - オプション2
- 業績
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になります。
Veriexecが動作するかどうかを確認する方法 - オプション2
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:///install コマンドを使用して、USB ストレージ デバイスから Junos OS イメージをインストールします。loader> install file:///package
nextboot機能を使用して、現在の起動デバイスを確認できます。
username@hostname# nextboot
Platform: srx-sword
eUSB
usb
current bootdev is: eUSB
ブートアップグレードは、Junos OSパッケージで利用可能なツールで、BIOSファームウェアのアップグレードをサポートします。 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
ここでは、さまざまなシナリオを確認できます。
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対応ローダーが使用中で、以前のリリースのターゲット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リリースでサポートされていないため、インストールが終了します。