2

いくつかの Web サービスを実行しています。

OWASPコアルールセットを備えたModSecurity for Apache Webサーバーを使用しています。

キリル文字とギリシャ文字があるため、ギリシャ語とロシア語のリクエストには問題があります。

OWASP CRS のルールには、次のようなパターンがあります。

"(^[\"' ´’‘;]+|[\"'''';]+$)"

ModSecurity ログには、Unicode 文字である必要がある UTF-8 コード単位があります。すべてのASCII文字は、本来あるべき文字として表示されます。

例:

[一致したデータ: \x85 2 \xce\xb7\xce\xbb\xce\xb9\xce\xbf\xcf\x85\xcf\x80\xce が ARGS:q 内に見つかりました: 163 45 \xcf\x83\xce\xbf\ xcf\x85\xce\xbd\xce\xb9\xce\xbf\xcf\x85 2 \xce\xb7\xce\xbb\xce\xb9\xce\xbf\xcf\x85\xcf\x80\xce\xbf\xce \xbb\xce\xb7]

[パターン一致 "(?i:(?:[\"' \\xc2\\xb4\\xe2\\x80\\x99\\xe2\\x80\\x98]\\\\s*?(x?or|div|like|between|and)\\\\s*?[\\"'\xc2\xb4\xe2\x80\x99\xe2\x80\x98]?\\d)|(?:\\\\x(?:23 |27|3d))|(?:^.?[\"' \\xc2\\xb4\\xe2\\x80\\x99\\xe2\\x80\\x98]$)|(?:(?:^[\\"'\xc2\xb4\xe2\x80\x99\xe2\x80\x98\\\\]*?(?:[\\ ..." ]

これで、それがギリシャ語のリクエストによってトリガーされたことがわかりました: σουνιου ηλιουπολη (アテネの通り) それは私たちの問題ではありません。私たちはそれを理解することができます。

問題は、x80 が文字 ' (e2 80 99) の一部であり、x80 がギリシャ文字の一部でもあることです。これが誤検出の理由です。

トリガーされた実際のルール:

SecRule REQUEST_COOKIES|!REQUEST_COOKIES:/__utm/|!REQUEST_COOKIES:/_pk_ref/|REQUEST_COOKIES_NAMES|ARGS_NAMES|ARGS|XML:/* "(?i:(?:[\"' ´’‘]\s*?(x?or|div|like|between|and)\s*?[\"'''']?\d)|(? :\\x(?:23|27|3d))|(?:^.?[\"' ´’‘]$)|(?:(?:^[\"'´''\\] ?(?:[\d\"' ´’‘]+|[^\"'''']+[\"' ´’‘]))+\s*?(?:n?and|x?x?or|div|like|between|and|not|\|\||\&\&)\s*?[\w\"'´''][+&!@(),.-])|(?:[^\w\s]\w+\s ?[|-]\s*?[\"'´’‘]\s*?\w)|(?:@\w+\s+(and|x?or|div|like|between|and)\s*?[\"'´''\d]+)|(?:@[\w-]+\s(and|x?or|div|like|before|and)\s*?[^\w\s])|( ?:[^\w\s:]\s*?\d\W+[^\w\s]\s*?[\"'`´''].)|(?:\Winformation_schema|テーブル名\W ))" "phase:2,capture,t:none,t:urlDecodeUni,block,msg:'従来の SQL インジェクション プローブ 1/2 を検出',id:'981242',tag:'OWASP_CRS/WEB_ATTACK/SQL_INJECTION',logdata :'一致したデータ: %{TX.0} %{MATCHED_VAR_NAME} 内に見つかりました: %{MATCHED_VAR}',重大度:'2',setvar:'tx.msg=%{rule.id}-%{rule.msg} ',setvar:tx.sql_injection_score=+1,setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},setvar:'tx.%{tx.msg}-OWASP_CRS/WEB_ATTACK/SQLI-%{matched_var_name}=%{ tx.0}'"

回避策として、 [\"' ´’‘] to (\"|'||\xc2\xb4|\xe2\x80\x99|\xe2\x80\x98)のようないくつかのパターンを調整して、文字を構築する UTF-8 コード単位の実際の組み合わせと一致するようにしました。コア ルール セットの 55 個の SQL インジェクション ルールすべてに対してこれを実行できますが、これは非常に時間のかかる作業です。

Apache や ModSecurity のデコードに設定ミスがあるだけなのだろうか。すべての非 ASCII 文字と一部の ASCII 文字も、Web ブラウザによって % および UTF-8 でエンコードされた URL であることがわかっています。

4

1 に答える 1

2
于 2016-08-21T10:57:44.287 に答える