ESP 数据包的 Snort 规则

Snort rule for ESP packets

我想知道是否可以编写一个匹配 ESP 数据包和欺骗性 SPI 值的 snort 规则。

我要提醒的数据包:
00:00:00.000000 IP x.x.x.x > x.x.x.x: ESP(spi=0x00000000,seq=0x29)

原始数据包看起来像这样:

4500 XXXX XXXX XXXX XXXX -> 20 字节 IP header
0000 0000 XXXX XXXX XXXX -> ESP header 以 4 个字节的零开始
XXXX...

这就是为什么我最好的猜测是尝试匹配:
1) IP Proto 等于 ESP
2) ESP header 开头的原始字节等于 0x00000000

到目前为止我想到了这个:

alert ip any any -> any any \  
(ip_proto:esp; content: "|00 00 00 00|"; offset:0; depth: 4;)  

不幸的是,这不起作用。我相信这是因为 Snort 开始查看负载中的 'content:'。我尝试使用 pkt_data 选项将检测光标重置到传输层的开头。每本手册: "pkt_data: This option sets the cursor used for detection to the raw transport payload"

我以为在 IP header 之后立即开始 'content:' 检查会很傻。很遗憾,没有结果。

我是不是哪里弄错了?还是 Snort 无法通过 ESP header 中的原始字节进行匹配?任何 help/opinion 将不胜感激!

除了编写自己的预处理器外,没有什么好的方法可以做到这一点。 Snort 目前没有向规则配置语言公开 ESP spi 值的任何内容。

虽然确实支持解码 ESP 数据,但这仍然只会将解密的有效负载暴露给您的规则。

为了省去一些麻烦,byte_test 似乎是一种可能性,但它非常明确地允许您 操纵有效载荷。例如,以下 将不会 允许您检查 header 中的 UDP 目标端口为 2049:

 ...byte_test:2,=,2049,-2,big;