1、content
可以匹配所有字符;从a到z,大写和小写及所有特殊标志。针对一些特殊符号或中文等,需要使用十六进制进行匹配,写法:|3A|表示冒号,以此类推。|0D| -> \r,|0A| -> \n
另外,默认情况下,content中给定的值是包含运算(模糊匹配,但是不是正则表达式),同时也可以在content后面具体指定对应的字段,比如http_stat_code,http_url等。另外还可以辅助使用startswith,endswith来进行更加精准的匹配。content: "GET";startswith;http_request_line;
其中http_request_line表示请求头,http_request_body表示请求体,http_response_line表示响应头,http_response_body表示响应体
2、nocase
不区分大小写,通常放在content后面
3、dsize
有效载荷的内容的长度,基本用法如下:
dsize:[<>!]number; || dsize:min<>max;
(1)dsize:100,表示大小等于100
(2)dsize:<100 dsize:>100 dsize:!100 dize:100<>200
4、pcre
标准的正则表达式匹配,基本语法:pcre:"/
(1)必须使用/进行包裹,最后的位置可以设置选项
(2)通常情况下,pcre不能直接单独存在,必须依赖于content,也就是说必须现有content,再有pcre进行更精准的匹配。
1、to_md5
2、to_sha
3、url_encode
4、base64_decode
对字段的值进行base64解码,并在解码后进行匹配(前提:知道解码后具体的内容)
Buffer content: http_uri="GET /en/somestring&dGvzdAo=¬_base64" Rule: alert http any any -> any any (msg:"base64 example"; http.url; content: "somestring"; base64_decode:bytes 8, offset 1,relative; base64_data: content:"test"; sid:10001; rev:1;)
1、flowbits
2、flow
如:flow:established,to_server;表示目标服务器方向,连接已经建立
3、flowint
(1)基本语法
flowint: name, < +,-,=,>,<,>=,<=,==, != >, value; =号用于赋初始值 +- 数学运算 其他 数字比较判断 flowint: name, (isset|isnotset); 用来判断某个变量是否已经初始化
(2)用法示例:
alert http any any <> $HOME_NET 80 (msg:"web服务器出现404状态码"; content: "404"; http_stat_code; flowint:urlcount , notset; flowint: urlcount, =, 1; noalert; sid:561002;) alert http any any <> $HOME_NET 80 (msg:"web服务器出现404状态码"; content: "404"; http_stat_code; flowint:urlcount , isset; flowint: urlcount, +, 1; noalert; sid:561003;) alert http any any <> $HOME_NET 80 (msg:"频繁出现404状态码,疑似扫描"; content: "404"; http_stat_code; flowint: urlcount, >=5, priority: 2; sid:561004; rev: 2;)
4、strream_size
1、threshold
threshold: type,track ,count ,seconds 默认建议使用threshold,如果设置为limit,则会限制警告的数量 track 优先使用by_src,T秒内连续出现N次,则触发警告
2、实例
alert http any any <> $HOME_NET 80 (msg:"频繁出现404状态码,疑似扫描"; content: "404"; http_stat_code; threshold:type threshold, track by_src, count 5, seconds 20; classtype: web-url-scan; sid:561004; rev: 3;)