OLE 全称是 对象链接和嵌入,
OLE 漏洞的产生一般也来自 链接对象 和 嵌入对象 两个方面,
谈 OLE 漏洞可以从 OLE文档的加载过程开始讲:
比如你打开一个 OLE文档,那么其加载过程分为两步,
        ① 初始化 OLE 对象(包括两个攻击面)
        ② 执行 Verb 动作(包括一个攻击面)

【漏洞分析】关于 OLE 漏洞的简单总结

两个步骤中共包括了三个攻击面(如上三个步骤都可以被攻击):
    第一步:初始化 OLE对象:
        如何初始化 OLE 对象呢,
        是通过 OLE32 这个 DLL 中的 OleLoad() 函数实现的(自己看下导出表)
        该函数的执行包含6个步骤,
        其中有两步分别调用了 CoCreateInstance() 和 IpersistStorage::Load 方法
            CoCreateInstance() 函数(攻击点一):
                第一个参数是 CLSID,指定了具体是哪一个 OLE 对象,
                这个 CLSID 可以首先在文档的二进制数据中读取到一个 ProgID,
                然后将 ProgID 转换成 CLSID,具体转换方法是通过两个函数 ProgIDFromCLSID CLSIDFromProgID,
                也可以在注册表中直接搜索 ProgID : Package或者OLE2Link ,
                可以很快定位到ProgID是 Package或OLE2Link 的 CLSID,
                这样 CocreateInstance() 函数就获取到了 CLSID,
                可以创建一个用来初始化该 OLE 对象的处理器handler,
                CoCreateInstance() 的作用和结果就是加载了与 CLSID 相关联的 DLL 到进程中,
                这也是很多 OLE 漏洞产生的原因,
                只要给这个函数一个 CLSID,那么它就会无脑加载该 CLSID 所属的DLL到进程空间中,
                后果就是攻击者完全可以修改二进制数据中的ProgID 值,
                以加载任何 DLL,只要这个DLL有关联的 CLSID 在注册表中,
                这就大大增加了攻击面,许多攻击手段发生在“加载CLSID相关联的DLL到进程中这一步”
                比如说有这么几种利用手段:
                1) 可以加载未开启 ASLR 的 DLL 到 WOrd Excel PPT 的进程中,
                    配合堆栈溢出等漏洞进行攻击
                    这里需要注意的一点是:不光 CLSID关联的 DLL会被加载进程中,
                    加载的 DLL 相关联的 未开启ASLR的DLL也可以被自动加载到进程中
                    不过从 Office2013 开始强制开启了 ASLR,这种利用手段就失效了
                    举例:mscormmc.dll
                        这个 Win7 上的 DLL 默认没有开启 ASLR,
                        但是有很多 CLSID 与这个 DLL关联,
                        构造一个带有其中 CLSID 的含有 OLE对象的Office或者 RTF文档,
                        就可以加载这个未开启 ASLR 的 DLL 到进程当中
                2) 可以造成 内存破坏
                3) 可以进行 DLL劫持
            IpersistStorage::Load() 函数(攻击点二):
                当 OLE 对象被确定之后,
                也就是找到了对应的 CLISD,加载了 CLSID关联的DLL到进程中,
                OLE对象的 IPersistStorage 接口中的 Load() 函数被调用,
                用来初始化 OLE 对象的初始状态
                这个“初始化”在我理解就是将序列化的 Storage Data进行分片读取,获取具体字段的值
    
    第二步:执行“Verb”动作(攻击点三):
        触发“Verb”动作有两种方法:
        ① 用户点击、双击插入的 OLE 对象,比如图片、链接等
        ② “Verb”自动执行,比如 PPT中的某些动画事件,又比如PPSX文档一打开就是自动执行
        这一步通常为逻辑漏洞,
        Verb 动作本质上是调用 IOleObject::DoVerb 方法完成的
        IOleObject的 CLSID为:00000112-0000-0000-C000-000000000046
        可以在注册表中搜索到,其实这可以被当做一个接口,
        IOleObject 这个接口提供了24个方法,DoVerb只是其中一个方法。
        容易受到攻击的是DoVerb() 方法的第一个参数 iVerb,
        iVerb的值可以在一些攻击者可以控制的地方被定义,比如 PowerPoing Show 的 Animations 字段。

【漏洞分析】关于 OLE 漏洞的简单总结

 

 

参考:

https://bbs.pediy.com/thread-219234.htm

https://bbs.pediy.com/thread-218941.htm

 

 

 

 

 

相关文章: