概要
- RHEL8以降、RHEL系統のLinuxディストリビューションには、crypto-policiesパッケージが含まれるようになりました
- この記事はcyrpto-policiesについての備忘録です
crypto-policiesとは
crypto-policiesは、TLS、SSH、DNSSec、およびKerberosの各プロトコルや、それらを利用するサーバー、あるいはJavaアプリケーション等について、従来の個別での暗号スイート管理・設定を省力化し、サーバー単位で一括管理しやすくするものです
従来Linuxでは、アプリやライブラリごとに個別に暗号スイートの管理をしていました。しかし一部のアプリやライブラリで十分な強度のある暗号スイート設定を維持していても、もし他の箇所で暗号スイートに脆弱な暗号が含まれていたら、攻撃者は強固な部位を迂回して脆弱な部位を攻撃するでしょう。crypto-policiesを使うメリットは暗号スイートの一括管理によって安全性を確保することにあります
暗号スイート(Cipher suite)とは
暗号スイートは、使用する暗号技術の組み合わせのことです
暗号技術には様々な用途や性質を持つものがあり、必要に応じて複数の暗号技術を組み合わせて使用します
- 時代の変遷や状況の変化によって、新しい暗号技術が使えるようになったり、これまで安全とされていた暗号技術が専門機関によって脆弱と判断され非推奨になったりします
- このような推奨される暗号技術の変化に合わせて、管理するシステムで使用される暗号スイートを管理することは大事なことといえます
crypto-policiesによる暗号スイート管理
crypto-policiesは、ポリシーおよびサブポリシーの組み合わせによって暗号スイートを管理します
ポリシー
暗号スイートは基本的にポリシーに定義されています
crypto-policiesは、それぞれの性質に応じて設定されたポリシーがあります
通常はこれらを選択することによって設定します
ポリシー | 概要 | 留意点その他 |
---|---|---|
DEFAULT | デフォルトのポリシー | 初期状態、通常これで問題ない |
LEGACY | 互換性を重視したポリシー | 安全ではない暗号技術も含まれる |
FUTURE | 近い将来を想定したポリシー | 強力だが互換性に欠ける |
FIPS | 米国政府基準のポリシー | 米国政府機関で使用するためのもの |
サブポリシー
サブポリシーは、ポリシーの断片のようなものです
より柔軟な暗号スイート管理を可能とするために、サブポリシーをポリシーに組み合わせることで、ポリシーに定義された暗号スイートから特定の暗号技術を追加したり除外したりすることが可能です
crypto-policiesの使い方
主にupdate-crypto-policies
コマンドを使います
現在のポリシー確認
$ update-crypto-policies --show
DEFAULT
ポリシーの切り替え
$ update-crypto-policies --show
DEFAULT
$ update-crypto-policies --set FUTURE
(再起動、または必要なプロセスを再起動)
$ update-crypto-policies --show
FUTURE
サブポリシーを組み合わせる
DEFAULTポリシーにSHA1を追加して、古いOSや機器と互換性を確保する場合
$ update-crypto-policies --show
DEFAULT
$ update-crypto-policies --set DEFAULT:SHA1
(再起動、または必要なプロセスを再起動)
$ update-crypto-policies --show
DEFAULT:SHA1
カスタマイズによるより細かな管理
ポリシーやサブポリシーは予め用意されたものだけではなく、管理者が独自に作成して適用することができます
カスタムサブポリシーの作成
カスタムサブポリシーを作成することで、任意の内容のサブポリシーを作成することが可能です
もしDEFAULTポリシーにSHA1を追加して、古いOSや機器と互換性を確保する場合でも、それがsshに限定できるのならば、サブポリシーSHA1を用いて全体にSHA1を許可するよりも、sshに限定して許可する方が望ましいでしょう
$ cat /usr/share/crypto-policies/policies/modules/SHA1.pmod
# This subpolicy adds SHA1 hash and signature support
hash = SHA1+
sign = ECDSA-SHA1+ RSA-PSS-SHA1+ RSA-SHA1+
sha1_in_certs = 1
$ cd /etc/crypto-policies/policies/modules
$ cp -a /usr/share/crypto-policies/policies/modules/SHA1.pmod SHA1_SSH.pmod
$ vi SHA1_SSH.pmod
$ cat SHA1_SSH.pmod
# This subpolicy adds SHA1 hash and signature support
hash@SSH = SHA1+
sign@SSH = ECDSA-SHA1+ RSA-PSS-SHA1+ RSA-SHA1+
#sha1_in_certs = 1
$ update-crypto-policies --set DEFAULT:SHA1_SSH
$ systemctl restart sshd
$ update-crypto-policies --show
DEFAULT:SHA1_SSH
記述例 | 意味 |
---|---|
SHA1+ | 末尾に追加 |
+SHA1 | 先頭に追加 |
-SHA1 | 削除 |
カスタムポリシーの作成
ポリシーそのものを任意の内容で作成することが可能です
$ cd /etc/crypto-policies/policies
$ cp -a /usr/share/crypto-policies/policies/DEFAULT.pol MYPOLICY.pol
$ vi MYPOLICY.pol
$ update-crypto-policies --set MYPOLICY
(再起動)
$ update-crypto-policies --show
MYPOLICY