バッファオーバーフローチェック
バッファオーバーフローチェックは、Web サーバ上でバッファオーバーフローを引き起こす試みを検出します。Web App Firewall は、URL、Cookie、またはヘッダーが設定された長さよりも長いことを検出すると、バッファオーバーフローを引き起こす可能性があるためリクエストをブロックします。
バッファオーバーフローチェックは、処理できるよりも大きいデータ文字列を受信すると、クラッシュまたは予期せぬ動作をする、安全でないオペレーティングシステムまたは Web サーバソフトウェアに対する攻撃を防止します。適切なプログラミング手法により、入力データをチェックしたり、長すぎる文字列を拒否または切り捨てたりすることで、バッファオーバーフローを防ぐことができます。ただし、多くのプログラムは受信データをすべてチェックしないため、バッファオーバーフローの影響を受けやすくなります。この問題は特に、古いバージョンの Web サーバーソフトウェアとオペレーティングシステムに影響しますが、その多くは引き続き使用されています。
バッファオーバーフローセキュリティチェックでは、 ブロック、 ログ、 統計の各アクションを設定できます 。さらに、次のパラメータを設定することもできます。
- URL の最大長。Web App Firewall がリクエストされた URL で許可する最大長。より長い URL を持つリクエストはブロックされます。指定できる値は0 ~ 65535 です。デフォルト:1024
- クッキーの最大長。Web App Firewall がリクエストに含まれるすべての Cookie を許可する最大長です。より長いクッキーを使用したリクエストは、違反をトリガーします。指定できる値は0 ~ 65535 です。デフォルト:4096
- ヘッダーの最大長。Web App Firewall が HTTP ヘッダーに使用できる最大長。長いヘッダーを持つリクエストはブロックされます。指定できる値は0 ~ 65535 です。デフォルト:4096
- クエリ文字列の長さ。受信リクエストで許容されるクエリ文字列の最大長。クエリが長くなるリクエストはブロックされます。指定できる値は0 ~ 65535 です。デフォルト:1024
- リクエストの合計長。着信要求に許可される最大要求長。長さが長いリクエストはブロックされます。指定できる値は0 ~ 65535 です。デフォルト:24820
コマンドラインを使用してバッファオーバーフローセキュリティチェックを設定する
コマンドラインを使用してバッファオーバーフローのセキュリティチェックアクションとその他のパラメータを設定するには
コマンドプロンプトで入力します。
add appfw profile <name> -bufferOverflowMaxURLLength <positive_integer> -bufferOverflowMaxHeaderLength <positive_integer> - bufferOverflowMaxCookieLength <positive_integer> -bufferOverflowMaxQueryLength <positive_integer> -bufferOverflowMaxTotalHeaderLength <positive_integer>
例:
add appfw profile profile1 –bufferOverflowMaxURLLength 7000 –bufferOverflowMaxHeaderLength 7250 – bufferOverflowMaxCookieLength 7100 –bufferOverflowMaxQueryLength 7300 –bufferOverflowMaxTotalHeaderLength 7300
NetScaler GUIを使用してバッファオーバーフローセキュリティチェックを構成する
- [ セキュリティ ] > [ Web App Firewallとプロファイル] に移動します。
- [ プロファイル] ページでプロファイルを選択し 、[ 編集] をクリックします。
- [NetScaler Web App Firewall プロファイル ]ページで、 [詳細設定] セクションに移動し、[ セキュリティチェック]をクリックします。
- セキュリティチェックセクションで 、「 バッファオーバーフロー 」を選択し、「 アクション設定」をクリックします。
- バッファオーバーフロー設定ページで 、次のパラメータを設定します。 a. アクション。コマンドインジェクションセキュリティチェックのために実行するアクションを 1 つ以上選択します。 b. URL の最大長保護されている Web サイトの URL の最大長 (文字数)。より長い URL を持つリクエストはブロックされます。 c. クッキーの最大長。保護された Web サイトに送信される Cookie の最大長 (文字数)。長い Cookie を含むリクエストはブロックされます。 d. 最大ヘッダ長保護された Web サイトに送信されるリクエストの HTTP ヘッダーの最大長 (文字数)。長いヘッダーを持つリクエストはブロックされます。 e. 最大クエリ長。保護された Web サイトに送信されるクエリ文字列の最大長 (バイト単位)。クエリ文字列が長いリクエストはブロックされます。 f. ヘッダーの最大合計長。保護された Web サイトに送信されるリクエストの HTTP ヘッダーの合計長の最大長 (バイト単位)。これと HttpProfile の maxHeaderLen の最小値が使用されます。長さが長いリクエストはブロックされます。
-
「 OK」をクリックして「閉じる」をクリックします。
バッファオーバーフローセキュリティチェックでのログ機能の使用
**ログアクションを有効にすると、バッファオーバーフローのセキュリティチェック違反は APPFW_BUFFEROVERFLOW_URL、APPFW_BUFFEROVERFLOW_COOKIE、および **APPFW_BUFFEROVERFLOW_HDR違反として監査ログに記録されます。** Web App Firewall は、ネイティブログ形式と CEF ログ形式の両方をサポートしています。ログをリモート syslog サーバに送信することもできます。
GUI を使用してログを確認する場合、Click-to-Deploy 機能を使用して、ログに示されている緩和を適用できます。
コマンドラインを使用してログメッセージにアクセスするには
シェルに切り替えて /var/log/ フォルダー内の ns.logs を末尾に移動して、バッファオーバーフロー違反に関するログメッセージにアクセスします。
> \*\*Shell\*\*
> \*\*tail -f /var/log/ns.log | grep APPFW_BUFFEROVERFLOW\*\*
<!--NeedCopy-->
非ブロックモードでの BufferOverflowMaxCookieLength 違反を示す CEF ログメッセージの例
Oct 22 17:35:20 <local0.info> 10.217.31.98 CEF:0|Citrix|NetScaler|NS11.0|APPFW|\*\*APPFW_BUFFEROVERFLOW_COOKIE\*\*|6|src=10.217.253.62 geolocation=Unknown spt=41198 method=GET request=http://aaron.stratum8.net/FFC/sc11.html \*\*msg=Cookie header length(43) is greater than maximum allowed(16).\*\* cn1=119 cn2=465 cs1=owa_profile cs2=PPE1 cs3=wvOOOb+cJ2ZRbstZpyeNXIqLj7Y0001 cs4=ALERT cs5=2015 \*\*act=not blocked\*\*
<!--NeedCopy-->
非ブロックモードでの BufferOverflowMaxURL Length 違反を示す CEF ログメッセージの例
Oct 22 18:39:56 <local0.info> 10.217.31.98 CEF:0|Citrix|NetScaler|NS11.0|APPFW|\*\*APPFW_BUFFEROVERFLOW_URL\*\*|6|src=10.217.253.62 geolocation=Unknown spt=19171 method=GET request=http://aaron.stratum8.net/FFC/sc11.html \*\*msg=URL length(39) is greater than maximum allowed(20).\*\* cn1=707 cn2=402 cs1=owa_profile cs2=PPE0 cs3=kW49GcKbnwKByByi3+jeNzfgWa80000 cs4=ALERT cs5=2015 \*\*act=not blocked\*\*
<!--NeedCopy-->
ブロックモードでの BufferOverflowMaxHeaderLength 違反を示すネイティブ形式のログメッセージの例
Oct 22 18:44:00 <local0.info> 10.217.31.98 10/22/2015:18:44:00 GMT ns 0-PPE-2 : default APPFW \*\*APPFW_BUFFEROVERFLOW_HDR\*\* 155 0 : 10.217.253.62 374-PPE2 khhBEeY4DB8V2D3H2sMLkXmfWnA0002 owa_profile \*\*Header(User-Agent) length(82) is greater than maximum allowed(10)\*\* : http://aaron.stratum8.net/ \*\*<blocked>\*\*
<!--NeedCopy-->
GUI を使用してログメッセージにアクセスするには
GUI には、ログメッセージを分析するための便利なツール (Syslog Viewer) が含まれています。Syslog ビューアにアクセスするには、複数のオプションがあります。
-
[ アプリケーションファイアウォール ] > [ プロファイル] に移動し、ターゲットプロファイルを選択して [ セキュリティチェック] をクリックします。[ バッファオーバーフロー ] 行を強調表示して [ ログ] をクリックします。 プロファイルのバッファオーバーフローセキュリティチェックから直接ログにアクセスすると、GUI はログメッセージをフィルタリングし、これらのセキュリティチェック違反に関連するログのみを表示します。
-
「 NetScaler 」>「 システム 」>「 監査 」の順に選択して、Syslogビューアにアクセスすることもできます。 監査メッセージセクションで、 Syslog メッセージリンクをクリックして Syslog Viewer を表示します。このビューアには、他のセキュリティチェック違反ログを含むすべてのログメッセージが表示されます。これは、要求処理中に複数のセキュリティチェック違反がトリガーされる可能性がある場合のデバッグに役立ちます。
-
アプリケーションファイアウォール > ポリシー > 監査に移動します。 監査メッセージセクションで 、 Syslog メッセージリンクをクリックして Syslog Viewer を表示します。このビューアには、他のセキュリティチェック違反ログを含むすべてのログメッセージが表示されます。
XML ベースの Syslog Viewer には、関心のあるログメッセージのみを選択するためのさまざまなフィルターオプションが用意されています。 バッファオーバーフローチェックのログメッセージを選択するには、モジュールのドロップダウンリストオプションで **APPFW を選択してフィルタリングします。**イベントタイプリストには、 **バッファオーバーフローセキュリティチェックに関するすべてのログメッセージを表示するための APPFW_BUFFEROVERFLOW_URL、APPFW_BUFFEROVERFLOW_COOKIE、A PPFW_BUFFEROVERFLOW_HDRの 3 つのオプションがあります。1 つまたは複数のオプションを選択して、選択をさらに絞り込むことができます。たとえば、 **APPFW_BUFFEROVERFLOW_COOKIE チェックボックスを選択して「 **適用 」ボタンをクリックすると、Cookie**ヘッダーのバッファオーバーフローセキュリティチェック違反に関するログメッセージのみが Syslog ビューアに表示されます。特定のログメッセージの行にカーソルを置くと、 モジュール、 イベントタイプ、イベントID、 クライアント IPなどの複数のオプションがログメッセージの下に表示されます。これらのオプションを選択すると、ログメッセージ内の対応する情報を強調表示できます。
Click-to-Deploy: GUI にはクリックしてデプロイする機能がありますが、これは現在 URL の長さ違反に関するバッファオーバーフローログメッセージでのみサポートされています。Syslog Viewer を使用すると、トリガーされた違反を確認できるだけでなく、ブロックされたメッセージの長さに基づいて、情報に基づいた判断を下すことができます。現在の値の制限が厳しすぎて誤検出が発生している場合は、メッセージを選択して展開し、現在の値をメッセージに表示されている URL 長の値に置き換えることができます。この操作では、ログメッセージは CEF ログ形式である必要があります。ログメッセージに緩和を適用できる場合は、行の Syslog Viewerボックスの右端にチェックボックスが表示されます。チェックボックスを選択し、アクションリストからオプションを選択してリラクゼーションをデプロイします。[ **編集とデプロイ**]、[ **デプロイ]、[すべてデプロイ ] は、**APPFW_BUFFEROVERFLOW_URL フィルタを使用すると、設定された URL の長さ違反に関連するすべてのログメッセージを分離できます。
個別のログメッセージを選択すると、[ 編集してデプロイ]、[デプロイ]、[ **すべてデプロイ] の 3 **つのアクションオプションすべてを使用できます 。[ 編集してデプロイ] を選択すると、 バッファオーバーフロー設定ダイアログが表示されます 。リクエストで確認された新しい URL 長が [ 最大 URL 長] 入力フィールドに挿入されます。 何も編集せずに「閉じる」をクリックすると、現在の設定値は変更されません。「OK」 ボタンをクリックすると、「最大 URL 長」の新しい値が以前の値に置き換わります。
注
表示されるバッファオーバーフロー設定ダイアログでは、 ブロック 、 ログ 、 統計アクションのチェックボックスがオフになっているため 、 編集とデプロイオプションを選択した場合は再設定する必要があります 。 「OK」をクリックする前にこれらのチェックボックスがオンになっていることを確認してください。そうしないと、新しい URL の長さは設定されますが、アクションは「 なし」に設定されます。
複数のログメッセージのチェックボックスを選択した場合、「Deploy」または「 DeployAll」オプションを使用できます。 デプロイされたログメッセージの URL の長さが異なる場合、設定された値は、選択したメッセージで確認されている中で最長の URL 長値に置き換えられます。ルールをデプロイしても、BufferOverflowMaxURLLength の値のみが変更されます。設定したアクションは保持され、変更されません。
GUI でクリック・トゥ・デプロイ機能を使用するには
- Syslog ビューアの [ モジュール ] オプションで [ APPFW ] を選択します。
- イベントタイプとしてAPPFW_BUFFEROVERFLOW_URLチェックボックスを有効にして、対応するログメッセージをフィルタリングします。
- チェックボックスをオンにして、ルールを選択します。
- オプションの「 アクション 」ドロップダウンリストを使用して、リラクゼーションをデプロイします。
- [ アプリケーションファイアウォール ] > [ プロファイル] に移動し、ターゲットプロファイルを選択して [ セキュリティチェック ] をクリックして [ バッファオーバーフロー ] 設定ペインにアクセスし、[ 最大 URL 長 ] の値が更新されていることを確認します。
バッファオーバーフロー違反の統計
stats アクションを有効にすると、Web App Firewall がこのセキュリティチェックに対して何らかのアクションを実行すると、バッファオーバーフローセキュリティチェックのカウンタが増加します。統計は、トラフィック、違反、およびログのレートと合計数について収集されます。ログカウンタの増分サイズは、構成された設定によって異なります。たとえば、ブロックアクションが有効な場合、バッファオーバーフロー違反が 3 つあるページのリクエストでは、最初の違反が検出されるとページがブロックされるため、stats カウンタが 1 つ増えます。ただし、ブロックが無効になっている場合は、違反ごとに個別のログメッセージが生成されるため、同じリクエストを処理すると違反の統計カウンタが増えます。
コマンドラインを使用してバッファオーバーフローセキュリティチェックの統計情報を表示するには
コマンドプロンプトで入力します。
> sh appfw stats
特定のプロファイルの統計情報を表示するには、以下のコマンドを使用します。
> stat appfw profile <profile name>
GUI を使用してバッファオーバーフローの統計情報を表示するには
- システム > セキュリティ > アプリケーションファイアウォールに移動します。
- 右側のペインで、[統計 リンク] にアクセスします。
- スクロールバーを使用して、バッファオーバーフロー違反とログに関する統計を表示します。統計テーブルはリアルタイムデータを提供し、7秒ごとに更新されます。
ハイライト
-
バッファオーバーフローセキュリティチェックでは、URL、Cookie、およびヘッダーの最大長を制限するように制限を設定できます。
-
ブロック、 ログ 、 統計アクションにより 、トラフィックを監視し、アプリケーションに最適な保護を設定できます。
-
Syslog ビューアでは、バッファオーバーフロー違反に関するすべてのログメッセージをフィルタリングして表示できます。
-
**BufferOverflowMaxURLLength 違反に対しては、クリックしてデプロイする機能がサポートされています** 。個別のルールを選択して展開することも、複数のログメッセージを選択して、現在設定されている URL の最大長を微調整したり緩和したりすることもできます。選択したグループの URL の最大値が新しい値として設定され、現在違反としてフラグが付けられているこれらのリクエストがすべて許可されます。
-
Web App Firewall は、受信したリクエストを検査する際に個々の Cookie を評価するようになりました。クッキーヘッダーで受信されたクッキーのいずれかの長さが、設定された BufferOverflowMaxCookieLength を超えると、バッファオーバーフロー違反がトリガーされます。
重要
リリース 10.5.e (59.13xx.e ビルドより前のいくつかの中間拡張ビルド) と 11.0 リリース (65.x より前のビルド) では、Web App Firewall の Cookie ヘッダーの処理が変更されました。これらのリリースでは、すべての Cookie が個別に評価され、Cookie ヘッダーで受信された 1 つの Cookie の長さが設定された bufferOverflowMaxCookieLength を超えると、バッファオーバーフロー違反がトリガーされます。 この変更の結果、10.5 以前のリリースのビルドでブロックされたリクエストは許可される可能性があります。これは、Cookie の長さを決定するために Cookie ヘッダー全体の長さが計算されないためです。**状況によっては、サーバーに転送される Cookie の合計サイズが許容値よりも大きく、サーバーが「400 Bad Request」で応答することがあります。
この変更は元に戻されました。11.0 リリース 65.x およびそれ以降のビルドに加えて、10.5.e->59.13xx.e 以降の 10.5.e 拡張ビルドでの動作は、リリース 10.5 の非拡張ビルドと同様になりました。Cookieの長さを計算するときに、生の Cookie ヘッダー全体が考慮されるようになりました。Cookie の長さの決定には、前後のスペースと名前と値のペアを区切るセミコロン (;) 文字も含まれます。