SOCasS(把SOC当作一种服务)的架构部署和技术漫谈-上 - raul

admin 2021年12月31日15:35:20评论152 views字数 15723阅读52分24秒阅读模式

0x00 写在前面

原文是去年看到的系列文章,总共有8篇。文章详细介绍了SOCasS(SOC as a Service)的架构及相关部署方法。在国内,SOC的概念比较多见了——安全运营中心,很多安全厂商也有相关的产品。但是SOCasS的概念,比较少见,笔者在国内的一些安全论坛/社区好像都没有见过这个词,国外甚至都推出了SOCasS的相关产品/服务。当时挺感兴趣就收藏了文章,后面断断续续阅读完了。

什么是SOCasS呢?简单解释就是:企业可能由于时间/资源/安全人力不足,很难组建自己的内部安全团队。但是他们可以使用第三方的技术和软件工具构建一个适配企业的SOC(这个第三方可以理解为厂商的产品和技术、也可以理解为开源产品/技术)。

本文是由突尼斯INSAT大学的三名学生编写的,他们使用100%开源的软件和技术,构建了一套很完善的SOC:包括平台架构、各种日志收集、漏洞扫描、监控、日志处理、数据整合、dashboard图表、告警、应急响应事件管理等。涵盖内容丰富,值得一读。笔者也是抱着学习的目的,在阅读的同时,前前后后将这8篇文章翻译成中文,供国内安全同行更直观、便捷地去阅读和理解(文章将近25000字,很多内容都是开源软件的部署方法,理解起来并不难,读者也可根据各个章节标题选择性进行阅读)。

原文链接:

Deploying of infrastructure and technologies for a SOC as a Service ( SOCasS)

PS:笔者从事甲方安全建设工作多年, 也见过形形色色的同行。从事技术工作,当然信守“技术是第一生产力”,但是有时候在安全厂商天花乱坠的宣传下,“买买买”成了第一生产力(当然,预算充足完全可以这么干)。国内很少能看到本文这样的实践型的文章,文字概念型的文章比比皆是,这是个蛮有趣的事情。安全之路漫长,安全非一日之功,我们的理想状态都是利用有限的资源实现安全建设的最大价值。当然,还是要多干实事,多学习多进步。

0x01 架构及相关配置介绍

过去几年中,网络攻击的数量日益激增。这些攻击不仅针对个人,还针对企业,政府、关键基础设施等。由于攻击的复杂性和数量庞大,传统的解决方案(如防病毒、防火墙、NIDS和NIPS等)已经不能再满足需求。

大型企业通常会使用SIEM(Security Information and Event Management-安全信息和事件管理)的解决方案,集成到安全建设里,收集和关联网络设备、安全设备和其他终端产生的告警和日志。但是这样的方案不仅花钱而且费时费力,并且需要安全团队专门去分析误报、排查处理一些复杂的安全事件。

这就导致了Security Operations Center(安全运营中心)方法的出现,也就是我们熟知的SOC。它被认为是安全领域的一种新方法,以减少和缓解复杂度及复杂度日益增加的攻击数量。SOC是由技术人员、各种流程和技术的集成体,以提供端到端的安全能力。但现状是:组建一个SOC团队的成本太高,目前只有一些大的互联网公司在搞。

这时,安全运营中心即服务-Security Operation Center as a Service(SOCasS)的方法就应运而生了。SOCaaS就是将安全运营中心(SOC)外包给第三方(使用第三方的技术和软件工具)。这就使得资源有限的公司能以更便宜、更高效和更快速的部署方式来改善其安全现状,并增强对攻击面的防御能力。

该项目是由突尼斯INSAT大学的三名学生Ibrahim Ayadhi、Ghassen Miled和Mehdi Masri在Bassem Ben Salah教授的指导下完成的。所使用到的技术和工具100%都是免费和开源的。

为了感谢开源社区及他们的帮助,使得这个项目成为了现实。我们决定为社区公开项目文档和实施该项目的具体步骤。下图为该解决方案的详细架构图:

该解决方案可实现日志存储、分析、监控、告警生成、报告生成、IOC(通常指的是在检测或取证中,具有高置信度的威胁对象或特征信息)扩充和事件响应管理。

从上图可知,我们从主机和各个网络组件收集不同类型的日志和事件,然后通过安全通道(VPN隧道)将这些日志发到Logstash。我们使用ELK beats和Wazuh-agent来收集数据和日志,随后把他们发送到ELK SIEM。

经过Logstash对数据的汇总和处理,Elasticsearch将处理数据的索引,以优化存储锅从和数据搜索。随后,数据会被转发到Kibana,Kibana负责已存储数据的分析和可视化。

同时,Wazuh HIDS的agent将数据发回Wazuh Manager和Elasticsearch。随之,ElastAlert将监控关注的新事件,并在TheHive内部生成告警。

随后,通过Cortex分析器和MISP的额外查询来丰富事件,从而决定事件自动关闭或上报给分析人员处理。告警可供分析人员通过Cortex和MISP去声明和标记。

该解决方案部署时使用的硬件配置和软件:

硬件:

下表展示了我们项目中部署的整体基础架构、需求和服务。此外,该架构可以通过正确的配置和基础设施的拓展,部署在更大的环境中。

对于终端,它可以将任何可产生日志的设备与服务器进行连接(例如:路由器、交换机等)

托管在Microsoft Azure云上的机器 配置需求 系统版本 开放端口 部署服务
服务器 2 Vcpus
8GB内存
Ubuntu 18.04 LTS Wazuh: TCP 1514,1515,55000
Logstash: TCP 5044
Kibana: TCP 5601
Elasticsearch: TCP 8080
Praeco: TCP 8080
Nessus: TCP 8834
SSH: TCP 22
ELK stack
Filebeat
Nessus
Vulnwhisperer
Elastalert
Praeco
Wazuh-api
Wazuh-manager
服务器 2 Vcpus
8GB内存
Ubuntu 18.04 LTS TheHive: TCP 9000
Cortex: TCP 9001
MISP: 443
SSH: TCP 22
TheHive
Cortex
MISP
终端 2 Vcpus
4GB内存
Ubuntu 18.04 LTS SSH: TCP 22 Filebeat
Packetbeat
Metricbeat
Wazuh-agent
终端 2 Vcpus
4GB内存
Windows 10 RDP: TCP 3389 WinlogBeat
Wazuh agent

免责声明:

  • 由于本项目的环境和资源有限,架构图中所展示的终端设备并没有全部实现。因此,防火墙和路由器将不会在本项目中涉及。
  • 本项目中选择的硬件设备并不适用于生产环境。建议投入更多的硬件资源。我们建议每台服务器的配备8个Vcpu,第一台服务器配备32GB内存,第二台服务器配备8GB内存。

软件:

- ELK stack: ELK stack是一个缩写,用于描述一个由三个流行的开源项目组成的框架:Elasticsearch、Logstash和Kibana。ELK能够收集来自所有系统和应用程序的日志,并对日志进行分析,创建可视化对应用程序和基础架构进行监控,能有助于更快的排查一些故障和进行安全分析等。

- Beats: 是轻量级的数据传输器。可以安装在服务器上捕获各种操作数据(比如日志、各类指标及网络数据包)。Beats可直接或通过Logstash将操作数据发送到Elasticsearch,这样就可以用Kibana将其可视化。

- Elastalert: 是一个用于从Elasticsearch中的数据中对异常、峰值或其他感兴趣的内容进行告警的简单框架。它的工作原理是,将Elasticsearch与规则类型和告警这两类组件相结合。Elasticsearch被定期查询,查询的数据会与规则类型进行匹配,当命中规则,根据命中规则的情况就会产生一条或多条告警。

- Suricata: 是一个开源的威胁检测引擎,由OISF(开放信息安全基金会)开发。Suricata可作为网络入侵检测系统(NIDS)和入侵防御系统(IPS),也可用于网络安全监控。

- Elasticsearch的其他开源分支:

  • 告警功能:它提供了一个功能强大且易用的事件监控和告警系统,能够监控数据并自动发送通知。通关直观的Kibana页面展示和强大的api,可以轻松的进行配置和告警管理。
  • 安全功能:它包含多种认证选项(如Active Directory和OpenID)、传输加密、细致的访问控制、详细的审计记录、高级合规性功能等。

- Praeco: 是Elasticsearch的一个告警工具-ElastAlert的GUI版,使用的是ElastAlert API。通过Praeco,可以使用查询生成器为Elasticsearch中的数据交互式地建立告警功能,可将相关通知发送到Slack、邮箱、Telegram或其他的HTTP POST端,此外该工具还提供了许多其他的功能。

- Wazuh: 是一个用于威胁检测、安全监控、事件响应和合规监管的免费开源平台。可用于监控终端、云服务器和容器,并汇总和分析来自外部的数据。Wazuh agent扫描被监控的系统,寻找/监控恶意软件、rootkits和一些可以的异常行为。可以检测到隐藏的文件、隐蔽的进程和未注册的网络监听,以及系统调用响应不一致等问题。

- Nessus Essentials: 一个免费的主机漏洞扫描器,为漏洞评估提供一个切入点。可高速、深入的对环境进行无代理扫描。

- TheHive: TheHive的官方描述是:“一个可拓展的、开源的、免费的安全响应平台,旨在使任何信息安全从业人员能够轻松地处理安全事件,并快速地采取行动”。本质上,它是一个告警管理平台,用于管理从创建到关闭的事件告警。

- Cortex: Cortex与TheHive是一个团队开发的产品,对Cortex进行了丰富的数据补充。Cortex 使用分析器获取日志中有关指标信息的其他数据。允许在第三方服务中查询 IP、URL 与文件哈希等指标,并将第三方返回的结果作为附加信息丰富告警事件。无需我们手动发送文件哈希值到VirusTotal,分析器会自动帮我们做,并将结果标记在告警上。

- MISP: MISP(恶意软件信息与共享平台)是一个用于共享、存储和关联目标攻击、威胁情报、金融诈骗信息等指标的威胁情报平台。其 Feed 可以是某个组织提供的付费订阅,也可以是社区维护的开源订阅,这也是数据丰富的主要来源。MISP如今已被多个组织用于存储、知识共享,在网络安全指标,恶意软件分析方面进行协作,以确保更好的安全防护。

本节内容旨在介绍我们的工作准备,接下来的内容将会详细展开。

0x02 ELK Stack: 安装和数据传输

2.1 ELK Stack安装和配置

2.1.1 ELK介绍

A. ELK是什么?

https://www.elastic.co/fr/what-is/elk-stack

B. ELK Basic和ELK Oss之间的区别是什么?

https://www.elastic.co/fr/what-is/open-x-pack

ELK Stack(Open Source) ELK Stack(Basic)
License Apache 2.0 Elastic Basic
Free Yes Yes
Alerting No No
Authentication No No
Access Control No No

2.1.2 ELK安装

在我们的项目中,我们使用的是ELK Stack Basic (7.6.1)版本,并参考elastic.co提供的官方指南:

https://www.elastic.co/guide/en/elastic-stack/current/installing-elastic-stack.html

2.1.3 ELK配置

在本节中,将介绍我们对于ELK Stack做的相关配置。

A. Elasticsearch配置

关于Elasticsearch的配置,都是在/etc/elasticsearch/elasticsearch.yml配置文件中进行的。

使用如下命令打开该配置文件:sudo nano /etc/elasticsearch/elasticsearch.yml

下图中是elasticsearch数据和日志的默认路径:

然后定位到配置文件中的network部分。network配置非常简单,如果你要使用默认端口的话,port不用做任何修改。但是如果要更改端口的话,取消掉注释,修改http.port的参数。

network.bind_host: 0.0.0.0这个配置将启用Elasticsearch服务的远程访问,可以帮助我们后续将beats(采集程序)连接到ELK Stack。

一旦修改了配置,我们需要重启Elasticsearch服务,命令如下:

sudo systemctl restart elasticsearch

声明:由于安全问题,不建议将network.bind_host设置为0.0.0.0,特别是在生产环境中。文中的配置只是在原型设计阶段。

B. Kibana配置

关于Kibana的所有配置,都是在/etc/kibana/kibana.yml这个配置文件中。使用如下命令打开:

sudo nano /etc/kibana/kibana.yml

要想配置Kibana可远程访问,我们必须配置:server.host: 0.0.0.0。端口的话一般不会与其他服务重复,所以直接默认5601端口就行。现在重启Kibana:sudo systemctl restart kibana

现在,可以在浏览器访问Kibana了:http://服务器ip:5601

进入Kibana的页面后,享受它令人惊讶的用户体验,并尝试一些仪表盘样例和数据。

声明:因为安全问题,不建议将Kibana的server.host设置为0.0.0.0,特别是在生产环境中。文中的配置只是在原型设计阶段。

C. Logstash配置

现在我们来解决logstash的配置问题:

sudo cat /etc/logstash/logstash-sample.conf
该配置文件包含了Logstash的必要配置。因此,我们需要将它复制到目录/etc/logstash/conf.d/下,并将其名称改为logstash.conf。

不要忘记重启服务:sudo systemctl restart logstash

D. 服务检查

正确配置好logstash、kibana 和elasticsearch 的配置文件后,可以启动服务并检查它们:

你可以检查这些服务的端口监听,是tcp6还是tcp这都没有关系,不影响服务。

Kibana : 5601

Elasticsearch : 9200

Logstash : 5044

2.2 Beats配置和数据传输

2.2.1 Winlogbeat的下载和安装

下载链接:https://www.elastic.co/fr/downloads/beats/winlogbeat

安装方法:https://www.elastic.co/guide/en/beats/winlogbeat/current/winlogbeat-installation.html

2.2.2 Winlogbeat的配置

在我们的项目中,我们使用winlogbeat.yml的如下配置:

理解winlogbeat.event_logs:

winlogbeat.yml中的winlogbeat部分指定了所有针对Winlogbeat的选项。最重要的是,它包含了要监控的事件日志列表。我们可以看到Sysmon模块是默认启用的。要添加更多的模块,你可以参考如下链接:

https://www.elastic.co/guide/en/beats/winlogbeat/current/configuration-winlogbeat-options.html

理解分片数(shards)和副本数(replicas):

  • index.number_of_shards :一个索引可能会存储大量数据,甚至会超过单节点的硬件配置。为了解决这个问题,Elasticsearch提供了将索引细分为多个“碎片”的功能(就是分片),每个“碎片”都保存在不同的机器上。
  • index.number_of_replicas :是Elasticsearch要存储的副本数量。当有个组网多机器运行Elasticsearch时,该功能很有用。如果一台机器挂掉了,数据不会丢失。

Output :

对于Elasticsearch output和Logstash output,在启动服务或检查配置时必须只启用其中一个

Processors(处理器)和logging(日志)的配置:

下图包含winlogbeat使用的默认processors和一个logging设置的样例:

Index Lifecycle Managment ( ILM ) -索引生命周期管理:

最后,我们不得不禁用ILM(索引生命周期管理)。ILM是集成在ELK stack Basic版本中的一个免费的x-pack功能,但是在ELK oss版本里不是。你可以根据机器性能、服务韧性和是否保留的需求,使用ILM来自动管理索引。例如:每天、每周或每月创建一个新的索引,并对之前的索引进行归档。当一个索引达到一定大小时,运行一个新的索引,或者删除旧的索引以执行数据保留的标准。

ILM功能在ELK stack basic版本中是默认启用的。但是当你的beats没有直接到Elasticsearch时,它需要进一步的配置。ILM功能超出了本文的范围,所以我们将它禁用。

2.2.3 Sysmon配置,并与MITRE ATT&CK整合

我们将在加载索引模板之前设定新的Sysmon配置,以确保新的Sysmon字段和配置在ELK stack中能被正确加载。

System Monitor (Sysmon)是一个Windows系统服务和设备驱动程序,一旦安装在系统上,在系统重启时仍然驻留。以监视和记录系统活动,记录到Windows事件日志中。它提供有关进程创建、网络连接和文件创建时间变更的详细信息。通过收集事件,它可以通过Windows Event Collection或SIEM代理生成并随后对其进行分析,从而识别恶意或异常活动,并了解入侵者或恶意软件如何在网络上运行。

MITRE ATT&CK是一个全球可访问的基于真实世界观察的对抗战术和技术的知识库。 ATT&CK知识库被用做在私人部门、政府和网络安全产品和服务社区开发特定威胁模型和方法的基础。

  • Sysmon下载:

https://docs.microsoft.com/en-us/sysinternals/downloads/sysmon

  • 下载包含MITRE ATT&CK的sysmon的xml配置:

参考链接:https://raw.githubusercontent.com/ion-storm/sysmon-config/master/sysmonconfig-export.xml

  • 使用配置文件安装Sysmon:

sysmon64 -accepteula -i sysmonconfig-export.xml

  • 检查当前配置:

sysmon64 –c

2.2.4 设置索引模板、仪表盘和索引格式

A. 加载索引模板

索引模板允许你定义模板,这些模板将在创建新索引的时候自动应用。模板包括设置和映射,以及一个简单的模式模板,用于控制模板是否应应用于新索引中。

加载索引模板需要连接到Elasticsearch。如果输出的不是Elasticsearch,则必须手动加载模板。在我们的例子中,winlogbeat不会直接连接到Elasticsearch,因此我们必须在启动服务之前手动设置索引模板。

需要暂时禁用Logstash输出,并启用Elasticsearch输出。

https://www.elastic.co/guide/en/beats/winlogbeat/current/winlogbeat-template.html

B. 加载仪表盘和索引格式

https://www.elastic.co/guide/en/beats/winlogbeat/current/load-kibana-dashboards.html

2.2.5 更改输出(output)

索引模板、索引模式和仪表盘加载正确后,可以在Kibana界面查看。
加载成功后如下图所示:

现在,在打开配置文件后,我们将通过注释来禁用Elasticsearch的输出,然后我们将通过删除注释来启用Logstash的输出。

2.2.6 将数据传输到ELK stack

现在我们可以通过PowerShell或者使用services.msc(Windows服务)来启动winlogbeat和sysmon服务,并在Kibana界面查看数据。

当启动winlogbeat后,ELK Stack将使用Logstash中的配置来创建索引,从而实现数据的存储。

winlogbeat的默认dashboard(仪表盘):

在Discover下,我们可以使用新配置(MITRE引用)检查sysmon日志:

其他的beats无论在配置还是安装上都与winlogbeat差别不大。我们使用的beats有:

  • Winlogbeat
  • Filebeat
  • Packetbeat
  • Metricbeat

我们要提到的是,某些beats,如metricbeat或filebeat有几个模块可以使用。
例如,我们使用filebeat中的system模块来监控ubuntu机器上的ssh认证、sudo命令,我们使用Suricata模块来收集Suricata IDS的日志。

2.2.7 启用Suricata模块

我们使用这个命令来启用filebeat中的Suricata模块:

sudo filebeat modules enable Suricata

要查看filebeat中可用的模块,可以查看如下目录:

/etc/filebeat/modules.d/

要查看正在使用的模块,使用如下命令:

filebeat modules list

在我们设备上安装Suricata的方法,参照如下链接:

https://www.alibabacloud.com/blog/594941

正常完成安装的话,你应该得到一个和这个比较相似的dashboard。如果你没有得到完全一样的页面也不用担心,我们会在接下来的文章中介绍如何处理dashboard。

也可以将Suricata接口集成到ELK stack中,可以参考下面的链接:
https://www.howtoforge.com/tutorial/suricata-with-elk-and-web-front-ends-on-ubuntu-bionic-beaver-1804-lts/

0x03 Open Distro(AWS开源的Elasticsearch发行版)演示

Open Distro可用的插件包括:

  • Security(高级安全性)
  • Alerting(事件监控和通知)
  • SQL(SQL查询功能)
  • Index State Management(索引状态管理)
  • Performance Analyzer(性能分析)

在这个项目中,我们只安装Security和Alerting两个插件。

3.1 Alerting(事件监控和通知)功能

Open Distro for Elasticsearch允许我们监控数据,并给相关人员自动发送告警信息。配置和管理起来是很简单的,并且它拥有强大的api去调用Kibana的接口。

Alerting功能允许我们配置规则,当数据中一些我们关注的内容发生更改时,可以收到通知。任何可以查询的东西,都可以配置Alerting。当一个或多个Elasticsearch索引的数据满足特定条件时,Alerting功能将会通知您。

下面的链接提供了Open Distro的历史版本(在我们本次案例中,使用的是1.6.0版本):

https://opendistro.github.io/for-elasticsearch-docs/version-history/

要安装Open Distro的 Alerting功能,得先管理elasticsearch和kibana的插件:

插件管理位于:

  • /usr/share/elasticsearch : Elasticsearch
  • /usr/share/kibana : Kibana

3.1.1 为Elasticsearch安装Alerting 插件:

cd /usr/share/elasticsearch
sudo bin/elasticsearch-plugin install https://d3g5vo6xdbdb9a.cloudfront.net/downloads/elasticsearch-plugins/opendistro-sql/opendistro_sql-1.6.0.0.zip

3.1.2 为Kibana安装相应的Alerting 插件:

cd /usr/share/kibana
sudo bin/kibana-plugin install — allow-root https://d3g5vo6xdbdb9a.cloudfront.net/downloads/kibana-plugins/opendistro-alerting/opendistro-alerting-1.6.0.0.zip

3.1.3 要列出或删除插件,所用命令如下:

Kibana:

sudo bin/kibana-plugin list
sudo bin/kibana-plugin remove <plugin-name>

Elasticsearch:

sudo bin/elasticsearch-plugin list
sudo bin/elasticsearch-plugin remove <plugin-name>

3.1.4 现在应重启Kibana和Elasticsearch:

systemctl restart kibana elasticsearch

注意:安装完成后,移除或更新Kibana/Elasticsearch的插件后,大约需要几分钟才能正常重启成功,而且Kibana服务器会一直响应(”kibana is not ready yet“)。我们可以使用top命令实时查看kibana和elasticsearch进程。

3.1.5 现在可以在kibana界面中查看插件:

3.1.6 Alerting插件的使用:

3.1.6.1 创建一个Slack的Webhook Url

Slack是一个通讯工具——”一个用于传递消息、工具和文件的地方“。这意味着Slack是一个即时通讯系统,其中包含许多其他工作场景工具的附加功能。

Incoming Webhooks 是将消息从应用程序发布到 Slack 的一种简单方法。创建一个Incoming Webhooks,会给你一个独特的URL,您可以向其发送包含消息文本和一些选项的JSON payload。您可以使用Incoming Webhooks的所有常用格式布局块 来使消息更突出。

  • 第一步先创建个账号(slack.com):

  • 如果你是新用户,选择第二个选项(”you don’t belong to any workspace“):

  • 在邮箱中获取刚刚收到的验证码并创建新的工作区(workspace):

  • 试着按照步骤操作直到回到主页,进入应用程序搜索”Incoming Webhook“,点击添加:

  • 点击”add to Slack“:

  • 选择一个接收消息的频道(例如test),然后单击”add integration“:

  • 向下滚动直到看到你的Webhook URL(保存,我们后续会使用到):

  • 然后到Kibana -> Alerting -> Destination(目标),点击”add destination(添加目标)“:

  • 选择Destination(目标)名字,选择Slack,然后把Webhook Url粘贴过来,点击”create(创建)“:

3.1.6.2 创建Alerting并将其发送到Slack
  • 点击进入Monitoring,点击创建Monitor:

  • 配置:可以使用图形化配置或extraction query配置:

下面是图形化配置的一个举例(Event ID: 4624的意思是”某个账户登录成功“):

  • 检查Monitor Schedule(监控计划),然后点击创建:

现在你需要创建一个trigger(触发器),例如:

然后转到通知,并选择创建的目标(destination),然后点击创建:

现在,就可以在Kibana的Alerting界面中关注告警,并且每个告警将会发送到你的Slack频道:

转到你的Slack频道(本教程中是#test频道),然后等待告警通知:

3.2 Security(高级安全性)功能

这个插件为管理用户、角色、映射、角色组和访客提供了一个界面。

3.2.1 安装Security插件

之所以选择这个插件是因为Kibana在基础版本中未提供身份认证的面板。因此,为了确保接口的安全性,我们使用open distro提供的免费的身份认证面板。

Security插件的安装可以参照与安装Alerting插件相同的步骤(3.1.1-3.1.4)进行。只需要更改插件安装的url即可:

Kibana:

sudo bin/kibana-plugin install — allow-root https://d3g5vo6xdbdb9a.cloudfront.net/downloads/kibana-plugins/opendistro-security/opendistro_security_kibana_plugin-1.6.0.0.zip

Elasticsearch:

sudo bin/elasticsearch-plugin install https://d3g5vo6xdbdb9a.cloudfront.net/downloads/elasticsearch-plugins/opendistro-security/opendistro_security-1.6.0.0.zip

安装过程可能有个警告信息:直接输入”y“

  • 安装完成Security插件后,可以运行如下命令,使用默认证书快速开始(否则,你必须手动配置它并运行securityadmin.sh):
cd /usr/share/elasticsearch/plugins/opendistro_security/tools/
# 修改权限
chmod +x install_demo_configuration.sh
# 运行
./install_demo_configuration.sh

安装过程中,所有的都直接输入”y“,默认用户名密码是(admin/admin):

/etc/elasticsearch/elasticsearch.yml配置文件中,Open Distro的Security插件会添加另外一个配置:

3.2.2 更改elasticsearch、logstash和kibana配置

在本例中,我们为elasticsearch配置一个用户名密码和SSL证书(要提到的是,本部分和后面对于证书的验证不属于我们本次系列文章的范围)。

Elasticsearch:

禁用elasticsearch的x-pack安全功能:当你重启elastic的时候可能会得到一个报错,因为xpack安全功能在ELK Stack基础版本中是默认启用的,所以在重启之前,必须在/etc/elasticsearch/elasticsearch.yml中禁用它。

Kibana

禁用Kibana的x-pack安全功能:同样,对于Kibana,我们必须禁用xpack安全功能,并忽略/etc/kibana/kibana.yml中的ssl验证。

注意:确保协议是https,而不是http:

Logstash:

由于我们的beats没有直接连接到elasticsearch,而是连接到了Logstash。所以我们不必管理beats或重新配置他们,我们只需要配置logstash的配置文件。

同样的,要确保协议是https,而不是http。

sudo nano /etc/logstash/conf.d/logstash.conf

注意:如果你正在重新配置beats或者设置另外一个beat的时候,你的elasticsearch已经安装了用户名,密码和SSL证书的security插件,你可以将此配置添加到你的beats中,使其可以访问。确保你的协议是https而不是http。

3.2.3 重启所有服务

systemctl restart elasticsearch
systemctl restart logtash
systemctl restart kibana

如上文所述,可能需要几分钟才能正确重启,可以使用top命令实时检查进程。同时,你的kibana服务会响应”kibana is not ready yet“。

现在,你的ELK stack使用新的安全凭证,已经能正常连接了。

可以使用Elasticsearch URL来检查(http不起作用,必须使用https):

https://your_elasticsearch_ip:9200

也可以在Kibana中进行检查:

在这里,你可以创建用户、分配角色和权限:

这将帮助你根据角色、操作和权限来管理和组织SOC团队。

下图是默认情况下定义的角色和内部用户数据:

0x04 实现仪表盘和ELK SIEM的可视化

本节内容将包含如下几个部分:

  • ELK SIEM演示

  • 默认的仪表盘

  • 创建你的第一个仪表盘

4.1 ELK SIEM演示

ELK SIEM最近是在2019年6月25日的7.2版本中添加到了elk Stack中。这是一个由elastic.co创建的SIEM解决方案,旨在让安全分析师的工作变得更加轻松。

在我们的解决方案中,我们决定创建我们自己的SIEM(安全信息和事件管理)并定制我们自己的仪表盘。但是,首先应该先了解了解ELK SIEM。

4.1.1 主机事件部分

首先,我们将介绍主机部分。主机部分能够看到终端本身内部产生的事件。

点击查看主机后,应该会得到图中的类似信息(如上图所示)。很直观能看出,我们有三台主机连接到该机器:

1台Windows10和2台Ubuntu Server 18.04。

上图有几个可视化的图表,每一个显示的都是不同类型的事件。例如,中间的那个正在显示有关三台机器的登录数据。我们图中测试的数据量已经测试了5天,所以包含了很多成功和失败的登陆事件(你在自己实验的时候,可能日志量比较少,这个不用担心)。

4.1.2 网络事件部分

转到网络部分,你应该能得到下图中类似的信息。这部分将使你能洞悉网络中发生的一切,从HTTP/TLS流量到DNS流量,以及其他外部的事件告警。

4.2 默认的仪表盘

为了便利,elastic.co的开发人员已为ELK正式支持的每个beat都创建了一个默认仪表板。在这里,以Packetbeat的默认仪表盘为例。

如果你按照0x02文章中的步骤正确操作了,应该有设置好的仪表盘了。那么现在开始吧:

在Kibana左侧tab上选择“dashboard”,从上往下数第三个。在搜索框中输入beat的名称。如果beat有多个模块,将会创建其中每一个单独的仪表盘。每个仪表盘数据显示非空与否取决是否有数据。选择一个带有模块名称的模块。下图是PacketBeat的仪表盘:

这是网络流量的仪表盘。它将通知我们有关传入和传出数据包的信息、IP来源和目的地、以及对安全运营中心分析人员有用的许多信息。

4.3 创建你的第一个仪表盘

4.3.1 几个基本概念

A-仪表盘类型:

可以用来可视化数据的各种可视化类型。例如:

条形图、地图、Markdown小部件、饼状图

B- KQL (Kibana Query Language):

是一种友好的方式用户在kibana中搜索数据的语言。它可以用来搜索检查数据是否存在,以及许多其他有用的功能。要了解KQL的其他更多信息,可以查看如下链接:

https://www.elastic.co/guide/zh-CN/kibana/current/kuery-query.html

下图是使用Windows 10专业版系统搜索主机的查询示例:

C- Filters(过滤器/筛选器):

通过此功能,可以筛选某些参数,例如主机名,事件的代码或ID等。Filters将在调查阶段的线索搜索上,极大的减少花费的时间和精力。

D-Visulaization(可视化):

我们将为MITRE ATT&CK创建一个可视化。

点击:Dashboard → Create new dashboard→create new →Pie dashboard,将类型设置为索引(index)模式,选择你的beat名字,然后回车。现在,应该能看到一个绿色的圈。

在左侧的Buckets可以看到:

  • Split slices:根据数据差异,会把圈分割成不同部分;
  • Split Chart:会在这个圈的旁边创建另外一个圈。

我们使用split slices。

我们将根据我们选择的term(值)来可视化我们的数据,在本案例中,term(值)将与MITRE ATT&CK有关。

在Winlogbeat中,将为我们提供这些信息的文件被称为:winlog.event_data.RuleName

我们将按顺序设置计数指标,根据事件的出现次数来排序。

启用Group other values in the separate bucket(就能显示剩余的值到一个单独的bucket里)。如果你选择的terms有很多来自beat的不同值,这将很容易实现。它可以帮助您将其他数据整体可视化,这将使您了解其余事件的百分比。

现在我们完成了data选项的配置,现在到options选项。

应该了解以下几点:

  • 移除圆圈形状以在可视化中形成一个完整的圆形;
  • 选择你喜欢的位置摆放。在本例中,我们在右侧显示;
  • 设置“ show values”,以使值显示在图形旁边,以便于阅读,其余的保持为默认值。

可以Truncate (截断)选择你想从事件中显示多少数据:设置你希望展示的开始时间,然后点击蓝色区域。

你应该得到像下图这样的图形:

还可以在可视化中添加过滤器,以过滤你想检查的某些主机或你认为对您的目标有用的任何参数。可视化将只显示与过滤器内的规则相匹配的数据。在本例中,我们将只显示来自win10主机的MITRE ATT&CK数据。

4.3.2 创建第一个仪表盘

仪表盘是许多可视化的集合,你的仪表盘应该清晰易懂,并带有有用的确定性数据。这是我们从零开始为winlogbeat创建的仪表盘示例:

如果你需要了解kibana可视化更多的详细内容,建议查看官方文档:

https://www.elastic.co/guide/zh/kibana/current/tutorial-visualizing.html

......未完待续

BY:先知论坛

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年12月31日15:35:20
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   SOCasS(把SOC当作一种服务)的架构部署和技术漫谈-上 - raulhttps://cn-sec.com/archives/712033.html

发表评论

匿名网友 填写信息