0x01 概要
在安全运营工作当中,经常需要系统日志、设备威胁事件日志、告警日志等,各种日志进行收集汇聚,具体分析,通过日志来分析威胁事件发生源头、相关联的人和资产关系,以日志数据的角度,来追究溯源威胁事件发生的过程和基本概括原貌。评估威胁事件产生危害的影响范围,关联到人与资产,采取顺藤摸瓜,将各种信息进行关联,无论是二维关系数据联系关联,还是大数据分析建模,数据的分类采集都是基础工作。
企业安全相关的各种日志数据,存放的位置、形式、大小、业务、使用人群都不同,如何根据不同业务规模的日志数据,采取相得益彰的技术形式进行合理的日志、聚合、分析、展示,就成为了一个课题,接下来,我们主要围绕这些相关的主题进行讨论分享,通过具体的日志聚合分析实践,让数据有效的关联,使其在威胁事件分析、应急事件分析响应过程中让数据起到方向性指引作用、起到探测器的作用,通过以上技术实践,让更多日志数据,有效的为企业安全运营提供更好的服务。
在实际工作当中,日志聚合分析工具种类繁多:ELK、Graylog、Spark、Clickhouse、Superset 等工具。我们以常用的日志数据使用场景为例子,结合这些工具的使用,向大家展示在实际数据工作中数据运营的情况,如何进行数据聚合分析,以提供实际的操作案例,能能直观的了解数据管理的工作流程,之后可以重复实践,不绕道走远路,着重给出日志分析工具使用的要点,快速上手掌握相关工具的使用,掌握日常日志数据实操及相关方法论。
为了方便实践,尽量避免商业系统和设备在案例中的出现,以可以方便取材的开源项目为基础,展开案例的讲解,大家可以容易的在网上取材这些软件系统,在本地完成实践练习过程。
本篇介绍入侵检测系统 Suricata 及威胁日志事件管理系统 Graylog,通过对入侵检测系统的日志进行收集,来展现日志收集处理的典型过程。
开源 IDS 系统 Suricata 与威胁事件日志管理平台 Graylog 结合,对网络环境流量进行监听与日志收集分析统计,通过 Suricata 捕获输出的日志,经过 Nxlog 日志收集工具,将相关事件日志、告警日志、HTTP 流量日志,通过 Graylog 进行日志聚合,对日志进行统计分析,分析网络环境流量中存在各种威胁事件类型,通过自定义 Suricata 的检测规则,控制入侵检测的策略,以及入侵检查系统的输出结果。
0x02 系统部署架构
2.1 开源 IDS
Suricata是一个免费、开源、成熟、快速、健壮的网络威胁检测引擎。Suricata 引擎能够进行实时入侵检测 (IDS)、内联入侵预防 (IPS)、网络安全监控 (NSM) 和离线 pcap 处理。Suricata 使用强大而广泛的规则和签名语言来检查网络流量,并提供强大的 Lua 脚本支持来检测复杂的威胁。使用标准的输入和输出格式 (如 YAML 和 JSON),使用现有的 SIEMs、Splunk、Logstash/Elasticsearch、Kibana 和其他数据库等工具进行集成将变得非常简单。Suricata 项目和代码由开放信息安全基金会 (OISF) 拥有和支持,OISF 是一个非盈利基金会,致力于确保 Suricata 作为一个开源项目的开发和持续成
功。
2.2 威胁事件管理
Graylog 是一个开源日志聚合系统,与 ElasticSearch 紧密配合并提供了对 ES 数据操作的更多支持,可以通过 Graylog 创建、管理 ElasticSearch 的索引,对索引的进群结点的分片管理,生存的时间周期管理、API 数据查询访问管理 提供了各种支持。对各种网络协议的日志收集也提了友好的支持。
Graylog 提供的这些功能,让 Graylog 对各种系统输出的日志进行收集,得心应手,日志收集的方式也多种多样,Syslog、Kafka、HTTP 的 REST API 等形工都支持。
Graylog 可以与开源威胁情报、地理位置信息集合,直接在收集日志之后,对日志数据当中 IP、域名等信息进行查询,对流量中的 IP 地理信息进行可视化显展。
2.3 威胁事件处理概要
开源 IDS 系统有很多种,比较著名的系统有 Snort、Suricata、Zeek 等,我们选用 Suricata 是因为 Suricata 有多年的发展历史,沉淀了的各种威胁检测规则,新版的 Suricata3 与 DPDK 相结合,处理大级别流量的数据分析,Suricata 支持 Lua 动态语言工具支持,可以通过 Lua 扩展对流量分析的各种实用工具。
Suricata 与 Graylog 结合的原因,是因为在 Graylog 开源社区版本对用数据的数据处理量没有上限限制,可以扩展很多的结点来扩展数据存储的空间和瞬时数据处理的并发能力。Suricata 在日志输出方面,可以将日志的输出,输出成标准的 JSON 格式,通过日志脚本收集工具,可以将日志数据推送给 Graylog 日志收集服务,Graylog 只要对应创建日志监听,就可以对 JSON 日志数据,进行实时快速的收集与对日志数据结构化和格式化。将 JSON 按 Key 和 Value 的形式进行拆分,然后保存到 ElasticSearch 数据库中,并提供一整套的查询 API 取得 Suricata 日志输出结果。
在通过 API 取得数据这种形式以外,Graylog 自身就已经支持了插件扩展,数据监控面板,数据查询前台,本地化业务查询语言,类 SQL 语言。
通过开源 IDS 与开源 SIEM 结合,用 Suricata 分析威胁产生日志,用 Graylog 收集威胁事件日志并进行管理分析,可以低成本的完成威胁事件分析检测系统,本文的重点还在于日志收集的实践,检测规则的创建为辅助说明手段。
Suricata 经过多年发展沉淀了很多有价值的威胁检测规则策略,当然误报的情况也是存在的,但可能通过手动干预修改 Surcicata 的规则,通过日志分析后,迭代式的修改规则,让系统随着时间生长更完善,社区也提供了可视化的规则管理方案,通过后台管理方式管理 Suricata 检测规则,规则编辑本文只是简单介绍。Scirius 就是一种以 Web 界面方式的 Suricata 规则管理工具,可视化 Web 操作方式进行管理 Suricata 规则管理。
回正体,对于整个威胁事件日志收集系统最主要的三个部分(重点前两个):
1. Suricata:流量的威胁事件日志输出。
2. Graylog:威胁事件日志聚合与分析。
3. Scirius:流量的威胁检测规则管理。
Scirius 的是可视化的检测规则管理工具,也可采用手动直接添加编辑修改规则文件来完成检查规则的变更。
2.4 周边工具生态
2.4.1 LUA 脚本语言控制
Lua 是一种脚本语言,语法简单但功能强大。Suricata 提供 Lua 脚本操作数据的处理机制。Suricata 配置文件中提供 Lua 脚本执行设置。系统以回调形式调用用户设置的 Lua 脚本,并将特定的数据传递给 Lua 脚本,让用户通过 Lua 脚本做更细致的数据分析工作。可以 Lua 脚本中按提定的策略去过滤数据,在脚本中通过 soker 发送 UDP 报文数据给 Graylog 创建的 Syslog 日志数据监听,由 Graylog 收集聚合日志,进行数据分析可视化展示,让整本系统功能更完整,为了更简便的收集日志,我们使用了更集成化日志收集工具 nxlog。
2.4.2 开源情报。
在威胁情报是用于威胁分析强用力工具,OTX 是一种开源威胁情报,OTX 周边提供各种威胁情报工具,Graylog 本身提供 OTX 威胁情报插件,Graylog 可在收集日志同时,将含有 IP 和域名的数据字段与威胁情报进行匹配,如果发现威胁,会产生新的字段用于描述具体的威胁情报内容供安全人员参考。
0x03 Suricata的工作模式与日志分类
Suricata 有多种日志发类内容输出,本篇重点关注 Suricata 中的几种日志数据,其中的一个重点日志数据是 HTTP 数据,如上所述,Suricata 提供给用户可执行 Lua 脚本的配置,让用户通过 Lua 脚本取得 HTTP 数据,也可以通过 NxLog 这种工具全量的收集 HTTP 日志,最后做分析,这次主要讲的是后者。
3.1 Suricata的三种运行方式:
线程、线程模块、队列,可以参三种元素进行不同的组合。
3.2 Surciata的事件日志收集
Suricata 的三种日志类型:事件日志、告警日志、 HTTP 流量日志,本文重点关注的日志是这三种类型的日志。
为了跟踪分析 Suricata 的事件日志,将 Suricata 的日志推送给 Graylog 创建的 Syslog 监听服务,将 Suricata 生成的 eve.json 日志的文件,经过 Graylog 的处理,保存到 ElasticSearch 中,Graylog 可以设置 Graylog 保存到 ES 中的日志数据的存活周期。
数据保存到 ES 数据库中后,可以任意选取一周时间范围的数据进行分析,Suricata 的 eye.json 日志格式是标准 JSON 格式,这种格式的数据,发送给 Graylog 之后,Graylog 可以实时的通过 extractor 功能按:分隔符、GROK、正则表达式等规则对数据进行格式化,按标准 JSON 形式分割 JSON 数据,按照 Key、Value 的方式解开 Json 数据,用 KEY 当作字段名,用 VALUE 作值,存到 ES 数据库的索引当中。
3.3 Graylog支持的数据监听格式
Graylog 支持多种的数据监听模式,最典型的是 UDP Syslog 监听。以外还有:TCP syslog、UDP syslog、Kafka、HTTP、NetFlow UDP 等。
3.4 Graylog支持的数据解析格式
Graylog 与一般日志采集系统不同之处,在于 Graylog 可数据收集到服产以后,在服务器端进行数据的分割,也同时提供的多种数据分割方式:GROK、正则、Lookup、分割符、等多种形式数据格式化手段,让数据的字段的切割创建非常的便利。
3.5 NxLog数据采集客户端
Suricata 支持 Syslog 格式日志输出,方便取得 Suricata 主机服务器上的日志文件,安装日志收集工具 nxlog,nxlog 可以将指定目录的下文件进行读取,然后将读取的内容以 Syslog 协议形式发送给 Syslog 监听服务,可以是 Syslog-NG,也可以是 Graylog。
Graylog 事件日志管理系统,提供了数据的转发输出功能,提供事件日志查询功能,通过数所转发功能,将 Syslog 监听接收的日志数据数据转发给 Kafka 队列,然后由消费者程序,消费数据进行分析处理, 数据量小的时候 Graylog 本身可完成实时数据分析,如果是大规模的数据,可以考虑用 Graylog 作数据中转,将数据传给 Kafaka,消费数据发送给 Clickhouse 进行更大规模的日志数据分析。
0x04 分解与聚合系统的工作流程
4.1 流量事件分析处理流程图
最终可以通过 Graylog 的 Dashboard 功能,对 Suricata 事件日志进行可视化展示,整体的工作过程简单的概括: Suricata 进行入侵检测分析产生日志,NxLog 采集 Suricata 日志并转发 Syslog 数据给 Graylog,Graylog 对日志收集格式化存 ES 并进行统计,在 Dashboard 展现。如果觉得 Graylog 本向的 Dashboard 不够理想可以用 Kibana、Granfana 这种工具来完成展示。
用一张图来描述系统架构工作流程,如下。
Suricata 流量分析过程:
4.11 流量镜像:
Suricata 可以监听聚合流量,如:网用户流量聚合,用类似交换机工作原理的网络镜像设备,将某一网络区域中集体用户的网络流量汇聚,转发给拥有多台网卡的服务,再用 Suricata 进行聚合流量的分析,单纯的本地实验,监听本地网卡的网口即可,缺点是流量有限,威胁事件与生成日志有限。
4.12