[Oisf-devel] http_host & http_raw_host
Anoop Saldanha
anoopsaldanha at gmail.com
Tue Mar 19 12:19:08 UTC 2013
On Tue, Mar 19, 2013 at 5:43 PM, Victor Julien <victor at inliniac.net> wrote:
> On 03/19/2013 01:05 PM, Anoop Saldanha wrote:
>> On Tue, Mar 19, 2013 at 5:26 PM, Victor Julien <victor at inliniac.net> wrote:
>>> On 03/19/2013 12:22 PM, Anoop Saldanha wrote:
>>>> On Tue, Mar 19, 2013 at 4:35 PM, Victor Julien <victor at inliniac.net> wrote:
>>>>> On 03/19/2013 12:03 PM, Anoop Saldanha wrote:
>>>>>> On Tue, Mar 19, 2013 at 4:23 PM, Victor Julien <victor at inliniac.net> wrote:
>>>>>>> In the new http_host, which host is selected if we have:
>>>>>>>
>>>>>>> GET http://one/ HTTP/1.0
>>>>>>> Host: two
>>>>>>>
>>>>>>> One or two?
>>>>>>
>>>>>> One. The uri value gets priority over the header value.
>>>>>>
>>>>>>>
>>>>>>> I know "alert http any any -> any any (msg:"SURICATA HTTP Host header
>>>>>>> ambiguous"; flow:established,to_server;
>>>>>>> app-layer-event:http.host_header_ambiguous;
>>>>>>> flowint:http.anomaly.count,+,1; classtype:protocol-command-decode;
>>>>>>> sid:2221015; rev:1;)" will fire in this case, but I assume the http_host
>>>>>>> keyword will fire on something as well.
>>>>>>>
>>>>>>> Also, what does http_raw_host match on specifically?
>>>>>>>
>>>>>>
>>>>>> Same logic as above.
>>>>>>
>>>>>
>>>>> Thanks.
>>>>>
>>>>> What is the overall difference between http_host and http_raw_host? I
>>>>> don't think we do normalization of the host, do we?
>>>>>
>>>>
>>>> Case difference, iirc. http_host is lowercase. Will need to check
>>>> with libhtp, though.
>>>>
>>>
>>> Cool, please let me know.
>>>
>>> Was wondering about something related. http_host is normalized to
>>> lowercase. Yet it seems the rules are forced to set nocase, which is odd
>>> I think.
>>
>> I forced the nocase so that users don't have the misconception that
>> they can use a uppercase pattern without a nocase, and it still
>> matches against a lowercase uri.
>
> Yeah, understand.
>
>>> Adding nocase makes sure we take a slower code path while we
>>> have no case to consider at all. We should only consider it at the rule
>>> parsing stage.
>>>
>>
>> We don't take a slower code path. If anything it is faster or am I
>> missing something? It's considered at rule parsing stage.
>
> In case of nocase (and pcre's /i) we take slower paths in (some) mpm,
> pcre matching, spm matching, etc. Might not be a major difference, but
> it's completely unnecessary in this case.
>
> Compare BoyerMoore vs BoyerMooreNocase for example. We "tolower" each
> char before matching. Unnecessary if we know everything is lowercase
> already. Something similar will happen in pcre. I see in AC it won't
> make a difference.
>
See your point about spm. AC it's the other way round though. Nocase
is faster. Understand your point though.
>>
>>> So I think we need a different sort of warning:
>>>
>>> e.g.: content:"Google.com"; http_host;
>>>
>>> should warn "uppercase pattern against lowercase buffer, use lowercase
>>> pattern or "nocase" if you're stupid" :)
>>>
>>> Make sense?
>>>
>>
>> Makes sense, although I feel we should error out on such sigs, rather
>> than warn. In the first place, such a sig is technically wrong, and
>> when we are reading such sigs quickly, we tend to not notice the
>> difference immediately.
>>
>
> Sure.
>
Will make this change.
--
Anoop Saldanha
More information about the Oisf-devel
mailing list