我在 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 时遇到过这种问题吗?有办法解决吗?
答案1
经过 6 个小时痛苦的尝试,我终于解决了它!
只需添加-k none
到命令行。
由于某种原因,在我的台式电脑上,它无需参数即可工作-k none
。如果有人愿意解释一下发生了什么,那将非常有帮助。谢谢。
答案2
听起来就像是校验和卸载导致了你的问题。
校验和卸载允许 NIC 计算 TCP 校验和,从而节省了 CPU 执行计算的时间。NIC 在发送数据包之前执行每个计算,不幸的是,Snort 可以在计算之前捕获本地数据包。因此,Snort 的内部校验和验证看到校验和为 0(因为尚未完成),将其解释为错误校验和,并且不会进一步分析数据包。
这就是为什么-k none
向 snort.exe 添加选项可以修复此问题的原因;它禁用 Snort 的内部校验和验证,从而可以分析数据包。
请注意,可以检查并禁用校验和卸载,但由于这样做存在一些性能风险,我认为该-k
解决方案更好。
答案3
有时 snaplen (-P) 也可能是一个问题。增加该值(默认为 MTU 的大小),您将获得更多数据。