一种基于ActiveX组件模拟的网页木马检测方法

文档序号:6599216阅读:254来源:国知局
专利名称:一种基于ActiveX组件模拟的网页木马检测方法
技术领域
本发明属于计算机安全技术领域,涉及一种网页木马的检测方法,尤其是一种利用特殊构造的ActiveX组件模拟网页浏览过程中试图访问的ActiveX组件,由此检测出网 页是否存在木马的方法。
背景技术
网页木马是特殊构造的网页,当用户的浏览器解析执行这些网页时,操作系统、浏 览器及第三方组件中存在的漏洞将被利用,用户的计算机被植入木马、间谍软件、网络游戏 盗号器等恶意可执行程序。近年来,以网页木马为主的针对客户端的攻击逐渐增多,并在所有攻击案例中占 据了很大的比重。因此,如何有效检测和防范网页木马已经成为学术界和工业界共同关注 和研究的重要问题。网页木马具有更新频繁、变化快的特点,因此传统杀毒软件基于特征码 匹配的检测方法对网页木马难以凑效。网页木马与正常网页的区别在于,网页木马执行期 间会产生危害用户系统的恶意行为。因此,网页木马检测的关键在于确认网页被浏览时是 否会对用户的系统造成损害。网页木马的检测方法根据网页是否被执行可以划分为两类静态检测与动态检 测。静态检测方法往往使用某种方式对目标网页进行语法分析,由此得到浏览器执行目标 网页时可能发生的行为。动态检测方法的基本思想是让目标网页在某个受控的环境中运 行,由此得到浏览器执行目标网页时实际发生的行为。静态检测方法具有资源消耗少、分析时间短等优点。入侵者为了保证网页木马的 存活率,往往会采用加密、插入干扰代码等手段对检测造成阻碍。这些对抗手段对静态检测 方法的干扰比较严重。动态检测方法的优势在于能够得到实际运行时刻的行为,检测的准确率很高。动 态检测可以忽视网页木马中的加密等手段,直接得到网页木马实际产生的行为。动态检测 方法最大的问题在于,难以构造全面的运行环境,为了使网页木马的行为充分展现出来,需 要尽量满足网页木马执行的各种条件。例如,某个网页木马利用了暴风影音的某个漏洞进 行攻击,为了使该网页木马展现出攻击行为,必须在运行环境中安装相应版本的暴风影音; 如图1所示,为现有技术中网页创建ActiveX组件的情况,浏览器访问目标网页,当目标网 页请求创建组件N的对象,如果该组件N确实存在,直接创建组件N的对象n,并返回对象η 的入口地址,而当系统中不存在该组件N时就会产生错误信息。现有技术中的缺陷在于在运行环境中安装大量的第三方浏览器组件对于构建动 态检测环境来说是一个沉重的负担,而且组件之间的不兼容也会使检测环境变得不稳定, 对检测结果造成影响,因此需要一种高效、准确的检测手段来检测出网页中存在的木马。

发明内容
由于网页木马主要通过利用AcitveX组件中的漏洞来进行攻击,其主要表现是将超长参数传递给ActiveX组件某个函数进行溢出攻击、将特殊构造的参数传递给组件的某 个函数引发异常行为或者以某种特殊的顺序调用组件中的函数,因此本发明克服了现有技 术中的缺点,提供了一种基于ActiveX组件模拟的网页木马检测方法,使用一个组件模拟 网页木马试图创建的ActiveX组件,获取网页木马执行过程中访问的函数及参数,为网页 木马检测提供依据,解决了动态检测运行环境需要安装大量第三方浏览器组件的问题。本发明的技术方案概述如下一种基于ActiveX组件模拟的网页木马检测方法,其步骤包括1)构造一个ActiveX组件M,其对象实例m用于模拟目标网页中缺失的组件N;2)编写一个动态链接库钩挂WINDOWS系统中负责ActiveX组件M创建的API (应 用程序编程接口),记录组件M的对象实例m的入口地址与组件N的组件名之间的对应关 系;3)调用浏览器访问目标网页,当目标网页请求创建缺失的组件N时,由对象实例m 将目标网页访问的组件名、组件中的函数以及参数信息记录到日志文件;4)解析日志文件,判定目标网页是否为网页木马。所述步骤1)组件M的对象实例m的IDispatch接口能够模拟出组件N所有的成 员函数和成员变量;组件M的对象实例m的IDispatch接口能够响应并记录外部程序对组件N任何成 员的访问请求。所述步骤2)动态链接库钩挂的负责组件M创建的API包括CoGetClassOb ject (创 建指定CLSID组件的类场)、CoCreateInstanceEx (创建指定CLSID组件的对象)和 CLSIDFromProgID (为指定ProgID的组件查找对应的CLSID)。动态链接库钩挂CLSIDFromProgID的方法为1)钩挂程序调用原始的CLSIDFromProgID函数查询网页提供的ProgID (字符串形 式的组件标识)所对应的CLSID (唯一标识符),如果查询成功,直接返回CLSID,否则进入 第2)步;2)以当前系统时间为参数生成一个伪造的CLSID ;3)在动态链接库中记录第2)步伪造的CLSID与网页提供的ProgID之间的对应关 系,将伪造的CLSID返回。动态链接库钩挂CoGetClassObject的方法为1)钩挂程序调用原始的CoGetClassObject函数创建CLSID参数所代表组件的类 场,如果创建成功,直接将创建成功的组件类场返回;否则进入第2)步;2)使用组件M的CLSID作为参数调用原始的CoGetClassObject函数创建缺失组 件N的类场;3)记录组件M类场入口地址与当前请求创建组件的CLSID之间的对应关系,返回 组件M类场。动态链接库钩挂CoCreateInstanceEx的方法为1)调用原始的CoCreatelnstanceEx函数创建CLSID参数所代表的组件的对象,如 果创建成功,直接将创建成功的组件对象返回,否则进入第2)步;2)使用组件M的CLSID作为参数调用原始的CoCreatelnstanceEx函数创建组件N的对象。3)记录组件M对象实例m的入口地址与当前请求创建组件N的CLSID之间的对应关系,返回对象实例m的入口地址。所述步骤3)对象实例m通过IUNKN0WN接口得到入口地址,将入口地址通过IPC 消息发送到负责钩挂系统API的动态链接库中,查询得到当前对象所模拟组件N的名称。所述步骤3)对象实例m通过GetIDsOfNames函数的参数得到成员函数名。所述步骤3)对象实例m通过的Invoke函数的参数得到组件成员函数的调用参数 列表。所述步骤4)按照如下方法进行网页木马判定1)以组件名检索漏洞库,如果有结果,进入下一步,否则跳到4)步;2)以函数名检索上一步的结果,如果有结果,进入下一步,否则跳到4)步;3)参数列表中的参数如果符合漏洞库的规则,目标网页被判定为网页木马;4)漏洞库中不包含该组件或者函数的漏洞描述,检查每一个参数的长度,如果参 数过长则发出警报。与现有技术相比,本发明的有益效果是1.本发明的方法解决了动态检测运行环境需要安装大量第三方浏览器组件的问 题,通过模拟可能存在漏洞的组件,能够触发网页木马更多的攻击行为;2.能够得到网页木马在ActiveX组件调用这一层的攻击行为。


图1现有技术中网页创建ActiveX组件的示意图;图2本发明方法网页创建ActiveX组件的示意图;图3本发明方法中ActiveX模拟组件内部的工作流程图;图4钩挂ActiveX组件创建API的工作流程图。
具体实施例方式下面结合附图和具体实施方式
对本发明作进一步详细描述任何支持ActiveX组件开发的软件开发平台都能以类似的方式实现基于ActiveX 组件模拟的网页木马检测系统。下面以Delphi开发平台为例进行具体说明(使用其他开 发工具也可以按照类似的步骤完成)首先,构造ActiveX模拟组件M。ActiveX模拟组件M的特点为当组件M的具体对象实例m模拟组件N时,表现出 如下功能1、对象实例m通过IPC (进程间通信)消息查询到自己正在模拟的组件是N ;2、外部程序通过实例m的IDispatch接口查询组件N的任意成员时,都能够得到 一个成员id ;3、外部程序通过实例m的IDispatch接口调用组件N的任意成员时,调用行为都 记录到日志中。根据以上ActiveX模拟组件M的特点,具体构造ActiveX模拟组件M的过程如下
1、新建一个 ActiveX Library,保存时将其命名为 Simulate, dpr。2、在上一步创建的ActiveX Library中新建一个COM Object,可以将其命名为 CSimulate,这里将自动生成的文件保存为CSimulate. pas。3、在 TCSimulate 的类定义中将 IDispatch 接口的 GetIDsOfNames 和 Invoke 两个 函数定义为TCSimulate的成员函数。4、定义一个全局使用的字符串列表,这里记*t_list。设置一个全局计数器,这里
记为Co5、实现 IDispatch接口的 GetIDsOfNames 函数。GetIDsOfNames 函数的参数中,有 一个是字符串形式表示的成员名字,把这个表示成员名字的字符串复制到t_list[c]中, 然后把c作为成员的id返回,同时c变量增大1。6、实现IDispatch接口的Invoke函数。查询一下当前对象实例m的IUNKN0WN接 口得到当前对象的入口地址,将这个入口地址通过IPC(进程间通信)消息发送到负责钩挂 系统API的dll中,查询得到当前对象所模拟组件N的名称。Invoke函数的参数中,有一个 是当前请求调用成员的id,t_list[id]中存储的字符串就是这个成员的名字。Invoke函 数还有一个参数存储了调用t_list[id]成员所提供的参数列表。把前面得到的组件名、成 员名以及参数列表组合在一起写入到日志文件中。最后返回乙11计[1(1]成员调用失败的 fn息ο经过以上步骤构造出ActiveX模拟组件,其具体的工作流程如图3所示调用浏览器访问目标网页,当目标网页请求缺失的组件N时,ActiveX组件M的对 象实例m通过IUNKN0WN接口得到自身入口地址,通过入口地址查到缺失的组件N的组件 名;ActiveX组件M的GetIDsOfNames函数被调用,通过GetIDsOfNames函数的参数得到成 员函数名;ActiveX组件M的Invoke函数被调用,通过的Invoke函数的参数得到组件成员 函数的调用参数;将得到的组件名、函数名、参数等关键信息写入日志文件,用于木马检测 分析。其中,钩挂Windows系统API的方法流程如图4所示。当目标网页请求某一组件时,操作系统会调用原始的API创建组件对象;如果组 件可以创建成功,则不需要进行模拟;如果创建不成功,即请求创建的组件为缺失的组件 N,调用原始API创建ActiveX组件M,在dll中记录ActiveX组件M对象实例m的入口地址 与组件N的组件名之间的对应关系,将这一对应关系写入入口地址/组件名对应表,并提供 通过IPC消息进行查询的功能。编写一个dl 1 (动态链接库)负责钩挂操作系统中CLSIDFromProgID (为指定 ProgID的组件查找对应的CLSID)、CoGetClassObject (创建指定CLSID组件的类场)、 CoCreateInstanceEx (创建指定CLSID组件的对象)等负责ActiveX组件创建的API,具体 实现如下1)、CLSIDFromProgID 钩挂处理方法1. 1)调用原始的CLSIDFromProgID函数查询ProgID参数所对应的CLSID。如果 查询成功,说明系统中存在网页请求的组件,不需要进行组件模拟,直接返回CLSID即可; 否则进入第1.2)步。1. 2)进入到这一步,说明系统中不存在网页所请求的组件,无法在系统中查询到ProgID所对应的CLSID,为了使组件模拟能够顺利进行,需要伪造一个CLSID。这里以当前 系统时间为自变量产生一个伪造的CLSID。1. 3)记录第1. 2)步伪造的CLSID与传入的ProgID之间的对应关系。1. 4)将伪造的CLSID返回。2)、CoGetClassObject 钩挂处理逻辑2. 1)如果通过参数传入的CLSID具有伪造的特征, 说明这是一个需要模拟的组 件,直接进入第2. 3)步开始模拟;否则进入第2. 2)步。2. 2)调用原始的CoGetClassObject函数创建网页当前通过CLSID参数所指定组 件的类场。如果创建成功,说明系统中存在该CLSID所代表的组件,不需要进行组件模拟, 直接将创建成功的组件类场返回;否则进入第2. 3)步。2. 3)使用Simulate组件自身的CLSID作为参数调用原始的CoGetClassObject函 数创建模拟组件的类场。2. 4)记录Simulate类场入口地址与传入的CLSID之间的对应关系。2. 5 返回 Simulate 类场。3)、CoCreateInstanceEx 钩挂处理逻辑3. 1)如果通过参数传入的CLSID具有伪造的特征,说明这是一个需要模拟的组 件,直接进入第3. 3)步开始模拟;否则进入第3. 2)步。3. 2)调用原始的CoCreatelnstanceEx函数创建网页当前通过CLSID参数所指定 组件的对象。如果创建成功,说明系统中存在该CLSID所代表的组件,不需要进行组件模 拟,直接将创建成功的组件对象返回;否则进入第3. 3)步。3. 3)使用Simulate组件自身的CLSID作为参数调用原始的CoCreatelnstanceEx 函数创建模拟组件的对象。3. 4)记录Simulate对象的入口地址与传入的CLSID之间的对应关系。3. 5)返回Simulate对象的入口地址。4)、日志解析及网页木马判定。日志文件中一行记录了一次组件访问,其中包括目标网页访问的组件名、组件中 的函数以及参数。每行的第一个分隔符之前的是组件名,后面跟着的是函数名,再往后是参 数列表。完成一行的解析之后可以按照如下步骤进行网页木马判定4. 1)以组件名检索漏洞库,如果有结果,进入下一步,否则跳到4. 4)步;4. 2)以函数名检索上一步的结果,如果有结果,进入下一步,否则跳到4. 4)步;4. 3)参数列表中的参数如果符合漏洞库的规则,表示此次组件访问是一次攻击, 目标网页被判定为网页木马。4.4)漏洞库中不包含该组件或者函数的漏洞描述,可能是正常访问,也可能是未 知漏洞,检查每一个参数的长度,如果参数过长则发出警报。尽管为说明目的公开了本发明的具体实施例和附图,其目的在于帮助理解本发明 的内容并据以实施,但是本领域的技术人员可以理解在不脱离本发明及所附的权利要求 的精神和范围内,各种替换、变化和修改都是可能的。本发明不应局限于本说明书最佳实施 例和附图所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。
权利要求
一种基于ActiveX组件模拟的网页木马检测方法,其步骤包括1)构造一个ActiveX组件M,其对象实例m用于模拟目标网页中缺失的组件N;2)编写一个动态链接库钩挂WINDOWS系统中负责ActiveX组件M创建的API,记录组件M的对象实例m的入口地址与组件N的组件名之间的对应关系;3)调用浏览器访问目标网页,当目标网页请求创建缺失的组件N时,由对象实例m将目标网页访问的组件名、组件中的函数以及参数信息记录到日志文件;4)解析日志文件,判定目标网页是否为网页木马。
2.如权利要求1所述的方法,其特征在于,所述步骤1)组件M的对象实例m的 IDispatch接口能够模拟出组件N所有的成员函数和成员变量;组件M的对象实例m的IDispatch接口能够响应并记录外部程序对组件N任何成员的 访问请求。
3.如权利要求1所述的方法,其特征在于,所述步骤2)动态链接库钩挂的负责组件M 创建的 API 包括 CoGetClassObject、CoCreateInstanceEx 禾口 CLSIDFromProgID。
4.如权利要求3所述的方法,其特征在于,动态链接库钩挂CLSIDFromProgID的方法为1)钩挂程序调用原始的CLSIDFromProgID函数查询网页提供的字符串形式的组件标 识所对应的唯一标识符,如果查询成功,直接返回唯一标识符,否则进入第2)步;2)以当前系统时间为参数生成一个伪造的唯一标识符;3)在动态链接库中记录第2)步伪造的唯一标识符与网页提供的字符串形式的组件标 识之间的对应关系,将伪造的唯一标识符返回。
5.如权利要求3所述的方法,其特征在于,动态链接库钩挂CoGetClassObject的方法为1)钩挂程序调用原始的CoGetClassObject函数创建唯一标识符参数所代表组件的类 场,如果创建成功,直接将创建成功的组件类场返回;否则进入第2)步;2)使用组件M的唯一标识符作为参数调用原始的CoGetClassObject函数创建缺失组 件N的类场;3)记录组件M类场入口地址与当前请求创建组件N的唯一标识符之间的对应关系,返 回组件M类场。
6.如权利要求3所述的方法,其特征在于,动态链接库钩挂CoCreatelnstanceEx的方 法为1)调用原始的CoCreatelnstanceEx函数创建唯一标识符参数所代表的组件的对象, 如果创建成功,直接将创建成功的组件对象返回,否则进入第2)步;2)使用组件M的唯一标识符作为参数调用原始的CoCreatelnstanceEx函数创建组件 N的对象;3)记录组件M对象实例m的入口地址与当前请求创建组件N的唯一标识符之间的对应 关系,返回对象实例m的入口地址。
7.如权利要求1所述的方法,其特征在于,所述步骤3)对象实例m通过IUNKN0WN接 口得到入口地址,将入口地址通过进程间通信消息发送到负责钩挂系统API的动态链接库 中,查询得到当前对象所模拟组件N的名称。
8.如权利要求1所述的方法,其特征在于,所述步骤3)对象实例m通过GetIDsOfNames 函数的参数得到组件N的成员函数名。
9.如权利要求1所述的方法,其特征在于,所述步骤3)对象实例m通过的Invoke函数 的参数得到组件N成员函数的调用参数列表。
10.如权利要求1所述的方法,其特征在于,所述步骤4)按照如下方法进行网页木马判定1)以组件名检索漏洞库,如果有结果,进入下一步,否则跳到4)步;2)以函数名检索上一步的结果,如果有结果,进入下一步,否则跳到4)步;3)参数列表中的参数如果符合漏洞库的规则,目标网页被判定为网页木马;4)漏洞库中不包含该组件或者函数的漏洞描述,检查每一个参数的长度,如果参数过 长则发出警报。
全文摘要
本发明公开了一种基于ActiveX组件模拟的网页木马检测方法,其步骤包括1)构造一个ActiveX组件M,其对象实例m用于模拟目标网页中缺失的组件N;2)编写一个动态链接库钩挂WINDOWS系统中负责组件M创建的API,记录组件M的对象实例m的入口地址与组件N的组件名之间的对应关系;3)调用浏览器访问目标网页,当目标网页请求创建缺失的组件N时,由对象实例m将目标网页访问的组件名、组件中的函数以及参数信息记录到日志文件;4)解析日志文件,判定目标网页是否为网页木马。本发明的方法能够模拟可能存在漏洞的插件,可以触发网页木马更多的攻击行为;能够得到网页木马在ActiveX组件调用这一层的攻击行为。
文档编号G06F17/30GK101799855SQ20101012467
公开日2010年8月11日 申请日期2010年3月12日 优先权日2010年3月12日
发明者宋程昱, 诸葛建伟, 郭晋鹏, 钟金辉, 韩心慧, 龚晓锐 申请人:北京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1