2月23日发布首篇ArcSight实战系列文章以来,距今快半年时间,共九篇文章,到今天要收尾了。天下无不散的筵席,但企业安全建设之路还很漫长......。经常收到后台留言:“君哥的文章写的接地气”,默默心里回复:文章不是本该如此吗?现在的安全圈也许有了一层浮躁浮夸风,入则态势感知、情报驱动,出则人工智能做安全,动辄讲对抗APT,其实大部分企业还没有被APT的价值吧?做安全,精力还是先放在基础安全上比较好,比如提升防病毒安装率、正常率、更新率,补丁管理落地,面向互联网侧的资产管理,应用上线的黑盒检测,有效的安全应急处理1day漏洞......,所以我的文章主要聚焦在这些“很土、接地气”的实践上。
#新书预告#由君哥和另外两位甲方金融企业工作的朋友,基于各自十余年甲方企业安全建设实践,致力于解决企业安全建设最后一公里问题,合著了
《企业信息安全建设:金融行业安全架构与技术实战》
一书,由机械工业出版社出版,将于2018年底面市发售,希望能给企业安全建设的朋友日常工作和实践中一些启发和帮助。
本书是三位甲方人员在平常繁重的工作之余,将从业十余年的一些体验和经历分享出来,
体系化的将如何在企业做安全建设的思路和实践开源,特别是已经经过实战检验的一线安全建设方案和实践,尤为难得,敬请期待。
灵活、易于定制化是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环境:
查看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出现,采集器的日志(logs\agent.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实战系列:
ArcSight简介 -ArcSight技术系列之一
实施规划和架构设计 -ArcSight实战系列之二
ESM安装配置指南 -ArcSight实战系列之三
Syslog类型Connector安装配置-ArcSight实战系列之四
日志源有效性监控UseCase-ArcSight实战系列之五