2016-08-03 93 views
0

我試圖爲未知名稱的參數設置ModSecurity白名單,但匹配值。例如,我想列出任何時間戳參數(例如timestamp=2016-01-01 00:00:00)。目前,此觸發規則爲981173 (Restricted SQL Character Anomaly Detection Alert - Total # of special characters exceeded)ModSecurity:值白名單參數

以下內容將生效,但如果至少有一個匹配項將跳過對所有參數的檢查,因此它不會捕獲https://www.example.com/?timestamp=2016-01-01+00:00:00&badvalue=2016-01-01+00:00:00:00中的badvalue參數。

SecRule ARGS "@rx ^2[0-9]{3}-[0-1][0-9]-[0-3][0-9] [0-2][0-9]:[0-5][0-9]:[0-5][0-9]$" \ 
    "id:'99001', phase:1, nolog, pass, t:none, \ 
    ctl:ruleRemoveTargetByTag=OWASP_CRS/WEB_ATTACK/SQL_INJECTION;ARGS" 

如果我硬編碼參數名稱,下面的工作。

SecRule ARGS:timestamp "@rx ^2[0-9]{3}-[0-1][0-9]-[0-3][0-9] [0-2][0-9]:[0-5][0-9]:[0-5][0-9]$" \ 
    "id:'99001', phase:1, nolog, pass, t:none, \ 
    ctl:ruleRemoveTargetByTag=OWASP_CRS/WEB_ATTACK/SQL_INJECTION;ARGS:timestamp" 

我試過以下,但他們沒有工作。

SecRule ARGS "@rx ^2[0-9]{3}-[0-1][0-9]-[0-3][0-9] [0-2][0-9]:[0-5][0-9]:[0-5][0-9]$" \ 
    "id:'99001', phase:1, nolog, pass, t:none, \ 
    ctl:ruleRemoveTargetByTag=OWASP_CRS/WEB_ATTACK/SQL_INJECTION;/%{MATCHED_VAR_NAME}/" 

SecRule ARGS "@rx ^2[0-9]{3}-[0-1][0-9]-[0-3][0-9] [0-2][0-9]:[0-5][0-9]:[0-5][0-9]$" \ 
    "id:'99001', phase:1, nolog, pass, t:none, \ 
    ctl:ruleRemoveTargetByTag=OWASP_CRS/WEB_ATTACK/SQL_INJECTION;MATCHED_VAR_NAME" 

ModSecurity可以嗎?有沒有辦法使用MATCHED_VAR_NAME這個用例?我寧願不必爲每個可能包含時間戳記的參數名稱添加一條規則。

回答

0

不幸的是,目前不可能在ctl action參數中使用宏擴展。

作爲證據考慮下面的例子:

SecRule ARGS "@contains bob" "id:1,t:none,pass,ctl:ruleRemoveTargetById=2;ARGS:x" 
SecRule ARGS "@contains hello" "id:2,deny,status:403" 

當提供以下請求:「http://localhost/?x=bobhello」我們將看到評估第二規則時的調試日誌下面

[04/Aug/2016:00:44:07 - 0400] [localhost/sid#55e47aa583e0] [rid#55e47ad7cb10] [/] [4]食譜:調用規則55e47ab14638; [file「/etc/httpd/modsecurity.d/includeOWASP.conf」] [line「12」] [id「2」]。 [04/Aug/2016:00:44:07 - 0400] [localhost/sid#55e47aa583e0] [rid#55e47ad7cb10] [/] [5]規則55e47ab14638:SecRule「ARGS」「@contains hello」 2,log,auditlog,id:2,deny,status:403「 [04/Aug/2016:00:44:07 - 0400] [localhost/sid#55e47aa583e0] [rid#55e47ad7cb10] [/] [4 ]在0 usec中完成轉換。 [04/Aug/2016:00:44:07 - 0400] [localhost/sid#55e47aa583e0] [rid] [55e47ad7cb10] [/] [9] fetch_target_exception:找到異常目標列表[ARGS:x]編號2 [04/Aug/2016:00:44:07 - 0400] [localhost/sid#55e47aa583e0] [rid#55e47ad7cb10] [/] [9] fetch_target_exception:目標ARGS:x將不會被處理。[04/Aug/2016:00:44:07 - 0400] [localhost/sid#55e47aa583e0] [rid#55e47ad7cb10] [/] [4]執行操作符「contains」param「hello」 。 [04/8/2016:00:44:07 --0400] [本地主機/ SID#55e47aa583e0] [擺脫#55e47ad7cb10] [/] [4]規則返回0

然而,當我們提供相同的請求( 'http://localhost/?x=bobhello')雖然有我們的CTL行動中,宏擴展(如下):

SecRule ARGS "@contains bob" "id:1,t:none,pass,ctl:ruleRemoveTargetById=2;%{MATCHED_VAR_NAME}" 
SecRule ARGS "@contains hello" "id:2,deny,status:403" 

我們的調試日誌將顯示如下:

[04/8/2016:00 :44:41 - 0400] [localhost/sid#559f82a0b3e0] [rid#559f82d2fb50] [/] [5]規則559f82ac76e8:SecRule「ARGS」「@包含hello「」phase:2,日誌,審覈日誌,id:2,拒絕,狀態:403「 [04/Aug/2016:00:44:41 - 0400] [localhost/sid#559f82a0b3e0] [rid#559f82d2fb50 ] [/] [4]在0 usec中完成轉換。 [04/Aug/2016:00:44:41 - 0400] [localhost/sid#559f82a0b3e0] [rid#559f82d2fb50] [/] [9] fetch_target_exception:找到了例外目標列表[%{MATCHED_VAR_NAME}]規則ID 2 [04/Aug/2016:00:44:41 --0400] [localhost/sid#559f82a0b3e0] [rid#559f82d2fb50] [/] [4]執行運算符「contains」with param「hello」against ARGS :X。 [04/Aug/2016:00:44:41 - 0400] [localhost/sid#559f82a0b3e0] [rid#559f82d2fb50] [/] [9]目標值:「bobhello」 [04/Aug/2016:00 :44:41 - 0400] [localhost/sid#559f82a0b3e0] [rid#559f82d2fb50] [/] [4]操作員在2次使用完成。 [04/8/2016:00:44:41 --0400] [本地主機/ SID#559f82a0b3e0] [擺脫#559f82d2fb50] [/] [4]規則返回1.

予想不到的在沒有過多開銷的情況下完成此目標的方法。在這一點上,最好的解決方案可能是手動將每個違規論點列入白名單。

+0

謝謝。我結束了每一個論點的補充。 –