0

我正在尝试使用 wazuh 4.x 中的子解码器解析如下所示的日志,由于某种原因它没有解析所需的字段

日志条目

ossec: output: 'domainjoin-cli query|grep -i Domain': Domain = mydomain.local

儿童解码器

<decoder name="ossec-domain">
  <parent>ossec</parent>
  <type>ossec</type>
  <prematch>^ossec: output:</prematch>
  <regex type="pcre2">^'domainjoin-cli[ \t]query|grep[ \t]-i[ \t]Domain':[ \t]Domain[ \t]=[ \t](\S+)</regex>
  <order>domain</order>
</decoder>

输出

ossec: output: 'domainjoin-cli query|grep -i Domain': Domain = mydomain.local

**Phase 1: Completed pre-decoding.
        full event: 'ossec: output: 'domainjoin-cli query|grep -i Domain': Domain = mydomain.local'

**Phase 2: Completed decoding.
        name: 'ossec'
        parent: 'ossec'

**Phase 3: Completed filtering (rules).
        id: '100008'
        level: '3'
        description: 'Server is in  domain '
        groups: '['ossec']'
        firedtimes: '1'
        hipaa: '['164.312.b']'
        mail: 'False'
        pci_dss: '['10.6.1']'
**Alert to be generated.
4

1 回答 1

0

考虑到父解码器:

<decoder name="ossec">
  <prematch>^ossec: </prematch>
  <type>ossec</type>
</decoder>

首先,您应该删除prematch标签,因为父级已经有一个预匹配正则表达式。如果您想离开预匹配,您还可以使用该offset字段来指示字符串输出在ossec: .

<decoder name="ossec-domain">
  <parent>ossec</parent>
  <type>ossec</type>
  <prematch offset="after_parent>^output:</prematch>
  <regex type="pcre2">^'domainjoin-cli[ \t]query|grep[ \t]-i[ \t]Domain':[ \t]Domain[ \t]=[ \t](\S+)</regex>
  <order>domain</order>
</decoder>

之后,请注意正则表达式在您使用时是错误的^^表示日志的开头,在这种情况下,该字符之后的字符串不是日志的开头。您必须从正则表达式中删除该字符。

此外,您必须考虑|指示 OR 运算符,这意味着一个正则表达式(左)或另一个(右)应该与日志匹配。在您的用例中,这应该指示字符,因此您需要对其进行转义而不将其用作 OR 运算符。

考虑到这些迹象,您应该使用以下解码器:

<decoder name="ossec-domain">
  <parent>ossec</parent>
  <type>ossec</type>
  <prematch offset="after_parent">^output:</prematch>
  <regex type="pcre2">'domainjoin-cli[ \t]query\|grep[ \t]-i[ \t]Domain':[ \t]Domain[ \t]=[ \t](\S+)</regex>
  <order>domain</order>
</decoder>

日志测试输出:

ossec: output: 'domainjoin-cli query|grep -i Domain': Domain = mydomain.local

**Phase 1: Completed pre-decoding.
    full event: 'ossec: output: 'domainjoin-cli query|grep -i Domain': Domain = mydomain.local'

**Phase 2: Completed decoding.
    name: 'ossec'
    parent: 'ossec'
    domain: 'mydomain.local'

我希望这会有所帮助,如果您有更多问题,请告诉我您正在使用的 Wazuh 版本,我很乐意提供帮助。

于 2021-11-04T08:54:51.977 回答