0x00 背景
近两个月实在太忙,这一篇博客拖到现在。本来计划开一个安全分析的系列,但因为工作原因搁置了。端午去成都吃火锅,往返飞机上写出这篇《安全分析中的威胁情报》。作为安全分析系列文章的开篇。
0x01 何为威胁情报
我将威胁情报定义为:经过研判过的安全信息。
这里有三个实体:研判,安全信息,威胁情报。三者的关系为:
安全信息 + 研判 = 威胁情报
任何未经研判的安全信息,都不能称之为“威胁情报”。威胁情报用于辅助支持决策或者安全分析,未知来源和真实性的安全信息将影响决策的正确性和分析结果的准确性。
威胁情报是目标现在(以及过去)一段时间的状态描述;它受安全信息的数量、质量,以及研判过程合理性影响,使得威胁情报并不是百分百正确。
0x02 安全信息收集
安全分析依赖获取和使用数据的能力,所以安全分析首先要克服的第一个问题就是:“如何收集安全信息”。
之前写过一篇 《小议安全分析生命周期》 。其中表达了一个观点:安全分析的起点应该是“确定目标”。在此也适用,在安全信息收集计划前,应该明确目标和范围,制定的信息收集计划应包含“所要处理信息类别”,“信息研判可行的切入点”,“尽可能广泛的来源渠道”,以及“何时进行信息收集”。
针对信息本身,在收集时必须注意以下几点:
- 输入信息高清洁度,尽量避免无用的数据
- 信息的高可用
- 保证信息的高精度
- 信息源的覆盖面要没有疏漏
- 信息源必须可信
- 信息必须及时
讲了那么多信息收集的要求,说一下信息的来源:OSINT、封闭、机密。
- OSINT 是可公开获取的数据,是最常见的信息获取途径。其中包括,媒体,机构,开放博客,社交平台,会议论文,大厂公告等等。单反能通过互联网访问的信息,都属于OSINT 数据,该数据源通常采用爬虫,爬取网页、api、RSS或者邮件订阅。市面上也有很多基于 OSINT 数据的威胁情报平台。使用该来源的信息,通常面临信息清洁度、精度、覆盖面…信息收集需要注意的问题。因为开放意味着公共,陈杂,不准确,冗余…使用OSINT数据,必须要解决的时信息处理相关的问题。
- 封闭数据是为了特定方向收集的信息,这方面往往对公开访问进行限制。对应VT、riskiq、Recorded Future、微步在线……此来源的数据可能独家,也可能是基于公开情报二次开发。这样的信息,要比OSINT更有价值,但获取这样的数据需要一定的代价。
- 机密数据是通过特定的手段,隐蔽的手段收集的信息,这样的信息非常准确,高可用,高可信,高精度且及时。但是覆盖面很窄,仅能满足单个需求点。此方面的数据来源,以蜜罐为代表。
安全分析人员,要基于全源分析,而不是仅局限于易于获取的信息。不管什么方式,出发点都是获取到想要的信息,目标都是导出决策需要的高质量情报。从成本上看,开源数据收集成本要远远低于部署私密的资产;开源数据获取难度低,但是处理量极大,所以更合理的信息获取结构是,三者互补进行。
0x03 信息研判
在信息收集阶段,仅仅是构建信息获取的途径,针对的是来源,而不是信息本身。 对信息本身进行研判,才能将其转变成威胁情报。
信息研判是威胁情报生命周期中极为重要的一个环节。主流的研判方式:人肉去看或者跑一些机器学习的算法。
人的主观研判十分准确,既然是人,肯定有自己擅长的领域以及知识盲区,“人”对非擅长领域的信息是很难进行判断的;同时,人的精力是有限的,面对海量信息显得有些乏力。
为了解决人主观研判的弊端,有一些厂家,引入了机器学习来进行信息研判这个工作。不可否认,这是信息爆炸时代下的趋势。受限于当前机器学习发展的瓶颈,很难有一个算法可以全自动地进行信息研判,然后把准确率四个九的处理结果拍我脸上,直接告诉我这就是准确的威胁情报。这是不可能的。
威胁情报是要用来做决策,支持我们分析的。但凡达不到准确率99.99%的威胁情报,都不能直接用于实际生产。非完全可信的情况下,必须要有人介入才行。这也间接说明了,安全分析和安全运营的必要性。安全分析领域,人机协同在未来一段时间依旧是主流。
0x04 信息研判模型
就 OSINT 信息研判,讲一讲信息研判的具体方法。
研判过程三个基本原则:
- 不能有主观影响
- 必须要对信息源进行评估
- 信息要尽可能的靠近源头
许多人做研判又是NLP,又是建立词库,或者甚至监督/无监督机器学习直接怼,这些都没有到点子上。我不否认这些工作的必要性。但是思路多多少少有些歪。
所以,我认为信息研判的两个方面:
- 信息来源
- 信息本身
许多人对信息研判只关注信息本身,而忽略来“信息来源”这个维度。补上来源可靠性判断,对信息研判准确率会有一个较大的提升。
研判尺码
如果基于这两个维度上,做一些细颗粒的划分上,是不是更容易落地?再次给出一些评判的尺码:
信息来源:
- 完全可靠
- 真实性、完整性、可靠性、专业领域全部可信
- 历史记录中,该信息源无污点记录
- 通常可靠
- 真实性、完整性、可靠性、专业领域有个别问题(其中某项)
- 历史记录中,该信息源有个别污点记录
- 一般可靠
- 真实性、完整性、可靠性、专业领域有一些问题(其中两项)
- 历史记录中,该信息源有一些污点记录
- 未知
- 信息来源属性无法判断,且无历史信息记录
- 不可信
- 真实性、完整性、可靠性、专业领域方面有一定怀疑
- 历史记录中,该信息源有一些污点记录
- 一定不可信
- 真实性、完整性、可靠性、专业领域方面有明确质疑
- 历史记录中,该信息源有大量污点记录
信息本身:
- 质量极高
- 其他独立来源确认该信息可靠
- 该信息在我们关注的范围内
- 该信息符合逻辑
- 质量高
- 其他独立来源确认该信息可靠
- 该信息与我们关注的范围有一定偏差
- 该信息符合逻辑
- 质量一般
- 不能从其他独立来源确定可靠性,但符合逻辑
- 该信息在我们关注的范围内
- 未知
- 信息本身的可靠性,逻辑性和关注匹配度无法确定
- 质量低
- 不能从其他独立来源确定可靠性,但符合逻辑
- 该信息与我们关注的范围有一定偏差
- 没有价值
- 不能从其他独立来源确定可靠性,不符合逻辑
- 该信息与我们关注的范围有一定偏差
尺码标出来后可以以信息来源为Y轴,信息本身为X轴,未知状态为原点建立坐标系:
这样就可以将机器处理的信息分为三个等级:
- 有价值的的威胁情报
- 需要人工研判的威胁情报
- 垃圾信息
用白话说出来就是:信息来源可靠且信息本身质量高的安全信息是有价值价值的威胁情报。
价值描述
当然,威胁情报有三六九等,同时需要人研判的信息也有轻重缓急。其实是有方法对“价值”进行量化的。
虽然上面对尺码描述分为了6个等级,但人类语言在数字世界其实是以数字进行呈现的。标准是可以通过算法进行量化的。
威胁情报的价值可以通过所在坐标的模进行标识的:
一条被自动判定为威胁情报的A,它的价值为:
(x > 0 且 y > 0)
同理可得,映射B、C需要判定的优先级为:
(x > 0 | y > 0)
(x > 0 | y > 0)
通过这种方法,就可以把威胁情报的层次区分开了。这个只是限定在 OSINT 信息处理。不同种类的安全信息,虽然研判尺码不同,但是大体思路是一样的。
0x05 实践
讲了那么多方法论,为了帮助更好的理解,这里举一个例子。
场景就设定为:企业安全建设,收集漏洞威胁情报进行安全运营。
- 第一步:确定范围
- 首先要了解企业资产信息,明确哪些漏洞是需要关注的。
- 第二步:制订收集计划
- 确定信息来源,信息格式,信息研判的方式,信息收集的方式。
- 常见的漏洞信息来源有:CVE漏洞库,NVD漏洞库,CNVD漏洞库,媒体网站,邮件订阅,个人/组织博客,社交平台(Facebook,推特,微信群,朋友圈)等。
- 明确信息格式。一般漏洞库都有RSS订阅服务,可以直接获得结构化数据进行正则、字典匹配。而媒体网站,blog,社交平台的信息往往是非结构化的,这样的数据一般需要NLP进行处理。不同的信息种类,处理方式不同。明确信息格式是为了更好的处理数据。
- 不同信息来源的时效性,收集方式是不同。社交平台的时效性比较高,则信息爬取的时间间隔应当尽量小。而漏洞库则不必,一天爬一次足以。大多数情况都是通过爬虫采取主动的方式进行信息收集,也有个例,邮件订阅方面则需要被动的方式进行接收。
- 第三步:设置尺码
- 尺码的两个维度:来源信誉、信息质量
- 来源信誉需要积累,当然也可以进行预设,官方的公告网站、推特的大V、专业的安全媒体等,这些的权值可以大一点。
- 信息质量要根据不同来源进行匹配,例如厂商公告的产品我方是否关注,推文的热度如何,安全没媒体披露的漏洞是否在其他来源有相同的消息……
- 第四步:机器分析研判
- 如上一节所说,可以通过一些方法把威胁情报的层次区分开。
- 第五步:人工研判
- 机器研判是不可信的,它可以在一定范围内将高价值的信息区分出来。例如“微软发布了安全更新,而这次更新的产品我们有所使用”,这种情况肯定是映射到第一象限中的。但是很多情况,信息是映射到二四象限。特别是非结构来源的信息,比如某个不活跃在推特发了一个0day信息,这种信息来源可疑(指不活跃用户,而不是推特)的信息往往落到第四象限,这种情况就要接入人工研判。
- 第六步:处置
- 略
0x06 后记
先写到这里,本片只写了安全分析角度,威胁情报如何产出,并且提供了工程化的方案。
因为安全分析这个题太大,抽象出来的通用方法总觉着有写干瘪,希望结合“0x05 实践”的内容让读者有所收获。
ps:blog同步更新,http://pi4net.com 需要翻墙。
如果对安全分析有感兴趣的点,欢迎评论。有可能作为下期博客内容。