IOC与IDS检测的核心区别在于所覆盖的攻击阶段不同,IOC覆盖洛马模型的后三个阶段:安装植入(Installation)、命令控制(C&C)、达成目标(Actions on Objectives),在检测防御链上可以与传统IDS检测形成一定的互补。

IOC主要在以下两方面发挥作用:一是定位已经失陷的对象。把IOC部署到检测设备上,将收集到的事件与设备上的IOC进行匹配,产生相应告警引发分析处置;二是对告警进行分类分级,提供IOC相关的多维度信息使用户可以对命中IOC而产生的告警进行分级,指导处置的优先级。

对于IOC数据质量的高低,需要从及时性、准确性、全面性、完整性等四个方面进行评价比较:

  • 及时性:当新的威胁出现时,是否可以第一时间识别并提取相应的IOC。

  • 准确性:对于IOC准确度的判断需要非常强的安全专业能力。

  • 全面性:有效IOC的数量及覆盖威胁类型量。

  • 完整性:用户可以根据自己的运营标准基于上述信息进行人工或自动化地安排处置排序。

IOC作为威胁情报最基础也是最直接体现效果的类型,我们有必要理清一下其核心特性和现实状况,同时也谈一下对其的评价标准。

一、什么是及为什么需要IOC

说起IOC,需要简单说下作为对比的IDS,通过对比分析来介绍IOC的特性能更让人有印象些。IDS经常被人吐槽告警泛滥且误报多,但其最大的问题并不在于检测的准确性,事实上很大部分针对明文协议的IDS规则可以做到接近100%的准确率,要得清净只需把那些有可能误报的规则禁用即可。

可IDS还是有其问题,传统IDS检测点集中在洛马的杀伤链模型七个核心环节中第三个攻击利用(Exploitation)阶段,所以即便它产出的告警都是准确无误的,目击的活动也以攻击企图为主,攻击本身就不一定成功,而且强大的IPS甚至还可以阻断已知的攻击方式。发现攻击企图主要价值在于识别攻击者,而通常没有行政资源的防御方对攻击者本身做不了什么,技术上的后续对抗也仅限于切断攻击来源而已。

现在IDS/IPS这种检测机制或设备很大程度上被认为是失败的,还在于它在攻击发现和阻断这个点上所覆盖的攻击面太小场景太少,仅涉及了ATT&CK框架里的少数技术点,以致于就算在攻击利用这个单点上也根本无法形成全面有效的对抗,比如处理包裹在加密流量和复杂结构文件里的恶意Payload限于性能就没有好的解决方案。

于是,IOC这种东西应运而生,Indicator Of Compromise ,失陷标示。它与IDS检测的核心区别在于所覆盖的攻击阶段,其覆盖洛马模型的后三个阶段:安装植入(Installation)、命令控制(C&C)、达成目标(Actions on Objectives),在检测防御链上可以与传统IDS检测形成一定的互补。更体现重要性的是IOC标示攻击已经得逞所导致的现实威胁,当发现有机器在尝试连接已知C&C IP/域名或机器上出现了Stage 2/3/4的恶意代码,那么不管什么来路,攻击已经突破早些环节的防御取得了阶段性的成功,理论上应该触发最高优先级的应急响应,就是如此地简单粗暴且有效。

这里有必要再贴一下我提出的威胁情报金字塔,塔的下面两层包括的就是通常的IOC:

覆盖上述后三个阶段的IDS规则,比如木马C&C通信流量的检测规则也可以算广义上的IOC,IDS本质上作为一个专家系统依赖知识的输入,这些知识可以是规则也可以是标定过的实体对象。所以,IDS同时也可以简单地被改造为威胁情报消费设备,因为它能观测到网络中的IP连接、DNS请求、URL访问,甚至不顾及性能的话还能还原流量中的文件,接下来只要做匹配就行了。与检测攻击企图不同,对攻击得逞的检测本质识别的是受影响的资产,作为防御方应急响应需要做的事情就多得多。

下表是对IDS规则及IOC总结的一个简单对比:

通过对比澄清了IOC的概念和特点,那用它来能做什么就非常清楚了,无外乎以下两方面:

1、定位已经失陷的对象

把IOC部署到能支持情报消费的检测设备上,收集网络发生的事件,这些事件可以包括DNS访问、网络连接、URL访问、文件交换等等,与设备上的IOC进行实时或离线的匹配,产生对应的告警触发分析处置操作。其实IOC由于其使用的简便性而能很快落地到大量现有的检测类设备也是其核心优势之一,不要说专用的威胁情报消费系统,传统的设备比如防火墙、IDS、SOC/SIEM等经过简单的功能升级就能快速地消费情报数据从而增强自身的检测能力。

2、对告警进行分类分级

基于IOC的匹配定位到了失陷的系统以后,防御方需要执行响应,大多数用户方分析人员的处理能力远不足以做到告警的日清,这就必然涉及到处置优先级排序的问题。不是所有的IOC都是平等的,其重要性取决于威胁的严重程度和现时状态,提供IOC相关的多维度信息使用户可以对命中IOC而产生的告警进行分级,指导处置的优先级。

二、IOC的评价维度

我们可以看到很多厂商和组织都在输出IOC数据,有商业的有免费的,如何评价它们的质量高低呢?国内外有一些说法,但我觉得从攻击检测的角度看都不是太全面和实际的可操作性。基于这些年来我们在IOC生产和运营方面的实践,我提出如下从及时性、准确性、全面性、完整性这几个大面进行评价比较的思考,供业界参考评论。

及时性

当新的威胁出现时,是否可以第一时间识别并提取相应的IOC。

参考指标

  • 日均更新量

    两个相邻IOC升级包之间的变化IOC的绝对数量,当然是越高越好,之所以不用占比来衡量,因为占比还取决于总量的大小。需要注意的是,由于IOC注水太容易,静态统计这些日均更新量意义其实非常有限。

  • 开源IOC进入输出列表的时间间隔

    即使是商业IOC的Feed也会包含大量确认过准确性的开源IOC数据,这个指标可以从侧面体现安全厂商对安全数据的跟踪和分析能力,时间间隔当然是越小越好。

准确性

对于IOC准确度的判断需要非常强的安全专业能力,包括:大量多维度的安全参考数据、安全分析工具以及一定能力的安全分析团队,一般的威胁情报消费方不具备这些条件。一个简单的例子,现在很多检测设备加入了基于机器学习技术检测DGA域名的的机制,算法可以标记出一批看起来非常可疑的域名访问,但如何给这些域名定性,形成黑或白的确定性结论呢?

要知道除非在特殊的场景下,厂商光告诉用户某个对象可疑是不够的,特别是2B用户基本都要有确定性的说法,处置以来才能言之有据。如果用户在磁盘或内存中找不到导致访问域名的恶意代码,没有在与域名对应服务器的通信中发现明显恶意的数据,那么从可疑到确定的鸿沟永远无法跨越。所以,除了与一些开源可获取的威胁情报数据做下比较,绝大多数威胁情报消费方实话说没有能力评估IOC的准确度,如果用户拥有事实上等价于情报生产能力的IOC准确度评估能力和资源,那还要专业的安全厂商干什么呢。

参考指标

  • 现实网络环境下的IOC命中条目在各个免费或商业威胁情报平台中做交叉验证。

全面性

这里有两个主要的大指标:有效IOC的数量及覆盖威胁类型量。由于各有自己一部分的独有数据源,从我们的经验来看,目前市面上没有任何一家威胁情报厂商的数据能够包含绝大部分已知IOC,这种交差度低的状态其实也暗示着对于IOC的运营上远没达到成熟的程度,用户希望依赖一家厂商以获取全面的检测能力基本上是不现实的。

参考指标

  • 条目数量

    这是一个最容易想到但却不怎么能反映能力的指标,因为它太容易被注水了,实际的参考价值远没有想像的大。大部分厂商可以号称提供百万级的量,也可以只提供十万级,而在用户侧的实际表现上线使用前根本无法知道。事实上已知的恶意家族DGA域名每天的新域名就在百万级,每天都不一样的一批,极端情况下光给DGA的域名就够充数了。

  • 实际命中

    既然IOC条目数那个指标不靠谱,那是不是有个更合理的呢?有的。实际命中可能是所有指标中最核心的一个,对于IOC有效性分析我们所面对的场景不是从一堆吹竽的人里把西郭先生挑出来,而是从一堆西郭先生里把真的在吹竽的人挑出来,这就是为什么拉出来蹓蹓如此重要。如果IOC的评估方拥有具代表性的Passive DNS数据或自身所在的网络流量,那么可以观察在自己的数据视野范围内IOC的命中情况,IOC产生告警量呈现极度不均衡性,很可能1%的IOC产生90%的告警量,所以只要观察一天实际网络中的匹配情况就能非常准确地反映IOC集合的总体情况。

    观察目标主要就3个数据:发生命中的独立IOC数、命中的总次数、非开源IOC的占比,在告警准确的前提下这些数量都越大越好。前一个数代表输出有效IOC的能力,第二个数展示对于流行攻击的监测能力,第三个数体现厂商自有数据和判定的能力。而且,大家可能不知道威胁的传播范围其实有非常强的地域性,除了WannaCry那样的蠕虫式攻击,在国外流行的恶意代码在国内未必有多大风浪,反之亦然,由此导致基本上国外威胁情报数据服务在国内水土不服,这也是为什么观察IOC在用户自身环境下的表现尤其重要。

  • 恶意活动覆盖面

    IOC需要覆盖尽可能多的威胁事件与恶意代码家族类型,越多越好,至少表面上是那样。

  • IOC类型

    网络层面的常见的有IP、域名、URL、网站证书,主机层面的有文件Hash、文件名、进程名、互斥体、服务名等,更复杂的还有邮件相关的,包括收发件邮箱、附件名等,至于特定类型的IOC是否能够被消费还取决用户获取匹配对象的能力。当然,IP和域名的适用场景最多,也因此是最主流最具可用性的IOC类型。

完整性

对基于IOC产生的告警进行分类分级完全依赖IOC包含的多维度上下文信息,比如涉及的威胁类型、威胁等级、现时有效性、可信度等参考标定,那么用户可以根据自己的运营标准基于上述信息进行人工或自动化地安排处置排序。

参考指标

需要关注IOC的上下文信息中是否包含如下以告警做分类分级的有用的属性:

  • 威胁类型和威胁等级

    其实特定类型的威胁一般就对应特定的威胁等级,比如我们经常见到的威胁可以按危害程度大致排序:APT > 勒索 > 木马 > 僵尸网络 > 蠕虫 > 挖矿,因此如果IOC的属性标记中能够给出威胁的明确类型,则非常有助于处理优先级的排序。
  • 现时有效性

    相比IDS规则IOC最大的问题是非常容易失效,比较好的IDS规则一般针对协议层面的特征做检测,不太容易修改,而常见的IOC类型,文件只要修改一个比特位即导致出来的Hash完全不同,IP被认定为恶意以后攻击者很快就会转换阵地,控制域名暴露以后基本很快被放弃并做切换或被安全厂商监管机构Sinkhole接管。域名的失效会可能会有多快呢,举个例子,2020年7月2日我们发布了一个公开报告揭露一个命名为道贼的控制了百万级别手机的黑产Botnet,报告中提到的C&C域名几乎在当天就被切出,老域名访问断崖式下降,接替的域名立即被启用,流量90度向上的曲线,成熟黑产的云控就是这么快,绝不拖泥带水,而这种猫捉老鼠的游戏一直会持续下去。

    奇安信威胁情报中心上见证的黑产对控制域名的切换

    特别对于域名类IOC,当匹配命中产生告警的时候其实有大量已经无法得到正常的解析或处于Sinkhole状态,虽然意味着相关的攻击已经无法对受影响系统执行后续侵害,但对于分析威胁在前期的阶段中如何进入系统加以修补也是有意义的,不过相对当前依然可用的攻击者基础设施显然优先级上没那么高,为其打上当前无效或Sinkhole的标签也非常有助于用户做处理优先级的决策。由此可见,IOC如果没有随时的更新,砸在手里的只能是一堆过时数据,存量数据的现时价值非常小,也就作用于历史记录有用,威胁情报厂商的能力基本体现在无时不刻对新威胁的跟踪、判定和输出上。
  • 可信度

    如上面所述,对于威胁的恶意度的准确判定需要能力和资源,并不是所有的IOC都能得到确定性的是否恶意的结论,所以给予一个信心度的值也可以帮助用户设定处置优先级,在同等威胁等级的下优先处理高可信度的告警。

三、小结

魔鬼在于细节之中,IOC是一种看起来非常简单的威胁情报基础数据,但如何有效地生产、分发、消费也有不少门道在其中,本文只是作者基于几年来希望对用户和安全社区理解这个检测机制有所帮助,欢迎批评指正。

关于作者

汪列军,虎符智库专家,奇安信集团高级研究员兼威胁情报中心负责人,目前关注恶意代码分析、APT攻击事件与团伙的跟踪与挖掘,实现安全威胁情报的运营与产品化。

声明:本文来自安全内参,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。