0×01 概要

现在各个公司都有自己的SOC安全日志中心,有的是自己搭建的,有的是买厂商的,更多的情况是,各种混合类型组织起来的。这些日志来不同的数据源。使用设备可能提供一整套的完备的方案,有自己的流量监听与安全日志中心,因为成本原因,所有地方都部署商业产品成本很高,有可能就会创建本地化定制SOC系统,商业系统也很难理想的去监听分析非常本地化业务的日志,处理起来力不从心,数据不通用,商用产品很难快速构建安全策略。开源和自建系统可高度定制化,并且能与商业产品有机的结合的话,可以发挥更的大效用。

0×02 需求分析

抛出问题,我们首先要收集各种日志,监听流量,让设备去发现流量中的威胁,我们来汇总报告数据,结合我们收集来的所有数据,去溯源,去发现更多的历史痕迹。内网安全和外网不一样的地方是,内网有各种日志和设备,采用什么方式取,什么方式存,用什么工具,可能都不统一。但总来说,我们主要的手段监听危险行为:1.分析流量;2.分析日志。 像tenable这种工具,就是提供了全家桶解决方案。 她会把流量中各种协议解析出来配合自己的策略报警,还提供了与外部系统交互的方式,syslog和rest api都是典型数据交换手段,很多的IDS,都提供类似rest服务,只不过有的基于xml协议。我们就是本地化系统析的结果与厂商的分析结果相结合,发现有价值的威胁。

0×03 日志收集流程

其实我们构建自己的SOC也是从流量和日志,还有策略方面考虑, 策略的使用反向推动了工具的选择。这篇我们考虑不是如何存数据,而是我们采用何种的结构,可以从海量的日志来,取得我们想要的有用的数据,用机器和自动化的方法,代替人工甄别数据,给提高威胁发现生产性,提供一种思路。

0×04 日志种类

从大的粒度角度讲,我们的日志就是几类:

1.流量日志:典型的流量日志,比如我们网络镜像分光的流量日志,然后用snort或是pcap去监听流量中,我们核心关注的数据,如http报文,或mysql的执行sql数据。

2.设备日志:厂商的设备,一般会去监听流量,通过监听流量,存储日志再分析,进行威胁报告,这些高中低威的威胁日志数据就是我们需要的,也是我们要重点过滤的。这个有一个误报的问题,如果设备知道自己是误报,就不报了,就不用我们过滤了,但误报也是正常,那有不误报的设备,如果真没用的,可以看看是不是设备断电了。

3.服务日志:比如云的HTTP的日志,路由器的日志,邮件服务日志,这种日志我们也可以分析收集,分析服务中可能存在的安全问题。

4.agent日志:agent的日志是大量的,比如zabbix这种模式收集了大量这种日志。(图上没画)

0×05 日志处理相关工具链

搭建这些服务器,有很多都通用的工具,大家可以按方抓药,很多都是开源软件,主要的成本的是实践的时间成本。

流量监听类:

dpdk:dpdk 为 Intel 处理器架构下用户空间高效的数据包处理提供了库函数和驱动的支持,它不同于 Linux 系统以通用性设计为目的,而是专注于网络应用中数据包的高性能处理。

也就是 dpdk 绕过了 Linux 内核协议栈对数据包的处理过程,在用户空间实现了一套数据平面来进行数据包的收发与处理。在内核看来,dpdk 就是一个普通的用户态进程,它的编译、连接和加载方式和普通程序没有什么两样。

netmap:一个高效的收发报文的 I/O 框架,已经集成在 FreeBSD 的内部了。 当然,也可以在 Linux 下编译使用 。

pcap:流量抓包基础工具,tcpdump等流理工具的底层包。

流量复制类:

tcpycopy:流量监听和流量重放工具,可以实时,或是将记录下来的pcap文件重放。

http-miroor:http的镜像,是nginx的插件,可以将nginx,openresty流量,并发镜像一份。

开源IDS:

suricata:Suricata是一个高性能的网络入侵检测(IDS)、入侵防御(IPS)和网络安全监控的多线程引擎,内置支持IPv6。可加载snort规则和签名,支持barnyard2。使用pcap提供的接口进行抓包,运行前电脑必须安装有pcap才可以使用。

snort:在1998年,Marty Roesch先生用C语言开发了开放源代码(Open Source)的入侵检测系统Snort.直至今天,Snort已发展成为一个多平台(Multi-Platform),实时(Real-Time)流量分析,网络IP数据包(Pocket)记录等特性的强大的网络入侵检测/防御系统(Network Intrusion Detection/Prevention System),即NIDS/NIPS.Snort符合通用公共许可(GPL——GNU General Pubic License),在网上可以通过免费下载获得Snort,并且只需要几分钟就可以安装并开始使用它。snort基于libpcap。

日志中心SOC:

graylog:Graylog 是一个简单易用、功能较全面的日志管理工具,相比 ELK 组合, 优点:部署维护简单,查询语法简单易懂,内置简单的告警,可以将搜索结果导出为 json,提供简单的聚合统计功能,UI 比较友好。

splunk:Splunk 是机器数据的引擎。使用 Splunk 可收集、索引和利用所有应用程序、服务器和设备生成的快速移动型计算机数据 。 使用 Splunking 处理计算机数据,可让您在几分钟内解决问题和调查安全事件。监视您的端对端基础结构,避免服务性能降低或中断。以较低成本满足合规性要求。关联并分析跨越多个系统的复杂事件。获取新层次的运营可见性以及 IT 和业务智能。

服务日志:企业内部的服务日志太多了,邮件、网关、vpn、云日志,不一一介绍。

所以这些工作的第一步,就是将这些数据都放到合适的容器了里,数据库还是很多的,这里特别要说的是clickhouse,clickhouse是用来分析用户行为的,用于安全领域也是可以有的。

ElasticSearch:ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

ClickHouse:Yandex在2016年6月15日开源了一个数据分析的数据库,名字叫做ClickHouse,这对保守俄罗斯人来说是个特大事。更让人惊讶的是,这个列式存储数据库的跑分要超过很多流行的商业MPP数据库软件,例如Vertica。如果你没有听过Vertica,那你一定听过 Michael Stonebraker,2014年图灵奖的获得者,PostgreSQL和Ingres发明者(Sybase和SQL Server都是继承 Ingres而来的), Paradigm4和SciDB的创办者。Michael Stonebraker于2005年创办Vertica公司,后来该公司被HP收购,HP Vertica成为MPP列式存储商业数据库的高性能代表,Facebook就购买了Vertica数据用于用户行为分析。

mysql:开源关系型数据库,这个大家如果感到陌生,可以google一下。

日志收集工具:

nxlog:nxlog 是用 C 语言写的一个开源日志收集处理软件,它是一个模块化、多线程、高性能的日志管理解决方案,支持多平台。

logstash:Logstash 是开源的服务器端数据处理管道,能够同时 从多个来源采集数据、转换数据,然后将数据发送到您最喜欢的 “存储库” 中。(我们的存储库当然是 Elasticsearch。)

kafkacat:是一个github上的开源项目,把落地的日志文本传到kafka队列上,但比其它的类似工具的特点就是效率强大。

0×06 过滤策略

我们收集如此多的数据,其实还是想从可以覆盖的数据中,取得核心想到的数据,就要过滤威胁报警噪音中,降低误报,集中集点在高威胁预警上。

上面我们提到的数据的日志源,从威胁甄别,到日志字段存储策略都有自己方式,我们让所有的相关想要的数据都放到了我们的容器里,我们加入自己的过滤策略,得到我们想到的结果。其实有些开源日志工具已经想到了会有这种需求,所能他们在设计就实现了这个功能,我们通添加一些小的脚本在他们的系统中就可以实现数据的再过滤处理,但也只限于在他们自己的系统里,而我们的数据显然不在一个系统里,所以,最后还得我们自己来,下面图展示了大体的我们的容器使用的技术。

从”1.日志源“开始,到实际存数据的“2.容器”,就是基础数据持久层,然后我们通过实现一个“3.驱动”层来提供数据读取的可能。最后我们会把”4.过滤策略”应用到我们的数据上,通过编写算法策略来实现数据过滤和甄别,最后我们能得到什么数据呢?我们可以通过白名单和黑名单得到更准备的报警消息。 我们可以得有关行为的关联数据。我们可以建立一个数据反馈机制,沉淀威胁数据和安全策略。我们可能针对不同报警,做多重审计, 降低误报噪音,加强正确报警的识别度。

0×07 应用实例

比如说,我们已经构建了一个实际的复合性的SOC系统的雏形,我们可以取得我设备发过来的报警信息,比如,某个网段上的WEB相关的SQL注入的流量监听分析,我们如何做下一步的过滤策略呢, 如果这个设备的报警原则是针对字典的判断的,我们就可以加一个针对库判断的工具进行再次过滤,让报警的正确率更高。

有一个叫做libinjection的库,可以准确的判断中字符串中是否有注入: https://github.com/client9/libinjection工具使用简单,提供其它语言的工具驱动。支持sql注入以外的检查。使用一个python的WEB框架实现系统的效率可以,我们现在用openresty做网关很普及,有人可能会觉得整合日志和系统间的API是比较麻烦的,其实就是相对麻烦,我们为了简单一些,就封装了一些简单的SDK库,使工作高效,比如这个moonscript的库:https://github.com/shengnoah/fortress

0×08 总结

罗马城不是一天建立的,这种针对各种数据的过滤策略也是一个不断累积的过程,我们提供开放性的思考起点。更多代码在github上提供。实践应用的关键要考察对工具的驾驭能力和合理策略制定。

声明:本文来自新浪安全中心,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。