Snort 未檢測到傳出流量
我在 windows server 2008 R2 x64 上使用 Snort 2.9,配置非常簡單,如下所示:
# Entire content of Snort.conf: alert tcp any any -> any any (sid:5000000; content:"_secret_"; msg:"TRIGGERED";) # command line: snort.exe -c etc/Snort.conf -l etc/log -A console
使用我的瀏覽器,我將 url 中的字元串“secret”發送到我的伺服器(Snort 所在的位置)。例子:
http://myserver.com/index.php?_secret_
Snort 收到它並發出警報,它可以工作,沒問題!但是當我嘗試這樣的事情時:
<?php // (index.php) header('XTest: _secret_'); // header echo '_secret_'; // data ?>
如果我只是請求
http://myserver.com/index.php
,即使 php 文件在標頭和數據中都發送相同的字元串,沒有壓縮/編碼或其他任何內容,它也不起作用或檢測到傳出流量中的任何內容。(我使用 Wireshark 檢查過)這在我看來像是一個 Snort 問題。無論我做什麼,它只檢測接收數據包。有人在使用 Snort 時遇到過這種問題嗎?知道如何解決嗎?
經過6個小時的痛苦嘗試,我終於修好了!
只需要添加
-k none
到命令行。出於某種原因,在我的台式電腦中,它可以在沒有
-k none
參數的情況下工作。如果有人願意解釋發生了什麼,那將非常有幫助。謝謝。
聽起來校驗和解除安裝正在導致您的問題。
校驗和解除安裝允許 NIC 計算 TCP 校驗和,從而使 CPU 不必執行計算。NIC 在發送數據包之前執行每個計算,不幸的是,Snort 可以在計算之前擷取本地數據包。結果,Snort 的內部校驗和驗證看到校驗和為 0(因為尚未完成),將其解釋為錯誤校驗和,並且不進一步分析數據包。
這就是為什麼將
-k none
選項添加到 snort.exe 來修復它的原因;它禁用 Snort 的內部校驗和驗證,從而讓數據包被分析。請注意,可以檢查和禁用 checksum offloading,但由於存在一些性能風險,我認為該
-k
解決方案更好。