安全事件调查人员在安全事件应急响应过程中面临的其中一个挑战是,找一个有效的方法把所有调查过程中的信息组织起来,这些信息包括攻击者的活动、所用的工具、恶意软件、或者其他的攻击指示器(indicators of compromise),简称IOCs,而OpenIOC格式(OpenIOC is designed to fill a void that currently exists for organizations that want to share threat information both internally and externally in a machine-digestible format.)正好可以解决这个难题。OpenIOC可提供一个标准的格式和术语来描述调查事件中遇到的分析结果,以便在不同组织间进行共享。
在开始下面的介绍前,需要澄清的是IOCs不是一个签名(signatures),所以不是要实现signature的功能。它设计出来是用于帮助你的调查,或者其他人的调查,这些人是你与之共享威胁情报的人。
下面列举几个最常见的IOC用例:
恶意软件/工具型:
这是最常见的用例,本质上讲,这种类型的IOC可用于发现某些已知类型的恶意软件或恶意工具,通常通过查找二进制文件或其文件属性,或其执行时创建的特征,例如一些预读文件、注册表键值等。
方法论型:
不同于上一种可直接识别恶意软件/工具,这种类型的IOC为了生成一些调查的线索,让你可以发现你不一定知道的东西。例如,如果你想识别出任何没有经过签名,而且从任何在“windows\system32”目录外加载的DLL,那你就可以写一个IOC去描述这个条件。另一个比较好的“方法论IOC”例子就是查找注册表中所有“Run”键值内容结尾为“.jpg”,这个IOC代表了一种不正常的情况,在安全调查中就指示出很可能是一个已被恶意利用了的证据。
“袋装”型:
你可能已经在使用这种IOC,很多组织会订阅一些威胁情报,这些订阅的feed通常会投递一些MD5或者ip地址列表,一“袋装”的IOC可以代表这些入侵指示器(indicator)的一个集合。这种类型的IOC非黑即白,通常在调查事件中用于准确匹配的话会比较好。
调查case型:
当你在环境里面调查可疑的系统时,识别出一些恶意的活动证据,例如关于安装了后门、执行了恶意工具、文件已被窃取等等的元数据时,你就可以在一个IOC里面跟踪到这些信息。这类IOC跟“袋装”型IOC有点类似,然而调查型IOC只包括一个调查事件中的指示器,这种类型的IOC可以帮助你区分哪些系统需要优先去调查。
下面在介绍一下IOC的组件:
一个IOC通常由三个部分组成,分别是IOC元数据部分、参考部分以及定义部分。下面使用Mandiant的IOC编辑器来了实际了解一下这些组成部分。
元数据:
IOC元数据描述了以下信息,例如本IOC的名称(Evil.exe[BACKDOOR])、作者(jsmith@domain.tld)以及简述
参考:
在IOC的参考里面,可以有调查事件的名称或者case编号,IOC成熟度的评论和信息(例如Alpha, Beta,Public Release等等)这些信息有助于你理解这个IOC适合放到你的威胁情报库中的什么位置。这个参考字段通常的用法是用于把IOC关联到特定的威胁组织(好比如APT1)。当于第三方共享IOC信息时,删除特定的参考字段的做法并不常见。
定义:
这是IOC的核心内容了,包括了调查人员决定编写IOC的关键内容。例如,可能包括一个文件的MD5值,注册表路径或一些在进程内存中发现的线索,所谓的指示器(indicator)会列在这个定义字段里,或者组合到表达式里面,这些表达式通常由两个术语和一些布尔型逻辑符组成。OpenIOC的其中一个特性令它特别有用,就是它可简单的组合一些and,or的逻辑条件判断符。
下面举例看看这些逻辑判断条件如何运用。
1.服务名为"MS 1atent time services" or
2.任何含有DLL调用名为evil.exe的服务 or
3.文件名是“bad.exe” AND 其文件的大小在4096-10240-bytes之间。
AND代表表达式两边都必须为真 OR代表表达式两边只需要一边为真
理解清楚这个AND OR的关系就可以明白,用上面的例子来匹配IOC时,并不是一个if-else的声明,也不是都必须存在。在安全事件调查中,如果发现一个名为“MS 1atent time services”的服务,那这个IOC就匹配上了,而不管IOC所描述的恶意文件是否在这台主机上出现。