FrontPage でパスワードが保存できない
TROUBLE REPORT
パスワードが保存できない
現在は個人的に Microsoft 社の FrontPage 2003 を愛用しているのですけど、Web サイトを開く際に、「パスワードを保存する」 にチェックを入れても、なぜか FrontPage を再起動するたびにパスワードを入力しなくてはいけない状態なのでした。
以前といってもだいぶ前、ちょっとした理由からドメインコントローラを再インストールする前の、さらには FrontPage 98 の頃などには、何の苦労も無くパスワードを保存、それどころかパスワードを入力しない場合は自動的にログオン中のアカウントで接続してくれたように記憶しているのですけど、ここ最近は起動のたびにパスワードを入力しています。
セキュリティの面で言えば、多少面倒でもこちらの方が安全で良いのですけどね。ただ、自分専用の PC で、自分の趣味のサイトを開く場合は、パスワードを保存できたほうがとても都合が良いのです。また、発行 (アップロード) する場合も、パスワードが保存できていたほうが事がスムーズに運ぶはず。いえ、たいした手間ではないのですけど。
ともあれそんな感じなので、どうしてパスワードが保存できないのか、しっかりと調べてみることにしました。
パスワードが保存されない場面
さて、パスワードがまったく保存されないかと言うと、実はそうでもなかったりします。
大雑把に把握していた限りでは、自宅 NT ドメインのサイトではパスワードを保存することが出来ないのに、仕事場 NT ドメインのサイトの場合は、同じバージョンの FrontPage 2002 であっても保存できていました。また、自ドメイン外の WebDAV サーバにおいても、問題なくパスワードが保存されている様子です。
このことから考えて、自分のドメインコントローラがおかしいのではないかと、入れなおしてみたりいろいろと確認してみたりは何度かしたことがあるのですけど、有力な情報が無いまま闇雲にというせいもありますけど、解答には至らなかったのでした。
パスワードが保存される場合
そんなこんなで、しばらくはドメインコントローラを中心に疑ってかかっていたのですけど、調べていたらふと一つの心当たりが浮かんできました。
WebDAV については別として、とりあえず NTLM 認証のサイトの場合、パスワードが記憶できる仕事場と、記憶できない自宅とではその接続の際に使用する環境に、記憶出来る出来ないにかかわる可能性のある違い。
仕事場の方は、NetBIOS 名でサイトを指定しているのに対して、自分の方はドメイン名で指定しているのでした。すなわち、内部ネットワークと外部ネットワークです。
なのでためしに、自サイトにも NetBIOS 名で接続してみます。ドメイン名を使っているのは仮想ドメインを利用しているからなので、設定さえ行えば NetBIOS 名でもそのまま同じサーバへ接続することが出来ます。
IIS の設定にて仮想ドメインに NetBIOS 名を追加して、FrontPage にて接続を行ってみると、パスワードを入力することなく接続することが出来ました。念のためもう一度、フルドメイン名を使っての接続を確認してみましたけど、同じサイトなのにやはりその都度パスワードを入力する必要がありました。
パスワードを記憶できないようにする 【余談】
パスワードはどういった風に保存されるのかを調べていたところ、ブラウザでサイトを見る際にパスワードを保存できなくする方法が見つかったので、メモがてらさらりと書いておくことにします。
パスワードを保存できないようにするには、レジストリエディタを使って、HKEY_CURRENT_USER\ Software\ Microsoft\ Windows\ CurrentVersion\ Internet Settings というキーの中に、"DisablePasswordCaching" という DWORD 値を用意し、その値を 1 とすればいいようです。
こうすることで、パスワードを入力する画面において、「パスワードを記憶する」 というチェックボックスが表示されなくなるとのことでした。HKEY_CURRENT_USER ということは、ログオンユーザごとに設定を行う必要がありそうですね。もっともこういう設定が必要なのって、同一アカウントで Windows を利用している場合でしょうから、これでも手間となることはなさそうですけどね。
別々のアカウントならばログオンの時点でパスワードが必要になりますから、パスワードなしとか名前と同じパスワードとか、そういった危険なことをしていない限りは Web サイトのパスワードを保存してもさほど問題は無いでしょう。
もっとも、ログオフし忘れた場合などを想定すれば、パスワードを保存しないようにしたほうがいい場合もありますけど、それは各自のお好みで、記憶できないようにするなり、スクリーンセーバーの設定でセーバーが起動したらパスワードの入力が必要となるように設定するなりすれば良いことでしょう。
確かめてはいませんけど、HKEY_LOCAL_MACHINE の方にも Internet Settings というキーが存在しているので、もしかするとその PC の全ユーザにおいて、記憶できないように設定することも出来るのかもしれないですけど。
Outlook Express の場合
パスワードが保存されない場面について調べていたら、Outlook Express でそういったことがあるとの情報が得られました。これは HKEY_CURRENT_USER\ Software\ Microsoft\ Protected Storage System Provider\ キーのアクセス制限が問題だそうです。
Windows 2000 ならば REGEDT32.EXE を、Windows XP ならば REGEDIT.EXE を使用して、そのキーのアクセス権限として、ログオンしているユーザにフルコントロールを与えてます。その際、権限の詳細設定にてサブキー (子オブジェクト) の権限も元に戻すようにします。そうした上でその中に存在しているサブキー "S-1-5-21- .... " というキーを削除して Windows を再起動すれば良いとのことでした。
調べてみたところ、"Protected Storage System Provider" 自身は自分のアカウントでフルコントロールになっていたものの、その中の "S-1-5-21 .... " なるキーは SYSTEM のみがフルコントロールとなっていました。
もしかするとこのせいかとも思ったのですけど、この対処法を行っても特に改善は見られませんでした。しかも再起動後、"S-1-5-21 .... " は再び生成されたものの SYSTEM のみがアクセスできるようになっていたので、どうやらこれで正常のようです。
内部サイトと外部サイト
たとえば PC1 という Web サイトがあるとして、NetBIOS 名である PC1 と、ドメイン名である pc1.ez-net.jp という二つの方法でアクセス出来るとします。
そんな場合、現状では http://PC1/ だとパスワードの入力なしで入れるのに、http://pc1.ez-net.jp/ だとパスワードを保存するように設定しても、その都度尋ねられてしまいます。どちらも同じ IP アドレスおよび同じサイトを参照する設定なので、この差は、サーバではなく接続しようとしているクライアントに原因がありそうな気がします。
なお、たとえば PC1 が 192.168.0.1 だったとすると、http://192.168.0.1/ にて接続した場合は、これも何度もパスワードを尋ねられる結果となりました。
この感じだと、ドメイン名からそれがローカルであるかどうかを判断して、ローカルサイトの場合のみパスワードを保存するように処理されているような、そんな感じがします。
しかもクリアテキスト + SSL の場合はちゃんと覚えてくれるようなので、NTLM 限定で。NTLM の場合は [OK] ボタンを押さずとも暗黙的に認証を通過するようなので、その兼ね合いもあるのでしょうか。
ともあれそうとあれば、とりあえずはそういう制限が設定されていないか、"ローカルセキュリティポリシ" をざっと眺めてみることにしました。けれど、気づかないだけなのか、それらしい項目は見つかりませんでした。
NTLM 自動認証
そういえば、共有フォルダなどでも無意識のうちにお馴染みなのですけど、NTLM 認証というのは自動的に認証されることが多いです。共有フォルダへアクセスするとき、同一ドメインのコンピュータならばパスワードを入力せずに接続することが出来ますよね。あれは、ログオンしているアカウントの情報を使って自動認証を試みるからです。
ならば NTLM の自動認証について調べれば何か良い答えが見つかるかも、と思って調べてみたらありました。
まず答えから書きますと、この調整は "レジストリ" や "セキュリティポリシ" で行うのではなく、ブラウザの "インターネットオプション" で行うこととなるようです。実際に、セキュリティ設定にて 「ユーザ認証」 という項目がありました。
ディフォルトでは 「イントラネットゾーンでのみ自動的にログオンする」 という選択が有効になっているため、イントラネット、すなわち内部ネットワークへのアクセス時のみ、パスワードの入力無く接続することが可能となっているようです。実際にここを 「現在のユーザー名とパスワードで自動的にログオンする」 にチェックを入れると、フルドメインでのアクセスでも、パスワード入力の手間を省くことができるようになりました。
ただし調べてみて解ったのですけど、パスワード入力が省けるからといって、素直にこの様な設定にしてしまうのは危険なのでやめたほうがよさそうです。
NTLM 認証は、クライアントが認証を要求すると、サーバはそのとき専用のキーワード (チャレンジ) を作成してそれをクライアントに渡します。クライアントはユーザによって入力されたパスワードを "チャレンジ" によって暗号化してサーバへそれ (レスポンス) を渡します。サーバ側は当然、パスワードもチャレンジも知っていますので、サーバ自身もクライアントと同じようにそれらからレスポンスを作成し、クライアントからもらったレスポンスと比較します。そしてそれらが同じならばパスワード一致とみなす、という方法で認証を行っています。
このように NTLM 認証と言うのは、そのとき一度きりの "チャレンジ" を使って暗号化されたパスワードをサーバとやり取りするので、途中でそのやり取りが盗み見られたとしてもパスワードがすぐにばれることが無い認証方式です。
ところがこの方式には、抜け道が存在する余地があります。
というのも、Windows 2000 には、TELNET 機能が備わっているのですけど、これが、クライアントとサーバともに NTLM 認証をサポートしているのです。ですので、次のような方法を用いると、パスワードを知らずともレスポンスを得ることが出来てしまう、とのことです。
- まず攻撃側が、目的の PC が自分自身へ TELNET 接続するように仕向けます。この方法はたとえば HTML などで telnet:// プロトコルとしてアクセスするなどの手法が (今は出来るかわかりませんけど) 可能だったようです。
- そして見事接続してきてくれたら、とりあえずそれはそのまま接続を維持したまま、今度は攻撃側が目的の PC へ NTLM 認証を要求します。要求先は何でも良いのでしょうけど、たとえば共有フォルダへのアクセスなど、別に TELNET である必要はありません。
- すると目的の PC がチャレンジを生成して渡してくれるので、何食わぬ顔で先ほど維持してある TELNET 接続に、このもらったチャレンジをそのまま渡し、レスポンスを要求します。
- 目的の PC の TELNET クライアントは、自動認証するべく、もらったチャレンジを使って自分自身 (恐らく TELNET を起動しているアカウント) のパスワードを暗号化し、レスポンスとして攻撃側に返します。
- 攻撃側はもらったレスポンスを、2. で目的の PC に要求した NTLM 認証のレスポンスとして、そのまま目的の PC へ返却する。
- 目的の PC は、自分自身のパスワード情報とチャレンジからレスポンスを割り出して 5. でもらったレスポンスと一致するか比較するが、5. が渡したレスポンス自体、目的の PC が自分自身のパスワード情報と同一のチャレンジから割り出したレスポンスなので一致。パスワードが合っていたとみなされる。
説明がややこしいせいもあり、パソコンの振る舞いを想像できないとわかりにくいかも知れませんけど、このような感じで攻撃側がパスワードを知らなくても認証を通過できてしまうという可能性が存在する、ということです。
ですので、楽だからと 「現在のユーザー名とパスワードで自動的にログオンする」 に設定するのは、運が悪ければ共有フォルダを盗み見られたり、不正利用されたり、場合によってはファイルを削除されてしまったり、いろいろとリスクが高くなる恐れがあるのでやめておいたほうがよさそうです。
ディフォルトの 「イントラネットゾーンでのみ自動的にログオンする」 についても、ローカルネットワーク内において同様の被害にあう可能性がありますけど、まったく無いとはいえないにせよ、明らかにインターネットよりは安全なので、信頼が置けるならさほど問題は無いでしょう。
イントラネットゾーンを追加する
今回の場合、完全に個人専用の用途なので、基本的にイントラネット (ローカルネットワーク) は安全です。
さらに接続さきのサイトもフルドメインでの指定とはいえ実質はイントラネット内のサーバなので、これらもイントラネットの一員と見てもらえるように PC の設定を調整してみることにします。
調整はサーバではなく、クライアントで行います。
コントロールパネルのインターネットオプションを開いて、「セキュリティ」 タブの中の 「イントラネット」 アイコンをクリックします。そして 「サイト」 ボタンを押すと URL の登録ダイアログが出てくるので、「詳細設定」 にて目的のサイトを登録してあげれば OK です。なお URL の設定では "http://*.mydomain/" というようにワイルドカードを指定することが出来ました。
これらの設定を終えて、FrontPage 2003 にて目的のサイトへアクセスしてみると、自動的に NTLM 認証が実施され、パスワードを入力することなしにサイトへ接続することが可能となりました。