Snort 规则检测 invalid/mismatched HTTP header content-size 与实际 content-size

Snort rules to detect invalid/mismatched HTTP header content-size vs actual content-size

情况:在某些攻击中,攻击者发送内容大小与实际内容大小不匹配的无效 HTTP 数据包。我需要写一个Snort规则来捞出这样的数据包

问题:据我所知,Snort 不允许用户使用 Snort variables/values(例如 "dsize")定义规则集。我想做的一个例子如下:

alert tcp $EXTERNAL_NET any -> $HOME_NET $HTTP_PORTS (\
    msg:"mismatched HTTP header content size vs actual content size"; \
    offset: *to http header content field*; \
    byte_test: *length of field of content*, !=, dsize; \
    gid: 1; sid:1000001;)

问题:我很清楚上面的方法是行不通的。有没有办法使用 Snort 规则实现上述目的?

附加信息 1:我正在使用 Snort 2

附加信息 2:是否有 Snort 2 可以支持的脚本(LUA 除外)?

附加信息 3:我知道存在 http 预处理器,但不知道如何让它正常工作。如果您建议使用预处理器,您能为我指明正确的方向吗?

简短的回答是"No."

较长的答案是,是的,您可以为此类检测编写一个插件。插件框架乍一看可能令人望而生畏,但您可以很容易地从请求中提取内容大小字段,然后根据实际数据内容的大小进行检查。这是插件的理想检测情况。只需确保在您的插件意识到它正在分析的数据包不是它关心的数据包时迅速退出。例如,不仅将您的插件限制为监视端口 80,而且还只检查其中包含 HTTP headers.

的数据包