バッファオーバーフローチェック
バッファオーバーフローチェックは、Web サーバ上でバッファオーバーフローを引き起こす試みを検出します。Web App Firewall は、URL、Cookie、またはヘッダーが設定された長さよりも長いことを検出すると、バッファオーバーフローを引き起こす可能性があるため、要求をブロックします。
バッファオーバーフローチェックは、処理できるよりも大きいデータ文字列を受信すると、クラッシュまたは予期せぬ動作をする、安全でないオペレーティングシステムまたは Web サーバソフトウェアに対する攻撃を防止します。適切なプログラミング技術は、入ってくるデータをチェックし、長すぎる文字列を拒否または切り捨てることによって、バッファオーバーフローを防止します。しかし、多くのプログラムは、すべての受信データをチェックしないため、バッファオーバーフローに対して脆弱です。この問題は特に、古いバージョンの Web サーバーソフトウェアとオペレーティングシステムに影響しますが、その多くは引き続き使用されています。
バッファオーバーフローのセキュリティチェックでは、 ブロック、 ログ、および 統計の各アクションを設定できます。さらに、次のパラメータを設定することもできます。
- URL の最大長。要求された URL で Web App Firewall が許可する最大長。より長い 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
Citrix ADC GUIを使用してバッファオーバーフローのセキュリティチェックを構成する
- Security > Web App FirewallおよびProfilesに移動します。
- [プロファイル] ページで、プロファイルを選択し、[編集] をクリックします。
- [Citrix Web App Firewall プロファイル]ページで、[詳細設定]セクションに移動し、[セキュリティチェック]をクリックします。
- 「 セキュリティチェック 」セクションで、「 バッファオーバーフロー 」を選択し、「 アクション設定」をクリックします。
- バッファオーバーフロー設定 ページで、次のパラメータを設定します。 a. アクション。コマンドインジェクションセキュリティチェックに対して実行するアクションを 1 つ以上選択します。 b. URL の最大長。保護された Web サイトの URL の最大長(文字単位)。より長い URL を持つリクエストはブロックされます。 c. Cookieの最大長。保護された Web サイトに送信される Cookie の最大長(文字数)。クッキーの長いリクエストはブロックされます。 d. ヘッダーの 最大長保護された Web サイトに送信されるリクエストの HTTP ヘッダーの最大長(文字単位)。長いヘッダーを持つリクエストはブロックされます。 e. クエリーの最大長。保護された Web サイトに送信されるクエリ文字列の最大長(バイト単位)。長いクエリ文字列を持つリクエストはブロックされます。 f. ヘッダーの最大合計長。保護された Web サイトに送信されるリクエストの HTTP ヘッダーの合計長に対する最大長(バイト単位)。HttpProfileにおけるこの値とMaxHeaderLenの最小値が使用されます。長い長さの要求はブロックされます。
-
[ OK]をクリックして[閉じる]をクリックします。
バッファオーバーフローのセキュリティチェックでのログ機能の使用
ログアクションを有効にすると、バッファオーバーフローのセキュリティチェック違反が APPFW_BUFFEROVER FLOW_URL、APPFW_BUFFEROVERFLOW_COOKIE、およびAPPFW_BUFFEROVERFLOW_HDR違反として監査ログに記録されます。Web App Firewall は、ネイティブログ形式と CEF ログ形式の両方をサポートしています。ログをリモート syslog サーバに送信することもできます。
GUI を使用してログを確認する場合は、クリックツーデプロイ機能を使用して、ログで示される緩和を適用できます。
コマンドラインを使用してログメッセージにアクセスするには
シェルに切り替えて、 /var/log/ フォルダのns.log sを末尾にして、バッファオーバーフロー違反に関連するログメッセージにアクセスします。
> \*\*Shell\*\*
> \*\*tail -f /var/log/ns.log | grep APPFW_BUFFEROVERFLOW\*\*
<!--NeedCopy-->
非ブロックモードでのバッファオーバーフローMaxCookieLength 違反を示す 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-->
非ブロックモードでのバッファオーバーフロー最大URL長違反を示す 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-->
ブロックモードでのバッファオーバーフローMaxHeaderLength 違反を示すネイティブフォーマットログメッセージの例
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 を使用してログメッセージにアクセスするには
Citrix GUIには、ログメッセージを分析するための便利なツール(Syslog Viewer)が含まれています。Syslog ビューアには、次の複数のオプションがあります。
-
[アプリケーションファイアウォール] > [プロファイル] に移動し、ターゲットプロファイルを選択して [セキュリティチェック] をクリックします。[バッファオーバーフロー] 行をハイライト表示し、[ログ] をクリックします。 プロファイルのBuffer Overflow Security Checkから直接ログにアクセスすると、GUI によってログメッセージが除外され、これらのセキュリティチェック違反に関連するログのみが表示されます。
-
また、「 NetScaler 」>「 システム 」>「 監査 」に移動して、Syslogビューアにアクセスすることもできます。 [監査メッセージ] セクションで、[ Syslog メッセージ ] リンクをクリックして Syslog Viewer を表示します。このビューアーには、他のセキュリティチェック違反ログを含むすべてのログメッセージが表示されます。これは、要求処理中に複数のセキュリティー検査違反がトリガーされる可能性がある場合のデバッグに役立ちます。
-
[アプリケーションファイアウォール] > [ポリシー] > [監査] に移動します。[ 監査メッセージ ] セクションで、[ Syslog メッセージ ] リンクをクリックして Syslog Viewer を表示します。このビューアーには、他のセキュリティチェック違反ログを含むすべてのログメッセージが表示されます。
XML ベースの Syslog ビューアには、関心のあるログメッセージだけを選択するためのさまざまなフィルタオプションがあります。バッファオーバーフロー チェックのログメッセージを選択するには、[モジュール] のドロップダウンリストオプションで [APPFW] を選択してフィルタします。イベントタイプ リストには、バッファオーバーフローのセキュリティチェックに関連するすべてのログメッセージを表示 するための 、 APPFW_BUFFEROVERFLOW_COOKIE、PPFW_BUFFEROVERFLOW_HDR の 3 つのオプションがあります。1 つまたは複数のオプションを選択して、さらに選択を絞り込むことができます。たとえば、[APPFW_BUFFEROVERFLOW_COOKIE] チェックボックスをオンにし、[適用] ボタンをクリックすると、Syslog ビューアには、Cookie ヘッダーの バッファオーバーフローのセキュリティ チェック違反に関するログメッセージだけが表示されます。特定のログメッセージの行にカーソルを置くと、 モジュール、 イベントタイプ、イベントID、 クライアント IPなどの複数のオプションがログメッセージの下に表示されます。これらのオプションのいずれかを選択して、ログメッセージ内の対応する情報を強調表示することができます。
Click-to-Deploy:GUI には、クリックツーデプロイ機能があります。これは、現在、 URL の長さ違反に関連するバッファオーバーフローのログメッセージに対してのみサポートされています。Syslogビューアーを使用して、トリガーされた違反を表示するだけでなく、ブロックされたメッセージの観察された長さに基づいて情報に基づいた決定を実行することもできます。現在の値が制限的すぎて誤検出をトリガーしている場合は、メッセージを選択して展開し、現在の値をメッセージに表示される URL の長さの値に置き換えることができます。この操作では、ログメッセージは CEF ログ形式である必要があります。ログメッセージに対して緩和を展開できる場合は、行の [Syslog Viewer] ボックスの右端にチェックボックスが表示されます。チェックボックスをオンにし、[アクション] リストからオプションを選択して、緩和を展開します。[編集と配備]、[配備]、[すべて配備] は、[アクション]オプションとして利用できます。APPFW_BUFFEROVERFLOW_URL フィルタを使用すると、設定された URL の長さ違反に関連するすべてのログメッセージを分離できます。
個々のログメッセージを選択した場合、3 つのアクションオプションの[編集と配備]、[配備]、および [すべて配備] を使用できます。[編集と配備]を選択すると、[バッファオーバーフローの設定] ダイアログが表示されます。リクエストで観察された新しい URL の長さが、[最大 URL 長] 入力 フィールドに挿入されます。 編集を行わずに [Close] をクリックすると、現在設定されている値は変更されません。[OK] ボタンをクリックすると、[URL の最大長] の新しい値が以前の値に置き換えられます。
注
表示された [バッファオーバーフロー設定] ダイアログ **の [ブロック]、[ログ]、および [統計アクション] チェックボックスはオフになっています。[編集と配備] オプションを選択する場合は、再設定する必要があります。[OK]をクリックする前に、必ずこれらのチェックボックスを有効にします。そうしないと、新しい URL の長さが構成されますが、アクションはnone**に設定されます。
複数のログメッセージのチェックボックスをオンにした場合は、[Deploy All] オプションまたは [DeployAll] オプションを使用できます。 展開されたログメッセージの URL 長が異なっている場合、設定された値は、選択したメッセージで観察された最大の URL 長の値に置き換えられます。ルールを展開すると、 バッファーのオーバーフロー最大URLLength の値が変更されるだけです。設定されたアクションは保持され、変更されません。
GUI でクイック展開機能を使用するには
- Syslogビューアで、 モジュール オプションで APPFW を選択します。
- 対応するログ・メッセージをフィルタリングするには、 イベント・タイプとして「APPFW_BUFFEROVERFLOW_URL 」チェック・ボックスを有効にします。
- ルールを選択するには、チェックボックスをオンにします。
- 緩和をデプロイするには、オプションの [Action] ドロップダウンリストを使用します。
- [アプリケーションファイアウォール] > [プロファイル] に移動し、ターゲットプロファイルを選択し、[セキュリティチェック] をクリックして [バッファオーバーフロー の設定] ペインにアクセスし、[URL の最大長] の値が更新されたことを確認します。
バッファオーバーフロー違反の統計情報
stats アクションが有効な場合、Web App Firewall がこのセキュリティチェックに対して何らかのアクションを実行したときに、バッファオーバーフローのセキュリティチェックのカウンタが増加します。統計は、トラフィック、違反、およびログのレートと合計数について収集されます。ログカウンタの増分サイズは、構成された設定によって異なります。たとえば、ブロックアクションが有効になっている場合、最初の違反が検出されたときにページがブロックされるため、3 つのバッファオーバーフロー違反を含むページに対するリクエストは stats カウンタを 1 つずつ増やします。ただし、block が無効になっている場合、同じ要求を処理すると、違反ごとに stat カウンタがインクリメントされます。これは、違反ごとに個別のログメッセージが生成されるためです。
コマンドラインを使用してバッファオーバーフローセキュリティチェックの統計情報を表示するには
コマンドプロンプトで入力します。
> sh appfw stats
特定のプロファイルの統計情報を表示するには、次のコマンドを使用します。
> stat appfw profile <profile name>
GUI を使用してバッファオーバーフロー統計を表示するには
- [システム] > [セキュリティ] > [アプリケーションファイアウォール] に移動します。
- 右側のペインで、[統計 リンク] にアクセスします。
- スクロールバーを使用して、バッファオーバーフローの違反とログに関する統計を表示します。統計テーブルはリアルタイムデータを提供し、7秒ごとに更新されます。
ハイライト
-
バッファオーバーフローセキュリティチェックでは、許可される URL、Cookie、およびヘッダーの最大長を強制する制限を設定できます。
-
Block、 Log、 Statsアクションを使用すると、トラフィックを監視し、アプリケーションに最適な保護を設定できます。
-
Syslog ビューアを使用すると、バッファオーバーフロー違反に関連するすべてのログメッセージをフィルタリングおよび表示できます。
-
クイック展開 機能は、 バッファーオーバーフロー最大URLLength 違反に対してサポートされています。個々のルールを選択して展開することも、複数のログメッセージを選択して、URL の最大許容長である現在設定されている値を調整して緩和することもできます。選択したグループの URL の最大値が新しい値として設定され、現在違反としてフラグが付けられているすべての要求が許可されます。
-
Web App Firewall は、着信リクエストを検査する際に、個々の Cookie を評価するようになりました。Cookie ヘッダーで受信した 1 つの Cookie の長さが、設定されている BufferOverflowMaxCookieLengthを超えると、バッファオーバーフロー違反がトリガーされます。
重要
リリース 10.5.e(59.13xx.e ビルドより前のいくつかの暫定的な拡張ビルド)と 11.0 リリース(65.x より前のビルド)では、Cookie ヘッダーの Web App Firewall 処理が変更されました。これらのリリースでは、すべての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 ヘッダー全体が考慮されるようになりました。クッキーの長さの決定には、スペースと、名前と値のペアを区切るセミコロン (;) 文字も含まれます。