#author("2018-09-03T10:55:18+09:00","","") #author("2018-09-03T10:57:29+09:00","","") [[CentOS7]] *Apache httpd : mod_security を利用する [#lde5064a] mod_security モジュールを有効にして、Web Application Firewall (WAF) を設定します。 **mod_security をインストールします。 [#ce30c849] |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# yum -y install mod_security| インストールすると mod_security がブロックモードが有効な状態で設定ファイルが配置されます。 最低限のルールはデフォルトで記述されていますが、ルールの追加は「IncludeOptional」で指定されたディレクトリ配下に配置した conf ファイルで可能な設定となっています。 |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# cat /etc/httpd/conf.d/mod_security.conf| |<IfModule mod_security2.c> &br; # ModSecurity Core Rules Set configuration &br; IncludeOptional modsecurity.d/*.conf &br; IncludeOptional modsecurity.d/activated_rules/*.conf &br; &br; # Default recommended configuration &br; SecRuleEngine On &br; SecRequestBodyAccess On &br; SecRule REQUEST_HEADERS:Content-Type "text/xml" \ &br; "id:'200000',phase:1,t:none,t:lowercase,pass,nolog,ctl:requestBodyProcessor=XML" &br; &br; ..... &br; ..... &br; &br; &color(lightpink){# 設定ルールにマッチした際に、ブロックせずにロギングのみ行う検知モードに}; &br; &color(lightpink){# 設定する場合は「SecRuleEngine DetectionOnly」を指定する}; &br; | **セキュリティルールの書式は以下のようになっています。 [#o1db1096] ⇒ SecRule VARIABLES OPERATOR [ACTIONS] ⇒ SecRule VARIABLES OPERATOR [ACTIONS] 各パラメータの種類は非常に多いため、詳細は以下の公式ドキュメントを参照ください。 https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual **セキュリティルールの設定例を以下に示します。 [#m297b4cb] |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# vi /etc/httpd/modsecurity.d/activated_rules/rules-01.conf| |&color(lightpink){# ルールにマッチした時のデフォルトアクションを定義}; &br; &br; &color(lightpink){# レスポンスボディフェーズで処理を停止しログを記録して 406 を返す}; &br; SecDefaultAction "phase:2,deny,log,status:406" &br; &color(lightpink){# リクエスト URI に「etc/passwd」が含まれる}; &br; &br; SecRule REQUEST_URI "etc/passwd" "id:'500001'" &br; &color(lightpink){# リクエスト URI に「../」が含まれる}; &br; &br; SecRule REQUEST_URI "\.\./" "id:'500002'" &br; &color(lightpink){# 引数に「<SCRIPT」(小文字含む) が含まれる}; &br; &br; SecRule ARGS "<[Ss][Cc][Rr][Ii][Pp][Tt]" "id:'500003'" &br; &color(lightpink){# 引数に「SELECT FROM」(小文字含む) が含まれる}; &br; &br; SecRule ARGS "[Ss][Ee][Ll][Ee][Cc][Tt][[:space:]]+[Ff][Rr][Oo][Mm]" "id:'500004'" &br; ||[root@localhost ~]# systemctl restart httpd| |&color(lightpink){# ルールにマッチした時のデフォルトアクションを定義}; &br; &br; &color(lightpink){# レスポンスボディフェーズで処理を停止しログを記録して 406 を返す}; &br; SecDefaultAction "phase:2,deny,log,status:406" &br; &color(lightpink){# リクエスト URI に「etc/passwd」が含まれる}; &br; &br; SecRule REQUEST_URI "etc/passwd" "id:'500001'" &br; &color(lightpink){# リクエスト URI に「../」が含まれる}; &br; &br; SecRule REQUEST_URI "\.\./" "id:'500002'" &br; &color(lightpink){# 引数に「<SCRIPT」(小文字含む) が含まれる}; &br; &br; SecRule ARGS "<[Ss][Cc][Rr][Ii][Pp][Tt]" "id:'500003'" &br; &color(lightpink){# 引数に「SELECT FROM」(小文字含む) が含まれる}; &br; &br; SecRule ARGS "[Ss][Ee][Ll][Ee][Cc][Tt][[:space:]]+[Ff][Rr][Oo][Mm]" "id:'500004'" &br; | |[root@localhost ~]# systemctl restart httpd| **設定した文字列を含めてアクセスし、動作確認してください。 [#ae9e4748] &ref(01.png); mod_security のログは以下の場所に保管されています。パターンマッチした場合は以下のようなログが記録されます。 |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# cat /var/log/httpd/modsec_audit.log| |--75d36531-A-- &br; [28/Oct/2015:13:52:52 +0900] VjBUpAKZ9yAFgyhKj8zyyAAAAAE 10.0.0.108 53545 10.0.0.31 80 &br; --75d36531-B-- &br; GET /?../../etc/passwd HTTP/1.1 &br; Host: hoge.com &br; User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0 &br; Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 &br; Accept-Language: en-US,en;q=0.5 &br; Accept-Encoding: gzip, deflate &br; Connection: keep-alive &br; &br; --75d36531-F-- &br; HTTP/1.1 406 Not Acceptable &br; Content-Length: 251 &br; Keep-Alive: timeout=5, max=100 &br; Connection: Keep-Alive &br; Content-Type: text/html; charset=iso-8859-1 &br; &br; --75d36531-E-- &br; &br; --75d36531-H-- &br; Message: Access denied with code 406 (phase 2). Pattern match "etc/passwd" &br; at REQUEST_URI. [file "/etc/httpd/modsecurity.d/activated_rules/rules-01.conf"] [line "3"] [id "500001"] &br; Action: Intercepted (phase 2) &br; Stopwatch: 1446007972909468 1333 (- - -) &br; Stopwatch2: 1446007972909468 1333; combined=418, p1=395, p2=17, p3=0, p4=0, p5=6, sr=116, sw=0, l=0, gc=0 &br; Response-Body-Transformed: Dechunked &br; Producer: ModSecurity for Apache/2.7.3 (http://www.modsecurity.org/); OWASP_CRS/2.2.6. &br; Server: Apache/2.4.6 (CentOS) &br; Engine-Mode: "ENABLED" &br; &br; --75d36531-Z-- &br; | |ちなみに、自身でルールを作成しなくとも、一般的なルール設定は別途パッケージが用意されています。 ただ、全て適用すると必要なリクエストまで拒否してしまう可能性もあるため、自サイトに合わせたカスタマイズが必要かもしれません。| ちなみに、自身でルールを作成しなくとも、一般的なルール設定は別途パッケージが用意されています。 ただ、全て適用すると必要なリクエストまで拒否してしまう可能性もあるため、自サイトに合わせたカスタマイズが必要かもしれません。 |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# yum -y install mod_security_crs| |&color(lightpink){# ルールの実態は以下に配置される}; &br; &color(lightpink){# /etc/httpd/modsecurity.d/activated_rules 配下には下記ファイルへのリンクが配置される}; &br; | |&color(lightpink){# ルールの実態は以下に配置される}; &br; &color(lightpink){# /etc/httpd/modsecurity.d/activated_rules 配下には下記ファイルへのリンクが配置される}; &br; | |[root@localhost ~]# ll /usr/lib/modsecurity.d/base_rules| |total 332 &br; -rw-r--r-- 1 root root 1980 Jun 10 2014 modsecurity_35_bad_robots.data &br; -rw-r--r-- 1 root root 386 Jun 10 2014 modsecurity_35_scanners.data &br; -rw-r--r-- 1 root root 3928 Jun 10 2014 modsecurity_40_generic_attacks.data &br; -rw-r--r-- 1 root root 2610 Jun 10 2014 modsecurity_41_sql_injection_attacks.data &br; -rw-r--r-- 1 root root 2224 Jun 10 2014 modsecurity_50_outbound.data &br; -rw-r--r-- 1 root root 56714 Jun 10 2014 modsecurity_50_outbound_malware.data &br; -rw-r--r-- 1 root root 22861 Jun 10 2014 modsecurity_crs_20_protocol_violations.conf &br; -rw-r--r-- 1 root root 6915 Jun 10 2014 modsecurity_crs_21_protocol_anomalies.conf &br; -rw-r--r-- 1 root root 3792 Jun 10 2014 modsecurity_crs_23_request_limits.conf &br; -rw-r--r-- 1 root root 6933 Jun 10 2014 modsecurity_crs_30_http_policy.conf &br; -rw-r--r-- 1 root root 5394 Jun 10 2014 modsecurity_crs_35_bad_robots.conf &br; -rw-r--r-- 1 root root 19157 Jun 10 2014 modsecurity_crs_40_generic_attacks.conf &br; -rw-r--r-- 1 root root 43961 Jun 10 2014 modsecurity_crs_41_sql_injection_attacks.conf &br; -rw-r--r-- 1 root root 87470 Jun 10 2014 modsecurity_crs_41_xss_attacks.conf &br; -rw-r--r-- 1 root root 1795 Jun 10 2014 modsecurity_crs_42_tight_security.conf &br; -rw-r--r-- 1 root root 3660 Jun 10 2014 modsecurity_crs_45_trojans.conf &br; -rw-r--r-- 1 root root 2253 Jun 10 2014 modsecurity_crs_47_common_exceptions.conf &br; -rw-r--r-- 1 root root 2787 Jun 10 2014 modsecurity_crs_48_local_exceptions.conf.example &br; -rw-r--r-- 1 root root 1835 Jun 10 2014 modsecurity_crs_49_inbound_blocking.conf &br; -rw-r--r-- 1 root root 22314 Jun 10 2014 modsecurity_crs_50_outbound.conf &br; -rw-r--r-- 1 root root 1448 Jun 10 2014 modsecurity_crs_59_outbound_blocking.conf &br; -rw-r--r-- 1 root root 2674 Jun 10 2014 modsecurity_crs_60_correlation.conf &br; |