[HOWTO] TCP/IP スタックを強化する方法

公開日: 2004年9月7日 | 最終更新日: 2004年9月7日
トピック

 目的
 適用対象
 モジュールの使用方法
 要約
 必要な知識
 SYN 攻撃から保護する
 ICMP 攻撃から保護する
 SNMP 攻撃から保護する
 AFD.SYS の保護
 付加的な保護
 注意事項
 その他のリソース

目的

このモジュールの目的は次のとおりです。

  • サーバーの TCP/IP スタックを強化する。

  • サーバーをサービス拒否攻撃および他のネットワーク ベースの攻撃から保護する。

  • 攻撃を検出した場合、SYN flood に対する保護を可能にする。

  • 攻撃を構成する要素を決定するために使用するしきい値を設定する。

適用対象

このモジュールは、次の製品とテクノロジに適用されます。

  • Microsoft® Windows® 2000 Server™ および Windows 2000 Advanced Server

モジュールの使用方法

このモジュールで参照されるキーと値の一部は、既定値では存在しない可能性があります。その場合は、キー、値、および値のデータを作成します。

Windows 2000 のレジストリが制御する TCP/IP ネットワークの設定の詳細については、次のマイクロソフトの Web サイトにあるホワイト ペーパー「Microsoft Windows 2000 TCP/IP 実装詳細」を参照してください。http://www.microsoft.com/japan/technet/itsolutions/network/deploy/depovg/tcpip2k.mspx

注: これらの設定は、TCP/IP がサーバーで動作する方法を変更します。Web サーバーの特徴により、サービス拒否 (DoS) への対策を実行するための最適なしきい値を決定します。値によってはクライアントの接続状況に対して制限がありすぎる場合もあります。このモジュールで推奨されるテストをしてから、それらを運用サーバーに展開してください。

要約

TCP/IP スタックは送受信用 IP パケットを処理し、パケットのデータを処理するアプリケーションにルーティングします。既定値では、TCP/IP は本質的に安全ではないプロトコルです。しかし、Microsoft Windows 2000 を実装することにより、大半のネットワーク レベルでのサービス拒否 (DoS) 攻撃を阻止する処理を行うように構成できます。

このモジュールは、TCP/IP スタックを強化する方法および、SYS flood 攻撃、ICMP 攻撃、および SNMP 攻撃を含む、ネットワーク レベルのサービス拒否 (DoS) 攻撃を防ぐために、Windows レジストリ内のさまざまな TCP/IP パラメータを構成する方法について説明します。

必要な知識

Windows レジストリのさまざまな TCP/IP パラメータを設定することにより、SYS flood 攻撃、ICMP 攻撃、および SNMP 攻撃を含む、ネットワーク レベルのサービス拒否 (DoS) 攻撃を防ぐことができます。レジストリ キーを構成する目的は次のとおりです。

  • 攻撃を検出した場合、SYN flood に対する保護を可能にする。

  • 攻撃を構成する要素を決定するために使用するしきい値を設定する。

この [HOWTO] は管理者に対して、ネットワークベースのサービス拒否 (DoS) 攻撃から保護するために構成する必要があるレジストリ キーおよびレジストリ値を示します。

注: これらの設定は、TCP/IP がサーバーで動作する方法を変更します。Web サーバーの特徴により、サービス拒否 (DoS) への対策を実行するための最適なしきい値を決定します。値によってはクライアントの接続状況に対して制限がありすぎる場合もあります。このドキュメントで推奨されるテストをしてから、運用サーバーに展開してください。

TCP/IP は本質的に安全ではないプロトコルです。しかし、Windows 2000 を実装することにより、ネットワーク レベルでのサービス拒否 (DoS) 攻撃を阻止する処理を行うように構成できます。この [HOWTO] で参照されるキーと値の一部は、既定値では存在しない可能性があります。その場合は、キー、値、および値のデータを作成します。

Windows 2000 のレジストリが制御する TCP/IP ネットワークの設定の詳細については、次のマイクロソフトの Web サイトにあるホワイト ペーパー「Microsoft Windows 2000 TCP/IP 実装詳細」を参照してください。http://www.microsoft.com/japan/technet/itsolutions/network/deploy/depovg/tcpip2k.mspx

SYN 攻撃から保護する

SYN 攻撃は、TCP/IP 接続を確立するメカニズムの脆弱性を悪用します。SYN flood 攻撃をするため、攻撃者はサーバーの保留中の接続キューを大量に発生させるために、TCP SYN 要求を大量に送るプログラムを使用します。これにより他のユーザーはネットワーク接続を確立できなくなります。

ネットワークを SYN 攻撃から保護するには、次に概略を示した手順に従います。この手順については後述します。

  • SYN 攻撃に対する保護を有効にする。

  • SYN に対する保護のしきい値を設定する。

  • 付加的な保護を設定する。

SYN 攻撃に対する保護を有効にする

SYN 攻撃に対する保護を有効にする名前の付けられた値は、次のレジストリ キーの下にあります。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TcpIp\Parameters

値の名前: SynAttackProtect

推奨値: 2

有効値: 0 ~ 2

説明: TCP が SYN-ACKS を再転送するように調整します。この値を設定すると、SYN 攻撃が発生した際、接続応答がすばやくタイムアウトになります。SYN 攻撃は、TcpMaxHalfOpen 値、または TcpMaxHalfOpenRetried 値が超過した場合に発生します。

SYN に対する保護のしきい値を設定する

次の値は、SYN に対する保護を始動するためのしきい値を決定します。このセクションのすべてのキーと値は、レジストリ キー HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TcpIp\Parameters の下にあります。それらのキーと値を次に示します。

  • 値の名前: TCPMaxPortsExhausted
    推奨値: 5
    有効値: 0 ~ 65535
    説明: SYN flood に対する保護が始動される前に超過する必要がある、TCP 接続要求のしきい値を指定します。

  • 値の名前: TcpMaxHalfOpen
    推奨値のデータ: 500
    有効値: 100 ~ 65535
    説明: SynAttackProtect が有効な場合、この値が SYN_RCVD 状態における TCP 接続のしきい値を指定します。SynAttackProtect が超過した場合、SYN flood に対する保護が始動します。

  • 値の名前: TcpMaxHalfOpenRetried
    推奨値のデータ: 400
    有効値: 80 ~ 65535
    説明: SynAttackProtect が有効な場合、この値が、最低 1 つの再転送が送られる SYN_RCVD 状態における TCP 接続のしきい値を指定します。SynAttackProtect が超過した場合、SYN flood に対する保護が始動します。

付加的な保護を設定する

ここで挙げるすべてのキーと値は、レジストリ キー HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TcpIp\Parameters の下にあります。それらのキーと値を次に示します。

  • 値の名前: TcpMaxConnectResponseRetransmissions
    推奨値のデータ: 2
    有効値: 0 ~ 255
    説明: SYN 要求に応答する試行をキャンセルする前に、SYN-ACK が再転送される回数を制御します。

  • 値の名前: TcpMaxDataRetransmissions
    推奨値のデータ: 2
    有効値: 0 ~ 65535
    説明: 接続を終了する前に TCP が個別のデータ セグメント (接続要求セグメントではない) を再転送する回数を指定します。

  • 値の名前: EnablePMTUDiscovery
    推奨値のデータ: 0
    有効値: 0, 1
    説明: この値を 1 (既定値) に設定すると、TCP は、リモート ホストへのパスの最大伝送単位 (MTU) または最大パケット サイズを検出するよう強制します。攻撃者は、パケットの断片化を強制することにより、スタックに多大な負荷をかけます。0 に指定すると、ローカル サブネット上に存在しないホストからの接続に対して、MTU が 576 バイトに設定されます。

  • 値の名前: KeepAliveTime
    推奨値のデータ: 300000
    有効値: 80 ~ 4294967295
    説明: TCP が keep-alive パケットを送信してアイドル状態の接続がそのままであることを確認する頻度を指定します。

  • 値の名前: NoNameReleaseOnDemand
    推奨値のデータ: 1
    有効値: 0, 1
    説明: コンピュータが名前解放要求を受信したときに NetBIOS 名を解放しないことを指定します。

最大限の保護が得られるように、表 1 にまとめられている値を使用します。

表 1: 推奨値

値の名前

値 (REG_DWORD)

SynAttackProtect

2

TCPMaxPortsExhausted

1

TcpMaxHalfOpen

500

TcpMaxHalfOpenRetried

400

TcpMaxConnectResponseRetransmissions

2

TcpMaxDataRetransmissions

2

EnablePMTUDiscovery

0

KeepAliveTime

300,000 (5 分)

NoNameReleaseOnDemand

1

ICMP 攻撃から保護する

ここで挙げる名前の付けられた値は、次のレジストリ キーの下にあります。HKLM\System\CurrentControlSet\Services\TcpIp\Parameters

値: EnableICMPRedirect
推奨値のデータ: 0
有効値: 0 (無効)、1 (有効)
説明: このレジストリ値を 0 に変更すると、ICMP リダイレクト パケットが着信した場合に、高価なホスト ルートが作成されることを防止します。

最大限の保護が得られるように、表 2 にまとめられている値を使用します。

表 2: 推奨値

値の名前

値 (REG_DWORD)

EnableICMPRedirect

0

SNMP 攻撃から保護する

ここで挙げる名前の付けられた値は、次のレジストリ キーの下にあります。HKLM\System\CurrentControlSet\Services\Tcpip\Parameters

値: EnableDeadGWDetect
推奨値のデータ: 0
有効値: 0 (無効)、1、 (有効)
説明: 攻撃者がセカンダリ ゲートウェイにスイッチングを強制することを阻止します。

最大限の保護が得られるように、表 3 にまとめられている値を使用します。

表 3: 推奨値

値の名前

値 (REG_DWORD)

EnableDeadGWDetect

0

AFD.SYS の保護

次のキーは、カーネル モードでのドライバ AFD.SYS に対するパラメータを指定します。AFD.SYS は Windows Sockets アプリケーションをサポートするために使用されます。ここで挙げるすべてのキーと値は、レジストリ キー HKLM\System\CurrentControlSet\Services\AFD\Parameters の下にあります。それらのキーと値を次に示します。

  • 値: Value EnableDynamicBacklog
    推奨値のデータ: 1
    有効値: 0 (無効)、1 (有効)
    説明: 多数の SYN_RCVD 接続に効果的に耐えるために AFD.SYS 機能を指定します。悪質な SYN 攻撃のため、使用できないインターネット サーバーの詳細については、次のサポート技術情報 (英語) を参照してください。http://support.microsoft.com/default.aspx?scid=kb;ja;142641

  • 値の名前: MinimumDynamicBacklog
    推奨値のデータ: 20
    有効値: 0 ~ 4294967295
    説明: リスンしているエンドポイントで許可される空き接続の最大値を指定します。空き接続数がこの値以下になる場合、追加の空き接続を作成するために、スレッドがキューに保存されます。

  • 値の名前: MaximumDynamicBacklog
    推奨値のデータ: 20000
    有効値: 0 ~ 4294967295
    説明: 空き接続と SYN_RCVD ステート内の空き接続両方の最大合計量を指定します。

  • 値の名前: DynamicBacklogGrowthDelta
    推奨値のデータ: 10
    有効値: 0 ~ 4294967295
    既定値で存在する: いいえ
    説明: 追加の接続が必要となったときに作成する空き接続を指定します。

最大限の保護が得られるように、表 4 にまとめられている値を使用します。

表 4: 推奨値

値の名前

値 (REG_DWORD)

EnableDynamicBacklog

1

MinimumDynamicBacklog

20

MaximumDynamicBacklog

20000

DynamicBacklogGrowthDelta

10

付加的な保護

ここで挙げるすべてのキーと値は、レジストリ キー HKLM\System\CurrentControlSet\Services\Tcpip\Parameters の下にあります。

選別されたネットワークの細部を保護する

Network Address Translation (NAT) は受信接続からネットワークを選別するために使用されます。IP ソース ルーティングを使用するネットワーク トポロジを確認するために、攻撃者はこの選別を回避します。

値: DisableIPSourceRouting
推奨値のデータ: 1
有効値: 0 (すべてのパケットを転送する)、1 (ソース ルーティング パケットを転送しない)、2 (受信するすべてのソース ルーティングされたパケットをドロップする)
説明: IP ソース ルーティングを無効にすることにより、データグラムがネットワークを通過する際に使用すべきルートを送信者が決定できます。

断片化されたパケットを許可しない

断片化されたパケットを処理するにはコストがかかります。まれにサービス拒否 (DOS) が境界ネットワーク内から発生することがありますが、この設定は断片化されたパケットの処理を防止します。

値: EnableFragmentChecking
推奨値のデータ: 1
有効値: 0 (無効)、1 (有効)
説明: 断片化されたパケットの許可から IP スタックを防止します。

複数のホストに対してパケットを転送しない

マルチキャスト パケットは複数のホストによって対応されますが、応答がネットワークを氾濫させる結果になります。

値: EnableMulticastForwarding
推奨値のデータ: 0
有効範囲: 0 (false)、1 (true)
説明: ルーティング サービスはこのパラメータを使用して、IP マルチキャストが転送されるかどうかを制御します。このパラメータは、ルーティングとリモート アクセス サーバーにより作成されます。

ファイアウォールだけがネットワーク間のパケットを転送する

マルチホーム化されたサーバーは接続されたネットワーク間でパケットを転送してはなりません。明らかな例外はファイアウォールです。

値: IPEnableRouter
推奨値のデータ: 0
有効範囲: 0 (false)、1 (true)
説明: このパラメータを 1 (true) に設定すると、システムが接続されているネットワーク間で IP パケットをルートします。

マスク ネットワーク トポロジの詳細

ホストのサブネット マスクは、ICMP パケットを使用してできます。この情報の開示自体は無害ですが、複数のホストからの応答は内部ネットワークについての知識を増やすために使用される可能性があります。

値: EnableAddrMaskReply
推奨値のデータ: 0
有効範囲: 0 (false)、1 (true)
説明: このパラメータはコンピュータが ICMP アドレス マスク要求に応答するかどうかを制御します。

最大限の保護が得られるように、表 5 にまとめられている値を使用します。

表 5: 推奨値

値の名前

値 (REG_DWORD)

DisableIPSourceRouting

1

EnableFragmentChecking

1

EnableMulticastForwarding

0

IPEnableRouter

0

EnableAddrMaskReply

0

注意事項

これらの値の変更点をテストする場合、運用状態に反映させるネットワーク ボリュームに対してテストします。これらの設定は、通常とみなされるしきい値を変更し、テストされた既定値から逸脱します。クライアントからの接続速度が大きく異なる場合は、範囲が限定されすぎて、クライアントの信頼性をサポートできない場合があります。

その他のリソース

TCP/IP の詳細については、以下のリソースを参照してください。


表示: