Brian,
I wrote a decoder for my Bind9 query files:
<decoder name="bind9_query">
<!-- 25-Jan-2009 01:02:37.158 client 66.230.160.1#2806: view external:
query: . IN NS + -->
<prematch> client </prematch>
<regex offset="after_prematch">^(\d+.\d+.\d+.\d+)#</regex>
<order>srcip</order>
</decoder>
and had to insert it before the named_client block in decoder.xml
Then some local rules:
<group name="local_bind,">
<rule id="100201" level="5">
<decoded_as>bind9_query</decoded_as>
<regex>view external: query: \. IN NS +$</regex>
<description>recursive root query</description>
</rule>
<rule id="100202" level="5">
<decoded_as>bind9_query</decoded_as>
<match>view external: query: . IN </match>
<description>root query</description>
</rule>
<rule id="100203" level="5">
<decoded_as>bind9_query</decoded_as>
<regex>view external:\.++$</regex>
<description>recursive query</description>
</rule>
<rule id="100210" level="10" frequency="5" timeframe="60">
<if_matched_group>local_bind</if_matched_group>
<same_source_ip />
<description>Multiple DNS query offenses 5:60</description>
</rule>
<rule id="100211" level="10" frequency="3" timeframe="300">
<if_matched_sid>100201</if_matched_sid>
<same_source_ip />
<description>Multiple DNS query offenses 3:300</description>
</rule>
</group> <!-- local_bind -->
I'm new to ossec, and expect that there are better ways to do this; but it
works; and everybody is welcome to use it of course.