署名キーを使用したサードパーティ製アプリケーションのネイティブな実行
署名キーの概要
Junos OS Evolvedリリース22.4R1以降、署名キーを生成し、それを使用して実行可能ファイルまたは共有オブジェクトに署名できます。実行可能ファイルに署名すると、デバイス上で実行する権限が与えられ、信頼されたアプリケーションを認証されたジュニパーネットワークスソフトウェアと併せて実行することを承認できるようになります。
Junos OS Evolvedでは、ユーザーは、実行のためにメモリにマップされるすべてのファイルに署名する必要があります。これには、次のファイルの種類が含まれます。
-
実行可能およびリンク可能な形式 (ELF) ファイル
-
共有オブジェクト (.so) ファイル
次の種類のファイルは署名する必要はありません。
-
ドッカーコンテナ
-
コンテナ内のアプリケーション
-
スクリプト
メモ:スクリプトは署名する必要はありませんが、実行のために署名されたインタープリターを通過させる必要があります。Junos OS Evolvedには、シェルコマンドで使用できる
python script-name
署名付きPython 2およびPython 3インタプリタが搭載されています。
署名鍵は、完全性測定アーキテクチャ(IMA)と呼ばれるLinuxサブシステムによって制御されます。IMAポリシーは、ファイルを実行する前に実行する必要があるアクションを定義するルールで構成されています。IMA測定ポリシーはファイルのハッシュを測定して保存し、IMA評価ポリシーはファイルに有効なハッシュまたはデジタル署名があることを確認します。IMAは、この検証が成功した場合にのみファイルの実行を許可します。IMAの詳細については、 IMAでJunos OS Evolvedの整合性を保護するを参照してください。
署名鍵は システム鍵ストアに保存され、検証署名鍵に使用される証明書は IMA拡張鍵リングに保存されます。署名キーを生成、インポート、表示、および使用する方法については、引き続きお読みください。
署名キーの生成
鍵は、OpenSSL コマンド行または OpenSSL 構成ファイルを使用して生成できます。
OpenSSL コマンドラインを使用した署名キーの生成
次の OpenSSL コマンドの例を使用して、署名キーを生成できます。
openssl req -new \ -newkey rsa:3072 \ # Create an RSA 3072 key -x509 \ # Need an X509 certificates -sha256 \ # Strong hashing algorithm -nodes \ # No encrypted private-key -out ima-cert.x509 \ # Name of the certificate file -outform DER \ # Key in DER format -keyout privkey.pem \ # Name of the private key
このコマンドは2つのファイルを生成します。
-
privkey.pem
- 実行可能ファイルの署名に使用できる PEM エンコードされた秘密キー。 -
ima-cert.x509
- IMA拡張キーリングにロードされるDERエンコード済み証明書。
OpenSSL コマンドラインは、その機能が制限されています。X509v3 拡張機能の値を設定することはできません。上記のコマンドを使用して生成されたすべてのキーは、認証局(CA)として使用できるため、他の証明書の署名に使用できます。これを防ぐために、OpenSSL構成ファイルを使用できます。
OpenSSL 設定ファイルを使用した署名キーの生成
という名前の ima-x509.cnf
ファイルを作成し、次の内容を貼り付けます。
# Begining of ima-x509.cnf [ req ] default_bits = 2048 distinguished_name = custom_distinguished_name prompt = no string_mask = utf8only x509_extensions = custom_exts [ custom_distinguished_name ] O = Juniper Networks, Inc. CN = IMA extended signing key emailAddress = john.smith@juniper.net [ custom_exts ] basicConstraints=critical,CA:FALSE keyUsage=digitalSignature subjectKeyIdentifier=hash authorityKeyIdentifier=keyid # EOF
構成ファイルが作成されたら、次の OpenSSL コマンドを使用して および ファイルを作成しますima-privkey.pem
ima-cert.x509
。
openssl req -new \ -nodes \ -utf8 \ -sha1 \ -days 36500 \ -batch \ -x509 \ -config ima-x509.cnf \ -outform DER -out ima-cert.x509 \ -keyout ima-privkey.pem
秘密キー ファイルは署名キーの生成に使用され、証明書ファイルはima-privkey.pem
ima-cert.x509
署名の検証に使用されます。どちらのファイルも、署名キーをシステムキーストアおよびIMA拡張キーリングにインポートするプロセスで使用されます。
システムキーストアおよびIMA拡張キーリングへの署名キーのインポート
署名鍵は、使用する前にシステム鍵ストアにインポートする必要があります。システムキーストアにインポートされたキーは、IMA拡張キーリングに自動的にインポートされます。キーは両方のルーティング エンジンにインポートされます。
署名鍵をシステム鍵ストアにインポートするには、以下の 2 つの必須引数を指定して コマンド request security system-keystore import
を使用します。
-
key-name
- キーの一意の名前 -
x509-cert
- DER でエンコードされた証明書ファイルへのパス
次のコマンド例では、証明書ファイルima-cert.x509
を使用して という名前のima-test-keyキーを作成します。
user@host> request security system-keystore import key-name ima-test-key x509-cert ima-cert.x509 Key Name: ima-test-key X509 Cert Path: /etc/ima-ext/ima-test-key/ima-cert.x509 Key SKI: b71b35e380517cd224b46072dadeb6c53e0a58a1
キーがに system-keystore
正常にインポートされると、キーの名前、ディスク上の証明書へのパス、およびキーのサブジェクトキー識別子(SKI)を示す上記の出力が表示されます。このSKIがIMA拡張キーリングにロードされたキーと一致するかどうかを確認するには、次のコマンドを使用します。
user@host> show security integrity extended-keyring Keyring 351716837 ---lswrv 0 0 keyring: ima_ext 684930381 --als--v 0 0 \_ asymmetric: Juniper Extended Signing Key: b71b35e380517cd224b46072dadeb6c53e0a58a1
システムキーストアとIMA拡張キーリングの表示
Junos OS Evolved CLI show
コマンドを使用して、システムキーストアとIMA拡張キーリングの内容を表示できます。
コマンドを使用して show security integrity system-keystore
、システム鍵ストアで使用可能な署名鍵を表示します。
user@host> show security integrity system-keystore Available signing keys: --- Key Name: ima-test-key X509 Cert Path: /etc/ima-ext/ima-test-key/ima-cert.x509 Key SKI: b71b35e380517cd224b46072dadeb6c53e0a58a1 --- Key Name: test-key1 X509 Cert Path: /etc/ima-ext/test-key1/ima-cert.x509 Key SKI: 332f173d61bba03fed5399a609523cbd3cfe66b3 --- Key Name: test-key2 X509 Cert Path: /etc/ima-ext/test-key2/ima-cert.x509 Key SKI: 26ebafd58b54f7b8b530d0311503fd84873ee754 ---
Key SKIフィールドの情報を使用して、これらのキーをIMA拡張キーリングにマッピングできます。
show security integrity extended-keyring
IMA拡張キーリングの内容を表示するには、次のコマンドを使用します。
user@host> show security integrity extended-keyring Keyring 351716837 ---lswrv 0 0 keyring: ima_ext 684930381 --als--v 0 0 \_ asymmetric: Juniper Extended Signing Key: b71b35e380517cd224b46072dadeb6c53e0a58a1 316767440 --als--v 0 0 \_ asymmetric: Juniper Extended Signing Key: 26ebafd58b54f7b8b530d0311503fd84873ee754 950431262 --als--v 0 0 \_ asymmetric: Juniper Extended Signing Key: 332f173d61bba03fed5399a609523cbd3cfe66b3
アプリケーションに署名する方法
署名鍵がシステム鍵ストアにインポートされると、その鍵を使用して実行可能バイナリーに署名できます。
request security integrity measure file filename key key-name
コマンドを使用してファイルに署名します。
以下のコマンド例では、 という名前のキーima-test-keyで署名されている という名前のima-testファイルを表示しています。
user@host> request security integrity measure file ima-test key ima-test-key Successfully signed file /data/var/home/root/ima-test
次のように、コマンドを使用してファイルが正常に署名 request security integrity appraise file filename key key-name
されたことを確認できます。
user@host> request security integrity appraise file ima-test key ima-test-key File /data/var/home/root/ima-test has a valid IMA signature
ファイルが正しく署名されていない場合は、次のメッセージが表示されます。
user@host> request security integrity appraise file ima-test key ima-test-key warning: IMA signature verification failed for /data/var/home/root/ima-test using ima-test-key IMA appraisal for /data/var/home/root/ima-test failed.
署名されたファイルは、Junos OS Evolvedデバイス上でネイティブに実行できます。