来源:https://github.com/defenxor/dsiem
Dsiem plugin是一个Logstash配置文件,它的功能是克隆Logstash解析的事件,将它们转换为称为标准化事件的标准格式,并将它们发送到Dsiem进行处理。
一、规范化的事件
下表显示了一个规范化事件的字段:
timestamp。原始事件时间戳为ISO8601格式,不要与Logstash内置 @timestamp混淆;强制填写;不用于事件关联,但它用于检测无序事件和传输时间。
event_id。事件的UUID,如果事件还没有,通常使用Logstash UUID筛选器插件生成;强制填写;不用于事件关联。
title。事件的描述;强制填写;不用于事件关联。
sensor。产生/捕获事件的设备的字符串标识符。示例:IPS设备、防火墙或处理Logstash节点的主机名;强制填写;不用于事件关联。
src_ip。源IP,应指基于网络通信的事件的发送方。对于基于主机的事件,如果事件记录中有可用的主机主IP地址,则使用它,或者只使用127.0.0.1;强制填写;用于事件关联。
dst_ip。目标IP,应指基于网络通信的事件的接收者。基于主机的事件应该只使用与src_ip或127.0.0.1相类似的地址;强制填写;用于事件关联。
protocol。使用的网络协议,如TCP、UDP、ICMP等;非强制填写;用于事件关联。
src_port。源端口号,通常指TCP或UDP端口,但也可以是任何识别号,如ICMP类型号等;非强制填写;用于事件关联。
dst_port。目的端口号,通常指TCP或UDP端口,但也可以是任何识别号,如ICMP类型号等;非强制填写;用于事件关联。
product。生成事件的设备的产品类型,即防火墙、IDS/IPS等。强制填写;用于事件关联。
category。事件的类别,相对于产品类型。例如,如果产品类型是防火墙,事件的类别可能允许流量、拒绝流量、丢弃流量、端口扫描等。强制填写,如果plugin_id或plugin_sid是空的;用于事件关联。
subcategory。事件类别的进一步细分。例如,如果类别是代码注入攻击,子类别可能是SQL注入、HTTP参数注入等。强制填写,如果plugin_id或plugin_sid是空的;用于事件关联。
plugin_id。标识插件的唯一数字。例如,在Dsiem默认配置中使用的基于Suricata eve.json的1001事件(在OSSIM中,默认情况下也使用1001事件,用于Suricata UnifiedThreat日志)。强制填写,如果product或category是空的;用于事件关联。
plugin_sid。标识插件内事件的唯一数字。强制填写,如果product或category是空的;用于事件关联。
custom_label1。用于关联规则的额外/自定义字段的文本标识符;非强制填写;不用于事件关联。
custom_data1。由custom_label1定义的额外/自定义字段的文本内容;非强制填写;用于事件关联。
custom_label2。用于关联规则的额外/自定义字段的文本标识符;非强制填写;不用于事件关联。
custom_data2。由custom_label2定义的额外/自定义字段的文本内容;非强制填写;用于事件关联。
custom_label3。用于关联规则的额外/自定义字段的文本标识符;非强制填写;不用于事件关联。
custom_data3。由custom_label3定义的额外/自定义字段的文本内容;非强制填写;用于事件关联。
二、创建Dsiem插件
在dpluger工具的帮助下,可以从Elasticsearch中的现有索引自动创建Dsiem插件。然后,可以使用dpluger创建的Logstash配置文件来过滤和解析传入事件,以生成规范化事件,并在80_siem.conf的帮助下将它们发送到Dsiem进行进一步处理。
有两种类型的Dsiem插件:
基于sid的插件:生成规范化的事件,稍后由一个指令PluginRule处理
基于分类(Taxonomy)的插件:为指令TaxonomyRule生成规范化事件。
下面给出了如何在dpluger帮助下创建它们的示例。
例1:基于sid的插件
假设您的elasticsearch位于http://elasticsearch:9200,那里有一个名为suricata-*的索引,用于创建一个用于Suricata IDS的插件。以下是具体的步骤:
(1)从这个项目发布页面下载并提取最新版本的dsiem-tools。
(2)创建一个空的dpluger配置文件模板使用:
$ ./dpluger create -a http://elasticsearch:9200 -i"suricata-*"-n"suricata"-c dpluger_suricata.json
上面的代码将在当前目录中创建一个名为dpluger_suricata.json的dpluger配置文件。文件的内容将是这样的:
下一步是编辑该文件,使字段引用和标识符与目标Elasticsearch suricata-*索引中的实际字段名匹配。对于从Suricata Eve JSON格式生成的索引(在Docker撰写部署示例中也使用了这种格式),最终的配置应该是这样的:
之后,我们可以使用run命令再次启动dpluger。这将验证目标Elasticsearch索引上的每个字段是否存在,然后创建一个ready to use Logstash配置文件。
生成的Logstash配置文件(即一个Dsiem SIEM插件)将是70_siem-plugin-suricata.conf,位于当前目录中。要使用该插件,只需将其复制到Logstash配置目录并重新加载Logstash。
例2:基于SID的插件和生成的插件SID
在前面的示例中,Suricata生成的每种类型的事件都有一个警报中的uniq标识符。signature_id,可用于生成的规范化事件中的plugin_sid。
但是如果源索引没有这样的字段呢?在这种情况下,可以指示dpluger在某些字段(如标题等)中查找uniq条目,并为每个条目分配一个plugin_sid号。要做到这一点,只需将plugin_sid设置为collect: .field.name,就像我们可以在下面的McAfee NSP中使用的dpluger配置文件一样:
使用上述配置,dpluger将在mcafee-nsp-* index的签名字段中收集uniq条目,并基于此为plugin_sid字段生成条目。下面是生成的Logstash配置文件的相关部分的摘录:
TSV文件的内容将在以后运行dpluger时用作起点和查找表。这意味着对同一个索引重复运行dpluger是安全的(例如,在添加新的uniq值时更新查找字典),因为以前检测到的所有标题都将保留它们的SID号。
例3:基于分类的插件
为dpluger提供-t参数,以生成一个基于分类的插件模板:
$ ./dpluger create -i firewall-*-t Taxonomy
结果dpluger_config.json文件将是:
注意plugin_id和plugin_sid键值是如何被产品、类别和子类别所替换的。从这里开始,完成插件的步骤与上面示例1中概述的步骤类似。
网友评论