自定义 OSSEC 解码器在 ossec-logtest 中工作,但在使用真正的 OSSEC 时不起作用

自定义 OSSEC 解码器在 ossec-logtest 中工作,但在使用真正的 OSSEC 时不起作用

我在使用为 OSSEC 3.7.0 定义的自定义解码器时遇到了一些问题。我只需要从我的日志中提取和srcip,但 OSSEC 的解码器还会提取和,而我不需要这些。我的解决方案是定义另一个解码器,只提取我想要的字段(dstipprotocoliptablessrcportdstport如果您有更好的解决方案,请分享!)。

这是我做的:

我把这个解码器放在里面/var/ossec/etc/decoder.xmliptablesiptables-1解码器之间):

<decoder name="iptables-noports">
   <parent>iptables</parent>
   <type>firewall</type>
   <prematch_pcre2>^NOPORTS IN=</prematch_pcre2>
   <pcre2>^\S+ .+ SRC=(\S+) DST=(\S+) .+ </pcre2>
   <pcre2>PROTO=(\w+) </pcre2>
   <order>srcip,dstip,protocol</order>
</decoder>

我配置了 OSSEC 来分析该/var/log/ulog/syslogemu.log文件。由于我在 Docker 容器内运行所有内容,因此我必须将所有日志重定向到此文件,因为网络命名空间中的日志消息被故意抑制

iptables我用来生成日志的命令是:

iptables -A INPUT -p tcp -j NFLOG --nflog-group 0 --nflog-prefix "kernel: NOPORTS"

然后,我在里面定义了这个测试规则/var/ossec/rules/local_rules.xml

<rule id="100009" level="1">
  <if_sid>4100</if_sid>
  <decoded_as>iptables</decoded_as>
  <description>Individual TCP SYN request detected</description>
  <dstip>192.168.1.1</dstip>
</rule>

完成所有这些后,我通过运行以下命令来测试我的规则:

/var/ossec/bin/ossec-logtest -U 100009:1:iptables

并提供此日志条目(我从中复制粘贴syslogemu.log):

Nov  9 16:58:35 myserver kernel: NOPORTS IN=eth0 OUT= MAC=XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX SRC=192.168.1.2 DST=192.168.1.1 LEN=44 TOS=00 PREC=0x00 TTL=50 ID=38150 PROTO=TCP SPT=49448 DPT=4445 SEQ=4283765322 ACK=0 WINDOW=1024 SYN URGP=0 MARK=0

这是我得到的输出:

2023/11/10 10:32:04 ossec-testrule: INFO: Reading local decoder file.
2023/11/10 10:32:04 ossec-testrule: INFO: Started (pid: 1656).
ossec-testrule: Type one log per line.

Nov  9 16:58:35 myserver kernel: NOPORTS IN=eth0 OUT= MAC=XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX SRC=192.168.1.2 DST=192.168.1.1 LEN=44 TOS=00 PREC=0x00 TTL=50 ID=38150 PROTO=TCP SPT=49448 DPT=4445 SEQ=4283765322 ACK=0 WINDOW=1024 SYN URGP=0 MARK=0 


**Phase 1: Completed pre-decoding.
       full event: 'Nov  9 16:58:35 myserver kernel: NOPORTS IN=eth0 OUT= MAC=XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX SRC=192.168.1.2 DST=192.168.1.1 LEN=44 TOS=00 PREC=0x00 TTL=50 ID=38150 PROTO=TCP SPT=49448 DPT=4445 SEQ=4283765322 ACK=0 WINDOW=1024 SYN URGP=0 MARK=0 '
       hostname: 'myserver'
       program_name: 'kernel'
       log: 'NOPORTS IN=eth0 OUT= MAC=XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX SRC=192.168.1.2 DST=192.168.1.1 LEN=44 TOS=00 PREC=0x00 TTL=50 ID=38150 PROTO=TCP SPT=49448 DPT=4445 SEQ=4283765322 ACK=0 WINDOW=1024 SYN URGP=0 MARK=0 '

**Phase 2: Completed decoding.
       decoder: 'iptables'
       srcip: '192.168.1.2'
       dstip: '192.168.1.1'
       proto: 'TCP'

**Phase 3: Completed filtering (rules).
       Rule id: '100009'
       Level: '1'
       Description: 'Individual TCP SYN request detected'
lf->decoder_info->name: 'iptables'
ut_decoder_name       : 'iptables'
0

如您所见,它按预期工作。但是,如果我实际尝试运行 OSSEC,它不会检测到任何东西。如果我删除自定义解码器并重新启动 OSSEC,它会再次开始工作。为什么?我该如何修复它?

相关内容