IE7/8のイントラネットセキュリティ

徹夜してます。思わぬアクシデントが発生したもので。

経緯:

  • 週末中に顧客DB関係のターミナルサービス環境にIE8を入れる。
  • そうしたらネットワーク共有越しの .exe がアクセス権限の問題で実行不可になった!
  • でも実行ファイルからアイコンリソースは読めているし、ローカルへ複写も可能。
  • 何かが実行時に妨害していると推測。
  • アンチウィルスの設定でもない。
  • 他の環境と連動しているからなるべくバックアップに戻したくない。

犯人はInternet Explorer 8で確定ですが。

で、色々と調べた結果。

  • ネットワークフォルダをIPアドレスでローカルにマップしている場合はイントラネットのサイト一覧に入れると良い。
  • 具体的には、192.168.0.1 を X: とマウントしているのであれば、file://192.168.0.1 をサイト一覧に入れるとエクスプローラーでもアプリ実行可能となる。

ただし、該当環境は複数の無知者が使用する環境。簡単にこの情報を設定するにはどうしたらよいか。

  • ポリシーから 管理用テンプレート>Windows コンポーネントInternet Explorer>インターネットコントロール パネル>セキュリティページを開き、
    サイトとゾーンの割り当て一覧 を構成するとシステム全体に一括設定が可能。ただしその副作用として各ユーザーが個別に除外設定を行うことができなくなる。
    ゾーンの値は以下のとおり:
    • 0 - ローカルコンピューター ゾーン
    • 1 - イントラネット ゾーン
    • 2 - 信頼済み ゾーン
    • 3 - インターネット ゾーン
    • 4 - 制限付きゾーン
  • 調べてみると、セキュリティページのサイトの設定はレジストリの HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap に格納されているとのこと。
    情報の保管場所は以下のとおり。
    • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains に ホスト名単位の情報
      ドメイン名・ホスト名でサブキーが指定されており、各プロトコル (デフォルトは「*」)とゾーンが記録されている。
    • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\RangesIPアドレス範囲単位の情報
      Range1、Range2などのサブキーがあり、その中の「:Range」 REG_SZ値にIPアドレスが記入されている。その他の値は REG_DWORD値でプロトコルとゾーンのペアとなっている (全プロトコルは「*」)。
    • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\ProtocolDefaultsプロトコル単位の情報
      RED_DWORD値に各プロトコル (@ivt, file, ftp, http, https, shell) のゾーンが記録されている。
      ただし設定しても動きが変わらない模様。もしかしてEscProtocolDefaultsがあるかもしれないが、デフォルトでは作成されていなかった。
  • 以下、注意事項。
    • Domains階層は変態的な入れ子構造になっていることがあるので可能ならば全階層を掘って一覧化すると既存のレイアウトを維持したコードを書けるかもしれない。別に誰も見ない場所なのでレジストリ階層が汚くても問題無いとは思うのだが。
    • ホスト名は後方一致される。「hatena.ne.jp」に全プロトコル許可した場合は「*.hatena.ne.jp」を対象にしたとされる。
      プロトコル指定したとしても「http://hatena.ne.jp」は「http://*.hatena.ne.jp」と同義。
    • Windows Server 2003では「.\Domains」が「.\EscDomains」、「.\Ranges」が「.\EscRanges」となる。ESCはEnhanced Security Configurationの略で、Windows コンポーネント ウィザードで「Internet Explorer セキュリティ強化の構成」を無効化してもこのレジストリ依存性は残る。
      Server 2003以降のServer OSにあると思われる。Vistaには無かった。存在基準の判定方法が微妙なのでEsc付きがあるならそちらを優先使用するという方式が無難か。
    • Ranges系のサブキーは作成順にナンバリングされる。中間要素を削除しても番号の整列はされない。
    • IE7系では画面ホスト名の表示時に「*.」が先頭に付加されない。IE8系では付加される。

結果:

  • ログイン時に実行されるスタートアップモジュールにレジストリへの自動追記を組み込んで完了。

で最後に終電を逃した理由。

  • RegEnumKeyEx は lpClass と lpcClass に NULL値を指定した場合にも ERROR_MORE_DATA (234) を返す場合があるということに気が付くのに時間がかかりました。

オチ:

  • IE8入れたらアクティブディレクトリ全体指定のInternet Explorerのスタートページ設定が MSN で上書きされたんだけど どうしてくれようか・・・