我可以在 ModSecurity 中使用什麼規則來記錄特定網站的 POST 負載?

我可以在 ModSecurity 中使用什麼規則來記錄特定網站的 POST 負載?

我需要檢查特定網站的 POST 有效負載(伺服器相當繁忙,我不會為整個伺服器開啟 POST 日誌記錄)。

伺服器是LiteSpeed 5.0.7。 SecRequestBodyAccess 設定為「開啟」。

首先,我嘗試使用一系列規則:第一個規則位於階段:1,僅匹配對我所需主機的請求,但發布有效負載位於階段:2,我認為我無法在兩個不同的階段中創建一條鏈。

然後我嘗試使用這個:

<VirtualHost xxxxx>
    SecRule REQUEST_METHOD "POST" "phase:2,log,id:22222223
</VirtualHost>

但它沒有在 中記錄任何內容modsec_audit.log

我做錯了什麼還是與 LiteSpeed 與 ModSec 的兼容性有關?

最後我也嘗試了這個規則來記錄所有請求的POST:

SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,log,pass". 

它記錄請求,但不記錄請求正文 ( -C-- group si missing in modsec audit)。

答案1

類似這個問題:如何讓 mod_security 記錄所有 POST 資料?

您是對的,您不能在兩個不同的階段鏈接兩個規則,但是階段 2 可以訪問所有階段 1 信息,因此如果您想以這種方式執行此操作,只需將其移至階段 2。

您給的這條規則:

SecRule REQUEST_METHOD "POST" "phase:2,log,id:22222223

有點毫無意義。這將(在主日誌中)記錄已收到 POST 請求,但沒有 POST 正文。

它還會根據您的情況記錄到 AuditEngine安全審計引擎值設定為:

  1. 如果您將 SecAuditEngine 設定為 On,則所有內容都會記錄到審核日誌中,且不需要上述規則。這會很快填滿日誌文件,因此不建議這樣做。
  2. 如果您將 SecAuditEngine 設定為 RelevantOnly,那麼它也會記錄在此處。
  3. 如果 SecAuditEngine 設定為 Off,則它將永遠不會記錄到審核日誌中。

通常最好將 SecAuditEngine 設定為 RelevantOnly (我懷疑您已經這樣做了),但如果未設定為 RelevantOnly,主體可能不會記錄到 AuditLog

也許更好的方法是使用您給出的其他規則控制鍵行動:

SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,log,pass"

這會強制 AuditEngine 針對發布請求開啟 - 即使 AuditLog 設定為 Off。這也將記錄您已觸發此規則以將其轉入,這並不是真正必要或有用的,因此我將“log”更改為“nolog”。該請求仍將記錄(因為auditEngine已設定為yes),但進行該變更的規則不會記錄。順便說一句,當您使用 ctl 時,這只會影響此請求,因此 AuditEngine 將為下一個請求重置。

正如你所說,這似乎有效,除非你沒有 C 部分。這是設定為SecAuditLogParts。預設情況下,這包括 C 部分,所以猜猜這意味著您必須更改預設值?這其中有什麼原因嗎?

無論如何,您可以將其設定為包含 C 部分:

SecAuditLogParts ABCFHZ
SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,nolog,pass"

或者,如果您只想在觸發此規則時記錄 C 部分,則可以將其作為規則的一部分執行:

SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,ctl:auditLogParts=ABCFHZ,nolog,pass"

另一件需要注意的事情是 POST 請求可以記錄敏感資料(密碼、信用卡號、社會安全號碼...等)。不建議記錄這些內容,也可能違反本公司政策和/或您遵循的任何標準(例如 PCI 合規性)。因此,建議設定清理規則來屏蔽此資料。請參閱此處以了解更多資訊:https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#sanitiseArg

答案2

確保以下事項:

  1. SecRequestBodyAccess On

  2. 嘗試使用“auditlog”而不是“log”

  3. 如果您有自訂的 SecAuditLogParts,請確保它包含請求正文

相關內容