[安全转帖]浅析安全威胁情报共享框架OpenIOC
浅析安全威胁情报共享框架OpenIOC
https://www.freebuf.com/sectool/86580.html Indicator of compromise
Outline:
1. Instruduction
2. IOC & OpenIOC
3. IOC Functionality
4. OpenIOC对行为的描述
5. IOCs in the Investigative Lifecycle
6. OpenIOC Tools
一、OpenIOC背景介绍
在当今的安全威胁环境下,为了应对更加复杂的攻击(如APT),如何便捷地分享、交流安全情报成为针对特定目标攻击检测、响应和防止的关键问题。传统地解决方案是先从主机或者网络中收集威胁情报信息,然后采用特定的技术规范描述,形成书面的报告分发共享给其它相关人员。这种做法最明显的问题是时间延迟非常高。因为即使在一个组织内部,情报共享的效率完全依赖于员工阅读和分发报告的能力,每次消息的传递都在增加安全事件的响应延迟。因此常见的情况是,当组织开始对事件响应时,所依据的信息往往已经过时,而且攻击早已在网络中蔓延造成了损失。
基于此,MANDIANT公司基于多年的数字取证技术的积累,将使用多年的情报规范开源后形成OpenIOC(Open Indicator of Compromise)框架,作为现实可用的安全情报共享规范。OpenIOC本身是一个记录、定义以及共享安全情报的格式,它可以帮助你借助机器可读的形式实现不同类型威胁情报的快速共享。OpenIOC本身是开放、灵活的框架,因此你随时可以根据发现添加新的情报,完善你的IOC(Indicator of Compromise)。
【关于MANDIANT】
该公司被众人所知是从其发布报告称中国RPC针对美国进行APT攻击开始。其具有以下几个特点:
1. MANDIANT创始人系特工出身:Kevin Mandia于2004年创立该公司,目的是帮助企业侦测、快速反应可能存在的网络入侵。Kevin有20年的信息安全从业经历,曾工作与五角大楼第七通信部任计算机安全官员,之后又加入了美国空军特别调查办公室(AFOSI);
2. MANDIANT公司开在中情局附近,而大多数安全公司都是扎堆在西海岸;
3. MANDIANT是获得FBI承认的“具备参与执法资格”的公司;
4. MANDIANT的业务主要是安全事件响应,现已被FireEye收购;
二、IOC与OpenIOC
IOC(Indicator of Compromise)是MANDIANT在长期的数字取证实践中定义的可以反映主机或网络行为的技术指示器;而OpenIOC是一套威胁情报共享的标准,通过遵循该标准,我们可以建立IOC的逻辑分组,实现威胁情报的交流共享,比如事件响应团队可以使用OpenIOC的规范编写多个IOCs来描述一个威胁的技术共性。
OpenIOC主要使用XML(Extensible Markup Language)来实现,XML语言提供了丰富、灵活的格式来将数据表示成可机读的形式。通常在使用OpenIOC时会定义自己的指示器属性表(Indicator Term Documens),里面列出了要使用的诸多属性,当然也可以根据自己的需要添加新的属性描述。
三、OpenIOC规范描述
OpenIOC通过XML来实现,每个IOC实质都是一个复合指示器,通常我们会将多个Indicator组合到一起作为一个IOC(Indicator of Compromise),最终在形式上IOC就是一个复合表达式,当表达式值为真时的,则该IOC命中(如作为攻击IOC,命中时表示该机器存在Compromise可能)。具体来说,我们需要明确一下几个术语:
表达式(Expression):定义了一个条件,当为真值时,表明存在一个入侵行为;
简单表达式(Simple Expression):没有使用AND或OR两种逻辑运算符的表达式;
复杂表达式(Complex Expression):多个简单表达式通过AND或OR连接;
攻击指示器(IOC):多个表达式的连接,可以是简单表达式、复杂表达式;
如图1-IOC Structure:

顶级逻辑为OR运算,下层的每个逻辑运算符AND或OR只作用于其子元素,如第一个AND运算只作用于Registry Path: version和Registry Text: 5, 1, 3802, 0;
我们通过图2和图3来说明IOC表达式的实际含义:
图2-Logic branch example:

每个表达式的条件有contains|contains not|is|is not四种;图2从文件名、大小、编译时间以及网络DNS和服务名、DLL等方面对行为进行了刻画。
图3-Indicator Expression:

上述IOC实际存储在一个XML文件中,类型名为ioc,具体格式如图4:
由图中可以看出,IOC的XML标签并不多,刻画的细度主要通过设置不同的属性(IndicatoreItem)来实现,通过模块化的逻辑结构,可以随时根据获得的信息和知识进行IOC优化调整。IOC用到的基本XML标签如下:
< ioc>:用于标识一个IOC对象;
< definition>:用于定义具体的Indicator:
< Indicator>:用于包含多个IndicatorItem;
< IndicatorItem>:用于描述一个具体的属性,其id值标识该属性,condition表明该表达式成立条件;
< Context>:用于定义属性的大类和子类,标记属性名,如document="FileItem" search="FileItem/SizeInBytes", 最后的“mir”是MANDIANT Intelligence Response的缩写;
< Content>:用于定义属性值的类型以及属性值,如type="int" ,大小为35343;
OpenIOC定义的XML标签主要就是以上几种,其对行为的刻画主要通过复杂丰富的IndicatorItem来体现,如图5所示:

四、OpenIOC对行为的刻画
OpenIOC对于行为的刻画主要依靠其IndicatorItem来实现,基于其在数字取证领域的多年实践,OpenIOC为我们提供了丰富、细化的行为描述属性。
OpenIOC一共提供了27类属性,分别是:
ArpEntryItem
CookieHistoryItem
DiskItem
DnsEntryItem
DriverItem
EventLogItem
FileDownloadHistoryItem
FileItem
FormHistoryItem
HiveItem
HookItem
ModuleItem
Network
PortItem
PrefetchItem
ProcessItem
RegistryItem
SerivceItem
Snort
SystemInfoItem
SystemRestoreItem
TaskItem
UrlHistoryItem
UserItem
VolumItem
针对上述每个大类,又可以细分出诸多小属性,比如以DiskItem为例,又细分为:
Disk Name
Disk Partition Length
Disk Partition Number
Disk Partition Offset
Disk Partition Type
Disk Size
更多详细的属性说明在其官方文档中,除了列表中列出的属性,OpenIOC还支持自定义该格式的属性:
CommonIOCterms:http://openioc.org/terms/Common.iocterms
CurrentIOCterms:http://openioc.org/terms/Current.iocterms
五、IOC工作流程
MANDIANT主要在事件响应与数字取证领域使用IOCs,主要分为以下几个步骤:
获取初始证据:根据主机或网络的异常行为获取最初的数据;
建立主机或网络的IOCs:分析初步获得的数据,根据可能的技术特征建立IOCs;
在企业中部署IOCs:在企业的其它机器或网络中部署IOCs,开始检测;
发现更多的可疑主机;
IOCs优化:通过初步检测可获取的新证据,并进行分析,优化已有的IOCs;

六、OpenIOC工具
MANDIANT已经为OpenIOC开发了免费的使用工具,主要是IOCeditor和Redline两个工具。其中IOCeditor用来建立IOCs,而Redline负责将IOCs部署到HOST上收集信息后进行分析。主要过程如下:
运行Mandiant IOCe.exe,打开IOCeditor编辑器窗口,选择要编辑的IOC文件或新建IOC文件;

为现有的IOC添加IndicatorItem;

设定表达式条件;

设定AND或OR运算符;

保存成为.ioc文件;
接下来,需要将已经保存的.ioc文件生成collector部署到目标Host上,主要依靠Redline提供的IOCs部署功能:
首先运行Redline.exe选择“Create an IOC Search Collector”:

其次选择已经保存好的IOC文件,设定collector生成位置:

最后将生成的collector部署到目标机器上,运行脚本RunRedlineAudit.bat,完成后会在Sessions目录中保存收集的数据,可以在Redline中打开中进行分析;
七、小结
OpenIOC是一个开放灵活的安全情报共享框架,利用OpenIOC,重要的安全情报可以在多个组织间迅速传递,从而极大缩短检测到响应的时间延迟,提升紧急安全事件响应与安全防范的能力。但是由于其发展自数字取证领域,因此分析基本基于硬盘镜像的思想,即就系统的某一个时刻的状态进行分析
主要内容参考OpenIOC的官方文档:
AnIntroductiontoOpenIOC.pdf
IOCeUserGuide.pdf
ReadlinUserGuider.pdf
[安全转帖]浅析安全威胁情报共享框架OpenIOC的更多相关文章
- PJzhang:国内常用威胁情报搜索引擎说明
猫宁!!! 参考链接: https://www.freebuf.com/column/136763.html https://www.freebuf.com/sectool/163946.html 如 ...
- 微软威胁情报中心总经理的十句话——From John Lambert——太精辟了.......
微软威胁情报中心总经理 John Lambert的十句话 1. What is the most ...
- 深入理解.NET Core的基元(二) - 共享框架
原文:Deep-dive into .NET Core primitives, part 2: the shared framework 作者:Nate McMaster 译文:深入理解.NET Co ...
- 深入 .NET Core 基础 - 2:共享框架
深入 .NET Core 基础 - 2:共享框架 原文地址:https://natemcmaster.com/blog/2018/08/29/netcore-primitives-2/ 共享框架从 . ...
- [转帖]浅析java程序的执行过程
浅析java程序的执行过程 转帖来源: https://www.cnblogs.com/wangjiming/p/10315983.html 之前学习过 这一块东西 但是感觉理解的不深刻. copy一 ...
- [转帖]浅析Servlet执行原理
浅析Servlet执行原理 原贴地址: https://www.cnblogs.com/wangjiming/p/10360327.html 原作者画的图挺好. 自己之前看过iis的一些配置文档 但是 ...
- [转帖] 从零开始编写自己的C#框架(27)——什么是开发框架
从零开始编写自己的C#框架(27)——什么是开发框架 http://www.cnblogs.com/EmptyFS/p/4105713.html 没写过代码 一直不清楚 框架的含义 不过看了一遍 也没 ...
- Owin+ASP.NET Identity浅析系列(三)框架结构分析
在今天,读书有时是件“麻烦”事.它需要你付出时间,付出精力,还要付出一份心境.--仅以<Owin+ASP.NET Identity浅析系列>来祭奠那逝去的…… 前两篇博客仅仅说了下功能如何 ...
- 浅析Java的Frok/Join框架
一丶Fork/Join框架产生背景: 随着并发需求的不断提高和硬件的不断发展,程序并行执行仿佛就提上日程上来了,伟大的毛主席就说过:"人多力量大",所以如果一件事可以分配给多个人同 ...
随机推荐
- 从零开始学习PYTHON3讲义(十)自己做一个“电子记事本”
<从零开始PYTHON3>第十讲 截至上一讲,我们已经完成了Python语言的基本部分.我们用了三讲来讨论Python语言的控制结构,用了两讲来介绍Python的基本数据类型.可以说仅就语 ...
- Solr 15 - Solr添加和更新索引的过程 (文档的路由细节)
目录 1 添加文档的细节 1.1 注册观察者 - watcher 1.2 文档的路由 - document route 1.2.1 路由算法 1.2.2 Solr路由的实现类 1.2.3 implic ...
- DotNetCore跨平台~关于appsettings.json里各种配置项的读取
回到目录 对于dotnet Core来说,依赖注入的集成无疑是最大的亮点,它主要用在服务注册与注入和配置文件注册与注入上面,我们一般会在程序入口先注册服务或者文件,然后在需要的地方使用注入即可,下面主 ...
- Python:bs4的使用
概述 bs4 全名 BeautifulSoup,是编写 python 爬虫常用库之一,主要用来解析 html 标签. 一.初始化 from bs4 import BeautifulSoup soup ...
- 一致性Hash漫画图解
一年之前—— 未来两年内,系统预估的总订单数量可达一亿条左右. 按Mysql单表存储500万条记录来算,暂时不必分库,单库30个分表是比较合适的水平分表方案. 于是小灰设计了这样的分表逻辑: 订单表创 ...
- Docker进阶之四:centos7安装docker
centos7.6 安装docker 参考:https://docs.docker.com/install/linux/docker-ce/centos/ 一.存在老版本先删除 yum remove ...
- 前端javascript如何阻止按下退格键页面回退 但 不阻止文本框使用退格键删除文本
这段代码可以: document.onkeydown = function (e) { e.stopPropagation(); // 阻止事件冒泡传递 e.preventDefault(); // ...
- JS里charCodeAt()和fromCharCode()方法拓展应用:加密与解密
JS实现客户端的网页加密解密技术,可用作选择性隐蔽展示.当然客户端的加密安全度是不能与服务器相提并论,肯定不能用于密码这类内容的加密,但对于一般级别的内容用作展示已经够了. JS加密与解密的解决方案有 ...
- java爬虫系列第五讲-如何使用代理防止爬虫被屏蔽?
本文内容 1.分析一下爬虫存在的问题及解决方案 2.webmagic中代理的使用 3.目前市面上一些比较好用的代理服务器 存在的问题 我们在使用爬虫过程中,大多都会遇到这样的问题:突然某一天爬虫爬不到 ...
- Python全栈开发之---迭代器、可迭代对象、生成器
1.什么叫迭代 现在,我们已经获得了一个新线索,有一个叫做“可迭代的”概念. 首先,我们从报错来分析,好像之所以1234不可以for循环,是因为它不可迭代.那么如果“可迭代”,就应该可以被for循环了 ...