Immersivelabs Snort规则EP.2:检测interbanx DNS请求规则失效求助
问题分析与解决建议
一、两个域名DNS查询的核心差异排查点
- 标签长度与编码匹配:你规则中
|09|interbanx的09是十六进制长度值,对应十进制9,但需确认PCAP中interbanx标签的实际长度是否为9。若目标查询包含子域名(如www.interbanx.com),标签序列会变为|03|www|09|interbanx|03|com|00|,原规则自然无法匹配。 - DNS域名压缩:DNS协议会对重复域名使用指针压缩(十六进制以
c0开头),若interbanx.com的查询包采用了压缩,你手动编写的完整十六进制content规则会因无法匹配指针而失效——这是Q3和Q4最可能的差异点。 - 查询类型差异:Q3的
icanhazip查询可能是A记录,而Q4的interbanx查询可能是AAAA、MX或其他类型,未指定查询类型的规则可能漏匹配。
二、用Wireshark分析PCAP的操作步骤
- 加载目标PCAP,使用过滤条件
udp.port == 53 && dns.qry.name contains "interbanx"定位目标查询包。 - 选中数据包,展开
Domain Name System (query)→Queries,确认完整查询域名、查询类型。 - 切换至
Bytes面板,查看域名段的十六进制编码:- 对比
icanhazip的编码09 69 63 61 6e 68 61 7a 69 70 03 63 6f 6d 00,检查interbanx的编码是否与你规则中|09|interbanx|03|com|00|完全一致,是否存在压缩指针(如c0 0c这类指向已有域名的标记)。
- 对比
三、Snort规则调整方案
- 针对域名压缩的优化:放弃手动匹配十六进制,改用Snort内置的
dns.query选项直接匹配查询域名,该选项会自动处理压缩逻辑:alert udp any any -> any 53 (msg:"interbanx DNS query"; content:"interbanx"; dns.query; sid:5000011;) - 修正标签长度:若Wireshark显示域名包含子域名,调整content的十六进制序列,例如针对
www.interbanx.com的规则:alert udp any any -> any 53 (msg:"alert"; content:"|03|www|09|interbanx|03|com|00|"; sid:5000011;) - 指定查询类型:若确认查询类型为AAAA,添加类型匹配条件:
alert udp any any -> any 53 (msg:"interbanx AAAA query"; content:"|09|interbanx|03|com|00|"; dns.query.type == AAAA; sid:5000011;)
内容的提问来源于stack exchange,提问作者Eldar
相关产品推荐
相关产品推荐

