Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

第4章 ツールおよびサービスを使用したシステムのハードニング

4.1. デスクトップセキュリティー

Red Hat Enterprise Linux 7 では、複数の方法でデスクトップを強化し、攻撃を受けないようにすることができます。本セクションでは、ユーザーパスワード、セッションおよびアカウントのロックロック、およびリムーバブルメディアの安全な処理に推奨されるプラクティスについて説明します。

4.1.1. パスワードセキュリティー

パスワードは、Red Hat Enterprise Linux 7 がユーザーのアイデンティティーを検証するために使用する主要な方法です。このため、パスワードセキュリティーは、ユーザー、ワークステーション、およびネットワークの保護に重要です。
セキュリティー上の理由から、インストールプログラムは Secure Hash Algorithm 512 (SHA512)およびシャドウパスワードを使用するようにシステムを設定します。これらの設定は変更しないことを強く推奨します。
インストール時にシャドウパスワードを選択すると、すべてのパスワードは、誰でも読み取り可能な /etc/passwd ファイルに一方向ハッシュとして保存されます。これにより、システムがオフラインパスワードクラッキング攻撃に対して脆弱になります。侵入者が通常のユーザーとしてマシンにアクセスできるようにするには、/etc/passwd ファイルを独自のマシンにコピーして、パスワードクラッカーに対して任意の数のパスワードクラッカーを実行できます。ファイルにセキュアでないパスワードがある場合は、パスワードクラッカーがこれを発見する前に問題ありません。
シャドウパスワードは、/etc/shadow ファイルにパスワードハッシュを保存することで、このタイプの攻撃を解消します。これは、root ユーザーのみが読み取り可能です。
これにより、攻撃者が SSH や FTP などのマシン上でネットワークサービスにログインして、パスワードクラッキングをリモートで試行できます。このブルートフォース攻撃は大幅に遅くなり、失敗したログイン試行がシステムファイルに書き込まれます。当然ながら、クラッカーが弱いパスワードを持つシステムの知見の途中で攻撃を開始すると、クラッカーが、dawn までアクセスを確保し、ログファイルが追跡に対応できるようになる場合があります。
コンテンツには、フォーマットおよびストレージの考慮事項のほかに、問題があります。パスワードクラッキング攻撃に対してアカウントを保護することは、強固なパスワードを作成します。
注記
Red Hat は、Red Hat Identity Management(IdM)などの中央の認証ソリューションを使用することを推奨します。ローカルパスワードの使用よりも、中央ソリューションの使用が推奨されます。詳細は、次を参照してください。

4.1.1.1. Strong Passwords の作成

セキュアなパスワードを作成する場合は、長いパスワードは短いパスワードよりも強力であることを覚えておく必要があります。数字、特殊文字、大文字が含まれている場合でも、8 文字のパスワードを作成することが推奨されます。John や Ripper などのパスワードクラッキングツールは、このようなパスワードに対して最適化されています。これは、ユーザーが覚えるのが困難です。
理論上は、エントロピーはランダムな変数に関連付けられている未認定のレベルであり、ビットで表されます。entropy の値が高いほど、パスワードのセキュリティーレベルが高くなります。NIST SP 800-63-1 によると、50000 を構成するディクショナリーにないパスワードでは、最低 10 ビットのエントロピーが 10 ビット以上あるはずです。そのため、4 つのランダムな単語で構成されるパスワードには約 40 ビットのエントロピーが含まれます。追加したセキュリティーに関する複数の単語で構成される長いパスワードは、パスフレーズとも呼ばれます。以下に例を示します。
randomword1 randomword2 randomword3 randomword4
システムが大文字、数字、または特殊文字を使用する場合は、上記の推奨事項に続くパスフレーズを簡単な方法で変更できます。たとえば、最初の文字を大文字に変更して「1!」を追加すると、簡単な方法で変更できますこのような修正では、パスフレーズのセキュリティーが大幅に向上するわけではないことに注意してください
もう 1 つの方法として、パスワードジェネレーターを使用することもできます。pwmake は、4 つの文字グループ(大文字、小文字、数字、および特殊文字)で構成される無作為のパスワードを生成するコマンドラインツールです。このユーティリティーを使用すると、パスワードの生成に使用されるエントロピービットの数を指定できます。エントロピーは /dev/urandom からプルされます。指定できるビットの最小数は 56 です。これは、ブルートフォース攻撃が適しているシステムやサービスのパスワードには十分です。攻撃者がパスワードハッシュファイルに直接アクセスできないアプリケーションには、64 ビットが適切です。攻撃者がパスワードハッシュへの直接アクセスを取得したり、パスワードを暗号鍵として使用すると、80 から 128 ビットが使用されるはずです。無効なエントロピービットを指定すると、pwmake はデフォルトのビットを使用します。128 ビットのパスワードを作成するには、以下のコマンドを入力します。
pwmake 128
セキュアなパスワードの作成にはさまざまな方法がありますが、常に以下の正しくないプラクティスを避けてください。
  • ディクショナリー 1 つの単語、外部言語の単語、反転した単語、または数字のみを使用します。
  • パスワードまたはパスフレーズには 10 文字未満を使用します。
  • キーボードレイアウトでのキーシーケンスを使用します。
  • パスワードの書き込み
  • ボース日、niversaries、ファミリーメンバー名、ペット名など、パスワードで個人情報を使用します。
  • 複数のマシンで同じパスフレーズまたはパスワードを使用します。
安全なパスワードは大変ですが、特に大規模な組織内でシステム管理者にとって、適切に管理することが重要になります。以下のセクションでは、組織内でユーザーパスワードを作成および管理するための優れたプラクティスを詳しく説明します。

4.1.1.2. Strong Passwords の強制

組織にユーザーが多数ある場合、システム管理者は強固なパスワードの使用を強制するための基本的なオプションが 2 つあります。ユーザーは、ユーザーのパスワードを作成でき、パスワードが適切であることを確認しつつ、独自のパスワードを作成することができます。
ユーザーのパスワードを作成すると、パスワードが適切であることを確認できますが、組織が拡大すると、デンティングタスクになります。また、ユーザーがパスワードを書き出すリスクも増やし、パスワードを公開します。
このような理由から、大抵の場合、ユーザーは独自のパスワードを作成することが推奨されますが、このパスワードを十分に強固していることを積極的に確認します。管理者が、パスワードエージングによってパスワードを定期的に変更するよう強制する場合があります。
パスワードの作成または変更を求められたら、passwd コマンドラインユーティリティーを使用できます。これは PAM(プラグ可能な認証モジュール)で、パスワードが短すぎるか、またはクラッカーが容易かどうかの確認を行うことができます。このチェックは、PAM モジュール pam_pwquality.so によって実行されます。
注記
Red Hat Enterprise Linux 7 では、pam_pwquality PAM モジュールが pam_cracklib に置き換えられました。これは、Red Hat Enterprise Linux 6 でパスワードの品質チェックのデフォルトモジュールとして使用されていました。pam_cracklib と同じバックエンドを使用します。
pam_pwquality モジュールは、一連のルールに対してパスワードの強度をチェックするために使用されます。その手順は、最初に指定したパスワードがディクショナリーに存在するかどうかをチェックする 2 つの手順で構成されています。提供されていない場合は、多くの追加チェックが提供されます。pam_pwquality は、/etc/pam.d/passwd ファイルのパスワードコンポーネントにある他の PAM モジュールとともにスタックされ、カスタムルールセットは /etc/security/pwquality.conf 設定ファイルで指定されます。これらのチェックの完全リストは、pwquality.conf(8)の man ページを参照してください

例4.1 pwquality.confでパスワード強度チェックの設定

pam_quality を使用して有効にするには、/etc/pam.d/passwd ファイルのパスワードスタックに以下の行を追加します
password    required    pam_pwquality.so retry=3
チェックのオプションは 1 行に指定できます。たとえば、4 つの文字のすべてを含む 8 文字以上のパスワードを要求するには、以下の行を /etc/security/pwquality.conf ファイルに追加します。
minlen = 8
minclass = 4
文字シーケンスと連続文字のパスワード強度チェックを設定するには、以下の行を /etc/security/pwquality.conf に追加します。
maxsequence = 3
maxrepeat = 3
この例では、入力したパスワードには単調増加シーケンスには 3 文字を超えることができません(例: abcd )。また、1111 のように 3 以上の連続文字があります
注記
root ユーザーは、パスワードを作成するルールを実行する 1 つであるため、警告メッセージを除き、それ自体または通常ユーザーのパスワードを設定できます。

4.1.1.3. パスワードアージングの設定

パスワードエージングは、システム管理者が組織内の不適切なパスワードに対して遅延するのに使用する別の手法です。パスワードエージングは、指定された期間(通常は 90 日)の後に新しいパスワードを作成するように求められます。これは、ユーザーが定期的にパスワードを変更するように強制される場合、クラッカーのパスワードは、限られた時間だけ、侵入者にのみ役立ちます。ただし、パスワードエージングの欠点は、ユーザーがパスワードを書き込む可能性が高くなります。
Red Hat Enterprise Linux 7 でパスワードエージングを指定するには chage コマンドを使用します。
重要
Red Hat Enterprise Linux 7 では、シャドウパスワードがデフォルトで有効になります。詳細は『Red Hat Enterprise Linux 7 システム管理者のガイド』を参照してください
chage コマンドの -M オプションは、パスワードが有効になる最大日数を指定します。たとえば、ユーザーのパスワードが 90 日以内に期限切れになるように設定するには、以下のコマンドを使用します。
chage -M 90 username
上記のコマンドでは、username をユーザー名に置き換えますパスワードの有効期限を無効にするには、-M オプションの後に -1 の値を使用します。
chage コマンドで利用可能なオプションの詳細は、以下の表を参照してください。

表4.1 chage コマンドラインオプション

オプション 説明
-d days パスワードが変更された 1970 年 1 月 1 日以降の日数を指定します。
-E date アカウントがロックされる日付を YYYY-MM-DD の形式で指定します。日付ではなく、1970 年 1 月 1 日以降の日数を使用することもできます。
-I days パスワードの期限が切れてからアカウントをロックするまでの非アクティブ日数を指定します。値が 0 の場合、パスワードが失効してもアカウントはロックされません。
-l 現在のアカウントエージング設定を一覧表示します。
-m days ユーザーがパスワードを変更する必要のある最小日数を指定します。値が 0 の場合、パスワードは有効期限切れになりません。
-M days パスワードが有効な最大日数を指定します。このオプションで指定される日数と -d オプションで指定した日数が現在の日付を下回る場合には、ユーザーはアカウントを使用する前にパスワードを変更する必要があります。
-W days ユーザーに警告するパスワードの有効期限前の日数を指定します。
インタラクティブモードで chage コマンドを使用して、複数のパスワードアージとアカウントの詳細を変更することもできます。以下のコマンドを使用してインタラクティブモードに入ります。
chage <username>
以下は、このコマンドを使用した対話セッションの例です。
~]# chage juan
Changing the aging information for juan
Enter the new value, or press ENTER for the default
Minimum Password Age [0]: 10
Maximum Password Age [99999]: 90
Last Password Change (YYYY-MM-DD) [2006-08-18]:
Password Expiration Warning [7]:
Password Inactive [-1]:
Account Expiration Date (YYYY-MM-DD) [1969-12-31]:
ユーザーのログイン時にパスワードが期限切れになるように設定できます。これにより、ユーザーがパスワードを即座に強制的に変更します。
  1. 初期パスワードを設定します。デフォルトのパスワードを割り当てるには、root で次のコマンドを実行します。
    passwd username
    警告
    passwd ユーティリティーには、null パスワードを設定するオプションがあります。第三者もログインでき、セキュアでないユーザー名を使用してシステムにアクセスすることができるため、null パスワードを使用すると便利です。可能な場合は null パスワードは使用しないようにしてください。不可能な場合は、null パスワードを使用してアカウントのロックを解除する前に、ユーザーがログインできることを確認してください。
  2. root で以下のコマンドを実行して、パスワードの有効期限を強制的に実行します。
    chage -d 0 username
    このコマンドは、パスワードが最後にエポック(1970 年 1 月 1 日)に変更した日付の値を設定します。この値により、パスワードエージングポリシーが有効であっても、すぐにパスワードの有効期限が強制的に実行されます。
初回ログイン時に、ユーザーは新しいパスワードの入力を求められます。

4.1.2. アカウントロック

Red Hat Enterprise Linux 7 では、PAM モジュール pam_faillock により、指定された試行回数の後にユーザーアカウントをロックできます。ユーザーログイン試行の制限は、主にユーザーのアカウントパスワードの取得をターゲットとするブルートフォース攻撃を防ぐセキュリティー対策として機能します。
pam_faillock モジュールでは、失敗したログイン試行が、/var/run/faillock ディレクトリーの各ユーザーの個別のファイルに保存されます。
注記
失敗したログファイルの行の順番は重要です。この順序での変更は、 even_deny_root オプションが使用される場合に、root ユーザーアカウントを含むすべてのユーザーアカウントをロックできます。
アカウントロックを設定するには、以下の手順に従います。
  1. 3 分の試行に失敗した後に root 以外のユーザーをロックし、そのユーザーのロックを解除するには、/etc/pam.d/system-auth および /etc/pam.d/password-auth ファイルの auth セクションに 2 つの行を追加します。編集後に、両方のファイルの auth セクション全体は以下のようになります。
    auth        required      pam_env.so
    auth        required      pam_faillock.so preauth silent audit deny=3 unlock_time=600
    auth        sufficient    pam_unix.so nullok try_first_pass
    auth        [default=die] pam_faillock.so authfail audit deny=3 unlock_time=600
    auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
    auth        required      pam_deny.so
    行番号 2 および 4 が追加されました。
  2. 以下の行を、直前の手順で指定された両方のファイルの account セクションに追加します。
    account     required      pam_faillock.so
  3. root ユーザーにもアカウントロックを適用するには、/etc/pam.d/system-auth ファイルおよび /etc/pam.d/password-auth ファイルの pam_faillock エントリーに even_deny_root オプションを追加します。
    auth        required      pam_faillock.so preauth silent audit deny=3 even_deny_root unlock_time=600
    auth        sufficient    pam_unix.so nullok try_first_pass
    auth        [default=die] pam_faillock.so authfail audit deny=3 even_deny_root unlock_time=600
    
    account     required      pam_faillock.so
ユーザー john が 3 回ログインに失敗した後、4 回ログインを試行すると、アカウントは 4 回試行したときにロックされます。
~]$ su - john
Account locked due to 3 failed logins
su: incorrect password
複数のログイン失敗してもシステムをロックしないようにするには、/etc/pam.d/system-auth および /etc/pam.d/password-auth の両方に対して pam_faillock が初めて呼び出される行に、以下の行を追加します。user1user2 および user3 を実際のユーザー名に置き換えます。
auth [success=1 default=ignore] pam_succeed_if.so user in user1:user2:user3
ユーザーごとの失敗した試行回数 (root で実行)を表示するには、以下のコマンドを実行します。
~]$ faillock
john:
When                Type  Source                                           Valid
2013-03-05 11:44:14 TTY   pts/0                                                V
ユーザーのアカウントのロックを解除するには、root で以下のコマンドを実行します。
faillock --user <username> --reset
重要
cron ジョブを実行すると、cron ジョブを実行しているユーザーの pam_faillock の失敗カウンターをリセットするため 、pam_faillockcron に対して設定することはできません。詳細は、ナレッジセンターのサポート(KCS)ソリューションを参照してください

authconfig でのカスタム設定の維持

authconfig ユーティリティーを使用して認証設定を変更する場合、system-auth および password-auth ファイルは authconfig ユーティリティーの設定で上書きされます。これは、authconfig が認識し、上書きしない設定の代わりにシンボリックリンクを作成することで回避できます。設定ファイルでカスタム設定と authconfig を同時に使用するには、以下の手順に従ってアカウントロックを設定します。
  1. system-auth および password-auth ファイルが、system-auth-ac および password-auth-ac を参照する既にシンボリックリンクであるかを確認します(これはシステムのデフォルトです )。
    ~]# ls -l /etc/pam.d/{password,system}-auth
    出力は以下のようになります。出力はシンボリックリンクが導入されており、ステップ番号 3 に進みます。
    lrwxrwxrwx. 1 root root 16 24. Feb 09.29 /etc/pam.d/password-auth -> password-auth-ac
    lrwxrwxrwx. 1 root root 28 24. Feb 09.29 /etc/pam.d/system-auth -> system-auth-ac
    system-auth ファイルおよび password-auth ファイルがシンボリックリンクではない場合は、次の手順に進みます。
  2. 設定ファイルの名前を変更します。
    ~]# mv /etc/pam.d/system-auth /etc/pam.d/system-auth-ac
    ~]# mv /etc/pam.d/password-auth /etc/pam.d/password-auth-ac
  3. カスタム設定で設定ファイルを作成します。
    ~]# vi /etc/pam.d/system-auth-local
    /etc/pam.d/system-auth-local ファイルには、以下の行が含まれている必要があります。
    auth        required       pam_faillock.so preauth silent audit deny=3 unlock_time=600
    auth        include        system-auth-ac
    auth        [default=die]  pam_faillock.so authfail silent audit deny=3 unlock_time=600
    
    account     required       pam_faillock.so
    account     include        system-auth-ac
    
    password    include        system-auth-ac
    
    session     include        system-auth-ac
    ~]# vi /etc/pam.d/password-auth-local
    /etc/pam.d/password-auth-local ファイルには、以下の行が含まれている必要があります。
    auth        required       pam_faillock.so preauth silent audit deny=3 unlock_time=600
    auth        include        password-auth-ac
    auth        [default=die]  pam_faillock.so authfail silent audit deny=3 unlock_time=600
    
    account     required       pam_faillock.so
    account     include        password-auth-ac
    
    password    include        password-auth-ac
    
    session     include        password-auth-ac
  4. 以下のシンボリックリンクを作成します。
    ~]# ln -sf /etc/pam.d/system-auth-local /etc/pam.d/system-auth
    ~]# ln -sf /etc/pam.d/password-auth-local /etc/pam.d/password-auth
さまざまな pam_faillock 設定オプションの詳細は、pam_faillock(8) man ページを参照してください。

nullok オプションの削除

/etc/shadow ファイルの password フィールドが空の場合は、デフォルトでは nullok オプションが有効になっているため、ユーザーは空のパスワードでログインできます。nullok オプションを無効にするには、/etc/pam.d/system-auth や /etc/pam.d/password-auth などの設定ファイルの nullok 文字列を削除します。

4.1.3. セッションロック

毎日の操作中は、さまざまな理由でワークステーションの無人ままにしておく必要がある場合があります。これにより、特に物理セキュリティー対策が不十分な環境では、攻撃者がマシンに物理的にアクセスする機会が提示されます( 「物理的コントロール」を参照)。ラップトップは、物理セキュリティーに干渉するため、特に公開されます。正しいパスワードを入力するまで、セッションロック機能を使用することで、このようなリスクを軽減することができます。
注記
ログアウトではなく画面のロッキングの主な利点は、ロックにより、(ファイル転送などの)ユーザーのプロセスが実行を継続できることです。ログアウトすると、これらのプロセスが停止されます。

4.1.3.1. vlock を使用した仮想コンソールのロック

また、ユーザーは仮想コンソールのロックが必要になる場合があります。これは、vlock と呼ばれるユーティリティーを使用して行うことができます。このユーティリティーをインストールするには、root で以下のコマンドを実行します。
~]# yum install vlock
インストール後に、追加のパラメーターを指定せずに vlock コマンドを使用してコンソールセッションをロックできます。これにより、現在アクティブな仮想コンソールセッションがロックされ、他のユーザーがアクセスできるようになります。ワークステーション上のすべての仮想コンソールへのアクセスを防ぐには、以下を実行します。
vlock -a
この場合は、現在アクティブなコンソールをロックし 、-a オプションを使用すると、他の仮想コンソールに切り替えることができなくなります。
詳細は、man ページの vlock(1) を参照してください。

4.1.4. 昇格可能なメディアの読み取り専用マウントの強制

リムーバブルメディア(USB フラッシュドライブなど)の読み取り専用マウントを実施するには、管理者は udev ルールを使用してリムーバブルメディアを検出し、blockdev ユーティリティーを使用して読み取り専用にマウントするように設定することができます。これは、物理メディアの読み取り専用マウントを強制するには十分です。

blockdev を使用した 強制読み取り専用マウント(Removable Media の強制マウント)

すべてのリムーバブルメディアを読み取り専用に強制的にマウントするには、以下の内容で /etc/udev/rules.d/ ディレクトリーの 80-readonly-removables.rules などのように、新しい udev 設定ファイルを作成します。
SUBSYSTEM=="block",ATTRS{removable}=="1",RUN{program}="/sbin/blockdev --setro %N"
上記の udev ルールにより、新たに接続されているリムーバブルブロック(ストレージ) デバイスは、blockdev ユーティリティーを使用して読み取り専用として自動的に設定されます

新規 udev 設定の適用

この設定を有効にするには、新しい udev ルールを適用する必要があります。udev サービスは、設定ファイルへの変更を自動的に検出しますが、既存のデバイスには新しい設定には適用されません。新規接続されたデバイスのみが新しい設定の影響を受けます。したがって、接続済みのリムーバブルメディアをすべてアンマウントして取り外し、新しい設定が次の手順でそれらに適用されるようにする必要があります。
udev が、既存のデバイスにすべてのルールを再適用するように強制するには、root で以下のコマンドを入力します。
~# udevadm trigger
上記のコマンドを使用してすべてのルールを再適用するように udev は、すでにマウントされているストレージデバイスには影響を及ぼしません。
udev がすべてのルールを強制的に再読み込みするように強制するには(何らかの理由で新しいルールが自動的に検出されない場合)、以下のコマンドを使用します。
~# udevadm control --reload

このページには機械翻訳が使用されている場合があります (詳細はこちら)。