著录项信息
专利名称 | 一种实现沙箱智能检测文件的方法及其沙箱智能检测系统 |
申请号 | CN201410381591.1 | 申请日期 | 2014-08-05 |
法律状态 | 暂无 | 申报国家 | 中国 |
公开/公告日 | 2014-12-10 | 公开/公告号 | CN104200161A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F21/56 | IPC分类号 | G;0;6;F;2;1;/;5;6;;;G;0;6;F;2;1;/;5;3查看分类表>
|
申请人 | 杭州安恒信息技术有限公司 | 申请人地址 | 浙江省杭州市滨江区通和路68号浙江中财大厦15层
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 杭州安恒信息技术股份有限公司 | 当前权利人 | 杭州安恒信息技术股份有限公司 |
发明人 | 李凯;李海彬;范渊 |
代理机构 | 杭州中成专利事务所有限公司 | 代理人 | 周世骏 |
摘要
本发明涉及恶意代码检测领域,旨在提供一种实现沙箱智能检测文件的方法及其沙箱智能检测系统。该种实现沙箱智能检测文件的方法,通过在沙箱进行文件行为检测时,将被检测文件提交到沙箱运行后,检测模块调用被检测文件,并通过API HOOK模块监控程序的运行行为,同时通过检测模块的智能模拟模块来充分还原被检测文件在真实环境下的运行情况。本发明通过专有程序实现了模拟人工操作,解决了当前动态行为分析过程中无法完整还原程序运行轨迹而导致恶意行为漏报的问题;通过API HOOK劫持技术解决了文件检测过程中被检测文件反虚拟化的问题。
1.一种实现沙箱智能检测文件的方法,用于对文件进行文件执行行为检测,其特征在于,具体包括下述步骤:
步骤一:沙箱模块接收待检测文件,根据规则生成检测任务,并将检测任务写入数据库中,检测任务状态标记为待检测;
所述检测任务包括自增类型的任务ID、检测文件的文件保存路径和文件类型、检测文件的校验值、指定当次检测文件的检测时间;
步骤一重复执行,且步骤一使用单独线程循环执行;
步骤二:沙箱模块连接并查询数据库,查询数据库中是否存在检测任务状态为待检测的任务,若无该状态的检测任务,则沙箱模块等待特定时间后重新进行查询操作;
若沙箱模块查询到检测任务状态为待检测的任务,沙箱模块调用虚拟主机公开接口函数查询当前是否存在可用于执行检测任务的虚拟主机:若当前虚拟主机均无法进行任务检测,则沙箱模块等待特定时间重新获取虚拟主机状态,若当前存在能用于进行任务检测的虚拟主机,则调用虚拟主机公开接口启动虚拟主机;
虚拟主机启动后,随虚拟主机一同启动的检测模块启动指定端口的监听工作;沙箱模块连接虚拟主机的监听端口,沙箱模块通过网络方式,将待检测任务提交给用于本次任务检测的虚拟主机中的检测模块;沙箱模块将当前提交的任务状态标记为已提交,并保持连接等待检测模块数据返回;
检测模块接收到检测任务,读取任务中的文件类型,并查询当前系统中是否存在对应的执行程序可用于执行该待检测文件,若存在则返回初始化成功,否则返回初始化失败;
步骤三:沙箱模块接收步骤二中检测模块返回的初始化信息,根据初始化是否成功来判断该虚拟主机是否可以进行当前检测任务,若初始化成功则表示可以检测当前文件,继续步骤四的处理;若初始化失败则表示不能执行当前检测任务,检测任务结束;沙箱模块将数据库中的当前检测任务状态标记为不可检测;
步骤四:沙箱模块通过网络方式上传待检测文件给检测模块,待检测文件传输完毕,沙箱模块保存与虚拟主机的连接,用来接收检测结果信息;沙箱模块标记当前任务状态为检测中;
步骤五:虚拟主机中的检测模块接收待检测文件,计算待检测文件的校验值,并与检测任务中的校验值进行比较,确认待检测文件是否完整;若待检测文件传输不完整,则检测模块与沙箱模块通信,要求沙箱模块重传待检测文件;若待检测文件传输完整,检测模块启动待检测文件,并使用suspend参数暂停该文件进程,同时启动定时器来记录该文件已经执行的时间;文件被暂停运行后,检测模块调用API HOOK模块注入到被检测文件的运行空间中,API HOOK模块注入成功后,检测模块恢复被检测文件运行,APIHOOK模块记录被检测文件的相关行为信息并将检测结果返回给检测模块;API HOOK模块在特定时间内未检测到被检测文件调用API HOOK模块中HOOK的系统函数,返回“特定时间无操作”给检测模块,检测模块根据该特征判断文件检测完成,跳转到步骤七执行;检测模块将接收到的API HOOK模块返回的文件行为信息通过网络方式传输给沙箱模块;若待检测文件启动失败或API HOOK模块注入失败则检测结束,同时返回检测异常指令给沙箱模块;沙箱模块在接受到检测失败的信息后,标记数据库中当前检测任务状态为检测失败,并跳到步骤七执行;
步骤六:检测模块启动智能模拟模块,智能模拟模块指通过程序方式识别被检测文件的运行窗口,并通过获取窗口内按钮及按钮标题,对比获取到的窗口标题与程序中预先设置的标题是否一致,用于判断是否需要对被检测文件施行人工模拟干预,来达到还原文件运行环境的目的,尝试获取被检测文件运行窗口、子窗口及窗口按钮;
若智能模拟模块获取被检测文件运行窗口、子窗口及窗口按钮成功,则匹配获取到的窗口按钮标题与预先设置的标题进行匹配:若匹配成功,智能模拟模块移动鼠标至匹配上标题的按钮上,执行鼠标左键单击操作,然后重复执行步骤六;若匹配不成功,则以当次检测任务中设置的检测时间来判断被检测文件运行是否结束,若在检测时间范围内,程序正常退出,则执行步骤八,若被检测文件运行时间达到检测任务中设置的检测时间,被检测文件依然在运行,执行步骤七;
步骤七:检测模块调用Processkill函数结束被检测文件;
步骤八:检测模块返回检测完成指令给沙箱模块;
步骤九:若沙箱模块接收到检测模块返回的检测异常指令,则标记当次检测任务为检测异常;
若沙箱模块在接收到检测完成指令前未接收到检测异常指令,则沙箱模块标记当次检测任务为检测完成,保存文件检测结果到文件,并将检测结果文件路径附加至当前检测任务中,以供其他程序使用;
沙箱模块在接收到检测完成的指令后,调用虚拟主机公开接口函数关闭执行当前检测任务的虚拟主机;
虚拟主机关闭完成后,沙箱模块调用镜像恢复函数恢复虚拟主机镜像,当次检测任务完成,重复执行步骤二。
2.基于权利要求1所述的一种实现沙箱智能检测文件的方法的沙箱智能检测系统,其特征在于,包括沙箱模块、虚拟主机;沙箱模块与虚拟主机构成了沙箱的主体;数据库包含于沙箱模块中,检测模块及其附属的智能模拟模块、API HOOK模块运行于虚拟主机中;
所述沙箱模块是沙箱智能检测系统的主体模块,负责接收待检测文件并生成检测任务、管理检测任务、发起文件检测、调度并管理虚拟主机、接收并保存检测结果;
所述数据库能采用任意类型的数据库,用于存储检测任务,供沙箱模块生成检测任务并管理检测任务使用;
所述检测模块是运行在虚拟主机上的检测执行程序,用于与沙箱模块通信,获取检测任务与被检测文件、执行文件检测并通过API HOOK模块监控文件执行过程、以网络方式回传被检测文件运行行为数据给沙箱模块;检测模块内置于虚拟主机中,随虚拟主机系统一同启动;其中,待检测文件是指检测任务中没有被提交检测的文件,该文件被提交至虚拟主机中进行检测时,则被称为被检测文件;
所述虚拟主机是运行在沙箱环境下的虚拟化程序以及在虚拟化程序下运行的操作系统,虚拟主机将启动后的状态保存为还原点。
一种实现沙箱智能检测文件的方法及其沙箱智能检测系统\n技术领域\n[0001] 本发明是关于恶意代码检测领域,特别涉及一种实现沙箱智能检测文件的方法及其沙箱智能检测系统。\n背景技术\n[0002] 现在的恶意软件会使用一些技巧,例如插入垃圾代码,代码位置互换,寄存器重新分配、等价代码替换等方式来躲避传统的基于签名的反恶意软件的检测,为了解决这类问题,众多厂商采用沙箱的方式来增强对恶意代码攻击行为的检测能力。\n[0003] 在使用沙箱进行恶意代码检测的过程中,恶意行为的判断基本上都是基于特征匹配的,例如在中国专利,一种恶意代码样本自动处理的方法及装置,CN201410032004.8的专利申请中,提出了采用提取静态特征匹配的方法,同时采用动态特征匹配作为补充。虽然很多沙箱也采用动态分析的方法,但在动态分析过程中存在沙箱环境下无法真实还原被检测文件运行轨迹的问题。\n[0004] 在使用沙箱作为文件分析的过程中,如何判断当前文件已经完成检测,各个厂家也有自己的标准,常用做法是设定一个程序的最长运行时间,当程序达到最长运行时间时判定程序检测完成,结束结束当前检测任务。这种方法存在的问题在于单个文件文件时间过长,即使文件已经无后续操作还需要等待运行超时,导致检测过程中存在无用的工作,降低了检测效率。\n发明内容\n[0005] 本发明的主要目的在于克服现有技术中的不足,提供一种实现沙箱智能检测文件的方法及其系统。为解决上述技术问题,本发明的解决方案是:\n[0006] 提供一种实现沙箱智能检测文件的方法,用于对文件进行文件执行行为检测,具体包括下述步骤:\n[0007] 步骤一:沙箱模块接收待检测文件,根据规则生成检测任务,并将检测任务写入数据库中,检测任务状态标记为待检测;\n[0008] 所述检测任务包括自增类型的任务ID、检测文件的文件保存路径和文件类型(通\n过Magic方式结合文件后缀获取文件类型:若Magic方式能取得文件类型,则将以Magic方式获取到的类型作为当前文件的文件类型,若Magic无法获取到程序文件类型时,则使用文件名后缀作为可执行文件的文件类型)、检测文件的校验值(使用哈希算法获取检测文件的校验值)、指定当次检测文件的检测时间;\n[0009] 步骤一重复执行,且步骤一使用单独线程循环执行;\n[0010] 步骤二:沙箱模块连接并查询数据库,查询数据库中是否存在检测任务状态为待检测的任务,若无该状态的检测任务,则沙箱模块等待特定时间后重新进行查询操作;\n[0011] 若沙箱模块查询到检测任务状态为待检测的任务,沙箱模块调用虚拟主机公开接口函数(例如使用VBoxManage showvminfo函数获取虚拟主机的当前运行状态)查询当前是否存在可用于执行检测任务的虚拟主机(已关闭或者已保存的虚拟主机均可用于执行检测任务):若当前虚拟主机均无法进行任务检测,则沙箱模块等待特定时间重新获取虚拟主机状态,若当前存在能用于进行任务检测的虚拟主机,则调用虚拟主机公开接口(例如使用VBoxManage startvm)启动虚拟主机;\n[0012] 虚拟主机启动后,随虚拟主机一同启动的检测模块启动指定端口的监听工作(监\n听端口号可在检测模块程序中予以指定);沙箱模块连接虚拟主机的监听端口,沙箱模块通过网络方式,将待检测任务提交给用于本次任务检测的虚拟主机中的检测模块;沙箱模块将当前提交的任务状态标记为已提交,并保持连接等待检测模块数据返回;\n[0013] 检测模块接收到检测任务,读取任务中的文件类型,并查询当前系统中是否存在对应的执行程序可用于执行该待检测文件,若存在则返回初始化成功,否则返回初始化失败;\n[0014] 步骤三:沙箱模块接收步骤二中检测模块返回的初始化信息,根据初始化是否成功来判断该虚拟主机是否可以进行当前检测任务,若初始化成功则表示可以检测当前文\n件,继续步骤四的处理;若初始化失败则表示不能执行当前检测任务,检测任务结束;沙箱模块将数据库中的当前检测任务状态标记为不可检测;\n[0015] 步骤四:沙箱模块通过网络方式上传待检测文件给检测模块,待检测文件传输完毕,沙箱模块保存与虚拟主机的连接,用来接收检测结果信息;沙箱模块标记当前任务状态为检测中;\n[0016] 步骤五:虚拟主机中的检测模块接收待检测文件,计算待检测文件的校验值,并与检测任务中的校验值进行比较,确认待检测文件是否完整(校验值一致则表示数据传输完整);若待检测文件传输不完整,则检测模块与沙箱模块通信,要求沙箱模块重传待检测文件;若待检测文件传输完整,检测模块启动待检测文件,并使用suspend参数暂停该文件进程,同时启动定时器来记录该文件已经执行的时间;文件被暂停运行后,检测模块调用API HOOK模块注入到被检测文件的运行空间中(API HOOK典型应用为microsoft的process \nmonitor,本发明使用相同思路进行API HOOK操作;本发明中的API HOOK模块运行在虚拟主机上,主要用于HOOK虚拟主机上的系统函数,包括但不限于创建进程函数、读写文件函数、删除文件函数、网络连接函数、访问注册表函数,并将记录的被检测文件的相关运行信息输出给检测模块;同时API HOOK函数还实现了对部分文件访问的访问劫持操作,当被检测文件尝试访问系统的特定资源时,例如检测模块尝试访问虚拟主机的VBoxService文件时,API HOOK模块劫持该访问请求,直接返回文件访问失败,以此来达到防止被检测文件通过访问虚拟机特征文件来判断当前运行环境是否为虚拟机的目的,API劫持的典型应用为部分杀毒软件使用的文件防火墙,本例使用其相同的思路实现),API HOOK模块注入成功后,检测模块恢复被检测文件运行,API HOOK模块记录被检测文件的相关行为信息并将检测结果返回给检测模块;API HOOK模块在特定时间内未检测到被检测文件调用API HOOK模块中HOOK的系统函数,返回“特定时间无操作”给检测模块,检测模块根据该特征判断文件检测完成,跳转到步骤七执行;检测模块将接收到的API HOOK模块返回的文件行为信息通过网络方式传输给沙箱模块;若待检测文件启动失败或API HOOK模块注入失败则检测结束,同时返回检测异常指令给沙箱模块;沙箱模块在接受到检测失败的信息后,标记数据库中当前检测任务状态为检测失败,并跳到步骤七执行;\n[0017] 步骤六:检测模块启动智能模拟模块,智能模拟模块指通过程序方式识别被检测文件(文件为exe类型)的运行窗口,并通过获取窗口内按钮及按钮标题,对比获取到的窗口标题与程序中预先设置的标题(预先设置的标题为智能模拟模块中预先设置的一些需要操作的按钮标题,这些标题包括但不限于“yes”、“ok”、“install”、“agree”、“run”、“continue”、“finish”、“accept”、“extract”、“接受”、“同意”、“下一步”、“完成”)是否一致,用于判断是否需要对被检测文件施行人工模拟干预,来达到还原文件运行环境的目的,尝试获取被检测文件运行窗口、子窗口及窗口按钮(获取程序运行窗口、子窗口、按钮相关操作的典型应用为microsoft的SPY++工具,本发明使用与其相同的思路进行相关信息获\n取);\n[0018] 若智能模拟模块获取被检测文件运行窗口、子窗口及窗口按钮成功,则匹配获取到的窗口按钮标题与预先设置的标题进行匹配:若匹配成功,智能模拟模块移动鼠标至匹配上标题的按钮上,执行鼠标左键单击操作,然后重复执行步骤六;若匹配不成功,则以当次检测任务中设置的检测时间来判断被检测文件运行是否结束,若在检测时间范围内,程序正常退出,则执行步骤八,若被检测文件运行时间达到检测任务中设置的检测时间,被检测文件依然在运行,执行步骤七;\n[0019] 步骤七:检测模块调用Processkill函数结束被检测文件;\n[0020] 步骤八:检测模块返回检测完成指令给沙箱模块;\n[0021] 步骤九:若沙箱模块接收到检测模块返回的检测异常指令,则标记当次检测任务为检测异常;\n[0022] 若沙箱模块在接收到检测完成指令前未接收到检测异常指令,则沙箱模块标记当次检测任务为检测完成,保存文件检测结果到文件,并将检测结果文件路径附加至当前检测任务中,以供其他程序使用;\n[0023] 沙箱模块在接收到检测完成的指令后,调用虚拟主机公开接口函数(例如\nVBoxManage controlvm)关闭执行当前检测任务的虚拟主机;\n[0024] 虚拟主机关闭完成后,沙箱模块调用镜像恢复函数(例如VBoxManage snapshot)\n恢复虚拟主机镜像,当次检测任务完成,重复执行步骤二。\n[0025] 提供基于所述的一种实现沙箱智能检测文件的方法的沙箱智能检测系统,包括沙箱模块、虚拟主机;沙箱模块与虚拟主机构成了沙箱的主体;数据库包含于沙箱模块中,检测模块及其附属的智能模拟模块、API HOOK模块运行于虚拟主机中;\n[0026] 所述沙箱模块是沙箱智能检测系统的主体模块,负责接收待检测文件并生成检测任务、管理检测任务、发起文件检测、调度并管理虚拟主机、接收并保存检测结果;\n[0027] 所述数据库能采用任意类型的数据库,用于存储检测任务,供沙箱模块生成检测任务并管理检测任务使用;\n[0028] 所述检测模块是运行在虚拟主机上的检测执行程序,用于与沙箱模块通信,获取检测任务与被检测文件、执行文件检测并通过API HOOK模块监控文件执行过程、以网络方式回传被检测文件运行行为数据给沙箱模块;检测模块内置于虚拟主机中,随虚拟主机系统一同启动;其中,待检测文件是指检测任务中没有被提交检测的文件,该文件被提交至虚拟主机中进行检测时,则被称为被检测文件;\n[0029] 所述虚拟主机是运行在沙箱环境下的虚拟化程序以及在虚拟化程序下运行的操\n作系统(例如在VirtualBox虚拟化软件中运行的windows操作系统),虚拟主机将启动后的状态保存为还原点。\n[0030] 本发明的工作原理:在沙箱进行文件行为检测时,被检测文件提交到沙箱运行后,检测模块调用被检测文件,并通过API HOOK模块监控程序的运行行为,同时通过检测模块的智能模拟模块来充分还原被检测文件在真实环境下的运行情况。\n[0031] 与现有技术相比,本发明的有益效果是:\n[0032] 通过专有程序实现了模拟人工操作,解决了当前动态行为分析过程中无法完整还原程序运行轨迹而导致恶意行为漏报的问题;通过API HOOK劫持技术解决了文件检测过程中被检测文件反虚拟化的问题。\n附图说明\n[0033] 图1为本发明的文件检测的主体流程图。\n[0034] 图2为本发明的实现智能检测的流程图。\n[0035] 图3为文件类型与执行程序对照表图。\n具体实施方式\n[0036] 首先需要说明的是,本发明涉及恶意代码检测技术,是计算机技术在信息安全技术领域的一种应用。在本发明的实现过程中,会涉及到多个软件功能模块的应用。申请人认为,如在仔细阅读申请文件、准确理解本发明的实现原理和发明目的以后,在结合现有公知技术的情况下,本领域技术人员完全可以运用其掌握的软件编程技能实现本发明。前述软件功能模块包括但不限于:沙箱模块、检测模块、API HOOK模块、智能模拟模块,凡本发明申请文件提及的均属此范畴,申请人不再一一列举。\n[0037] 下面结合附图与具体实施方式对本发明作进一步详细描述:\n[0038] 一种实现沙箱智能检测文件的方法,用于对待检测文件进行检测,具体包括下述步骤:\n[0039] 步骤一:沙箱模块循环接收被检测文件,根据规则(通过Magic方式结合文件后缀获取文件类型,Magic方式可以取得文件类型的,以该种方式获取到的类型作为当前文件的文件类型,Magic无法获取到程序文件类型时,使用文件名后缀作为可执行文件的文件类型;使用哈希算法获取待检测文件的校验值;指定当次待检测任务的检测时间)生成待检测任务,将检测任务状态标记为待检测,并将任务写入mysql数据库的task表中。\n[0040] 步骤二:沙箱模块连接mysql数据,查询task表,尝试获取检测任务状态为待检测的检测任务,若存在检测任务状态为待检测的检测任务,沙箱模块调用VBoxManage \nshowvminfo函数查询当前是否存在已关闭或者被挂起的虚拟主机可以用于当前检测任务,若当前虚拟主机均在运行状态,则沙箱模块间隔1秒重新获取虚拟主机状态,若当前存在可以用于检测的虚拟主机,则调用虚拟VBoxManage startvm函数启动虚拟主机;沙箱模块尝试连接虚拟主机的8000端口(8000端口为检测模块启动后进行通信监听的端口),端口连接成功,沙箱以文件的方式通过http协议上传检测任务给检测模块,检测任务上传完成,沙箱模块修改mysql数据库中当前待检测任务为已提交,同时等待检测模块传回的初始化结果;\n[0041] 检测模块随虚拟主机启动,并启动8000端口进行通信监听,检测模块接收到沙箱模块上传的检测任务文件后,读取当次检测任务文件,根据检测任务文件中的文件类型结合程序内部定义的文件类型执行方式,判断该文件是否可以正常运行,上述条件满足时,检测模块回传初始化成功给沙箱主程序,继续步骤三的处理;若初始化失败,检测模块回传初始化失败的信息给沙箱模块,沙箱模块接收到初始化失败的信息后,修改mysql数据库中的检测任务状态为不可检测,执行步骤六;\n[0042] 步骤三:沙箱模块接收到初始化成功的信息后,沙箱模块通过http方式上传待检测文件给检测模块,检测模块完成待检测文件的接收工作后,计算待检测文件的校验值,并与检测任务文件中记录的文件校验值进行对比,若校验值不一致则表示文件上传异常,检测模块回传文件异常给沙箱模块,要求沙箱模块重传被检测文件;若校验值一致则表示文件上传成功,检测模块使用suspend参数方式执行待检测文件,同时检测模块调用timer函数记录文件运行的时间;待检测文件被执行并暂停后,检测模块调用API Hook模块注入被检测文件的运行空间中,API HOOK模块注入成功,检测模块恢复被检测文件的运行,并接收API HOOK模块传回的被检测文件的文件行为信息,将这些行为通过http方式回传给给沙箱模块;若API HOOK模块注入失败,检测模块发送注入失败的信息给沙箱模块,沙箱模块修改mysql数据库中当前任务状态为检测失败;执行步骤四;\n[0043] 在检测模块执行被检测文件过程中,若API HOOK模块在特定的时间内未检测到被检测文件调用API HOOK模块中HOOK的系统函数,则API HOOK模块返回“特定时间无操作”给检测模块;检测模块在接收到API HOOK模块返回的“特定时间无操作”后,执行步骤四;\n[0044] 在检测模块执行被检测文件过程中,若API HOOK模块监控到被检测文件请求获取虚拟主机相关特征文件时,通过Windows的API hook技术劫持该文件请求,并返回请求文件不存在的结果信息给被检测文件;\n[0045] 其中,检测模块对被检测文件执行行为检测的具体过程为:\n[0046] A、检测模块使用suspend方式启动被检测文件;\n[0047] B、沙箱模块生成定时器,用以记录程序运行时间;\n[0048] C、被检测文件被挂起后,检测模块调用API HOOK模块执行进程注入操作,进程注入成功后,API HOOK模块开始过滤并记录文件行为信息,并将相关文件行为信息回传给检测模块;\n[0049] D、程序注入程序后,检测模块调用智能模拟模块,智能模拟模块具体工作包括:\n[0050] a、通过EnumWindows函数与EnumWindowsProc函数获取程序运行窗口信息;\n[0051] b、通过IsWindowVisible函数获取可视窗口;\n[0052] c、通过EnumChildWindows获取子窗口;\n[0053] d、通过GetClassName函数获取窗口属性为Button的窗口;\n[0054] e、通过GetWindowsText获取Button的文本信息;\n[0055] f、通过GetWindowRect获取Button的屏幕相对左上角的坐标范围;\n[0056] g、对比获取到的按钮文本是否在检测模块预先设置的文本列表内(文本列表为:\n{yes,ok,install,agree,run,continue,finish,accept,extract,接受,同意,下一步,完成}),若Button文本在文本列表范围内,则调用SetForegroundWindow函数将当前窗口前置,调用SetCursorPos函数将当前鼠标移至当前Button坐标范围,调用mouse_event函数执行鼠标左键单击操作;若Button文本不攒文本列表范围内,则继续获取下一个Button文件信息;\n[0057] h、重复执行步骤D;\n[0058] E、若步骤D执行过程中,被检测文件退出,则执行步骤六;\n[0059] F、若API HOOK模块在特定时间内未检测到被检测文件存在文件操作的行为,则\nAPI HOOK模块放回“特定时间无操作”给检测模块;检测模块在接收到APIHOOK模块返回的该特征后,执行步骤四;\n[0060] G、若步骤D未获取到在存在于文本列表内的文本信息,或被检测文件在检测任务设定的时间范围内未完成检测并退出程序,则执行步骤四;\n[0061] 步骤四:检测模块调用ExitProcess函数结束当前被检测文件执行进程\n[0062] 步骤五:检测模块返回检测完成指令给沙箱模块;\n[0063] 步骤六:若沙箱模块接收到检测模块返回的检测异常指令,则标记当次检测任务为检测异常;若沙箱模块在接收到检测完成指令前未接收到检测异常指令,则沙箱模块标记当次检测任务为检测完成,保存文件检测结果到文件,并将检测结果文件路径附加至当前检测任务中,以供其他程序使用;\n[0064] 沙箱模块在接收到检测完成的指令后,调用虚拟主机公开接口函数VBoxManage \ncontrolvm关闭执行当前检测任务的虚拟主机;\n[0065] 虚拟主机关闭完成后,沙箱模块调用镜像恢复函数VBoxManage snapshot恢复虚\n拟主机镜像,当次检测任务完成,重复执行步骤二;\n[0066] 本发明提供基于所述的一种实现沙箱智能检测文件的方法的沙箱智能检测系统,包括沙箱、沙箱模块、检测模块、虚拟主机;沙箱、沙箱模块、检测模块、虚拟主机之间的具体联系是:沙箱模块与虚拟主机构成了沙箱的主体,检测模块是运行在虚拟主机上,主要用于与沙箱通信,获取检测任务及待检测文件、执行待检测文件的文件检测任务,并将检测结果回传给沙箱模块;检测模块被配置在虚拟主机的开机启动中,随虚拟主机一同启动;\n[0067] 本发明仅针对智能沙箱系统中的文件行为分析过程,对于基于文件行为的恶意代码分析不在本发明的范围内;\n[0068] 本发明中所述沙箱模块是沙箱智能检测系统的主体模块,负责接收待检测文件并生成检测任务、管理检测任务、发起文件检测、调度并管理虚拟主机、接收并保存检测结果;\n[0069] 本发明中所述数据库可以为任意类型的数据库,用于存储检测任务,供沙箱模块生成检测任务并管理检测任务使用;\n[0070] 本发明中所述检测模块是运行在虚拟主机上的检测执行程序,用于与沙箱模块通信,获取检测任务与被检测文件、执行文件检测并通过API HOOK模块监控文件执行过程、以网络方式回传被检测文件运行行为数据给沙箱模块;检测模块内置于虚拟主机中,随虚拟主机系统一同启动;\n[0071] 本发明中所述虚拟主机是运行在沙箱环境下的虚拟化程序以及在虚拟化程序下\n运行的操作系统(例如在VirtualBox虚拟化软件中运行的windows操作系统),虚拟主机将启动后的状态保存为还原点;\n[0072] 本发明中所述待检测文件是指检测任务中没有被提交检测的文件,该文件被提交至虚拟主机中进行检测时,则被称为被检测文件;\n[0073] 下面的实施例可以使本专业的专业技术人员更全面地理解本发明,但不以任何方式限制本发明。\n[0074] 一种沙箱智能检测系统,该系统实现下述功能:\n[0075] 步骤一:获取待检测文件,生成检测任务;\n[0076] 步骤一称为任务生成步骤,任务生成步骤使用单独线程循环执行。\n[0077] 其中任务获取待检测文件类型包括以下4种:windows下的PE格式类型的文件,包括exe文件,dll文件、文档类型的文件,包括word文档,excel表格,ppt演示文档,PDF文档、脚本文件,包括bat文件,cmd文件,vbs文件、解析程序文件,包括py文件,jar文件。文件来源有2类:一类是通过流量监控等手段,采用流量文件分离方式获取指定类型的文件并提交检测,另一类是技术人员手工提交可以文件给沙箱系统进行检测。\n[0078] 任务生成步骤子步骤包括:\n[0079] 步骤101,沙箱读取待检测文件,并取得待检测文件的完整文件保存路径。\n[0080] 步骤102,沙箱模块调用Magic方式提取待检测文件的文件类型,无法获取文件类型的,使用文件名后缀作为该文件的文件类型;\n[0081] 步骤103,沙箱模块使用MD5、CRC等哈希算法计算待检测文件的校验值;\n[0082] 步骤104,沙箱模块获取待检测文件本次任务的执行时间,生成任务时未指定任务执行时间的,沙箱模块默认使用5分钟作为文件检测任务执行;\n[0083] 步骤105,沙箱获取当前时间作为任务提交时间;\n[0084] 步骤106,沙箱获取任务数据库中已存在的最后一条任务ID,将当前最后一条任务的任务ID数值递增1作为新任务的任务ID;\n[0085] 步骤107,沙箱模块将上述获取到的信息通过sql语句写入到mysql数据库中的检\n测任务表中,生成当前检测任务,标记该任务状态为待检测状态。\n[0086] 步骤二:沙箱模块将待检测任务提交到虚拟主机进行检测,并取回检测结果;\n[0087] 步骤二称为任务执行步骤,可具体包括如下子步骤。\n[0088] 步骤201,沙箱模块通过检测虚拟主机状态判断是否存在空闲的虚拟主机可用于\n进行新的任务检测\n[0089] 若存在虚拟主机状态为关闭、保存状态,则存在虚拟主机可用于新任务检测,执行步骤202\n[0090] 若当前虚拟主机均为运行状态,则沙箱模块等待1秒时间,重新查询虚拟主机状\n态,直到存在虚拟主机状态为关闭、保存状态时,执行步骤202\n[0091] 步骤202,沙箱模块查询mysql数据库的检测任务表,查找检测任务表中是否存在任务状态为待检测的任务;\n[0092] 若当前mysql数据库中的检测任务表中不存在任务状态为待检测的任务,则沙箱\n模块等待1秒时间,重复执行待检测状态任务的查找工作;\n[0093] 若检测任务表中仅查询到一条待检测任务,则沙箱模块执行步骤203进行任务提\n交;\n[0094] 若检测任务表中查询到多条待检测任务,则沙箱模块按任务提交顺序依次获取检测任务,执行步骤203进行任务提交,同时标记当前任务为已提交;沙箱模块可最多提交的同时进行文件检测的任务数量小于等于沙箱中配置的虚拟主机的数量;\n[0095] 步骤203,沙箱模块提交任务到虚拟主机,并取回文件检测记录,具体步骤包括:\n[0096] 沙箱模块执行操作如下:\n[0097] 1)、沙箱模块调用VBoxManage startvm函数启动虚拟主机;\n[0098] 2)、沙箱模块尝试连接虚拟主机的8000端口,端口连接成功则表示虚拟主机启动完成;\n[0099] 3)、沙箱模块通过http方式传输任务列表到虚拟主机,等待检测模块返回初始化结果;若检测模块返回初始化成功,则执行步骤4,若检测模块返回初始化失败,则关执行步骤204;沙箱模块标记当前检测任务为不可检测;\n[0100] 沙箱模块在接到虚拟主机返回系统初始化成功,读取待检测文件,并通过http方式将待检测文件传输给检测模块;\n[0101] 虚拟主机启动后执行操作如下:\n[0102] 1)、虚拟主机启动后,内置于虚拟主机的检测模块随虚拟主机一同启动;\n[0103] 2)、检测模块开启8000端口进行端口监听;\n[0104] 3)、检测模块接收到沙箱模块上传的任务配置信息,读取配置文件,获取待检测文件的文件类型,并通过文件类型及执行程序对照表(图3)查看当前是否存在相应的程序可以执行待检测文件;\n[0105] 若存在待检测文件对应的执行程序,检测模块通过8000端口返回初始化成功给沙箱模块,表示可以接收待检测文件;\n[0106] 若不存在待检测文件对应的执行程序,检测模块通过8000端口返回初始化失败给沙箱模块,表示当前系统无法完成该类型文件的检测,检测模块执行步骤206;\n[0107] 4)、检测模块完成待检测文件的接收工作,调用哈希算法计算待检测文件校验值,并对比配置文件中的待检测文件校验值,若校验值一致则表示程序完整,执行5),若校验值不一致则删除当前已接受文件,并要求沙箱模块重新传输该文件,直至文件完整,执行5);\n[0108] 5)、检测模块以suspend参数方式执行待检测文件,待检测文件被暂停后,检测模块调用API HOOK模块执行API HOOK注入操作;若待检测文件执行失败,或者API HOOK注入失败,则直接步骤206;\n[0109] 6)、若待检测文件执行成功,API HOOK注入成功,则检测模块调用智能模拟模块执行模拟检测;智能模拟模块执行步骤详见发明内容中检测模块对被检测文件执行行为检测的具体过程中的步骤D,在此不再赘述;\n[0110] 7)、执行文件检测过程中,API HOOK模块在10秒内未检测到被检测文件调用API HOOK模块中HOOK的系统函数,则返回“特定时间无操作”给检测模块,执行步骤204;\n[0111] 8)、执行文件检测过程中,若被检测文件正常退出,执行步骤206;\n[0112] 9)、执行文件检测过程中,被检测文件持续执行,API HOOK模块未返回“特定时间无操作”给检测模块,若检测时间达到了检测任务中设定的时间(默认为5分钟),执行步骤\n204;\n[0113] 步骤204,检测模块调用ExitProcess函数关闭被检测文件进程;\n[0114] 步骤205,检测模块返回检测成功;\n[0115] 步骤206,沙箱模块调用VBoxManage controlvm函数关闭执行当前检测任务的虚\n拟主机;沙箱模块将mysql数据库中检测任务表的当前检测任务状态修改为检测完成;沙箱模块将接收到的文件行为信息保存至磁盘的目录中,并将该文件的路径信息添加至检测任务表的任务结果中;\n[0116] 步骤207,沙箱模块使用VBoxManage snapshot函数恢复虚拟主机镜像;\n[0117] 至此,一个待检测文件的检测任务完成。\n[0118] 最后,需要注意的是,以上列举的仅是本发明的较佳实施例,并不用以限制本发明,本领域的普通技术人员能从本发明公开的内容中直接导出或联想到的所有变形,均应包含在本发明的保护范围内。
法律信息
- 2018-04-13
专利权人的姓名或者名称、地址的变更
专利权人由杭州安恒信息技术有限公司变更为杭州安恒信息技术股份有限公司
地址由310051 浙江省杭州市滨江区通和路浙江中财大厦15层变更为310051 浙江省杭州市滨江区通和路68号浙江中财大厦15层
- 2017-01-25
- 2015-01-07
实质审查的生效
IPC(主分类): G06F 21/56
专利申请号: 201410381591.1
申请日: 2014.08.05
- 2014-12-10
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2014-07-02
|
2013-11-12
| | |
2
| |
2014-07-16
|
2014-04-21
| | |
3
| |
2012-01-11
|
2010-07-01
| | |
4
| |
2011-04-27
|
2011-01-25
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |