基于开源项目构建SIEM

  • A+
所属分类:安全工具

SIEM简介

Gartner的定义:安全信息和事件管理( Security Information Event Management)技术通过对来自各种事件和上下文数据源的安全事件的实时收集和历史分析来支持威胁检测和安全事件响应。它还通过分析来自这些来源的历史数据来支持合规报告和事件调查。SIEM技术的核心功能是广泛的事件收集,以及跨不同来源关联和分析事件的能力。

SIEM可以说是企业的网络安全人员的“屠龙刀”、“倚天剑”,有了SIEM很多网络安全问题可以事半功倍,也是构建企业安全网络的奠基石,它可以作为所有数据收集和分析活动的集中点,将各种设备的日志归一化。近年来比较火的SOC、SOAR均是在SIEM基础上进行开展,相信很多一定规模的企业都会部署SIEM平台,可能是商业版,也可能是开源的。

商业版SIEM特点

功能相对完善,开箱即用

厂家提供技术支持,节省人员时间和精力

很多商业化安全产品扩展性较差,不够灵活,绝大部分的网安设备都是闭源的,因此个性化需求要完全依赖厂商进行二次开发,对厂商依赖性强,需求还一定能满足。

商业版SIEM适合网络安全人员或技术能力不足,对安全又有一定投入的企业,所谓花钱买省心。

开源SIEM特点

功能相对商业版少一些

需要网络安全人员来维护,因此对运维人员有一定技术能力

开放源码,可以根据企业本身实际情况进行二次开发,满足个性化需求,灵活性较高。

开源的SIEM适用于拥有一定数量的安全人员,技术能力强,有个性化需求的企业,典型代表就是互联网企业,互联网企业比较热衷于自己研发或在开源项目上二次开发,一个是技术能力的体现,一个是商业版产品满足不了多场景需求。

商业版SIEM涉及商业授权问题,因此本次介绍开源的SIEM工具,Elastic Stack+Grafana

Elastic Stack

Elastic Stack简称ELK,官方网站:https://www.elastic.co/

ELK具有以下优势

Gartner PeerInsights评分:4.3星;

目标受众:各种规模的客户,尤其是具有DevOps功能的客户;

显著特点:开源和极其灵活的平台;

定价:开源且免费,基于具体规模和使用情况提供企业支持和商业订阅定价模式;

主要包括以下核心组件:

Elasticsearch

Elasticsearch 是一个分布式的开源搜索和分析引擎,适用于所有类型的数据,包括文本、数字、地理空间、结构化和非结构化数据。Elasticsearch 在速度和可扩展性方面都表现出色,而且还能够索引多种类型的内容,这意味着其可用于多种用例:

应用程序搜索

网站搜索

企业搜索

日志处理和分析

基础设施指标和容器监测

应用程序性能监测

地理空间数据分析和可视化

安全分析

业务分析

Logstash

Logstash 是 Elastic Stack 的核心产品之一,可用来对数据进行聚合和处理,并将数据发送到 Elasticsearch。Logstash 是一个开源的服务器端数据处理管道,允许您在将数据索引到 Elasticsearch 之前同时从多个来源采集数据,并对数据进行充实和转换。

Kibana

Kibana 是一款适用于 Elasticsearch 的数据可视化和管理工具,可以提供实时的直方图、线形图、饼状图和地图。Kibana 同时还包括诸如 Canvas 和 Elastic Maps 等高级应用程序;Canvas 允许用户基于自身数据创建定制的动态信息图表,而 Elastic Maps 则可用来对地理空间数据进行可视化。

Beats

Beats是作为开源数据托运人代理安装在服务器上,用于向Elasticsearch发送操作数据。Beats可以直接将数据发送到Elasticsearch或通过Logstash,在Logstash里你可以进一步处理和增强数据。

基于ELK数据流程图

基于开源项目构建SIEM

自建SIEM步骤

1. 采集日志

针对海量的日志,安全运维会有以下痛点

日志多且乱。各个网络设备都有日志,日志数据分散难以查找

日志难检索。日志数据量大,查询速度慢,数据不够实时

日志孤岛。日志相互独立,难以进行关联分析

日志展示难。缺乏简单易用的工具,对日志进行分析展示

基于以上痛点,日志的归一化迫在眉睫。针对安全日志,可以分为以下几个大类:

网安设备:通过syslog的形式发送到logstach上做数据的格式化和聚合,保留有用的字段。由于每个安全产品的日志字段有差异,因此需要将字段名称统一命名,用索引名称来区分数据来源,方便后期做数据检索。

应用日志:针对一些web日志,若不能通过syslog的形式发送到ELK上,可以通过filebeat对log文件进行采集。

Windows:ELK有个winlogbeat的组件,专门收集Windows上日志,采集安全日志中审核失败的事件,通过这些事件能否发现Windows 系统的服务器能否遭到暴力破解攻击。

Linux:针对Linux系统,也可以通过filebeat来采集日志,采集服务器的安全日志,以便用于网络攻击事件预防、溯源。

2. 日志存储及搜索

根据日志量的大小来规则集群的副本数量、分片数量。如何管理elasticsearch集群,这里不多展开阐述。

统一索引名称规范,针对多个数据来源,我们需要对索引做命名规范,便于管理员通过索引来识别日志源,如safe-prod-fw01-syslog

开启x-pack认证,全站HTTPS。es集群间通信、es和kibana、es和logstach通信开启证书、密码认证,kibana前端访问也需要启用HTTPS。

ELK平台提供了多种搜索方式,主要有以下几种,KQL是kibana提供的查询语言;Lucene是Apache提供的查询语言,Lucene也是elastic的搜索引擎;DSL是elastic公司在Lucene的基础上开发的一种查询语言。这三种语言的数据搜索都比较简单,零基础即可入门。

基于开源项目构建SIEM日志归一化后,可以对各个日志源做关联分析,这对于安全分析人员来说,无疑带来了很多的便利,也会提高工作效率,加快安全事件的处理时间。

基于开源项目构建SIEM在kibana上使用KQL进行日志查询

3. 日志展示

万事俱备,只欠东风,到了日志展示环节,这是最重要的一步了,除了我们安全运维人员需要借助安全日志进行威胁分析、定位、预警之外,还有就是安全可视化的工作汇报,要知道在甲方,我们要让领导看到我们的价值所在,需要将安全状况以图表的形式展示给管理层,也让管理层知道目前企业的安全状况。

kibana本身也提供数据图表的功能,但效果不是十分好,推荐使用另一款开源工具,grafana,官方网站:https://grafana.com/。

grafana 是一款采用 go 语言编写的开源应用,主要用于大规模指标数据的可视化展现,是网络架构和应用分析中最流行的时序数据展示工具。将elasticsearch数据源添加到grafana中,开始编排图表。

首先是内网安全概要页面,该页面主要是展示各个维度的攻击数量、攻击类型Top10以及信息安全新闻等。

基于开源项目构建SIEM详情页面。在这里可以对每个系统遭到攻击做细分,根据时间段查询各个应用系统的攻击类型以及攻击数量

基于开源项目构建SIEM以上是一些示例图标,可以根据企业自身情况来绘制图表

存在的问题及应对措施

在自建SIEM过程,自然遇到不少问题,踩过不少的坑,我总结了以下几个常见问题

网安设备不能通过syslog推送日志或日志类型不全。小弟就遇到过不支持推送syslog日志的设备,这让人很抓狂啊。针对这种问题,只能求助厂商了,可以做一个定制版本来支持syslog日志推动。

缺少字段说明文档。大部分syslog日志字段都可以通过英文来识别其字段类型,但有些安全级别会用数字来代替,这时候就不知道高危、中危、低危分布在哪些区间了。解决办法:1. 找厂家协助,这是最有效的途径。2. 根据设备显示的安全级别跟syslog日志中的数据对应,可以收集多个级别的日志进行比较,尽可能匹配正确。

没有告警功能。ELK免费版本是没有告警功能的,意味着安全事件发生后,会有滞后性。解决办法:购买商业版wather的告警功能,可以满足多种条件下的告警规则

总结

自建SIEM,我们投入了4个人员,花了接近半年的时间完成了从日志收集到数据呈现,从原来日志分散到日志集中管理、安全可视化,在网络安全体系建设上可以说是从0到1的过程。不足的是我们现在完成的只是真正意义上SIEM的一部分功能,尽管ELK Stack是用于集中式日志记录的功能非常强大的工具,但它不能按原样用于SIEM。缺少内置的警报功能,关联规则和缓解功能ELK Stack无法完成安全分析师所需的完整工具箱。

未来的SIEM还具备更多的技术能力,包括:实时应用关联规则、实时应用高级分析和机器学习、历史数据分析与机器学习。

基于开源项目构建SIEM

精彩推荐





基于开源项目构建SIEM
基于开源项目构建SIEM基于开源项目构建SIEM

基于开源项目构建SIEM

基于开源项目构建SIEM

基于开源项目构建SIEM

基于开源项目构建SIEM

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: