君哥有话说
灵活、易于定制化是ArcSight的特点,之前介绍过ESM的Use Case定制,可以对关联引擎灵活性有所了解, ArcSight在日志采集、规范化层除了厂家提供的SmartConnector外,还对不支持的日志提供开发工具FlexConnector来实现日志采集、规范,日志获取的方式支持数据库、文本文件、Syslog、SNMP、REST API,日志记录支持单行、多行,日志内容支持文本、XML、JSON。
FlexConnector的开发流程和标准的软件开发差不多,经历需求调研分析、编码、测试、上线、后续维护几个阶段。以下就以采集HAProxy的日志为例介绍FlexConnector的开发过程。
1.1 需求分析
需求很简单,就是需要采集HAProxy日志用于后续的UseCase分析。
首先基于当前生产环境的HAProxy版本去官网查看HAProxy的日志配置方法及获取方式,发现HAProxy本身可以记录HTTP和TCP访问日志且可通过Syslog对外发送。
搭建一个与生产环境相同的HAProxy环境:
-
一来可以获取日志样例供后续开发测试
-
二来确定配置日志及Syslog的方法,形成相关的配置手册
查看HAProxy的日志内容,根据其格式确定采用的FlexConnector类型。
HAProxy的日志里除了自身的一些服务启停、后端服务状态项绝大多数都是代理的访问日志,HTTP类型的日志非常类似Apache Httpd的访问日志,TCP类型的日志内容比较简单,因此采用“正则表达式读取文件”的FlexConnector。
1.2 开发编码
ArcSight的Connector提供了一个正则表达式开发工具,此工具可以根据开发者写的正则表达式实时显示匹配的日志内容。
图1:正则表达式开发工具
使用上述工具可以实现日志的内容拆分及映射,主要方法如下:
1.分析日志样本内容编写主正则表达式匹配所有的日志内容。
经过查看,日志样本的主要分类样例共5类,样例如下:(这里需要说明一下我们是通过syslog的方式采集haproxy的日志,由于syslog的报文默认写入的Syslog Sender是主机名,除非企业对服务器主机名定义很规范,或有正确的DNS解析,否则仅根据主机名很难确定设备的信息,因此我们是通过rsyslog的配置将Haproxy的IP地址替换主机名,方便后续分析。)
Dec 10 19:43:55 1.1.1.1 haproxy[2564]: Proxy main started.
Dec 10 19:43:55 1.1.1.1 haproxy[2532]: Stopping backend app in 0 ms.
Dec 10 19:44:07 1.1.1.1 haproxy[2583]: backend static has no serveravailable!
Dec 10 19:47:32 1.1.1.1 haproxy[2693]: httplog 192.168.148.1 53229CentOS69 192.168.148.110 80 http-in 192.168.148.150 80 backend_servers192.168.148.150 59452 [10/Dec/2017:19:47:32.461] "GET / HTTP/1.1""" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36" 200 514 269"" ""
Dec 10 20:10:06 192.168.148.150 haproxy[2843]: tcplog 192.168.148.153872 CentOS69 192.168.148.110 80 backend_servers 192.168.148.150 39502[10/Dec/2017:20:09:01.492] 9252 3187
2.需要后续Use Case分析的日志只需httplog和tcplog分类,因此编写解析器只采集这两类日志,相关的语法如下:
line.include.regex=\S+\s+\d+\s+\d+:\d+:\d+\s+\d+\.\d+\.\d+\.\d+\s+haproxy\[[^\]]+\]:\s+(httplog|tcplog)\s+.*
3.由于httplog和tcplog的日志内容及字段不同,但其还是有相同点的,下面样例中图上黄色的部分应该就是风格相同的部分:
Dec 10 19:47:321.1.1.1 haproxy[2693]: httplog 192.168.148.1 53229CentOS69 192.168.148.110 80 http-in 192.168.148.150 80 backend_servers192.168.148.150 59452 [10/Dec/2017:19:47:32.461] "GET / HTTP/1.1""" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36" 200 514 269"" ""
Dec 10 20:10:06192.168.148.150 haproxy[2843]: tcplog 192.168.148.153872 CentOS69 192.168.148.110 80 backend_servers 192.168.148.150 39502[10/Dec/2017:20:09:01.492] 9252 3187
4.因此先编写主解析正则表达式,相关的语法如下:
regex=(\S+\s+\d+\s+\d+:\d+:\d+)\s+(\d+\.\d+\.\d+\.\d+)\s+haproxy\[([^\]]+)\]:\s+(\S+)\s+(.*)
5.上述解析器会从日志的前半段中拆出5个字段:Syslog发送时间、Syslog发送者IP地址、haproxy的pid、日志类型(httplog或tcplog)、日志的后半段信息。
6.由于httplog或tcplog各自的日志细节风格是相同的,因此可以通过submessage语法分别对httplog和tcplog的详细日志内容进行拆分。submessage语法可以根据主解析的某个字段为索引再对另一个字段编写正则表达式进行字段拆分,由于日志内容比较长,相应的解析语句也会比较长,这里就不再贴出来,完整的解析文件请用本文编辑器查看本文最后的附件。
7.上述通过正则表达式拆解出的字段需要映射到ArcSight的数据库字段中,由于ArcSight的数据库字段分17类400个以上,一开始做映射的时候的确有些不知所措,这只能通过多看、多做逐渐熟悉。
8.开发者还应该根据经验来判断这些日志可以用于哪些Use Case,例如HTTPLog可以应用在后续基于URL判断的Use Case,为了减少ESM的Use Case编写难度并提供规则处理效率,建议在日志采集时就对相关的HTTP请求中的Request URL及Referer URL进行细化拆分,同时将相关的请求文件的文件名风格、后缀在采集层就做好归类,例如纯数字文件名、重复字符文件名、URL中包含多个空格Unicode、URL中包含Case When、URL中包含Sleep + 数字、URL中包含--符号。
9.上述日志映射开发完毕后,需要基于日志的特点定义分类文件,由于HTTPLog和Apache Httpd的访问日志很类似,可以基于HTTP的返回码定义分类文件,日志内容的分类信息是ArcSight的一个重要特性,它会给日志的种类、行为、结果等归类,后续的Use Case可以基于这个分类信息编写,这样可以使Use Case与具体设备日志解耦,例如:所有的登录认证行为的行为分类为/Authentication/Verify。
1.3 测试
最好有个ESM的测试/开发环境,安装、配置好相应的FlexConnector。
首先验证能否完整、正确地解析日志,相关的解析器和分类文件均有效。
其次比对解析的日志条数与样例日志的条数是否相等。
如果上述测试均正常后可以开始实时读取HAProxy的测试环境产生的日志,重点检查有没有Unparsed Event出现,采集器的日志(logsagent.log)中有无错误出现,日志循环的时候采集有无问题。
1.4 上线
按照企业内部的配置变更流程上线系统,重点是要将目标日志源涉及的配置变更与设备管理员进行沟通,确保不会对生产系统产生影响。
1.5 后续维护
定时检查ESM中有无出现该日志源相关的UnparsedEvent,如果目标日志源有版本更新可能会涉及日志源格式变化导致的开发变更工作。
1.6 附件
相关文档:《ArcSightFlexConnector的开发者指南》,下载地址:
https://community.softwaregrp.com/dcvta86296/attachments/dcvta86296/connector-documentation/322/5/FlexConn_DevGuide.pdf
相关文档:《ArcSightFlexconnector Training V2 with More About Flex》,下载地址:
https://community.softwaregrp.com/dcvta86296/attachments/dcvta86296/arcsight-discussions/2209/1/ArcSight Flexconnector Training V2.pdf
(完)
往期文章推荐
ArcSight实战系列:
Syslog类型Connector安装配置-ArcSight实战系列之四
日志源有效性监控UseCase-ArcSight实战系列之五
ArcSight UseCase常见类型简介-ArcSight实战系列之六
时间有限?看此篇
----------------------------------------------
企业安全建设,离不开“守望相助”。金融业企业安全建设微信群,在历次安全事件、安全应急中有大量实况直播,处置措施及时性、有效性,让我自己也获益良多。有兴趣加入的企业安全负责人,请关注微信公众号“君哥的体历”,后台留言,微信号+公司名称,验证身份后入群。
附注:
-
聂君,信息安全从业人员,十余年金融行业信息安全从业经历,默默无闻。好读书,不求甚解。性格开朗,爱好足球。
-
本订阅号文章是个人对工作生活的一些体验和经历分享,站在不同角度和立场解读会有偏差,见仁见智,不求正确统一,但求真、善、美。
长按识别二维码,和我交流
本文始发于微信公众号(君哥的体历):FlexConnector开发-ArcSight实战系列之九(大结局)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论