CIS Level 1 - Server (3)

はじめに

前回のCIS Level 1 - Server (2)では、SSH接続時の制限について触れましたが、今回はパスワードの制限について確認していきます。

パスワード文字制限

パスワード制限の設定ファイルは/etc/security/pwquality.confです。このファイルを見てみると、ファイルの最後尾にCIS Level1 - Serverプロファイルによる設定が追加されています。

# cat /etc/security/pwquality.conf
~~(省略)~~
# Per CCE-88413-0: Set dictcheck = 1 in /etc/security/pwquality.conf
dictcheck = 1
# Per CCE-83564-5: Set difok = 2 in /etc/security/pwquality.conf
difok = 2
enforce_for_root
# Per CCE-83567-8: Set maxrepeat = 3 in /etc/security/pwquality.conf
maxrepeat = 3
# Per CCE-86444-7: Set maxsequence = 3 in /etc/security/pwquality.conf
maxsequence = 3
# Per CCE-83563-7: Set minclass = 4 in /etc/security/pwquality.conf
minclass = 4
# Per CCE-83579-3: Set minlen = 14 in /etc/security/pwquality.conf
minlen = 14

それぞれの設定の意味は以下です。

  • dictcheck … 辞書チェック
  • difok … 旧パスワードから変更しなければならない文字数
  • enforce_for_root … rootユーザも対象
  • maxrepeat … 一文字を連続して使用できる上限
  • maxsequence … 単調な連続文字列(「abc」や「123」等)の上限
  • minclass … 必要な文字種の数
  • minlen … 最小文字数

これらの制限が実際に機能しているか試してみます。user02のパスワードを変更しようとした時、それぞれの制限に引っかかるようにパスワードを入力してみます。

# useradd user02
# passwd user02
ユーザー user02 のパスワードを変更。
新しい パスワード:
正しくないパスワード: このパスワードは 14 文字未満の文字列です
passwd: 認証トークン操作エラー
# passwd user02
ユーザー user02 のパスワードを変更。
新しい パスワード:
正しくないパスワード: このパスワードの文字クラスは、4 種類未満です
passwd: 認証トークン操作エラー
# passwd user02
ユーザー user02 のパスワードを変更。
新しい パスワード:
正しくないパスワード: このパスワードには 3 文字より長い単調な文字列が含まれています
passwd: 認証トークン操作エラー
# passwd user02
ユーザー user02 のパスワードを変更。
新しい パスワード:
正しくないパスワード: このパスワードはには、3 個を越える連続する同じ文字が含まれています
passwd: 認証トークン操作エラー

それぞれの制限に見合ったエラーメッセージが表示されます。※パスワード入力は非表示なのでわかりにくいですが、気になる方は実際に設定して試してみてください。

上記で確認した内容に、「dictcheck = 1」、「difok = 2」の確認が含まれていません。
difok設定は、旧パスワードから変更しなければならない文字数ですが、変更前のパスワードが取得できる場合のみチェックされます。上記の確認ではrootユーザでuser02というユーザのパスワード変更を確認しており、rootユーザではuser02パスワード変更時に現在のパスワードを聞かれない為、user02の現在のパスワードを取得できません。その為、旧パスワードとの比較が行われず、difokで指定した2文字未満の変更でもパスワード変更が成功してしまいます。
user02ユーザでuser02自身のパスワードを変更しようとすると、まず現在のパスワードを聞かれ、その後新しいパスワードを入力します。変更前後のパスワードを入力することで、現在のパスワードと新しいパスワードで変更文字数を比較され、パスワード制限設定により拒否されます。

$ passwd
ユーザー user02 のパスワードを変更。
Current password:
新しい パスワード:
正しくないパスワード: このパスワードは古いパスワードと類似しています
passwd: 認証トークン操作エラー

dictcheckは辞書チェックを行う設定ですが、他の制限に引っかかってしまい確認できなかったので、他の制限を一旦解除して確認してみます。まずは辞書(pw_dictファイル)に登録されている単語を見てみます。

# cracklib-unpacker /usr/share/cracklib/pw_dict | less
!
!!!
!!!!!!
!!!666666!!!
!!!gerard!!!
!!!root
!!!sara
!!1331xxx
!!65logan
!!8558!!
!!@#$%^
~~(省略)~~

pw_dictファイルに登録されている単語数は196,539でした。様々な文字列が登録されていますが、意外と少ないような気もします。

# cracklib-unpacker /usr/share/cracklib/pw_dict | wc -l
196539

pw_dictファイルに「apple123」という単語が登録されていたので、そのまま「apple123」と、一文字付け加えた「apple123!」を試してみると、どちらも拒否されました。辞書に登録されている単語と一致した場合だけでなく、単純な変更も拒否されるようです。

# cracklib-unpacker /usr/share/cracklib/pw_dict | grep ^apple123
apple123
apple1234

※「apple123」
$ passwd
ユーザー user02 のパスワードを変更。
Current password:
新しい パスワード:
正しくないパスワード: このパスワードは辞書チェックに失敗しました - 辞書の単語に基づいています
passwd: 認証トークン操作エラー

※「apple123!」
$ passwd
ユーザー user02 のパスワードを変更。
Current password:
新しい パスワード:
正しくないパスワード: このパスワードは辞書チェックに失敗しました - 辞書の単語に基づいています
passwd: 認証トークン操作エラー

前回までのブログで、OSインストール時に以下の様にrootパスワードを設定していました。

  • rootパスワード:8文字(数字+アルファベット)

このパスワードではCIS Level1 - Serverの基準(pwquality.confファイルのminclass = 4、minlen = 14の設定)を満たしていませんが、OSインストール時に設定したものはそのまま適用されています。OSインストール時のanacondaによるパスワード評価とインストール後のpwquality.confによるパスワードの制限が異なるためだと考えられます。

パスワード履歴制限

パスワードの文字数等の制限の他に、過去に使用したパスワードと同じパスワードも制限する設定が追加されます。パスワード履歴による制限は、/etc/security/pwhistory.confで設定されています。ファイルの最後尾にCIS Level1 - Serverプロファイルによる設定が追加されています。

# cat /etc/security/pwhistory.conf
# Configuration for remembering the last passwords used by a user.
#
# Enable the debugging logs.
# Enabled if option is present.
# debug
#
# root account's passwords are also remembered.
# Enabled if option is present.
# enforce_for_root
#
# Number of passwords to remember.
# The default is 10.
# remember = 10
#
# Number of times to prompt for the password.
# The default is 1.
# retry = 1
#
# The directory where the last passwords are kept.
# The default is /etc/security/opasswd.
# file = /etc/security/opasswd
enforce_for_root
remember = 24

設定の意味は変数名そのままです。

  • enforce_for_root … rootユーザも対象
  • remember … 保存する履歴の数

パスワード履歴は/etc/security/opasswdにユーザごとに保存されます。SHA-512 crypt、salt付き、100,000ラウンドでハッシュ化されて保存されています。このファイルの操作権限もrootのみに付与されています。

# ls -lZ /etc/security/opasswd
-rw-------. 1 root root unconfined_u:object_r:shadow_t:s0 881  9月  3 10:19 /etc/security/opasswd
# cat /etc/security/opasswd
user01:1000:1:!!
user02:1001:3:!!,$6$rounds=100000$yNo9kAS8QL5(省略)uOYh.pnxS4bsk2krtS.SPSLLTwyieQ4/,$6$rounds=100000$fXpsFBoendSK04yzXL$k/ScOssDsineoUIhebHSj3iaF2J80K4hfa(省略).TWFMzOUHUWNWD10OpxrmRVmyY0.

実際に過去に使用したパスワードと同じパスワードを設定して拒否されるか確認してみます。

$ passwd
ユーザー user02 のパスワードを変更。
Current password:
新しい パスワード:
新しい パスワードを再入力してください:
パスワードはすでに使用されています。 別のパスワードを選択してください。
passwd: サービスの最大試行回数に達しました
$ exit
# passwd user02
ユーザー user02 のパスワードを変更。
新しい パスワード:
新しい パスワードを再入力してください:
パスワードはすでに使用されています。 別のパスワードを選択してください。
passwd: サービスの最大試行回数に達しました

自身のパスワード変更時、rootでのパスワード変更時のどちらでもきちんと拒否されました。過去に設定さたパスワードと同じパスワードを使用したい場合は、/etc/security/opasswdファイルの該当ユーザの行を削除すれば同じパスワードを設定可能になります。

まとめ

CIS Level 1のセキュリティプロファイルを適用することで、パスワードの最低文字数や文字種などの品質要件に加え、過去に使用したパスワードの再利用を制限する設定が適用されます。
今回は、pwqualityによるパスワードの文字数や複雑性のチェックと、pwhistoryによる過去のパスワードの再利用制限について、実際のパスワード変更時の動作を確認しました。これらの設定により、推測されやすい単純なパスワードや同じパスワードの繰り返し使用を防止できます。

CIS Level 1を導入する際には、設定を適用するだけでなく、各オプションの役割やアプリケーションへの影響についても確認しておくことが重要です。

お問い合わせ

弊社では様々なサービスを取り扱っております。
詳細はサービス一覧からご覧ください。

お気軽にお問い合わせください。応対時間 9:30-17:30 [ 土・日・祝日除く ]

お問い合わせ