Graylog几种数据格式规范方法
Graylog对数据格式规范有很几种手段,其中最实用的三种:Split、GROK、Regular。
分割符号(Split)
Split:这个不用多介绍,就是利用分隔符切字段,最好理解。
JSON
JSON: JSON格式也是最简单,几乎不用配置,设备发过来JSON格式,直接按JSON格式解开就行了。
GROK模式
GROK:属于模块化,分装了一些现成的正则表达式,相当于给固定模式正则表达式起了别名。
1 | %{IPV4:SrcIP} |
通过这个GROK,获取某个字符串当中的IP。
原则字符串,如下:
1 | 10.10.10.01:5678(test)->10.10.01.05:1235(test), |
结果,如下:
1 | SrcIP |
这其中的IPV4,用的就是GROK。
正则表达式(Regular)
GROK和Split的方法,都有自己的局限,而正则表达式,正弥补这两个方式的解决不了一些细节问题,或者能解决,但是比较麻烦。
举例,在告警的IOC信息里,找到CVE号。
原始数据,如下:
1 | XXXXXXXXXXXXXXXXXXXXXXX(CVE-2011-5007)XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
接下来要做的,就是在这个长字符串中,找到:CVE-2011-5007,用如下的正侧表达式实现。
1 | (?i)(cve-\d{4}-\d{4,7}) |
结果:
1 | CVE-2011-5007 |
以上就是几种,比较常见的数所规范化的手段。
取得[:]之间的数据。
由我们自己创建的一些安全策略规则, 在发出的告警日志中,自定义输出的内容格式,比如我们假定要发送部门相关的信息:[DEP:IS]
像这种加了标签的数据,也可以用正则表达式进行定位这部分信息字段,[DEP:IS]对应的正则表达式,如下:
1 | DEP:(.+?)] |
这样就要以提取[DEP:IS]中的内容’IS’。
如果想输出另外一个标签,比如[DB:MySQL]一样的模式就可以了。 想取出数据库类型,修改一下上面的正则表达式就行了。
1 | 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;)