IIS の Server ヘッダーを消去する
こんにちは!IIS サポートの月尾です。
今回は、お問い合わせいただくことの多い IIS の Server ヘッダーを隠ぺいする方法についてご紹介します。
IIS をご利用で、ホストしている Web サーバーや、そのバージョンが判明してしまうとセキュリティ上望ましくないとの診断を受けたり、Server ヘッダーでクライアントに返される情報を隠したいという方は、どうぞ最後までお目通しいただけますと幸いです。
まず、IIS が返す HTTP ヘッダー内の Server ヘッダーには、以下の 2 種類があります。
----------
1. IIS 自身が返す Server ヘッダー (Server: Microsoft-IIS/<version>)
2. HTTP 通信を管理するドライバである http.sysが返す Server ヘッダー (Server: Microsoft-HTTPAPI/<version>)
通常は、1. の形式の Server ヘッダーが使用されます。
HTTP.sys にてエラーが発生した場合などで IIS にて処理されなかった場合には 2.の形式の応答が使用されます。
----------
上記それぞれについて、隠ぺいする方法をご紹介します。
1. IIS 自身が返す Server ヘッダーの隠ぺい方法
既定では、以下のように Server: Microsoft-IIS/<version> という形式で応答ヘッダーに含まれます。
※ これは、パケットキャプチャーツールの Fiddler の画面キャプチャです。
ここでは、ポピュラーな方法である、 <1> URL Rewrite と <2> UrlScan を利用した方法をご紹介します。
<1> URL Rewrite
特徴:
ネイティブ HTTP モジュールとして実装されている。
最も影響が少なく、容易に実現可能であるため推奨している。
- 事前準備
IIS マネージャー画面から任意のサイトを選択していただき、機能一覧に [URL 書き換え] が表示されていない場合、URL Rewrite モジュールがインストールされておりません。
インストールされていない場合は、以下よりダウンロードの上、インストールします。
URL Rewrite
https://www.iis.net/downloads/microsoft/url-rewrite
※「Download URL Rewrite Module 2.1」よりダウンロードしてください。
- URL Rewrite 設定手順
・送信規則の追加 以下の手順で、Server ヘッダー値を書き換えるための規則を追加します。 a) IIS マネージャを開きます。 b) 接続ビューで、対象の Web サイトまたはアプリケーションを選択します。 c) 機能ビューで、[URL 書き換え] をダブル クリックして開きます。 d) 操作ビューで、[規則の追加…] をクリックします。 e) 規則の追加ダイアログで、送信規則の [空の規則] を選択し、[OK] をクリックします。 f) 送信規則の編集ダイアログで、以下の通り入力した後、操作ビューの [適用] をクリックします。 - 入力内容 ・名前: 任意 (例: Disable_Server_Header_Rule) ・必須条件: <なし> ・一致するスコープ: サーバー変数 ・変数名: RESPONSE_SERVER ※ URL Rewrite は、変数名によって書き換えるヘッダーを判定します。必ず、上記の変数名をご使用下さい。 ・変数値: パターンに一致する ・使用: 正規表現 ・パターン: .* ・大文字と小文字を区別しない: チェック ON ・条件: 指定不要(初期状態のままご利用ください) ・アクションの種類: 書き換え ・値: 任意(空白のままでも可) ※こちらで設定した値に Server ヘッダーが書き換えられます。今回は隠ぺいするため空白のままとします。 ・既存のサーバー変数値を書き換える: チェック ON g) 操作ビューの [適用] をクリックします。 h) 操作ビューの [規則に戻る] をクリックします。
|
上記を設定いただいても IIS のサービスの再起動や OS の再起動は必要ございません。
- URL Rewrite についての公開情報
URL 書き換えモジュールの使用
https://technet.microsoft.com/ja-jp/library/dd939109.aspx
※なお、 上記の設定はこれまでにも多くご利用いただいている実績ある方法であり、設定を実施いただくことによる性能観点での影響もございませんので、ご安心いただければと存じます。
<2> UrlScan
特徴:
ISAPIフィルターとして実装されている。
IIS とは別に UrlScan に対する設定の変更が必要 (ini ファイル) なため、二元管理のリスクがある。
機能をロックダウンする設定が入っているため、大量のデータや、長いクエリ文字列を扱う等の利用状況によっては影響を受ける可能性がある。
- 事前準備
以下がインストールされていない場合は、サーバー マネージャーの [役割と機能の追加] でインストールします。
・ ISAPI フィルター
・ IIS 6 メタベース互換
- UrlScan 設定手順
1) UrlScan 3.1 を以下の URL よりダウンロードし、インストールします。
UrlScan 3.1
https://www.iis.net/downloads/microsoft/urlscan
2) UrlScan 3.1 のインストールにより、UrlScan の設定ファイルである UrlScan.ini が %windir%\system32\inetsrv\Urlscan に作成されますので、UrlScan.ini をメモ帳等のテキストエディターで開きます。
3) RemoveServerHeader という値を探し、値を 1 に変更して、Server ヘッダーを削除するよう設定します。
※RemoveServerHeader の既定値は 0 (削除しない) であり、既定の UrlScan.ini では以下のように設定されています。
4) IIS のサービスを再起動します。
管理者として、コマンド プロンプトを起動し、以下のコマンドを実行します。
net stop was /y
net start w3svc
- UrlScan についての公開情報
URLScan の使用
https://technet.microsoft.com/ja-jp/library/dd939110.aspx
URLScan ツールの構成方法
https://support.microsoft.com/kb/326444/ja
- 補足
UrlScan はセキュリティ強化のために様々な制御機能を有しているため、UrlScan の既定の設定と、UrlScan がインストールされていない環境で IIS 自体の動作が同じとは限りません。
例えば、UrlScan には HTTP の動詞を許可、または、拒否する機能 (UseAllowVerbs) があります。既定では、GET、HEAD、POST のみが許可され、その他の動詞によるリクエストは拒否されるため、ご利用の状況によっては何らかの影響がある可能性があります。
そのため、 UrlScan を使った方法を採用される場合には、該当の環境で十分な検証をご実施いただくことをお薦めいたします。
IIS 自身が返す Server ヘッダーの隠ぺい確認方法について
<1> URL Rewrite と <2> UrlScan のどちらを採用いただいても、Server ヘッダーを隠ぺいすることが可能です。
上記を設定した状態で、改めて設定した Web サイトやアプリケーションにアクセスしてみます。この際、IE の F12 開発者ツールや、Fiddler 等のパケットキャプチャーツールを利用すると隠ぺいできているか確認可能です。
設定後の応答ヘッダーの内容は以下のようになります。
<1> URL Rewrite を設定した場合
Server ヘッダーの内容が、“” に書き換えられます。
<2> UrlScan を設定した場合
Server ヘッダーそのものが削除されます。
2. HTTP 通信を管理するドライバである http.sysが返す Server ヘッダーの隠ぺい方法
http.sysが返す Server ヘッダーは、レジストリを変更することで隠ぺい可能です。
以下に詳細な手順をご紹介します。
- 事前準備
レジストリの変更が含まれます。レジストリを誤って変更すると深刻な問題が発生する場合があります。
念のため、下記文書をご覧いただき、以下の手順を実行される前に、レジストリのバックアップを取得することをお薦めいたします。
Windows でレジストリをバックアップおよび復元する方法
https://support.microsoft.com/ja-jp/help/322756/how-to-back-up-and-restore-the-registry-in-windows
- レジストリの設定手順
1) [スタート] - [ファイル名を指定して実行] より、"regedit.exe" と入力し、レジストリ エディタを起動します。
2) 左ペインのツリーで HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP まで展開し、Parpameters を選択します。
3) メニューより、 [編集] - [新規] - [DWORD (32 ビット) 値] を選択し、値を追加します。
4) 右ペインに "新しい値 #1" という値が作成されますので、こちらを右クリックし、 [名前の変更] を選択します。
5) 名前を、"DisableServerHeader" に変更します。
6) 手順 5) で名前を変更した "DisableServerHeader" を右クリックし、[修正] をクリックします。
7) [値のデータ] に 1 を入力し、[OK] をクリックします。
8) レジストリ エディタを終了します。
9) 設定の反映には HTTP サービスの再起動が必要となります。そのため、マシンを再起動するか、管理者としてコマンド プロンプトを起動し、以下のコマンドを実行します。
net stop http /y
net start w3svc
HTTP 通信を管理するドライバである http.sysが返す Server ヘッダーの隠ぺい確認方法について
上記手順をご実施後、本当に隠ぺいできているのか不安になるかもしれませんので、最後に telnet コマンドを用いた確認方法を紹介します。
- 手順
1) コントロールパネルの[プログラムと機能]を開き、左側のメニューにある[Windowsの機能の有効化または無効化]をクリックします。
2) [役割と機能の追加ウィザード] の機能から [Telnet クライアント] をインストールします。
3) コマンド プロンプトを起動し、telnet で接続 (例. telnet localhost 80) します。
4) 接続後、”a” とだけ入力して Enter キーを押下します。http.sys がエラー (400 Bad Request) を返し、Server ヘッダーが確認できます。
レジストリ変更前
レジストリ変更後
この記事では、IIS 8.5 で設定した場合の画面キャプチャも一緒に紹介していますが、
今回の手法は現時点では、IIS7.0/IIS7.5/IIS8.0/IIS8.5/IIS10の、Windows Vista/2008 以降の IIS すべてで使用可能な方法です。