4

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

 3 years ago
source link: https://xz.aliyun.com/t/9564
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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#load-template-manually

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

......未完待续


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK