我不明白为什么以下规则没有检测到内容“unescape”:
alert tcp any any -> any any (msg:"example 1";flow:to_client,established;file_data;content:"unescape";sid:20001)
虽然以下有效:
alert tcp any any -> any any (msg:"example 1";flow:to_client,established;file_data;content:"<script>";sid:20001)
Snort 似乎没有检测到脚本标签内的任何内容。 非常感谢。
最佳答案
有一个选项可以在 http 预处理器中规范化 javascript。您需要确保启用此功能,否则像 unescape 这样的功能将不会是您所期望的。但是,您仍然应该看到“unescape”,所以我不完全确定这是您的问题。您可以在 server configuration options 的 snort 手册中了解如何配置此选项。 。以下是手册中有关此选项的片段:
“normalize_javascript 此选项启用 HTTP 响应正文中的 Javascript 规范化。在配置此选项之前,您应该选择配置选项extend_response_inspection。打开此选项时,Http Inspect 通过搜索来搜索 HTTP 响应正文中的 Javascript为 <script>
标签并开始规范化它。当 Http Inspect 看到没有类型的 <script>
标签时,它被视为 javascript。javascript 函数中的混淆数据,例如 unescape、String .fromCharCode、decodeURI、decodeURIComponent 将被标准化。unescape/decodeURI/decodeURIComponent 中处理的不同编码是 %XX、%uXXXX、
XX 和
uXXXXi。除了这些编码之外,Http Inspect 还将检测连续的空格并将其标准化为单个空格。 Http Inspect 还将规范化加号并连接字符串。规则选项 file_data 可用于从规则访问此标准化缓冲区。当 Http Inspect 中的混淆级别等于或大于 2 时,会生成 SID 9 和 GID 120 的预处理器警报。”
如果这仍然不起作用,那么您应该检查以下内容:
您的 server_flow_depth 可能在 http preprocessor server configuration 中配置设置太低。默认值为 300,因此如果“<script>
”出现在前 300 个字节内,而“unescape”出现在 300 个字节之后,则 snort 不会检查那么远。尝试将此值设置为 65535。您应该能够通过“</script>
”的内容匹配来测试此值,如果这不会生成警报,则可能是该设置。
关于javascript - Java 脚本的 Snort 规则不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28266797/