一般的なパスワードをブロックして Active Directory を保護する方法

Active Directoryで脆弱なパスワードや簡単に推測できるパスワードを扱うのは、本当に頭の痛い問題です。デフォルトのADパスワードポリシーでは、長さやある程度の複雑さといった基本的な要件しか課せられておらず、ユーザーが「」Qwerty123456や「」のようなパスワードを選択することを阻止していませんP@ssw0rd。これらは技術的にはルールに適合していますが、依然として非常に脆弱です。そこでこのガイドでは、独自の禁止パスワードリストを作成したり、エンタープライズツールを活用したりするなど、脆弱なパスワードや侵害されたパスワードをブロックするより良い方法を詳しく解説します。ユーザーが故意に二流のセキュリティを選択してしまわないようにするためです。

Active Directoryで弱いパスワードを防ぐ方法

方法1: PassFiltExを使用して一般的な弱いパスワードをブロックする

これは一種のDIYアプローチですが、一度設定すればかなり安定して動作します。PassFiltEx、Windowsのパスワードフィルタリングプロセスにフックする軽量なオープンソースライブラリです。ブロックしたいパスワードのリストを事前にロードできるため、ユーザーは「password」などの分かりやすいパスワードを追加することができません。特に、ユーザーが単純で一般的なパスワードを使用していると思われる場合に便利です。

基本的に、ユーザーがパスワードを変更すると、Windowsは新しいパスワードをフィルターと照合します。PassFiltExを有効にすると、ブラックリストに登録されたパターンに一致するパスワードを拒否します。設定によっては動作が少し複雑なので、ドメインコントローラー(DC)の再起動やレジストリの調整が必要になる場合もあります。

まず、プロジェクトのGitHubリポジトリ( https://github.com/ryanries/PassFiltEx )からファイルを入手します。PassFiltEx.dllブラックリストのテキストファイル(例: )が必要ですPassFiltExBlacklist.txt。これらのファイルを各ドメインコントローラーの%SystemRoot%\System32ディレクトリにコピーします。

  • PassFiltEx.dll – メインのフィルタリングライブラリ
  • PassFiltExBlacklist.txt – ブロックしたいパスワードを1行に1つずつ記述したプレーンテキストのリスト

ちょっとしたヒント:PassFiltEx はこのブラックリストを60秒ごとに再読み込みするため、更新時に再起動は不要です。大文字と小文字は区別されないため、passwordと はPassword同じものとして扱われます。Unicode 文字は現在サポートされていないため、プレーン ASCII を使用してください。

次に、レジストリエディターを開き、HKLM\SYSTEM\CurrentControlSet\Control\Lsaに移動します。Notification Packagesという文字列値がまだリストにない場合は追加し、PassFiltExリストに追加する必要があります。これは複数文字列の値なので、新しいエントリとして追加するだけです。

その後、ドメインコントローラーを再起動して、新しいフィルターが読み込まれることを確認してください。動作を確認するには、tasklist /m PassFiltEx.dllコマンドプロンプトで実行してください。ユーザーがパスワードをブラックリストに登録されているものに変更しようとすると、Windowsはパスワードが要件を満たしていないというエラーメッセージを表示します。複数のドメインコントローラーでこの手順を実行する場合は、必ず各ドメインコントローラーでこの手順を実行してください。そうしないと、ユーザーが別のドメインコントローラーに切り替えても、依然として弱いパスワードを入力してしまう可能性があります。

より高度な制御が必要な場合は、 の下にあるレジストリオプションを調整できますHKLM\SOFTWARE\PassFiltEx。ブラックリストのパスを変更したり、最小一致率を設定したり、ログのデバッグモードを有効にしたりできます。正直なところ、設定によってはブロックがすぐに開始されない場合があり、通常はキャッシュの更新やサービスの再起動を待つ必要があります。しかし、一般的には、パスワードのセキュリティをさらに強化する非常に便利な方法です。

方法2: Lithnetパスワード保護によるパスワードの強制

もっとエンタープライズグレードのものをお探しですか?Lithnet Password Protection(LPP)は、大規模組織向けに設計された、堅牢でサポート体制が整ったツールです。通常のADポリシーを拡張し、明らかに弱いパスワードだけでなく、侵害されたパスワード、データ漏洩で盗まれたパスワード、またはユーザーが定義したパターンに一致するパスワードもブロックします。さらに、「Have I Been Pwned」などのサービスと同期することで、漏洩が判明しているパスワードをユーザーが勝手に選んでしまうのを防ぎます。

まず、各ドメインコントローラーにLithnetエージェントをインストールしてください。プロジェクトはGitHub(https://github.com/lithnet/ad-password-protection)でホストされており、セットアップ手順も含まれています。エージェントを起動したら、グループポリシーまたはPowerShellを使用して、禁止された単語、パターン、またはハッシュをシステムに読み込みます。コマンドの例:

Import-Module LithnetPasswordProtection
Add-BannedWord -Value "admin"
Import-BannedWords -Filename "C:\temp\blacklist.txt"

実際には、「Have I Been Pwned」や独自の調査から取得した、不正パスワードのリストをインポートする必要があるでしょう。ユーザーがパスワードを変更または設定しようとすると、このシステムはデータベースと照合し、一致または類似のパターンが見つかった場合はブロックします。

また、侵害されたパスワードをデータベースに直接インポートすることもできます。Sync-HashesFromHibp定期的に実行することで、禁止リストを最新の状態に保つことができ、非常に便利です。各DCでは、パスワードフィルターがバックグラウンドで静かに実行され、不正なパスワードがユーザーの画面から消える前にブロックします。まるでパスワード選択に警備員がいるかのようです。パスワードスパムフィルターのようなものです。

これらすべてがうまくいかない場合、またはセキュリティをさらに強化したい場合は、ADMXテンプレートを使用してGPOを設定し、ポリシー設定を制御できます。これにより、各DCのレジストリ編集に煩わされることなく、パスワード制限を一元的に適用できます。

まとめ

  • PassFiltEx を実装して、カスタムブラックリストで一般的な脆弱なパスワードをブロックします。設定は簡単ですが、レジストリの調整と DC の再起動が必要です。
  • 企業向けには、Lithnet Password Protection が、パスワードの漏洩防止や外部データベースとの連携など、より高度な制御機能を提供します。やや複雑ですが、はるかに強力です。

まとめ

総じて、これらの対策はADパスワードのセキュリティを大幅に向上させることができます。適切に設定すれば、脆弱なパスワード、使い回しされたパスワード、あるいは漏洩したパスワードによる不正アクセスを防ぐことができます。しかし、すべてが完璧というわけではなく、ユーザーは回避策を見つける傾向があるため、適切なユーザー教育やその他のセキュリティ対策と併せて活用してください。この対策が、パスワード関連の悪夢を再び引き起こすことを防ぐ一助となることを願っています。