前言
很多企业使用 SIEM 来收集日志数据,并将安全事件与多类安全设备(入侵检测设备、Web应用防火墙等)日志相关联,指导安全人员进行风险处置。然而 SIEM 也存在局限,监控人员往往被淹没在海量的告警之中无从下手,原因之一就是对于威胁的告警没有处理的依据,例如缺乏经验的监控人员很难判定一条安全事件告警是扫描还是针对性攻击引起的(通常后者需要更多关注)。而通过借助于威胁情报,可为监控人员提供处理依据,也可为安全人员在进行日志分析和攻击溯源时提供有力帮助。
在本文中,来自证通股份有限公司的安全管理团队证通白帽子,将基于 Splunk,介绍威胁情报在甲方安全运维中的应用。
什么是威胁情报
根据Gartner的定义,威胁情报是指基于一定知识的证据,已经存在或正在形成的潜在威胁,比如,上下文、机制、指标、意义以及可实施的建议,利用这些,可以帮助当事人形成应对这些危险的决策。
针对攻击者的威胁情报应该包含以下要点:
系统架构
在我们公司,Splunk 主要被用来收集各类安全设备、操作系统、应用系统日志,从而实现安全监控、安全告警、数据分析的需求。
安全设备通过 Syslog 发送,其余存放于操作系统文件系统中的日志通过在客户端操作系统安装 Splunk Forwarder 实现日志收集。
初期通过日志字段提取后在 Splunk 实现了基本的报表和告警。然而正如前言所述,我们很快就被告警淹没,无论如何调整告警阈值都无法令人满意,于是开始寻找解决方案,通过一系列的选型比较,我们最终决定引入来自微步在线(ThreatBook)的第三方安全情报数据,以API形式与 Splunk 整合。
需要注意的是——威胁情报数据的用量通常是有限制的(如按月计量),因此我们部署了前置系统作为本地威胁情报库,用以缓存查询结果,还顺带实现了专供内部使用的 Web 交互查询界面,后来又顺路实现了威胁历史信息的记录,所有产生过告警的威胁都会被记录,并且可被关联搜索。如下图所示:
(威胁情报分析界面图,威胁情报数据来自微步在线ThreatBook API)
随着威胁情报数据的应用,我们逐渐信任了数据的准确度,并开始研究威胁IP自动阻断方案。由于在网络建设时并没有这个需求,因此我们的首要目标是逐个寻找网络中是否有串联设备支持通过调用 API 的方式来达到 IP 阻断的目的,最终我们在一台抗 DDoS 设备中发现了这个功能,并按照手册要求的数据格式实现了接口调用。
系统架构示意图如下:
技术要点
日志字段提取
日志字段的提取是最基础也是最重要的步骤,后续所有的工作都是基于正确的日志字段提取之上。
Splunk 提供了傻瓜式的字段提取功能,只要展开任意事件,点击“事件操作”,选择“提取字段”即可进行提取,提取完成后可自动生成正则表达式。
对于一些比较复杂的日志格式,使用 Splunk 的自动化提取可能就力不从心了(又或许你对自动生成的正则表达式嗤之以鼻),我们可以手写正则表达式,并在“设置-字段-字段提取”中保存。
图:Splunk 的字段提取
对于临时使用的需求,也可以在搜索中使用 rex 命令对事件应用正则表达式:
对于一些以键值对形式输出的日志,可通过 extract 命令进行提取,十分方便:
威胁情报库查询
威胁情报库的查询使用了 Splunk 的 lookup 命令,通过给 lookup 命令传递一个查询值从而获得对应的查询结果。
lookup 的典型使用场景之一是根据日志中的 IP 地址来查找对应的资产:由于日志中不包含资产信息,而我们又希望通过 IP 地址快速定位到相关资产信息,此时就可以建立一张资产表,上传至 Splunk,在“设置-查找”完成配置后,即可通过 lookup 命令进行搜索。
而在使用 lookup 对威胁情报进行查询时,则需要用到“外部查找”功能,原理类似于动态生成一个查找表文件。外部查找功能需要调用命令和参数,Splunk 的默认安装中提供了一个名为“dnslookup”的外部查找,可以用来参考实现自己的外部查找。
威胁情报查询外部查找脚本的部分实现代码如下:
威胁情报查询语句如下:
此处首先使用了 stats 命令统计事件数据,随后使用 lookup 命令对统计完成的数据进行威胁情报查询,这样的处理方式可避免重复的查询,降低系统和网络开销,最后将 lookup 命令查询返回的 JSON 格式数据使用 spath 命令解析。
威胁情报数据解析
对于 IP 的威胁查询接口,一个恶意的 IP 通过 API 查询返回的示例数据如下:
字段说明如下:
有了字段信息,我们需要把这个 JSON 字符串解析后再进行下一步判断。Splunk 提供了 spath 命令,可以将此前 lookup 返回的内容作为 spath 的输入,并最终输出解析完成的数据。如下图所示:
防火墙自动阻断 API 调用
防火墙的 API 调用和触发通过 Splunk 的“搜索、报表和告警”实现。通过在 Splunk 中创建定时任务,对一定时间窗口内的日志进行分析,结合威胁情报数据返回判断结果,以此为依据决定是否触发阻断脚本。
应用场景
所有的技术问题都已解决,后续的工作分为两块:利用威胁情报数据丰富现有查询结果,以及使用新的思路来实现原本无法实现的效果。
我们为此前所有与来源有关的告警都添加了威胁情报信息,监控、安全人员在第一时间即可大致评估事件的严重性。
优化模型
有了 IP 地址威胁情报数据,可以有助于评估当前面临的安全威胁的严重程度,并以可视化的方式呈现。实现方式为:以一定维度(如时间、IP 地址、类型等)聚合安全事件,对聚合的事件做基于 IP 地址的威胁情报查询,随后套用特定的模型并呈现。
自动阻断
威胁情报也为威胁程度的判断提供了依据,通过定时任务,当发现高危威胁且威胁来源 IP 地址符合预定义的条件时,即触发脚本调用防火墙 API 的方式,实现黑名单 IP 地址的网络层自动阻断。
DNS
我们也使用了威胁情报提供的域名威胁情报查询功能,在 DNS 服务器中开启了 DNS 调试日志并转发至 Splunk,对匹配的恶意域名解析请求可及时告警。同时计划实现将恶意域名自动解析到本地的功能,以最大限度避免威胁的扩散。
结语
目前我们在威胁情报的应用还处于摸索阶段,只发挥了其中一小部分的能力。从威胁情报信息的分类角度,威胁情报除了 IP 地址情报、DNS 情报,还可提供文件哈希情报等信息;从威胁情报的要素来说,我们当前只使用了攻击者身份、攻击者位置等基本信息。相信如果更全面地利用这些信息,可以为安全从业者们提供全新的安全视角、更广的安全视野,甚至会对工作方式、工具产生革命性的提升。