天天看点

使用Elastic进行事件响应的便携式SIEM

作者:吉祥庄钢铁侠
使用Elastic进行事件响应的便携式SIEM

在事件响应活动中,经常需要收集、利用和关联来自异质来源和许多不同主机的大量数据。拥有一个能够快速导入、操作、丰富和交叉搜索这些数据的工具是武器库中的一个重要项目。

为了实现这样的目标,我最喜欢的解决方案是使用基于Elastic单节点容器部署的 "便携式SIEM"。

使用docker-compose技术和一些小的定制,就有可能拥有一个随时可以使用的SIEM,从一个带有一堆命令的新环境开始,这里包括那些用于导入数据的命令。一旦IR被关闭,报告被写入,就可以直接删除容器,释放资源,为下一个事件提供一个随时可以使用的环境,不受之前事件的污染,就像取证时使用的无菌支持一样。

我将在这篇文章中描述的是主机的初始配置和Elastic stack的编译文件。此外,我还将描述如何运行一个filebeat runonce容器,从取证分流生成的csv中导入数据。

我的安装是基于Debian 11的虚拟机,我们需要安装docker引擎和相关的docker-compose;这里可以找到安装docker引擎的快速入门指南。

下一步是使用docker-compose定义文件来安装Elastic stack。正如Elastic官方文档中所描述的,我们需要做的就是从官方github仓库下载docker-compose.yml文件和.env文件,调整它们以反映我们的需求,并启动服务boundle。

有一些强制性的设置是我们必须要改变的:

ELASTIC_PASSWORD,这是分配给弹性用户的密码,它是集群的默认超级用户。

KIBANA_PASSWORD,这是kibana_system用户使用的密码,用于kibana和elasticsearch之间的内部通信。

STACK_VERSION,我们希望Elastic stack部署的版本。

.env文件中的其余选项是可选的,用于根据网络或系统要求进行环境定制。

通常,这些步骤对于启动集群已经足够了,然而我还会做进一步的改变,以节省资源和优化网络。

从默认的官方docker-compose.yml文件中,我删除了es02和es03的节点和它们的子节点,这样弹性搜索集群就会在单节点设置中成长起来。我们还需要调整es01.environment节点下的变量:

cluster.initial_master_nodes: 我们需要只留下es01

discovery.seed_hosts: 我们只需要定义es01

在这一点上,我们需要做的是将docker-compose.yml和.env文件存储在专门用于SIEM的同一目录下(例如,/data/siem),并从那里启动组合:

> cd /data/siem 
> sudo docker-compose up -d
           

该发动机部署了三个集装箱:

弹性搜索容器

kibana容器

一个名为setup的临时容器,用于执行集群的基本操作(密码定义、用户定义等)。

一旦启动操作完成,就可以用浏览器访问SIEM的URL http://HOST_MACHINE_IP:5601,使用之前在.env文件中定义的弹性用户和密码。

当SIEM启动并运行时,是时候导入需要分析的数据了。为此,建议使用filebeat的runonce容器,读取存储在主机中的csv文件并将数据索引到弹性搜索节点。

首先,我们必须创建 filebeat 配置文件 filebeat.docker.yml

filebeat:
  inputs:
  - type: filestream
      id: irharvester
          paths:
      - csv.txt
    processors:
      - decode_csv_fields:
                fields:
            message: csv
              outputs:
    elasticsearch:
      hosts: ["https://specify_es_host:9200"]
      username: "elastic"
      password: "YOUR_PASSWORD"
      protocol: https
            ssl.verification_mode: none
                       

在上面的配置中,我们要指示filebeat从一个路径为csv.txt(可以是多个)的文件中读取,并将csv解码器应用于逐行导入的消息字段。csv剖析的结果被存储在一个名为csv的字段中。同时,指定将数据发送到哪里进行索引,在这种情况下是弹性搜索容器。

然后,为了启动数据摄取,就像运行一个基于官方filebeat镜像和相关文件映射的容器一样简单。

> sudo docker run -d --rm \
--name=harvester --network=backend \
--volume="$(pwd)/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro" \
--volume="$(pwd)/csv.txt:/usr/share/filebeat/csv.txt:ro" \
 docker.elastic.co/beats/filebeat:8.8.0 \
 -E 'output.elasticsearch.hosts=["https://siem_es01_1:9200"]' \
-E 'output.elasticsearch.password=$ELASTIC_PASSWORD' -e
           

现在可以使用kibana搜索导入的数据,并利用数据操作的力量,既可以在索引时使用filebeat处理器或摄取管道,也可以使用运行时字段,使数据适应具体的事件用例。

继续阅读