如何判断头上顶着一片草原?这里有一些小技术

  

雷锋网(公众号:雷锋网)宅客频道按:最近,你的女朋友对你爱答不理,不仅微信回复的越来越慢,就连你沉迷于“农药”游戏也不再批评。于是,你开始慌了,难道她也迷上了“农药”?还是说她正在给你织一顶帽子,绿色的?

如何从女朋友的反常行为中找到蛛丝马迹,然后抽丝剥茧,找到女朋友变冷淡的元凶?这,是一个难题。

其实,企业也面对相似的问题:如何从海量的告警之中发现真正的威胁,使得监控人员能够及时处理,一直是一个难题。本文作者从公司内部的实际案例出发,详细讲述了威胁情报在甲方安全运维中的应用。

本文作者:证通白帽子

很多企业使用 SIEM(安全信息和事件管理) 来收集日志数据,并将安全事件与多类安全设备(入侵检测设备、Web应用防火墙等)日志相关联,用来指导安全人员进行风险处置。然而 SIEM 也存在局限,监控人员往往被淹没在海量的告警之中无从下手,原因之一就是对于威胁的告警没有处理的依据,例如缺乏经验的监控人员很难判定:某一条安全事件告警是扫描还是针对性攻击引起的(通常后者需要更多关注)。而威胁情报不仅可以为监控人员提供处理依据,也可以为安全人员在进行日志分析和攻击溯源时提供有力帮助。

本文将基于 Splunk(一款机器数据引擎),介绍威胁情报在甲方安全运维中的应用。

什么是威胁情报?

根据 Gartner 的定义,威胁情报是指基于一定知识的证据,已经存在或正在形成的潜在威胁,比如,上下文、机制、指标、意义以及可实施的建议,利用这些,可以帮助当事人形成应对这些危险的决策。

针对攻击者的威胁情报应该包含以下要点:

  • 攻击者身份:威胁情报需要能够帮助企业将攻击、恶意活动最终溯源至相应组织(网络犯罪团体、黑客、政府/国家机构等)。
  • 攻击的原因:了解对方动机,以及他们会在攻击中投入多少精力(APT或仅是投机型攻击),针对性有多强等。
  • 攻击的目的:了解攻击者的目的,对于企业和组织基于资产重要性调整响应优先级也是有意义的。
  • 具体做法:包含了攻击者所用的工具、基础设施等。
  • 攻击者的位置 :结合对方所在国家,以及其地缘政治状况,能够帮助企业和组织更好地理解对方情况。
  • 如何组织情报:包括 IOC 一类的技术指标(比如IP地址、哈希值等)提供的信息可用来更准确地检测和标记恶意行为。
  • 如何缓解攻击:企业可用以保护自身的信息。

系统架构

在我们公司,Splunk 主要被用来收集各类安全设备、操作系统、应用系统日志,从而满足安全监控、安全告警、数据分析的需求。

安全设备的日志通过 Syslog 发送,其余存放于操作系统文件系统中的日志通过在客户端操作系统安装 Splunk Forwarder 收集。

通过日志字段提取,我们利用 Splunk 实现了基本的报表和告警。然而正如前文提到的,我们很快就被告警淹没,无论如何调整告警阈值都无法令人满意,于是开始寻找解决方案,通过一系列的选型比较,我们最终决定引入来自微步在线(ThreatBook)的第三方安全情报数据,以 API 的形式与 Splunk 整合。

需要注意的是——威胁情报数据的用量通常是有限制的(如按月计量),因此我们部署了前置系统作为本地威胁情报库,用以缓存查询结果,同时,我们还顺带实现了专供内部使用的 Web 交互查询界面,后来又顺路实现了威胁历史信息的记录:所有产生过告警的威胁都会被记录,并且可被关联搜索。如下图所示:

威胁情报分析界面图,威胁情报数据来自微步在线ThreatBook API

随着威胁情报数据的应用,我们逐渐信任了数据的准确度,并开始研究威胁 IP 自动阻断方案。由于在网络建设时并没有这个需求,因此我们的首要目标是:在网络中寻找是否有串联设备支持通过调用 API 的方式来达到 IP 阻断的目的。最终,我们在一台抗 DDoS 设备中发现了这个功能,并按照手册要求的数据格式实现了接口调用。

系统架构示意图如下:

技术要点

日志字段提取

日志字段的提取是最基础,也是最重要的步骤,后续所有的工作都是基于正确的日志字段提取之上。

Splunk 提供了傻瓜式的字段提取功能,只要展开任意事件,点击“事件操作”,选择“提取字段”即可进行提取,提取完成后可自动生成正则表达式。

对于一些比较复杂的日志格式,Splunk 的自动化提取可能就力不从心了(又或许你对自动生成的正则表达式嗤之以鼻),我们可以手写正则表达式,并在“设置-字段-字段提取”中保存。

Splunk 的字段提取

对于临时使用的需求,也可以在搜索中使用 rex 命令对事件应用正则表达式:

rex field=some_field "(?<capture_name>.*)"

对于一些以键值对形式输出的日志,可通过 extract 命令进行提取,十分方便:

extract kvdelim="=" pairdelim=";" 

威胁情报库查询

威胁情报库的查询使用了 Splunk 的 lookup 命令,通过给 lookup 命令传递一个查询值从而获得对应的查询结果。

lookup 的典型使用场景之一是根据日志中的 IP 地址来查找对应的资产:由于日志中不包含资产信息,而我们又希望通过 IP 地址快速定位到相关资产信息,此时就可以建立一张资产表,上传至 Splunk,在“设置-查找”完成配置后,即可通过 lookup 命令进行搜索。

lookup asset_table ip_addr AS dst_ip OUTPUT asset_info

而在使用 lookup 对威胁情报进行查询时,则需要用到“外部查找”功能,原理类似于动态生成一个查找表文件。外部查找功能需要调用命令和参数,Splunk 的默认安装中提供了一个名为“dnslookup”的外部查找,可以用来参考实现自己的外部查找。

威胁情报查询外部查找脚本的部分实现代码如下:

威胁情报查询语句如下:

stats count by client_ip server_ip | lookup iplookup ip as client_ip OUTPUT info as _TI | spath input=_TI

此处首先使用了 stats 命令统计事件数据,随后使用 lookup 命令对统计完成的数据进行威胁情报查询,这样的处理方式可避免重复的查询,降低系统和网络开销。最后,将 lookup 命令查询返回的 JSON 格式数据使用 spath 命令解析。

威胁情报数据解析

对于 IP 的威胁查询接口,一个恶意的 IP 通过 API 查询返回的示例数据如下:

{"response_code":0,"hit":{"expired":false,"detected":true,"info":["zombie","idc","compromised","spam"]},"ip":{"carrier":"1and1.com","ip":"82.165.37.26","location":{"country":"德国","province":"德国","lng":"10.454150","city":"","lat":"51.164181"}}}

字段说明如下:

有了字段信息,我们需要把 JSON 字符串解析后再进行下一步判断。Splunk 提供了 spath 命令,可以将此前 lookup 返回的内容作为 spath 的输入,并最终输出解析完成的数据。如下图所示:

防火墙自动阻断 API 调用

防火墙的 API 调用和触发通过 Splunk 的“搜索、报表和告警”实现。通过在 Splunk 中创建定时任务,对一定时间窗口内的日志进行分析,结合威胁情报数据返回判断结果,以此为依据决定是否触发阻断脚本。

应用场景

所有的技术问题都已解决,后续的工作只剩下两块:利用威胁情报数据丰富现有查询结果,以及使用新的思路实现原本无法实现的效果。

我们为此前所有与来源有关的告警都添加了威胁情报信息,监控、安全人员在第一时间就可以大致评估事件的严重性。

优化模型

有了 IP 地址威胁情报数据之后,我们可以用这些数据帮助评估当前面临的安全威胁的严重程度,并以可视化的方式呈现出来。实现方式为:以一定维度(如时间、IP 地址、类型等)聚合安全事件,对聚合的事件做基于 IP 地址的威胁情报查询,随后套用特定的模型并呈现。

自动阻断

威胁情报也为威胁程度的判断提供了依据,通过定时任务,当发现高危威胁且威胁来源 IP 地址符合预定义的条件时,即触发脚本调用防火墙 API,实现黑名单 IP 地址的网络层自动阻断。

DNS

我们也使用了威胁情报提供的域名威胁情报查询功能,在 DNS 服务器中开启了 DNS 调试日志并转发至 Splunk,对匹配的恶意域名解析请求可及时告警。同时计划实现将恶意域名自动解析到本地的功能,以最大限度避免威胁的扩散。

结语

目前我们在威胁情报的应用还处于摸索阶段,只发挥了其中一小部分的能力。从威胁情报信息的分类角度,威胁情报除了 IP 地址情报、DNS 情报,还可提供文件哈希情报等信息;从威胁情报的要素来说,我们当前只使用了攻击者身份、攻击者位置等基本信息。相信如果更全面地利用这些信息,可以为安全从业者们提供全新的安全视角、更广的安全视野,甚至会对工作方式、工具产生革命性的提升。

   

  本文作者:周翔

本文转自雷锋网禁止二次转载,原文链接

时间: 2024-12-27 12:46:51

如何判断头上顶着一片草原?这里有一些小技术的相关文章

海量数据:判断一棵树是否为另一棵树的子树

T1是一棵含有几百万个节点的树,T2含有几百个节点.判断T2是否是T1 的子树. 首先考虑小数据量的情况,可以根据树的前序和中序遍历所得的字符串,来通过判断T2生成的字符串是否是T1字符串的子串,来判断T2是否是T1的子树.假设T1的节点数为N,T2的节点数为M.遍历两棵树算法时间复杂性是O(N + M), 判断字符串是否为另一个字符串的子串的复杂性也是O( N + M)(比如使用KMP算法).所需要的空间也是O(N + M). 这里有一个问题需要注意:对于左节点或者右节点为null的情况,需要

百度是如何判断“用户体验”的大解密

百度搜索引擎是如何从什么角度去判断一个站到底有没有"用户体验"?根据阳光小宅博客的经验,并且透过一些站长相关的QQ群.网站各方面的资讯了解到,很多人都说是根据网站内的点击率.跳出率.页面美观--等等,所以我相信很多人都可能一知半解,甚至是人云亦云,自己也不知道是怎样的.今天我就要尝试第一个站出来打破常规,勇于为大家分析一下到底是怎么回事. 百度是不可能"跨域"获取网站的用户行为 百度是一个网站,你的网站也是一个网站,两者之间是一个独立的个体.在搜索引擎的角度关于&q

Win7系统下快速判断电脑性能是否好坏

  Win7 64位系统下快速判断电脑性能是否好坏:新买电脑以后采用运行大量的评测软件来评价自己的电脑.根据运行数据判断电脑拥有怎样的性能.一般测试可以分哦:游戏测试.播放电影测试.图片处理测试.拷贝文件测试.压缩测试.网络性能测试.这些测试基本上包括了对电脑性能的整体测试. 教你在Win7系统下快速判断电脑性能是否好坏 一台电脑的性能会影响到系统的运行速度.看视频的流畅和清晰度等,电脑性能好会给我们在操作电脑时带来完美的体验. 那么,我们要怎么判断自己电脑的性能是否好呢?下面,小编通过Win7

js 判断一组日期是否是连续的简单实例_javascript技巧

这是群里一朋友问的问题,当时我说判断下 day 是否相邻即可,后来细想,发现完全不对. 问题需求 给定5个相同格式的日期,怎么判断是否是连续5天呢? 我当时第一反应 getDay() 后排序,然后前后对比即可.. 但是细想,完全不对,比如本周一下周二,这样也会误判. 而且不仅仅这样的问题,还要跨月,跨年,闰月等问题. 然后就有了下面的代码. 让时间戳抹平一切吧 为了不纠结这些问题,我想到了时间戳,这货就可以完全忽略上述问题了,只要处理时间戳,最后比较即可. 然后我给了如下代码: let days

Android判断用户的网络类型实例讲解(2/3/4G、wifi)_Android

很多时候需要先判断当前用户的网络,才会继续之后的一些处理逻辑.但网络类型获取这一块,我用我自己的的手机调试时遇到一些问题,这里记录一下. 一加手机一代,移动4G 网络,得到的subtype类型值为17,我查过Android 5.1的源码,它最大的值也就为16.  我拿魅族的移动4G测试的结果如下: 小米4,电信4G的测试结果如下: 魅族MX4,联通3G 还测试了其它华为移动3G/4G的情况,就我自己的手机一加返回的值有点奇怪,之后我查了一下它的参数: 当然,其它厂商:华为.小米.魅族与上面显示的

交互设计师:帮你判断需求该不该接的五个小原则

  如何判断产品经理提出的需求该不该接?今天@窒息红Leon 通过自己思考.请教前辈,列举了几条产品需求是否该接的「小原则」,希望通过这些依据来帮助自己判断需求的合理性. 对大团队来说,交互设计师常常会接触到不同产品线的需求,比如之前两周我就需要同时与四五个产品经理合作.产品经理是需求方,他们会带着 idea 以及 PRD 文档来找设计师,告诉我们需求的具体内容.目标.排期等等.不过,由于设计资源有限(开发资源也一样),并不可能所有的需求都被能处理,所以在产品经理提出需求的同时也需要设计师能够对

javascript判断图片是否加载完成的方法推荐_javascript技巧

load事件 <script type="text/javascript"> $('img').onload = function() { //code } </script> 优点:简单易用,不影响HTML代码. 缺点:只能指定一个元素,javascipt代码必须置于图片元素的下方 jquery方法 <script type="text/javascript"> $(function(){ $('.pic1').each(fun

js判断某个字符出现的次数的简单实例_javascript技巧

js判断某个字符出现的次数的简单实例 function patch(re,s){ //参数1正则式,参数2字符串 re=eval_r("/"+re+"/ig"); //不区分大小写,如须则去掉i,改为 re=eval_r("/"+re+"/g") var len = s.match(re).length; return len; } var str="Hello World"; alert("nu

全民K歌置顶歌曲怎么设置?全民K歌置顶歌曲设置方法

1.在手机中点击全民K歌,然后进入之后点击[我的],接着点击要置顶的作品 2.点击右上角的[三点],接着点击[置顶作品] 3.点击[确认置顶]即可. 好了上文是小编为各位介绍的关于全民K歌置顶歌曲的方法了,如果要取消置顶的话操作方法也是一样的只需要简单的按上面方法反操作即可.