Q

マイクロソフトが提供するセキュリティ診断ツールMBSA(Microsoft Baseline Security Analyzer) 2.0を使って,社内のクライアントやサーバーにおけるセキュリティ・パッチの適用状況をチェックしようとしています。


△ 図をクリックすると拡大されます
図1●MBSA 2.0ではWindowsファイアウオールが有効のマシンを調査できない
 しかし,Windows XP Professionalのコンピュータをスキャンすると,結果の一番上で「セキュリティ更新プログラムのスキャン結果」が評価「!」となり,「ファイアウオール設定のため接続できない」と表示されます(図1)。

 診断対象のWindows XPのコンピュータはService Pack 2を適用してWindowsファイアウオールを有効にしており,これが原因だということは分かりました。しかし,MBSAのスキャンのためにWindowsファイアウオールを無効にするのは避けたいと考えています。Windowsファイアウオールの設定を変更することで,リモート・スキャンは可能になるでしょうか。現状では,例外設定で「ファイルとプリンタの共有」を有効としており,Windowsファイアウオールが有効でも共有フォルダを開けるようにしています。

A

設定によってWindowsファイアウオールが有効のままでもリモート・スキャンが可能になります。ただし,2005年10月の時点では少し工夫が必要です。MBSAのスキャンがどの通信ポートを使って処理されるかを知ることが不可欠です。

ファイルの共有のみの許可では不十分


△ 図をクリックすると拡大されます
図2●MBSA 2.0のリモート・スキャンの仕組み
 MBSA 2.0で「セキュリティ更新プログラムのスキャン」をリモート・コンピュータに対して実行したとき,診断対象となるコンピュータでは「エージェント」と呼ばれるDCOM(分散COM)アプリケーションを起動します(図2)。エージェントは,そのコンピュータにおけるセキュリティ更新プログラムの適用状況を収集し,スキャンの実行元へ返信します。MBSA 2.0は,送信されてきたデータを基に判定して,結果を表示します。

 MBSA 2.0とエージェントの以上のやり取りにおいては,「ファイルとプリンタの共有」で使用するポートに加えて,TCP 135ポートと,DCOMの通信手段であるRPC*の動的割り当てで指定されたポートを用います。このため,Windowsファイアウオールが有効な環境では各種設定を行わないとスキャンの実行に失敗します。「ファイルとプリンタの共有」のポートに対する着信を許可するだけでは不十分なのです。

MSのFAQ記載の方法では失敗
 Windowsファイアウオールを有効としたまま,MBSA 2.0のスキャンで正常な結果を得るには,診断対象となるコンピュータにおいて,既定では動的に割り当てられるRPCの通信ポートを1つに固定化し,その通信を許可するように設定する方法が最もリスクが小さいでしょう。

 この方法は,マイクロソフトの技術文書「MBSA 2.0 よく寄せられる質問」にも記載されています。そこでは「Q. ファイアウオールで保護されているコンピュータはどのようにリモート・スキャンできますか?」という項目で,スキャンを行う際に実行されるエージェント「Windows Update Agent」が使用する通信ポートを1つに固定し,指定したカスタム・ポートとTCP 135ポートでの着信を有効にすることで,Windowsファイアウオールが有効なままリモート・スキャンを実施する方法が記されています。

 しかし,この文書で記された方法を実施する際には,Windows XP向けのCOM+*修正ロールアップ・パッケージを適用する必要があります。この修正プログラムは2005年10月現在,サポート・サービス契約者のみに提供されていて一般には入手できません。このパッケージが適用されていない場合は,エージェントに対して固定的にポートを割り当てられず,技術文書通りに設定してもスキャンできません。

最小限の動的ポートの通信を許可
 そこで,ここでは,次善の策としてRPCの動的ポート割り当ての範囲を狭めた上で,指定した範囲のポートによる通信をWindowsファイアウオールで許可する設定を紹介しましょう。一定の範囲のポートに対する着信を許可するため,多少のリスクは生じますが,セキュリティ・パッチのリモート・スキャンが実行できるようになります。


△ 図をクリックすると拡大されます
図3●RPCの動的ポート割り当ての範囲を狭める設定
 RPCの動的ポート割り当ての設定は,[管理ツール]の[コンポーネントサービス]で変更できます(図3)。ウインドウ左側のツリーを[コンソールルート]−[コンポーネントサービス]−[コンピュータ]とたどると[マイコンピュータ]というアイコンが現れます。これを右クリックしてプロパティを開き,[既定のプロトコル]タブに表示されている[接続指向TCP/IP]をダブル・クリックするなどでプロパティを開きます。そうして表示した[COMインターネットサービスのプロパティ]の画面においてポート範囲の割り当てにある[追加]ボタンを押して,[ポート範囲]欄に1024以上の任意ポートを2つ以上含む形で「1024-1025」のように指定します。


△ 図をクリックすると拡大されます
図4●指定したポートの通信を許可するWindowsファイアウオールの設定
 続いて,指定したポートでの通信が許可されるよう,Windowsファイアウオールを設定します(図4)。[ファイル名の指定と実行]よりfirewall.cplを実行するなどの方法でWindowsファイアウオールの設定画面を開いて[例外]タブを選択します。次に[ポートの追加]をクリックし,ポートを指定して[OK]をクリックします。これを,許可するポートの数だけ繰り返します。ここで,TCP 135と,RPC動的割り当ての範囲で設定したポートを指定することになります。また,許可したポートでの通信を許可する相手を限定するために,スコープの設定を併せて行うことをお勧めします。例えば,MBSAを導入したマシンのIPアドレスをカスタムの一覧に追加するとよいでしょう。

 なお,実際に試したところ,「1024-1025」が[ポート範囲の割り当て]欄と[既定の動的ポート割り当て]欄で[イントラネットの範囲]となるよう指定し,併せてWindowsファイアウオールで許可することで,正常にスキャン結果が得られることを確認しています([イントラネットの範囲]で「1024-1025」を設定する手順は少し面倒ですが可能です)。ただし,環境によっては[インターネットの範囲]が適切な場合があります。実際に設定を変更する前に,必ずテストしてください。

多数のクライアントに設定を展開
 ここまで説明した「セキュリティ更新のスキャン」を実施する設定は,スキャン対象となるコンピュータ1台ずつに行う必要があります。そのため,設定対象が多数存在する場合は,バッチ・ファイルの実行やグループ・ポリシーでの展開といった方法で実施するとよいでしょう。

 まず,バッチ・ファイルでの設定方法を説明します。RPC動的割り当てポートを[管理ツール]の[コンポーネントサービス]で設定すると,レジストリ・キーHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc\Internetに設定値が登録されます。

 具体的には[COMインターネットサービスのプロパティ]画面において追加したポートの設定が,複数行文字列値Portsとして記録されます。また,「ポート範囲の割り当て」が文字列値PortsInternetAvailableで,「既定の動的ポート割り当て」が文字列値UseInternetPortsとして,それぞれ格納されます。

 以上のレジストリ値をエクスポートしたファイルから,設定をインポートするバッチ・ファイルを作成し,各コンピュータのユーザーに実行してもらうことで,設定を反映させることができます。

 例えば,次のようにするとよいでしょう。まず,レジストリ・エディタ(regedit.exe)でレジストリ・キー Internetを右クリックして[エクスポート]を選択し,これらの設定をレジストリ・ファイル(.reg)としてエクスポートします。インポート時はregedit.exeのパラメータに.regファイルを指定して実行します。このとき,「regedit /s exports.reg」のように「/s」をパラメータに加えることで,「regファイル内の情報をレジストリに追加しますか?」といったダイアログ・ボックスが表示されることなく,レジストリに設定が追加可能です。

 次に,Windowsファイアウオールの例外設定を追加します。これにはnetshコマンドのfirewallコンテキストを使うとよいでしょう。今回はTCPの135および1024と1025番ポートでの着信を許可するように追加設定するため,図5のコマンドを実行します。このコマンド例では,スコープの範囲をローカル・サブネット(LocalSubnet)に設定しています。


△ 図をクリックすると拡大されます
図5●netshコマンドによるWindowsファイアウオールの設定の例

 なお,Windowsファイアウオールの設定には管理者権限が必要です。普段使用しているアカウントが一般ユーザー権限などの場合には,管理者権限を持つユーザー・アカウントでスケジュール実行するといった方法で対応します。

Active Directoryでも展開可能
 Active Directory環境では,グループ・ポリシーで同様な自動化が可能です。

 まず,RPC動的割り当てに関する設定項目は既定のポリシー・テンプレートには用意されていません。そこで,先ほど説明したレジストリ設定をインポートするバッチ・ファイルを共有フォルダにコピーし,コンピュータのスタートアップ・スクリプトとして実行することで設定を適用させられます。グループ・ポリシー・オブジェクト・エディタ(gpedit.msc)でグループ・ポリシー・オブジェクト(GPO)を開き,左側ツリーで[コンピュータの構成]−[Windowsの設定]−[スクリプト(スタートアップ/シャットダウン)]と展開して,右側の[スタートアップ]をダブル・クリックして開かれた画面で,共有フォルダに置いたバッチ・ファイルを指定します。

 ただし,この方法ではコンピュータが起動するたびにバッチ・ファイルが実行されてしまうため,レジストリの項目に関するテンプレート・ファイル(.adm)を作成してGPOに追加し,値を設定することで実現するとよいでしょう。

 Windowsファイアウオールの例外ポートについては,既定で用意されているテンプレートを使って設定できます。スタートアップ・スクリプトと同じようにグループ・ポリシー・オブジェクト・エディタから[コンピュータの構成]−[管理用テンプレート]−[ネットワーク]−[ネットワーク接続]−[Windowsファイアウォール]と展開すると,その下の[ドメインプロファイル]と[標準プロファイル]にそれぞれ同じ設定項目が用意されています。その中の[Windowsファイアウォール:ポートの例外を定義する」を有効にして開放したいポートを「135:TCP:LocalSubnet:enabled:DCOM」といった形で指定します。

 [ドメインプロファイル]と[標準プロファイル]の違いは次の通りです。

 [ドメインプロファイル]はドメイン・コントローラと通信可能な社内ネットワークで適用される設定群です。一方,[標準プロファイル]は自宅などスタンドアロンな環境で適用されます。

 例えば,[ドメインプロファイル]ではMBSA 2.0でのスキャンを実施する社内ネットワーク環境を考慮してポートの例外設定を行います。一方[標準プロファイル]では,より危険度の高い状況となることを考慮してポートの例外を定義せず,さらに[Windowsファイアウォール:例外を許可しない]を有効としてセキュリティ強度を向上させるとよいでしょう。

NTTデータ関西 法人ビジネス事業部
テクニカルサポート担当