6.10.1.1. 苏里塔快速模式确定解释

如果在规则中显式设置了“fast_pattern”关键字,则suricata将使用它作为快速模式匹配。每个规则只能设置一次“fast_pattern”关键字。如果未设置“快速模式”,Suricata会自动确定用作快速模式匹配的内容。

下面解释逻辑测量用于自动确定要使用的快速模式匹配。

请注意,如果存在正的(即非负的)内容匹配,则忽略负的内容匹配以快速确定模式。否则,将考虑否定的内容匹配。

快速模式选择标准如下:

  1. Suricata首先标识签名中使用的具有最高“优先级”的所有内容匹配项。优先级基于匹配的缓冲区,通常“http_*”缓冲区具有更高的优先级(数字越小,优先级越高)。参见 Appendix B 有关哪个缓冲区具有什么优先级的详细信息。

  2. 在步骤1中标识的内容匹配(最高优先级的内容匹配)中,最长的(字符/字节长度)内容匹配用作快速模式匹配。

  3. 如果多个内容匹配具有相同的最高优先级并符合最长长度,则使用字符/字节多样性得分最高的内容匹配(“模式强度”)作为快速模式匹配。参见 Appendix C 有关用于确定图案强度的算法的详细信息。

  4. 如果多个内容匹配具有相同的最高优先级、最长长度和相同的最高模式强度,则为 上次注册时间 用作快速模式匹配。参见 Appendix B 不同缓冲区/列表的注册顺序。

  5. 如果多个内容匹配具有相同的最高优先级、最长长度、相同的最高模式强度,并且具有相同的列表ID(即在同一缓冲区中查找),则规则中第一个(从左到右)的内容将用作快速模式匹配。

值得注意的是,对于优先级、长度和模式强度相同的内容匹配,“http-stat-msg”、“http-stat-code”和“http-method”优先于常规的“content”匹配。

6.10.1.1.1. 附录

6.10.1.1.1.1. 附录A-SURICTA 1.3.4的缓冲器、列表ID值和登记顺序

对于Suricata 1.1.x-1.4.x,这应该差不多相同。

list_id

内容修饰符关键字

缓冲区名称

登记令

1

<none>(常规内容匹配)

DETECT_SM_LIST_PMATCH

1(第一个)

2

http_uri

DETECT_SM_LIST_UMATCH

2

6

http_client_body

DETECT_SM_LIST_HCBDMATCH

3

7

http_server_body

DETECT_SM_LIST_HSBDMATCH

4

8

http_header

DETECT_SM_LIST_HHDMATCH

5

9

http_raw_header

DETECT_SM_LIST_HRHDMATCH

6

10

http_method

DETECT_SM_LIST_HMDMATCH

7

11

http_cookie

DETECT_SM_LIST_HCDMATCH

8

12

http_raw_uri

DETECT_SM_LIST_HRUDMATCH

9

13

http_stat_msg

DETECT_SM_LIST_HSMDMATCH

10

14

http_stat_code

DETECT_SM_LIST_HSCDMATCH

11

15

http_user_agent

DETECT_SM_LIST_HUADMATCH

12(最后)

注:当确定Suricata 1.3.4的快速模式匹配时,注册顺序无关紧要,但List_ID值起作用。

6.10.1.1.1.2. 附录B-SURICA 2.0.7的缓冲器、列表ID值、优先级和登记顺序

对于Suricata 2.0.x,这应该差不多相同。

优先级(数字越小优先级越高)

登记令

内容修饰符关键字

缓冲区名称

list_id

3

11

<none>(常规内容匹配)

DETECT_SM_LIST_PMATCH

1

3

12

http_method

DETECT_SM_LIST_HMDMATCH

12

3

13

http_stat_code

DETECT_SM_LIST_HSCDMATCH

9

3

14

http_stat_msg

DETECT_SM_LIST_HSMDMATCH

8

2

1(第一个)

http_client_body

DETECT_SM_LIST_HCBDMATCH

4

2

2

http_server_body

DETECT_SM_LIST_HSBDMATCH

5

2

3

http_header

DETECT_SM_LIST_HHDMATCH

6

2

4

http_raw_header

DETECT_SM_LIST_HRHDMATCH

7

2

5

http_uri

DETECT_SM_LIST_UMATCH

2

2

6

http_raw_uri

DETECT_SM_LIST_HRUDMATCH

3

2

7

http_host

DETECT_SM_LIST_HHHDMATCH

10

2

8

http_raw_host

DETECT_SM_LIST_HRHHDMATCH

11

2

9

http_cookie

DETECT_SM_LIST_HCDMATCH

13

2

10

http_user_agent

DETECT_SM_LIST_HUADMATCH

14

2

15(最后)

dns_query

DETECT_SM_LIST_DNSQUERY_MATCH

20

注意:当确定Suricata 2.0.7的快速模式匹配时,List_ID值并不重要,但注册顺序是。

6.10.1.1.1.3. 附录C-模式强度算法

从检测引擎mpm.c.基本上模式强度“score”从零开始,从左到右查看传入字节数组中的每个字符/字节。如果在数组中以前没有看到字符/字节,则如果是字母字符,则在分数上加3;如果是可打印字符,则在分数上加4;如果是可打印字符,则在分数上加0x00、0x01或0xFF;否则,在分数上加6。如果在分数加1之前看到字符/字节。最后的分数将被返回。

/** \brief Predict a strength value for patterns
 *
 *  Patterns with high character diversity score higher.
 *  Alpha chars score not so high
 *  Other printable + a few common codes a little higher
 *  Everything else highest.
 *  Longer patterns score better than short patters.
 *
 *  \param pat pattern
 *  \param patlen length of the pattern
 *
 *  \retval s pattern score
 */
 uint32_t PatternStrength(uint8_t *pat, uint16_t patlen) {
     uint8_t a[256];
     memset(&a, 0 ,sizeof(a));
     uint32_t s = 0;
     uint16_t u = 0;
     for (u = 0; u < patlen; u++) {
         if (a[pat[u]] == 0) {
             if (isalpha(pat[u]))
                 s += 3;
             else if (isprint(pat[u]) || pat[u] == 0x00 || pat[u] == 0x01 || pat[u] == 0xFF)
                 s += 4;
             else
                 s += 6;
             a[pat[u]] = 1;
         } else {
             s++;
         }
     }
     return s;
 }