Graylog对数据格式规范有很几种手段,其中最实用的三种:Split、GROK、Regular。

分割符号(Split)

Split:这个不用多介绍,就是利用分隔符切字段,最好理解。

JSON

JSON: JSON格式也是最简单,几乎不用配置,设备发过来JSON格式,直接按JSON格式解开就行了。

GROK模式

GROK:属于模块化,分装了一些现成的正则表达式,相当于给固定模式正则表达式起了别名。

%{IPV4:SrcIP}

通过这个GROK,获取某个字符串当中的IP。

原则字符串,如下:

10.10.10.01:5678(test)->10.10.01.05:1235(test),

结果,如下:

SrcIP
    10.10.10.01

这其中的IPV4,用的就是GROK。

正则表达式(Regular)

GROK和Split的方法,都有自己的局限,而正则表达式,正弥补这两个方式的解决不了一些细节问题,或者能解决,但是比较麻烦。

举例,在告警的IOC信息里,找到CVE号。

原始数据,如下:

XXXXXXXXXXXXXXXXXXXXXXX(CVE-2011-5007)XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

接下来要做的,就是在这个长字符串中,找到:CVE-2011-5007,用如下的正侧表达式实现。

(?i)(cve-\d{4}-\d{4,7})

结果:

CVE-2011-5007

以上就是几种,比较常见的数所规范化的手段。

取得[:]之间的数据。

由我们自己创建的一些安全策略规则, 在发出的告警日志中,自定义输出的内容格式,比如我们假定要发送部门相关的信息:[DEP:IS]
像这种加了标签的数据,也可以用正则表达式进行定位这部分信息字段,[DEP:IS]对应的正则表达式,如下:

DEP:(.+?)]

这样就要以提取[DEP:IS]中的内容’IS’。

如果想输出另外一个标签,比如[DB:MySQL]一样的模式就可以了。 想取出数据库类型,修改一下上面的正则表达式就行了。

DB:(.+?)]

规则很明显 , 想加什么标签,在[:]中的:前面加标签名,在:符号加标签属性就行了。

创建一条访问域名的suricata规则, 对于访问abc.com域名进行告警。

下面的代码片段可以帮助你在 Suricata 上创建一条告警规则,用于监测 abc.com 域名的访问并报警:

alert tcp any any -> $HOME_NET any (msg:“Traffic from abc.com”; content:“abc.com”; http_host; sid:1000001; rev:1;)

其中,

  • $HOME_NET 部分表示监测内网中的访问行为。

  • content:"abc.com" 是用于匹配访问 abc.com 的 HTTP 请求 / 响应头中的域名内容。

  • http_host 表示只检查 HTTP 请求/响应中的 host 头部。

  • sid(规则 ID) 是一个辨识符,用于标识每条规则,便于日后查看这项规则的细节及更新。

  • rev表示规则的版本号,在发生了规则调整时将其 +1 即可。

如果你想要对所有访问 abc.com 的端口进行检测,可以将第一个协议 (‘TCP’) 改为 ‘Any’:

alert any any any -> $HOME_NET any (msg:“Traffic from abc.com”; content:“abc.com”; http_host; sid:1000001; rev:1;)