多くの Web アプリケーションには、SQL を使用してリレーショナルデータベースサーバーと通信する Web フォームがあります。悪意のあるコードやハッカーが、安全ではない Web フォームを使用して SQL コマンドを Web サーバーに送信する可能性があります。Web App Firewall HTML SQL インジェクションチェックは、セキュリティを侵害する可能性のある不正な SQL コードのインジェクションに対する特別な防御を提供します。Web App Firewall は、ユーザーリクエストで不正な SQL コードを検出すると、リクエストを変換して SQL コードを非アクティブにするか、リクエストをブロックします。Web App Firewall は、1) POST 本文、2) ヘッダー、および 3) Cookie の 3 つの場所に挿入された SQL コードの要求ペイロードを調べます。注入された SQL コードのリクエストのクエリ部分を調べるには、特定のコンテンツタイプに対してアプリケーションファイアウォールプロファイル設定 'inspectQueryContentTypes' を構成してください。
キーワードと特殊文字のデフォルトのセットは、SQL 攻撃の起動に一般的に使用される既知のキーワードと特殊文字を提供します。新しいパターンを追加したり、デフォルトセットを編集して SQL チェックインスペクションをカスタマイズしたりできます。Web App Firewall には、SQL インジェクション保護を実装するためのさまざまなアクションオプションが用意されています。Web App Firewall プロファイルには、 ブロック、 ログ、 統計 、 学習の各アクションに加えて 、 SQL 特殊文字を変換して攻撃を無害にするオプションも用意されています 。
アクションに加えて、SQL インジェクション処理用に構成できるパラメーターがいくつかあります。
SQL ワイルドカード文字をチェックできます。SQL インジェクションタイプを変更し、4 つのオプション (
sqlKeyword、sqlSPLChar、
sqlSplCharandKeyword、
sqlSPLCharorKeyword) のいずれかを選択して、ペイロードの処理時に SQL キーワードと SQL 特殊文字を評価する方法を指定できます。
パラメーターには** 、SQL インジェクション検出中に検査または除外する必要のあるコメントのタイプを指定するオプションがあります。
リラクゼーションを展開すると、誤検出を回避できます。Web App Firewall 学習エンジンは、緩和ルールの設定に関する推奨事項を提供できます。
アプリケーションに最適化された SQL インジェクション保護を構成するには、次のオプションを使用できます。
Block—入力が SQL インジェクションタイプの仕様と一致する場合にのみブロックアクションがトリガーされます。たとえば、 SQLSplCharANDKeyword が SQL インジェクションタイプとして設定されている場合、入力で SQL 特殊文字が検出された場合でも、リクエストにキーワードが含まれていなくてもリクエストはブロックされません。SQL インジェクションタイプが sqlSPLChar またはsqlSPLCharorKeyword****のいずれかに設定されている場合、このようなリクエストはブロックされます。
Log:ログ機能を有効にすると、SQL インジェクションチェックによって実行されるアクションを示すログメッセージが生成されます。ブロックアクションが無効になっている場合、SQL 違反が検出された入力フィールドごとに個別のログメッセージが生成されます。 ただし、要求がブロックされると、1 つのメッセージだけが生成されます。同様に、SQL 特殊文字が複数のフィールドで変換された場合でも、変換操作に対してリクエストごとに 1 つのログメッセージが生成されます。ログを監視して、正当な要求に対する応答がブロックされているかどうかを判断できます。ログメッセージの数が大幅に増加すると、攻撃を開始しようとしたことを示している可能性があります。
:有効にすると、統計機能は違反とログに関する統計情報を収集します。stats カウンタの予期しない急増は、アプリケーションが攻撃を受けていることを示している可能性があります。正当なリクエストがブロックされる場合、新しい緩和ルールを構成する必要があるか、既存の緩和ルールを変更する必要があるかを確認するために、構成を再確認しなければならない場合があります。
学習— どの SQL 緩和ルールがアプリケーションに適しているかわからない場合は、学習機能を使用して、学習したデータに基づいて推奨事項を生成できます。Web App Firewall 学習エンジンはトラフィックを監視し、観測された値に基づいて SQL 学習の推奨事項を提供します。パフォーマンスを損なうことなく最適な効果を得るには、学習オプションを短時間有効にしてルールの代表的なサンプルを取得し、ルールを展開して学習を無効にすることをお勧めします。
SQL 特殊文字の変換— Web App Firewall では、一重引用符 (')、バックスラッシュ (\)、セミコロン (;) の 3 つの文字を SQL セキュリティチェック処理の特殊文字と見なします。 SQL 変換機能は、HTML リクエストの SQL インジェクションコードを変更して、リクエストが無害になるようにします。変更された HTML リクエストはサーバーに送信されます。デフォルトの変換ルールはすべて /netscaler/default_custom_settings.xml ファイルに指定されています。
変換操作では、リクエストに以下の変更を加えることで、SQL コードが非アクティブになります。
この 3 つの文字 (特殊文字列) は、SQL Server にコマンドを発行するために必要です。SQL コマンドの前に特別な文字列を付けない限り、ほとんどの SQL サーバーではそのコマンドが無視されます。したがって、変換が有効な場合に Web App Firewall が実行する変更により、攻撃者はアクティブな SQL を挿入できなくなります。これらの変更が加えられた後、リクエストは保護された Web サイトに安全に転送されます。保護された Web サイト上の Web フォームが SQL 特殊文字列を正当に含むことができるが、Web フォームが正しく動作するために特殊文字列に依存しない場合、Web App Firewallが保護されたWeb サイトに提供する保護を低下させずに、ブロックを無効にして変換を有効にして、正当な Web フォームデータのブロックを防止できます。
変換操作は SQL インジェクションタイプの設定とは独立して機能します 。変換が有効で、SQL インジェクションタイプが SQL キーワードとして指定されている場合、リクエストにキーワードが含まれていなくても SQL 特殊文字が変換されます。
通常、変換とブロッキングのどちらかを有効にしますが、両方を有効にすることはできません。ブロックアクションが有効になっている場合は、変換アクションよりも優先されます。ブロッキングを有効にしている場合、変換の有効化は冗長です。
SQL ワイルドカード文字の確認-ワイルドカード文字を使用して、SQL (SQL-SELECT) ステートメントの選択範囲を広げることができます。これらのワイルドカード演算子は、
および
演算子と共に使用して、値を類似の値と比較できます。パーセント (%) およびアンダースコア (_) 文字は、ワイルドカードとしてよく使用されます。 パーセント記号は、MS-DOS で使用されるアスタリスク (*) ワイルドカード文字に似ており、フィールド内の 0 文字、1 文字、または複数の文字に一致します。 アンダースコアは MS-DOS の疑問符 (?) と似ています。ワイルドカード文字。これは、式の 1 つの数字または文字に一致します。
たとえば、次のクエリを使用して文字列検索を実行し、名前に D 文字が含まれるすべての顧客を検索できます。
「%D%」のような名前のカスタマーから*を選択してください。:
次の例では、演算子を組み合わせて、2 番目と 3 番目に 0 がある給与値をすべて検索します。
顧客から*を選択 WHERE 給与 '_ 00%':
DBMS ベンダーによっては、演算子を追加してワイルドカード文字を拡張しています。NetScaler Web App Firewallは、これらのワイルドカード文字を挿入することによって開始される攻撃から保護できます。デフォルトの 5 つのワイルドカード文字は、パーセント (%)、アンダースコア (_)、キャレット (\^)、開き角かっこ (
) です。この保護は、HTML プロファイルと XML プロファイルの両方に適用されます。
デフォルトのワイルドカード文字は、 *Default Signatures で指定されたリテラルのリストです。
-
<wildchar type=”LITERAL”>%</wildchar>
-
<wildchar type=”LITERAL”>_</wildchar>
-
<wildchar type=”LITERAL”>\^</wildchar>
-
<wildchar type=”LITERAL”>[</wildchar>
-
<wildchar type=”LITERAL”>]</wildchar>
攻撃のワイルドカード文字は
のように PCRE になります。Web App Firewall は PCRE ワイルドカードもサポートしていますが、ほとんどの攻撃をブロックするには、上記のリテラルワイルドカード文字で十分です。
SQL ワイルドカード文字のチェックは、SQL の特殊文字チェックとは異なります。誤検出を避けるため、このオプションは注意して使用する必要があります。
SQL インジェクションタイプを含むリクエストの確認— Web App Firewall には、アプリケーションの個々のニーズに基づいて、SQL インジェクションインスペクションに必要なレベルの厳格さを実装するための 4 つのオプションが用意されています。SQL 違反を検出するために、リクエストはインジェクションタイプの指定と照合されます。 SQL インジェクションタイプには、次の 4 つのオプションがあります。
-
SQL 特殊文字とキーワード:SQL 違反をトリガーするには、SQL キーワードと SQL 特殊文字の両方を入力に含める必要があります。この最も制限の少ない設定もデフォルト設定です。
-
SQL 特殊文字-SQL 違反をトリガーするには、入力に少なくとも 1 つの特殊文字が含まれている必要があります。
-
SQL キーワード:SQL 違反をトリガーするには、指定した SQL キーワードのうち少なくとも 1 つが入力に存在している必要があります。このオプションは十分に考慮せずに選択しないでください。誤検出を避けるため、入力にキーワードが含まれていないことを確認します。
-
SQL 特殊文字またはキーワード:セキュリティチェック違反をトリガーするには、キーワードまたは特殊文字列のいずれかが入力に含まれている必要があります。
SQL 特殊文字を含む入力をチェックするように Web App Firewall を構成すると、Web アプリケーションファイアウォールは特殊文字を含まない Web フォームフィールドをスキップします。ほとんどの SQL サーバーは、前に特殊文字が付いていない SQL コマンドを処理しないため、このオプションを有効にすると、Web App Firewall の負荷を大幅に軽減し、保護された Web サイトを危険にさらすことなく処理を高速化できます。
SQL コメントの処理-デフォルトでは、Web App Firewall はすべての SQL コメントに注入された SQL コマンドをチェックします。ただし、多くの SQL サーバーでは、SQL 特殊文字が前に付いていても、コメント内の内容は無視されます。処理を高速化するために、SQL サーバーがコメントを無視する場合、挿入された SQL のリクエストを調べるときにコメントをスキップするように Web App Firewall を構成できます。SQL コメント処理オプションは次のとおりです。
通常、バックエンドデータベースが Microsoft SQL Server 上で実行されていない限り、
または
オプションを選択しないでください。他のほとんどの種類の SQL Server ソフトウェアは、ネストされたコメントを認識しません。ネストされたコメントが、別の種類の SQL Server 宛ての要求に表示される場合は、そのサーバーのセキュリティ侵害の試みを示している可能性があります。
:フォームフィールドの入力の検査に加えて、HTML SQL インジェクション攻撃のリクエストヘッダーを調べる場合は、このオプションを有効にします。GUI を使用する場合は、Web App Firewall プロファイルの
-> ペインでこのパラメーターを有効にすることができます。
Check Request ヘッダーフラグを有効にすると、 User-Agent ヘッダーの緩和ルールを設定する必要がある場合があります。のようなSQLキーワードや 、SQL特殊文字のセミコロン(; )が存在すると、偽陽性が発生し、このヘッダーを含む要求がブロックされる可能性があります。 警告
リクエストヘッダーのチェックと変換の両方を有効にすると、ヘッダーで見つかった SQL 特殊文字も変換されます。受け入れ、受け入れ文字セット、受け入れエンコーディング、受け入れ言語、期待、およびユーザーエージェントヘッダーは、通常、セミコロン(;)が含まれています。 Request ヘッダーのチェックと変換を同時に有効にすると、エラーが発生する場合があります。
inspectQueryContentTypes — 特定のコンテンツタイプに対する SQL インジェクション攻撃のリクエストクエリ部分を調べる場合は、このオプションを設定します。GUI を使用する場合は、App Firewall プロファイルの
->
ペインでこのパラメーターを構成できます。