パスワードセキュリティのベストプラクティスの実装

Kali LinuxBeginner
オンラインで実践に進む

はじめに

パスワードセキュリティは、システムやデータを不正アクセスから保護するための重要な要素です。脆弱または侵害されたパスワードは、攻撃者にとって最も一般的な侵入口の一つです。堅牢なパスワードポリシーの実装は、基本的なセキュリティ対策です。

この実験 (Lab) では、Linux システムにおけるパスワードセキュリティのいくつかのベストプラクティスを実装する方法を学びます。パスワードの複雑性ルールを設定し、多要素認証 (MFA) をセットアップし、パスワードマネージャーの役割を理解し、パスワードローテーションを強制し、ユーザー教育の重要性について学びます。

パスワードの複雑性要件の理解

このステップでは、ユーザーが強力なパスワードを作成できるように、パスワードの複雑性ルールを強制します。強力なパスワードは通常、大文字、小文字、数字、特殊文字の組み合わせを含み、十分な長さがあります。これを実現するために、Pluggable Authentication Module (PAM) の pam_pwquality を使用します。

まず、必要なツールを提供する libpam-pwquality パッケージをインストールしましょう。

sudo apt-get install libpam-pwquality -y

次に、パスワード変更にこのモジュールを使用するように PAM スタックを構成する必要があります。/etc/pam.d/common-password ファイルを編集します。このファイルには、パスワード管理の共通設定が含まれています。

nano エディタを使用してファイルを開きます。

sudo nano /etc/pam.d/common-password

pam_unix.so を含む行を見つけ、その 上に 次の行を追加します。これにより、pam_unix モジュールによってパスワードが実際に変更される前に、品質チェックが行われます。

password        requisite       pam_pwquality.so retry=3 minlen=12 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1

これらのオプションについて説明します。

  • retry=3: ユーザーは準拠したパスワードを入力するのに 3 回試行できます。
  • minlen=12: パスワードの最小長は 12 文字です。
  • ucredit=-1: 少なくとも 1 つの大文字が必要です。
  • lcredit=-1: 少なくとも 1 つの小文字が必要です。
  • dcredit=-1: 少なくとも 1 つの数字が必要です。
  • ocredit=-1: 少なくとも 1 つの特殊文字 (その他) が必要です。

ファイルはこれに似たものになるはずです (一部の行は異なる場合があります)。

## /etc/pam.d/common-password

...
password        requisite       pam_pwquality.so retry=3 minlen=12 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
password        [success=1 default=ignore]      pam_unix.so obscure sha512
...

ファイルを保存して nano を終了するには、Ctrl+X、次に Y、そして Enter を押します。

次に、新しいポリシーをテストしましょう。labex ユーザーのパスワードを変更してみます。

passwd

まず、現在のパスワードを入力します (labex にはパスワードが設定されていないため、Enter キーを押すだけで構いません)。次に、password のような弱いパスワードを設定してみてください。システムはそれを拒否し、複雑性要件を満たしていないためエラーメッセージを表示するはずです。

(current) UNIX password:
New password:
BAD PASSWORD: The password is shorter than 12 characters
Retype new password:
Sorry, passwords do not match.
passwd: Authentication token manipulation error
passwd: password unchanged

次に、Labex!P@ssw0rd のような強力なパスワードで再度試してください。このパスワードは受け入れられるはずです。

これで、システムでパスワードの複雑性要件を正常に構成できました。

多要素認証 (MFA) の実装

このステップでは、多要素認証 (MFA) の実装方法を学びます。MFA は、アクセスを許可するためにユーザーに 2 つ以上の認証要素の提供を要求することで、セキュリティの第 2 の層を追加します。ここでは、Google Authenticator PAM モジュールを使用して、時間ベースのワンタイムパスワード (TOTP) 認証を追加します。

まず、libpam-google-authenticator パッケージをインストールします。

sudo apt-get install libpam-google-authenticator -y

次に、ユーザーの MFA 設定を生成する必要があります。この実験 (lab) の目的で、labex ユーザーとして ( sudo ではなく) 次のコマンドを実行します。

google-authenticator

コマンドは一連の質問をします。この実験 (lab) の目的のため、以下のように回答してください。

  • Do you want authentication tokens to be time-based (y/n): y を押して Enter を押します。
  • QR コード、シークレットキー、および緊急用スクラッチコードが表示されます。実際のシナリオでは、スマートフォンの認証アプリで QR コードをスキャンします。この実験 (lab) では、そのまま進みます。
  • Do you want me to update your "/home/labex/.google_authenticator" file? (y/n): y を押して Enter を押します。これによりシークレットキーが保存されます。
  • Do you want to disallow multiple uses of the same authentication token?: y を押して Enter を押します。
  • Do you want to increase the time-skew window?: n を押して Enter を押します。
  • Do you want to enable rate-limiting for the authentication module?: y を押して Enter を押します。

これにより、ホームディレクトリ (/home/labex) に .google_authenticator ファイルが作成されます。

次に、SSH がこの MFA トークンを使用するように構成しましょう。まず、PAM に SSH セッションでこれを要求するように指示する必要があります。

/etc/pam.d/sshd ファイルを開きます。

sudo nano /etc/pam.d/sshd

ファイルの末尾に次の行を追加します。

auth required pam_google_authenticator.so

ファイルを保存して終了します (Ctrl+XYEnter)。

次に、SSH サーバー構成でチャレンジレスポンス認証を有効にする必要があります。

/etc/ssh/sshd_config を開きます。

sudo nano /etc/ssh/sshd_config

ChallengeResponseAuthentication no という行を見つけて yes に変更します。行が # でコメントアウトされている場合は、# を削除します。

## /etc/ssh/sshd_config
...
ChallengeResponseAuthentication yes
...

ファイルを保存して終了します。実際のシステムでは、SSH サービスを再起動します。しかし、このコンテナ化された環境では、sshd のようなサービスの再起動はサポートされていません。重要なのは、SSH で MFA を有効にするために必要な構成手順を理解することです。

パスワードマネージャーの使用

このステップでは、パスワードマネージャーの重要性について説明します。異なるサービス間でパスワードを再利用することは、重大なセキュリティリスクです。いずれかのサービスが侵害された場合、攻撃者は漏洩したパスワードを使用して他のアカウントにアクセスできます。パスワードマネージャーは、各サービスに対してユニークで強力なパスワードを生成、保存、管理するのに役立ちます。

KeePassXC は、人気があり、オープンソースで無料のパスワードマネージャーであり、パスワードを安全に暗号化されたデータベースに保存します。これはグラフィカルアプリケーションですが、このようなツールがユーザーのワークフローにどのように統合されるかを理解するためにインストールします。

apt-get を使用して KeePassXC をインストールしましょう。

sudo apt-get install keepassxc -y

インストールが完了したら、コマンドの存在を確認して検証できます。

which keepassxc

次のような出力が表示され、アプリケーションがインストールされており、システムのパスで利用可能であることが示されます。

/usr/bin/keepassxc

デスクトップ環境では、KeePassXC を起動し、強力なマスターパスワードで新しい暗号化されたデータベースを作成し、さまざまなウェブサイトやサービスのログイン認証情報を追加し始めます。アプリケーションは、非常に強力なパスワードを自動生成することもできます。重要な原則は、マネージャーのロックを解除するための強力なマスターパスワードを 1 つ記憶し、マネージャーに他のすべての複雑なパスワードを処理させることです。

定期的なパスワードローテーション

このステップでは、パスワードエイジングとしても知られるパスワードローテーションを強制する方法を学びます。パスワードを定期的に変更することで、パスワードを盗まれた可能性のある攻撃者にとっての機会の窓を制限します。

Linux では、/etc/login.defs ファイルでシステム全体のパスワードエイジングポリシーを設定できます。また、chage コマンドを使用して個々のユーザーのポリシーを設定することもできます。ここでは chage コマンドに焦点を当てます。

まず、labex ユーザーの現在のパスワードエイジング設定を表示しましょう。

sudo chage -l labex

ほとんどの値が never に設定されている、これに似た出力が表示されます。

Last password change                                    : May 20, 2024
Password expires                                        : never
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change          : 0
Maximum number of days between password change          : 99999
Number of days of warning before password expires       : 7

Maximum number of days between password change99999 に設定されており、これは実質的にパスワードが期限切れにならないことを意味します。これを変更して、90 日ごとにパスワード変更を強制しましょう。

最大有効期間を設定するために -M オプションを持つ chage コマンドを使用します。

sudo chage -M 90 labex

次に、設定を再度確認して変更を検証します。

sudo chage -l labex

出力には、最大日数が 90 であることが表示されるはずです。Password expires の日付もそれに応じて更新されます。

Last password change                                    : May 20, 2024
Password expires                                        : Aug 18, 2024
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change          : 0
Maximum number of days between password change          : 90
Number of days of warning before password expires       : 7

ユーザーのパスワードローテーションポリシーを正常に構成しました。

ユーザーへのパスワード衛生教育

このステップでは、セキュリティにおける人的要素に焦点を当てます。技術的な制御は不可欠ですが、ユーザーも適切なパスワード衛生を実践している場合に最も効果的です。ユーザーにセキュリティのベストプラクティスについて教育することは、重要な非技術的な制御です。

良好なパスワード衛生の重要なポイントをいくつか紹介します。

  • パスワードの再利用をしない: すべてのアカウントにユニークなパスワードを使用してください。
  • パスワードを共有しない: IT スタッフを含む誰ともパスワードを共有しないでください。
  • フィッシングに注意する: ログイン認証情報を要求するメールやメッセージには警戒してください。
  • 画面をロックする: コンピューターから離れるときは、必ず画面をロックしてください。
  • パスフレーズを使用する: correct-horse-battery-staple のような長いパスフレーズは、J%7d*fQ! のような短くて複雑なパスワードよりも安全で覚えやすい場合があります。

ユーザー向けのポリシー文書を作成するシミュレーションとして、プロジェクトディレクトリにこれらのルールを概説する簡単なテキストファイルを作成しましょう。

まず、echo コマンドと出力リダイレクション > を使用してファイルを作成し、最初のルールを追加します。

echo "1. Do not share your password with anyone." > ~/project/password_policy.txt

次に、アペンド演算子 >> を使用して、さらに 2 つのルールをファイルに追加しましょう。

echo "2. Use a unique password for each service." >> ~/project/password_policy.txt
echo "3. Beware of phishing emails asking for credentials." >> ~/project/password_policy.txt

最後に、cat コマンドを使用して新しいポリシー文書の内容を表示します。

cat ~/project/password_policy.txt

次のような出力が表示されるはずです。

1. Do not share your password with anyone.
2. Use a unique password for each service.
3. Beware of phishing emails asking for credentials.

この簡単な演習は、セキュリティポリシーを文書化して共有する方法を示しています。実際の組織では、これはより広範なセキュリティ意識向上プログラムの一部となります。

まとめ

この実験では、Linux 環境におけるパスワードセキュリティのいくつかの重要なベストプラクティスを正常に実装しました。技術的な制御とユーザー教育を組み合わせた多層的なアプローチは、不正アクセスに対する最も強力な防御を提供します。

以下の方法を学びました。

  • pam_pwquality で複雑性要件を設定することにより、強力なパスワード作成を強制する。
  • pam_google_authenticator で多要素認証(MFA)を設定することにより、重要な第 2 のセキュリティ層を追加する。
  • KeePassXC のようなパスワードマネージャーが、ユニークで強力なパスワードを作成および保存する役割を理解する。
  • chage コマンドを使用してパスワードローテーションポリシーを実装し、侵害された認証情報からのリスクを制限する。
  • ユーザー教育と、良好なパスワード衛生のためのセキュリティポリシーの文書化の重要性を認識する。

これらの実践を適用することで、管理するシステムのセキュリティ体制を大幅に向上させることができます。