2009年6月5日 星期五

ModSecurity 的一些網站

http://support.oss.org.tw/wiki/index.php/ModSecurity#.E7.B0.A1.E4.BB.8B


ModSecurity-2.5.7手册翻译
http://blog.chinaunix.net/u2/83080/showart_1413910.html


Rules

基礎

語法:SecRule VARIABLES OPERATOR [ACTIONS]

  1. VARIABLES:指定哪些變數要進行處理
  2. OPERATOR:要如何處理這些變數取得我們想要的
  3. ACTIONS (optional):當達到上述的處理時,要做什麼動作

Rule處理的階段

Mod Security會在http的五個transaction進行處理,分別是Phase:1-Request Headers、Phase:2-Request Body、Phase:3-Response Headers、Phase:4-Response Body、Phase:5-logging。

因此,在rule的部分即可指定你要transaction的哪一部份進行處理。

 

VARIABLES

一些常見的變數:

  • ARGS、ARGS_NAMES、ARGS_GET、ARGS_GET_NAMES、ARGS_POST、ARGS_POST_NAMES
  • AUTH_TYPE
  • REQBODY_PROCESSOR、REQBODY_PROCESSOR_ERROR
  • FILES、FILES_NAMES、FILE_SIZES
  • REMOTE_ADDR、REMOTE_HOST、REMOTE_PORT
  • REQUEST_BODY、REQUEST_COOKIES、REQUEST_COOKIES_NAMES、REQUEST_FILENAME
  • RESPONSE_BODY

Rule中的變數部分可以一個以上, 以”|”來區隔即可,如果設定的規則超過多行,則可用”\”來進行分隔。

 

OPERATOR

預設的OPERATOR是正規表示法(Regular Expression),但其實ModSecurity提供不少可用的OPERATOR,利用”@”即可指定要用何種OPERATOR,例如SecRule REQUEST_URI “@rx iii”。

以下是一些範例:

  • SecRule REMOTE_ADDR "^192\.168\.1\.101$"
    • REMOTE_ADDR:指定變數對象為遠端連線的IP位址
    • "^192\.168\.1\.101$":針對上述的變數進行比對,如果非192.168.1.101,則符合,可指定要做何種動作
  • SecRule ARGS "@validateUtf8Encoding"
    • ARGS:指定變數為http傳遞的參數
    • "@validateUtf8Encoding":指定OPERATOR為對這些參數進行Utf8編碼進行檢查
  • SecRule FILES_TMPNAMES "@inspectFile /path/to/inspect_script.pl"
    • FILES_TMPNAMES:指定變數為上傳檔案的暫存名稱
    • "@inspectFile /path/to/inspect_script.pl":指定利用inspect_script.pl檔案的語法來檢查上傳檔案

 

ACTIONS

指定如果VARIABLE有符合OPERATOR的情況時,要執行何種動作。ACTIONS主要區分為五種型態:

  • Disruptive actions (中斷目前的transaction)
    • deny、drop、redirect、proxy、pause…
  • Non-disruptive actions (改變狀態)
    • Append、auditlog、exec…
  • Flow actions (改變規則流動)
    • allow、chain、pass、skip…
  • Meta-data actions (包含規則的metadata)
    • id、rev、severity、msg、phase、log, nolog、…
  • Data actions (可放置內容給其他action用)
    • capture、status、t、xmlns…

 

使用範例1

SecRule REQBODY_PROCESSOR_ERROR "!@eq 0“ "phase:2,log,deny,msg:'Failed to parse request body.',severity:2“
說明:

  • REQBODY_PROCESSOR_ERROR:指定針對request body發生的processor發生的錯誤的代碼
  • "!@eq 0“:當不等於0時,即有錯誤發生時
  • 處理動作 "phase:2,log,deny,msg:'Failed to parse request body.',severity:2“
    • phase:2:由於對象為request body,因此指定在phase:2進行
    • log:當情況符合(發生錯誤),將錯誤log起來
    • deny:將這個transaction拒絕
    • msg:'Failed to parse request body':網頁上並顯示出這樣的錯誤訊息
    • severity:2:將此狀況列為嚴重程度為2

使用範例2

SecRule MULTIPART_UNMATCHED_BOUNDARY "!@eq 0" \
"phase:2,log,deny,msg:'Multipart parser detected a possible unmatched boundary.'"

說明:

  • MULTIPART_UNMATCHED_BOUNDARY:指定針對multipart發生unmatched boundary的錯誤
  • "!@eq 0“:當不等於0時,即有錯誤發生時
  • 處理動作 "phase:2,log,deny,msg:'Multipart parser detected a possible unmatched boundary.'"
    • phase:2:由於對象為request body,因此指定在phase:2進行
    • log:當情況符合(發生錯誤),將錯誤log起來
    • deny:將這個transaction拒絕
    • msg:'Multipart parser detected a possible unmatched boundary.':網頁上並顯示出這樣的錯誤訊息

The Core rule sets

這是由Breach Security所寫的一般常用到的防護規則,為GPL v2。

此一系列的規則可防護一般網頁應用程式常見已知的弱點或其他未知的弱點。這一系列的規則使用下列的技術:

  • HTTP protection
    • Detect all abnormal HTTP request
  • Common Web Attacks Protection
    • SQL Injection、Cross-Site Scripting (XSS) …
  • Automation detection
    • crawler
  • Trojan Protection
  • Error Hiding
    • Detect errors sent by the web server