パスワードの“複雑さの要件”は、いつから間違えていたのか?
先週、マイクロソフトは、Windowsを得意するシステム管理者やIT技術者にとって、衝(笑)撃のサポート技術情報を公開しました。
■“複雑さの要件を満たす必要がある”を有効にしてもパスワードの長さを6文字以上にする必要が無い(KB2617632)
[URL]http://support.microsoft.com/kb/2617632/
「パスワードの長さは6文字にする」は、「複雑さの要件を満たす必要があるパスワード」ポリシーの要件の1つとして、疑いなく信じていた方も多かったのではないでしょうか?
私はと言えば、「パスワードの長さ」ポリシーが3文字以上であれば、「複雑さの要件を満たす必要があるパスワード」ポリシーよりも、「パスワードの長さ」ポリシーの設定が優先されると勝手に思い込んでいたので、5文字以下のパスワードで複雑さの要件ポリシーをクリアすることがあることに、疑念を持つことはありませんでした。
ところがです。実は、「複雑さの要件を満たす必要があるパスワード」ポリシーは、そもそもパスワードの長さをチェックしていなかったのです。
これまで、多くの方がWindowsの常識として信じていた「複雑さの要件を満たす必要があるパスワード」ポリシーは次のとおり。
・ユーザーのアカウント名またはフルネームに含まれる3文字以上連続する文字列を使用しない
・長さは6文字以上にする
・次の4つのカテゴリのうち、3つから文字を使う
英大文字(A~Z)
英小文字(a~z)
10進数の数字(0~9)
アルファベット以外の文字(!、$、#、%など)
この3つの要件をすべて満たしたパスワードが、複雑さの要件を満たしたパスワードということになるはずです(でした)。この2つ目の要件はチェックされていなかったため、このポリシーが有効でも、最小3文字(Aa0など)のパスワードが設定できてしまうということです。
しかしながら、Active Directoryドメイン(たぶん、Windows Server 2003以降)のドメインのパスワードポリシーは、次のスクリーンショットのように「パスワードの長さ」ポリシーが既定で「7文字以上」となっているため、既定のポリシーを緩めていないかぎり、「複雑さの要件を満たす必要があるパスワード」ポリシーがパスワードの長さをチェックしていなかったことに気付くことはありません。
「複雑さの要件を満たす必要があるパスワード」ポリシーは、ずいぶん古くからあるポリシーです。いったい、いつから間違っていたのでしょうか?
「仮想マシンで触れるWindowsの25年」で紹介したように、わが家の仮想環境にはレガシーなWindowsがいくつか展示(保存)されています。Windows NT 4.0から振り返ってみました。
Windows NTはグループポリシーの仕組みはありませんでした。「システムポリシーエディター(Poledit.exe)」というものはありましたが、現在のグループポリシーやローカルセキュリティポリシーとは異なるものです。Windows NTでは、パスワードポリシー相当のものを、「ユーザーマネージャー」の「原則¥アカウントの原則」で設定します。ここに「複雑さの要件」に相当するものはありません。
Windows NTのパスワードに関しては、パスワード強化の指針というページを見つけました(Windows NTの製品ページってまだあるんですね)。この指針の最後に「パスワードフィルタ」なるものが説明されています。うっすら記憶にあります。思い出してきました。
■パスワード強化のための指針
[URL]http://www.microsoft.com/japan/products/ntserver/security/password.htm
Windows NT 4.0 Service Pack(SP)2以降、「強力なパスワード(Strong Password)」機能がサポートされました。Windows NT 4.0 SP3以降であれば、「C:¥WINNT¥System32¥Passfilt.dll」が標準で入っているので、これをレジストリに登録することで「強力なパスワード」の要件を有効化できます。詳しい手順は、以下のサポート技術情報に書いてあります。
■Windows NTで強力なパスワード機能を使用する方法(KB161990)
[URL]http://support.microsoft.com/kb/161990
実は、この「Passfilt.dll」ファイルにハードコーディングされているパスワードポリシーに、初めて「パスワードの長さが6文字以上であること」が出てきます。
実際に、「Passfilt.dll」を使用して、強力なパスワードを有効化して試してみました。ところが、3文字でも設定できてしまいます。つまり、最初から6文字問題は存在していた模様です。
この問題は、次のサポート技術情報で公開済みの既知の問題であり、有償のサポートサービスを通じて修正プログラムが提供されていたようです(サポートライフサイクルが遠い昔に終わっているので、現在は入手できません)。
■Passfilt.dllが6文字の最小パスワード長を強制しない(KB274613)
[URL]http://support.microsoft.com/kb/274613
Windows NT 4.0の「Passfilt.dll」の実装がどうなっているのか、以下のサポート技術情報ではサンプルコードを見ることもできます。コードを見るかぎり、6文字という長さの要件をチェックしているところはありませんね。
■[HOWTO]Windows NTでのパスワード変更のフィルタリングと通知(KB151082)
[URL]http://support.microsoft.com/kb/151082
Windows 2000でID基盤はActive Directoryに代わり、グループポリシーやローカルセキュリティポリシーがサポートされました。複雑さの要件ポリシーは、「パスワードは要求する複雑さを満たす」という名前で登場します。
グループポリシーエディターでは説明がありませんが、次のオンラインドキュメントでこのポリシーの説明を見つけることができます。その説明には、6文字という要件はまだありません。
■Windows 2000 Server > アカウントポリシー ‐ パスワードポリシーの設定
[URL]http://technet.microsoft.com/ja-jp/library/dd362968.aspx
そして、Windows XPおよびWindows Server 2003以降、6文字要件を含む現在の説明になりました。次のWindows Server 2003に関するオンラインドキュメントにも、6文字要件が登場しています。Windows NTから、よみがえっての再登場です。
■ステップバイステップガイド:Windows Server 2003 Active Directoryにおける強力なパスワードポリシーの強制
[URL]http://technet.microsoft.com/ja-jp/library/cc967051.aspx
ところで、冒頭の「KB2617632」([URL]http://support.microsoft.com/kb/2617632/)は、英語のサポート技術情報を翻訳したものではなく、英語の情報はありません。もしかしてローカライズの問題(日本語だけ)、英語版のWindowsで確認してみました。
「Be at least six characters in length」だそうです。10年以上気付かれなかった、グローバルな問題だったようで…。