CN101977188A - 恶意程序检测*** - Google Patents
恶意程序检测*** Download PDFInfo
- Publication number
- CN101977188A CN101977188A CN2010105153433A CN201010515343A CN101977188A CN 101977188 A CN101977188 A CN 101977188A CN 2010105153433 A CN2010105153433 A CN 2010105153433A CN 201010515343 A CN201010515343 A CN 201010515343A CN 101977188 A CN101977188 A CN 101977188A
- Authority
- CN
- China
- Prior art keywords
- program
- detected
- function
- virtual machine
- file
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种恶意程序检测***,包括用户交互模块、控制模块、由多个虚拟机组成的虚拟机群以及运行在所述虚拟机上的监视模块;其中,虚拟机群中的各个虚拟机运行在不同的软件环境下,且虚拟机安装有至少一种杀毒软件;用户交互模块将待检测的程序提交给控制模块,由控制模块将待检测程序分配到虚拟机群的各个虚拟机上并运行,监视模块监测待检测程序在虚拟机上的运行过程,根据杀毒软件的检测结果与自身的监测情况提交检测报告。本发明具有多平台检测,准确性高,适用性广的优点。
Description
技术领域
本发明涉及计算机安全领域,特别涉及一种恶意程序检测***。
背景技术
当前,计算机已经广泛深入到人们的日常生活中,人们每天都要与各种计算机程序打交道。现在获得计算机程序的途径有很多,包括:从网站或FTP下载得到、从光盘得到、从移动存储设备传递得到、从电子邮件中得到、通过即时通讯软件传输得到等多种方式,这其中就混杂着大量的恶意程序。
近年来,恶意程序的发展有愈演愈烈的趋势,知名安全领域厂商卡巴斯基公布的2009年网络安全报告中显示,2009年网络恶意程序的数量超过了3300万种,相比2008年的统计结果增长了接近100%;恶意程序中仍主要以木马、蠕虫为主,很多都是伪装成正常的程序来感染用户计算机。恶意程序的欺骗性和生存能力也越来越好,很多恶意程序都可以附着在具有正常功能的程序之上,用户在运行了恶意程序的时候发现它具有正常的功能而放松了警惕;更有一些恶意程序可以绕过一些杀毒软件的检测,甚至有针对杀毒软件的某一检测机制的反制策略,从而使得恶意程序的检测越来越困难。据国家计算机病毒应急处理中心与计算机病毒防治产品检验中心联合发布的报告,2009年计算机病毒感染率为70.51%,其中多次感染病毒的比率为42.71%。与之相伴的恶意程序带来的危害越来越大,有窃取账号与密码,窃取重要信息,进行远程控制功能的恶意程序越来越多,据相关报告显示,27.14%的用户在受到恶意程序侵害之后出现了密码被盗的情况。
面对如此严峻的网络安全形势,用户能否准确地检测恶意软件的存在变得十分重要,尤其对于公司、政府机关以及重要单位的计算机来说,如果受到恶意程序的感染,会造成难以估计的损失。
虽然现在很多网络安全公司在对恶意程序检测进行研究,但是仍然没有一个无懈可击的解决方案。目前主要存在以下三种检测恶意程序的方法:
(1)人工分析法:通过对程序的二进制代码进行静态分析来判断其是否存在恶意行为,或者运行程序,对其动态行为特征进行观察,来判断其是否有恶意行为,进而判断此程序是否是恶意程序;
(2)杀毒软件分析法:利用本机安装的杀毒软件来扫描程序,判断其是否是恶意程序,杀毒软件也会对本机运行中的程序进行行为监视,来进行动态查杀;
(3)上传到恶意程序分析网站进行分析:将程序上传到恶意程序分析网站进行分析,在一段时间后,网站会将一份分析结果返回给用户,这样的网站有http://www.virustotal.com等。
前述方法(1)中的人力成本开销极大,对程序进行静态分析需要有熟悉汇编语言的专业计算机工程技术人员对程序进行人工分析,并且对于比较复杂的程序,通过对二进制代码的分析来得到程序的所有行为是一件工作量极大的事情以至于实践中不可行;对程序进行动态分析时,通过观察程序运行过程难以达到分析的完备性,并且由于人工难以捕捉所有细节和过程,所以方法(1)的分析结果也难以作到可靠准确。方法(2)中利用本机杀毒软件对程序进行检测,由于单一杀毒软件的病毒库难以做到完备,并且在检测机制容易被病毒绕过或者有针对性的反制,所以难以避免对恶意程序的漏查漏杀,据金山云安全服务器监测到的数据,2009年被各种安全软件漏杀且漏杀期1-7天的病毒木马超过100万个,占到新增病毒的5%。方法(3)无法在封闭的内网环境下使用,而封闭内网环境在企业、部队和重要机关中是极为常见的,并且由于这样的检测需要将程序上传,就可能存在隐私与知识产权无法得到保障的问题,再者由于网速与网络环境的问题,通过方法(3)也无法进行快速批量的检测。
发明内容
本发明的目的是克服现有技术中对恶意程序检测的检测结果不准确、不完备的缺陷,从而提供一种准确、快速、高效的恶意程序检测***。
为了实现上述目的,本发明提供了一种恶意程序检测***,包括用户交互模块、控制模块、由多个虚拟机组成的虚拟机群以及运行在所述虚拟机上的监视模块;其中,所述虚拟机群中的各个虚拟机运行在不同的软件环境下,且所述虚拟机安装有至少一种杀毒软件;
所述用户交互模块将待检测的程序提交给控制模块,由所述控制模块将待检测程序分配到所述虚拟机群的各个虚拟机上并运行,所述监视模块监测待检测程序在所述虚拟机上的运行过程,根据杀毒软件的检测结果与自身的监测情况提交检测报告。
上述技术方案中,所述监视模块被启动后,首先检测所在虚拟机安装的杀毒软件的名称与版本,然后检测待检测程序文件是否存在,如果存在,就启动该待检测程序,然后再次对待检测程序文件存在与否进行检测,如果仍然存在,则进一步检测此程序的进程是否存在,如果存在,则检查此待检测程序是否有网络通信行为,如果有,作为可疑的程序特征进行记录。
上述技术方案中,所述的控制模块从外部网络接收杀毒软件包,以对所述虚拟机中所安装的杀毒软件进行升级。
上述技术方案中,所述的用户交互模块采用图像化用户操作界面、命令行交互方式、服务器浏览器交互方式中的一种实现。
上述技术方案中,所述检测报告包括用于记录以下内容的字段:程序名、杀毒软件名称、杀毒软件版本号、是否是病毒,网络行为特征。
本发明的优点在于:
1、多平台检测,准确性高,适用性广。
2、可以快速批量检测程序。
3、可为不适于进行外网连接的用户提供服务。
4、检测过程不会泄露隐私和机密。
附图说明
图1为本发明的恶意程序检测***的结构图;
图2为本发明中所涉及的图形化用户界面的示意图;
图3为本发明的恶意程序检测***中的监视模块的工作流程图;
图4为本发明的恶意程序检测***中的控制模块的工作流程图。
具体实施方式
下面结合附图和具体实施方式对本发明做进一步说明。
封闭内网(Intranet)是指在一个组织内部使用的,使用因特网网络通信协议来工作的,用来安全地在组织内共享信息和网络操作***的私有网络。出于安全考虑,封闭内网在军队、国家机关等场所具有广泛的应用。本发明的恶意程序检测***主要适用于封闭内网环境,因此在下面的实施例中以封闭内网环境为例,对本发明的恶意程序检测***进行说明,但并不意味着本发明的恶意程序检测***只能用于封闭内网环境中,在其他网络环境中同样适用。
参考图1,本发明的恶意程序检测***包括用户交互模块、控制模块、虚拟机群以及运行在所述虚拟机群中各个虚拟机上的监视模块。所述的用户交互模块位于各个用户的客户端计算机上,通过该模块,用户可以上传待检测的程序,并在之后得到待检测程序是否为恶意程序的综合检测报告。所述的控制模块、虚拟机群以及监视模块都可位于服务器上,其中,所述的控制模块将从用户交互模块得到的待检测程序分配到所述虚拟机群的各个虚拟机上,各个虚拟机对待检测程序的检测结果也由该模块进行汇总,所生成的综合检测报告由该模块发送给所述的用户交互模块。所述的虚拟机群包括有多个虚拟机,各个虚拟机运行在不同的软件环境下,如具有不同的操作***环境,运行不同的杀毒软件,配置有不同的软件应用环境。所述的监视模块对所在虚拟机中的待检测程序的运行过程与运行结果进行监视,一旦发现有恶意程序,给出相应的报告。
以上是对本发明的恶意程序检测***中各个模块的功能的总体描述,下面对这些模块的详细功能及其具体实现方法进行说明。
用户交互模块
用户交互模块是本发明的恶意程序检测***向用户提供的一个接口,通过该接口用户可以上传待检测的程序以及得到对上传的待检测程序的检测报告。用户交互模块可以由多种方式实现,如图形化用户操作界面(GUI)方式,命令行交互方式,服务器浏览器交互(BS)方式等。在一个实施例中,用户交互模块通过图形化用户操作界面方式实现,它向用户提供了一个图形化的用户界面。图2中给出了该图形化用户界面的示例图,该图中,用户界面上有一个“选择要上传的程序”的输入框,用户可以直接在此输入框内输入待检测程序的路径或点击“浏览”按钮来选择待检测的程序;在它们的下面一排有一个“选择要上传的程序目录”的输入框,可以在其输入或点击“浏览”按钮来选择待检测的程序所在目录的路径。点击“选择要上传的程序”所对应的“浏览”按钮之后,会弹出一个文件选择对话框,通过对话框可以选择待检测的文件;点击“选择要上传的程序目录”所对应的“浏览”按钮之后,会弹出一个目录选择对话框,通过此对话框可以选择待检测文件的目录。在这些输入框的下方,有一个“开始上传”按钮,点击“开始上传”按钮之后,用户交互模块将选择的文件或目录上传到控制模块;上传完文件或目录之后,用户交互模块开始接收来自控制模块的检测报告,这个报告会在“检测结果报告”文本框中显示。所述的检测报告包含此程序在每个杀毒软件平台下的检测结果,在一个实施例中,所述检测报告的内容包括程序名、杀毒软件名称、杀毒软件版本号、是否是病毒,网络行为特征这五个字段,其中程序名是被检测的程序文件名,杀毒软件名称是杀毒软件在***中的显示名称,杀毒软件版本号是标识此杀毒软件版本的数字串,是否是病毒是被检测程序是否被此杀毒软件查杀,网络行为特征是对被测试程序的网络通信行为的描述。在其他实施例中,检测报告也可以包含其他内容。
下面以Microsoft Visual Studio 2008软件环境为例,对如何创建用户交互模块的过程进行说明,本领域普通技术人员参考这一过程,可以在其他软件环境中创建该模块。
(1)、首先绘制图形化用户交互界面,步骤如下;
i.先设计“选择待检测程序”的用户界面,通过步骤i,ii,iii完成,打开界面设计窗口,从工具箱拖拽一个label控件,放在界面左上端,在label控件的属性窗口,修改Content属性的内容为“选择要上传的程序”;
ii.拖拽一个textBox控件放在label控件的右边,将其Name修改为textBox_Program;
iii.拖拽一个Button控件,放到textBox控件右边,修改Button控件属性,将其text属性内容修改为“浏览”,将其Name修改为Button_SelectFile;
iv.“选择待检测程序目录”的用户界面采用与上面相同的设计,在前面那三个控件下方,摆放相同的一排控件,将其中label控件的Content修改为“选择要上传的程序目录”,将textBox控件的Name修改为textBox_Folder,将Button控件的Name修改为Button_SelectFolder;
v.在以上那些控件下面添加一个Button控件,将其Content属性修改为“上传”,将其Name修改为Button_Upload;
vi.在界面的最下方添加一个textBox控件,将其Name修改为textBox_Report,并将其VerticalScrollBarVisibility属性修改为“Auto”,在其左上方添加一个Content为“检测结果报告”的Label控件。
根据上述步骤所完成的界面如附图2所示。
(2)、为名称为Button_SelectFile的控件添加响应函数。
在该响应函数中包含“选择文件控件”所需要的引用,在Microsoft VisualStudio 2008的解决方案管理器上,添加引用(reference):System.Windows.Forms,并且在代码文件中添加声明要使用前述引用的如下代码“using System.Windows.Forms”。
当在界面上双击Button_SelectFile控件以调用响应函数后,该函数首先创建一个System.Windows.Forms.OpenFileDialog对象,将其过滤器设为“可执行文件*.exe|*.exe|所有文件|*.*”,再调用OpenFileDialog对象的方法ShowDialog()来显示控件,用户可以通过此控件完成选择要检测的可执行程序的操作;接着将名为textBox_Program控件的Text内容修改为OpenFileDialog控件的FileName属性,此时textBox_Program控件中显示的内容就是用户选择的待检测程序的路径;最后将textBox_Folder控件中的内容清空,以免发生冲突。
(3)、为名称为Button_SelectFolder的控件添加响应函数。
由于在C#中没有选择文件夹的对话框控件,因此可以用C#的FolderNameEditor类的子类FolderBrowser类来实现浏览文件夹对话框的功能,具体包括以下步骤。1)在解决方案中添加新的引用System.Design,并添加如下代码“using System.Windows.Forms.Design”;接着新建一个FolderDialog类,此类从FolderNameEditor类继承,在此类中新建一个FolderBrowser类的对象;在此类中添加DisplayDialog(string description)函数用于设置对象的属性,并且显示浏览文件夹对话框;为了取得文件夹的路径,设置一个Path属性,返回选取的文件夹的路径;2)接着在程序设计界面上双击Button_SelectFolder控件来进入响应函数代码,创建一个FolderDialog对象,并调用其中的DisplayDialog方法来显示此控件,用户可以通过文件夹选择对话框完成选择待检测程序目录的操作;3)将名为textBox_Folder控件的Text内容修改为FolderDialog类中的Path属性,即为检测程序目录的路径;4)最后将textBox_Program控件中的内容清空,以免发生冲突。
(4)、创建函数SendFile(),该函数用来向所述的控制模块发送一个待检测程序文件(注:使用到网络通信相关的类时,需要包含相应的引用,在代码中添加如下内容″using System.Net;using System.Net.Sockets;″)。
该函数在执行过程中,首先将用来表示待检测程序文件的FileInfo对象中的Length和Name属性提取出来,组成一个结构体,接着调用网络通信数据流NetStream对象中的Write()方法,将此结构体发送给控制模块;然后调用FileInfo类对象的Open()方法,分别将三个参数设为:FileMode.Open,FileAccess.Read,FileShare.None。Open()方法将返回一个FileStream对象;再接着在一个循环体中,调用FileStream对象的Read方法,将文件读出一部分到缓冲区中,如果读出的文件长度不为0,则调用网络通信数据流NetStream对象的Write()方法,将缓冲区的数据发送给控制模块,直到读出的文件长度为0为止,跳出循环;最后调用FileStream对象的Close()方法,关闭文件。如此便完成了将一个待检测程序文件的发送给检测服务器功能。
(5)、创建函数SendMultiFiles(),该函数用来向所述的控制模块发送一个目录下的所有文件。
该函数首先以目录路径为初始变量声明一个DirectoryInfo对象;接着调用DirectoryInfo对象的GetFiles()方法返回的目录下所有文件的FileInfo数组;然后用foreach方法来遍历此数组,在循环体中,以当前的FileInfo和网络通信数据流NetStream对象为参数,调用SendFile()函数,完成对FileInfo对象对应的程序文件的发送过程;每次发送完毕之后,判断是否已经全部发送完,如果没有则调用NetStream对象中的Write()函数,发送字符串“more”,如果已经发送完毕,调用NetStream对象中的Write()函数,发送字符串“done”;通过遍历FileInfo数组中的对象并依次调用SendFile(),可以完成此目录下所有程序文件的发送过程。
(6)、为名称为Button_Upload的控件添加响应函数。
当用户双击名称为Button_Upload控件时可调用该响应函数,该函数首先创建一个与服务器进行通信的TcpClient对象;接着调用对象内的Connect函数与控制模块建立连接;接着调用TcpClient对象的Connect()方法,返回一个与控制模块通信的网络通信数据流NetStream对象;然后再判断textBox_Program中是否有内容,如果有,则调用以textBox_Program中的内容为初始值来创建FileInfo对象,并以FileInfo对象和通信数据流NetStream对象为参数调用SendFile()函数,完成对一个待检测程序文件的发送过程;如果textBox_Folder中有内容,则以textBox_Folder中内容和通信数据流NetStream对象为参数调用SendMultiFiles()函数,以完成对选定目录中程序的发送;再接着调用NetStream对象的Read()函数,接收从控制模块发送的报告,并将textBox_Report中的内容设置为接收到的报告的内容;最后,分别调用TcpClient对象和NetStream对象的Close()方法,断开与控制模块的连接。
(7)、以Release模式编译,所得到的程序即为所述的用户交互模块。
虚拟机群
所述的虚拟机群包括多个虚拟机,正如前文所提到的,各个虚拟机上的软件环境应当各不相同,如它们所安装的操作***、杀毒软件、所配置的应用软件环境。为了能够更好地检测出恶意程序,虚拟机所能模拟的软件环境应当尽可能地全面,以体现多平台的特性。
虚拟机群可以通过现有技术中已有的虚拟机软件在服务器上实现,所述的虚拟机软件包括VMware,Virtual PC,Parallels Workstation,Virtual Box等,由于VMware提供了比较成熟的API,也被称作Vix接口,可被方便地用来对虚拟机进行操作,因此在下文中都以VMware虚拟机软件及其提供的Vix接口为例对控制模块和监视模块的实现进行说明,但同样能够以以其他虚拟机软件实现的虚拟机群为基础,实现所述控制模块和监视模块。
控制模块
控制模块在接收到待检测程序以后,将其上传到虚拟机群进行检测并将检测报告回传给用户交互模块。具体的说,在一个实施例中,如果接收到的待检测程序只有一个,那么控制模块将会首先调用相应接口,如Vix接口,为虚拟机群中的每一个虚拟机创建一个快照,然后继续调用该接口将待检测程序拷贝到每一个虚拟机中,并调用该接口运行虚拟机中的监视模块,由它来完成检测与报告成生的操作。由于整个检测过程需要的时间很短,一般只要几秒钟,因此控制模块在等待一个充分长的时间之后,如30秒,就可以调用诸如Vix接口将监视模块生成的检测报告文件从虚拟机中拷贝出来并且将虚拟机的快照恢复。这样创建并且恢复快照的过程是为了预防恶意程序对虚拟机***的破坏。如果待检测的程序有多个,那么就要对每一个程序完成上面的操作,然后将所有的报告文件汇总成为一个总报告之后,再将总报告以字符串的形式发送给用户交互模块。
在封闭内网环境下,控制模块、虚拟机群以及监视模块所在的服务器处于网关地位,该服务器包括有两个网卡:一个作为内网接口与封闭内网环境中的主机通信,一个作为外网接口与外部网络连接。在此情况下,控制模块还具有从外部网络接收杀毒软件升级包,从而对安装在虚拟机中的杀毒软件进行升级的功能。
仍然以Microsoft Visual Studio 2008软件环境为例,对如何创建控制模块的过程进行说明,本领域普通技术人员参考这一过程,可以在其他软件环境中创建该模块。
(1)、创建接收文件函数RecvFile(),该函数用来接收用户交互模块向控制模块发送的待检测文件。
在创建该函数的过程中,首先以网络通信套接字s为参数调用recv()函数来得到一个包括文件信息的结构体struct FileInfo(文件长度,文件名字符串),(注:使用有关网络通信的函数recv(),以及后面要提到的WSAStartup(),socket(),bind(),listen(),accept(),send()等,需要包含头文件winsock2.h,该文件包含在Ws232库中);然后利用文件名信息调用CreateFile()在路径“C:\\tempFiles\\文件名”上创建一个新文件;接着在一个while循环中调用recv()接收从套接字s发来的数据,并调用WriteFile函数将收到数据写到文件中,并记录已经接收到的文件的长度,直到已经接收到的文件的长度达到FileInfo结构体中fileLen的值,跳出结构体;最后调用CloseHandle()来关闭文件句柄,如此便完成了一个文件的传输。
(2)、创建接收多个文件的函数RecvMultiFiles(),用来接收客户程序C向S发送的多个待检测程序。
在该函数所包含的while循环中,首先以网络通信套接字s为参数调用RecvFile(),接收一个文件,再以网络通信套接字s为参数调用recv(),接收数据,如果收到的数据为字符串“more”则说明还有更多的文件,进入下一个循环进行接收,如果收到的数据为字符串“done”,那么就跳出循环。
(3)、创建函数Copyin Run(),用来将待检测程序拷贝到虚拟机中。并且调用监视模块来启动待检测程序。
该函数对虚拟机群中的所有虚拟机循环进行以下操作:首先调用vix接口函数VixVM_WaitForToolsInGuest()初始化安装在虚拟机中的虚拟机工具(注,使用vix接口需要包含头文件vix.h,并且包含库文件vix.lib和VixAllProductsd.lib);接着调用VixVM_LoginInGuest()来登录虚拟机内操作***;接着调用VixVM_CopyFileFromHostToGuest(),将待检测程序拷贝到虚拟机中的一个目录之中,如“C:\\guestDir\\”;接着调用VixVM_RunProgramInGuest(),以待检测的程序在虚拟机中的路径为参数启动监视模块,由监视模块来启动待检测程序。
(4)、创建函数CopyoutReports(),该函数用来将检测报告从虚拟机中拷贝到服务器中,并加入到汇总报告文件里。
对于所有虚拟机,该函数循环进行以下操作:首先调用vix接口函数VixVM_CopyFileFromGuestToHost()将生成的报告文件“C:\Report\\report.txt”从虚拟机中拷贝到服务器中的一个特定路径下,如“C:\\tempReport\\report.txt”;接着此时对此程序在一个虚拟机环境下的测试已经结束,调用VixVM_LogoutFromGuest从虚拟机中注销登录;然后调用CreateFile()函数,将已经拷贝到服务器中的报告文件名,如“C:\\tempReport\\report.txt”作为目标文件名,将期望的访问方式设为GENERIC_READ,并且将操作设定为OPEN_EXISTING,完成打开文件,得到报告文件句柄操作;再接着调用ReadFile()函数,以文件句柄为参数,读取报告文件中的内容;接着调用WriteFile()函数,以汇总报告文件句柄为参数,将读取到的内容写到汇总报告文件中;最后顺序调用CloseFile()与DeleteFile()来关闭并且删除服务器中的报告文件。
(5)、创建函数CreateVMSnapshot(),该函数用来为所有的虚拟机创建快照。
该函数对所有的虚拟机循环进行以下操作:调用vix接口函数VixVM_CreateSnapshot()创建快照。
(6)、创建函数RevertVMSnapshot(),该函数用来为所有的虚拟机创建快照。
对所有的虚拟机,该函数循环进行以下操作:调用vix接口函数VixVM_GetCurrentSnapshot()得到当前快照的句柄;接着调用VixVM_RevertToSnapshot()恢复快照。
(7)、创建函数TestOneProgram(),该函数用来对一个待检测程序进行检测。
该函数首先调用CreateSnapshot()为每一个虚拟机创建一个快照;然后以程序路径调用Copyin_Run(),将一个待检测程序拷贝到每一个虚拟机中并且启动虚拟机中的监视模块开始检测;接着调用Sleep函数,休息一段时间(如30秒),等待检测完成;再接着调用CopyoutReports(),将程序在每一个虚拟机中的检测结果写到汇总报告文件中;最后调用RevertSnapshot()为每一个虚拟机恢复快照,完成对一个程序的检测。
(8)、创建函数TestMultiPrograms(),该函数用来对一个目录下的程序进行检测。
首先调用CreateFile()函数,将“C:\\tempReport\\SummaryReport.txt”作为目标文件名,将期望的访问方式设为GENERIC WRITE,并且将操作设定为CREATE_ALWAYS,完成创建汇总报告文件并得到其句柄的操作;接着调用FindFirstFile()来找到储存待检测程序的文件夹中的第一个文件的信息,通过文件后缀名来判断此文件是否是可执行(EXE)文件,如果是,以汇总报告文件句柄与待检测文件路径为参数调用TestOneProgram(),以完成对此程序的检测;然后在循环调用FindNextFile()找到下一个文件信息,如是可执行文件则重复上述检测过程,直到将此目录遍历完毕;最后调用CloseHandle()来关闭报告汇总文件。
(9)、创建函数SendReport(),该函数用来将汇总报告反馈给用户交互模块。
该函数首先调用CreateFile()函数,将汇总报告文件名“C:\\tempReport\\SummaryReport.txt”作为目标文件名,将期望的访问方式设为GENERIC_READ,将操作设定为OPEN_EXISTING,完成打开汇总报告文件并得到其句柄的操作;接着调用ReadFile()函数,将报告的内容读取到一个开辟的缓冲区中;然后调用send()函数,将缓冲区的内容,通过网络通信套接s字发送给用户交互模块;最后顺序调用CloseFile()与DeleteFile()来关闭并且删除汇总报告文件。
(10)、创建程序入口函数main(),将该函数作为控制模块的程序主流程。
如图4所示,该函数首先调用vix接口函数VixHost_Connect()来建立与虚拟机之间的通信;接着循环调用VixVM_Open(),VixVM_PowerOn(),得到每一个虚拟机的操作句柄并且启动每一个虚拟机;接着调用-WSAStartup()来初始化Winsock Dll;调用socket()函数来创建一个套接字,调用bind()函数来将创建的套接字与一个端口进行绑定,调用listen()函数监听绑定的端口;然后进入一个while循环,调用accept()函数来接收连接,如果收到连接,accept()函数将返回一个与客户端通信的网络通信套接字s;然后调用RecvMultiFiles()来完成接收一个或多个待检测程序的操作;再接着调用TestMultiPrograms()对所收到的检测程序进行检测;然后调用SendReport()来将检测结果发送给用户交互模块,至此,完成对一个客户检测请求的服务;最后进入下一个循环,等待下一个待测请求。
(11)、以Release模式编译,输出的程序就是所述的控制模块。
监视模块
所述的监视模块用于启动待检测程序,监视并记录待检测程序的运行情况。具体的说,所述的控制模块将待检测程序拷贝到虚拟机中之后,调用诸如Vix接口的相应接口,并以待检测程序名为参数,启动监视模块,由它来完成检测与报告生成工作。监视模块被启动后,首先检测此虚拟机安装的杀毒软件的名称与版本,然后检测待检测程序文件是否存在,这是因为恶意程序很可能在拷贝到虚拟机时,已经被虚拟机中的杀毒软件查杀并且删除;如果监视模块发现待检测程序文件存在,就试图启动该程序,然后再次对待检测程序文件存在与否进行检测,这是因为杀毒软件会对打开的程序进行特征码检测和行为检测,如果其为恶意程序,那么就进行拦截,并删除程序文件。如果此时待检测程序文件仍然存在,说明可进一步检测此程序进程是否存在,如果不存在,说明此程序的运行可能受到杀毒软件的拦截,说明其为可疑程序(不能说明其为恶意程序);如果程序进程存在,那么就检查此程序是否有网络通信行为,如果有,就作为可疑的程序特征进行记录,最后将以上这些检测结果写到报告中。监视模块会在恢复虚拟机快照之前,将报告复制到服务器。
监视模块的实现有多种方式,下面继续以Microsoft Visual Studio 2008软件环境为例,对如何创建监视模块的过程进行说明,本领域普通技术人员参考这一过程,可以在其他软件环境中创建该模块。
(1)、创建类Report,该类用来完成报告生成工作。
在该类的工作过程中,首先调用用于创建文件的CreateFile()函数,将要创建的报告文件路径,如“C:\\Report\\report.txt”作为目标文件名,将期望的访问方式设为GENERIC WRITE,并且将操作设定为CREATE ALWAYS,从而完成创建文件,得到文件句柄的操作;然后调用用来写文件的WriteFile()函数,以报告文件句柄和要写入报告的字符串为参数,完成写入报告文件的操作;最后以报告文件句柄为参数调用CloseHandle()函数,关闭报告文件。
(2)、创建函数getAVDetails,该函数用来得到杀毒软件的名称与版本。
该函数在工作过程中,通过访问COM服务端口的方式来查询杀毒软件的名称与版本。具体的说,首先调用***API CoInitialize()来初始化COM查询端口,再调用CoInitializeSecurity()来初始化安全策略;接着,调用CoCreateInstance()来创建COM实例IWbemLocator,调用IWbemLocator中的ConnectServer(),来与本地的“root\\securitycenter”服务端口连接,得到服务句柄IWbemServices;然后,构造查询语句“Select*fromAntiVirusProduct”并调用IWbemServices的成员函数ExecQuery()来执行此查询,它将返回一个IEnumWbemClassObject,返回结果中存储着查询结果;再接着以“displayName”为参数调用IEnumWbemClassObject中的Get函数便可以得到杀毒软件的名称,将其附在字符串“杀毒软件名称:”之后,调用WriteReport(),将其写入报告;然后以“versionNumber”为参数调用IEnumWbemClassObject中的Get函数可以得到杀毒软件的版本号,将其附在字符串“杀毒软件版本号:”之后,调用WriteReport(),将其写入报告;最后要依次调用IEnumWbemClassObject,IWbemServices,IWbemLocator对象的Release()函数释放对象资源,并且调用CoUninitialize()逆初始化COM端口。
(3)、创建ifFileExist()函数,该函数用来判断文件是否存在。
该函数在执行过程中调用access()函数,access()函数的第一个参数设为文件路径,第二个参数设为0;access()函数的返回值如果为0,说明文件存在,返回TRUE,如果为-1说明不存在,返回FALSE。
(4)、创建CheckPorcess函数,该函数用来检测程序进程是否创建成功。
该函数在执行时首先会调用CreateToolhelp32Snapshot()函数,并且将CreateToolhelp32Snapshot()函数的第一参数设为TH32CS SNAPPROCESS,第二个参数设为0,CreateToolhelp32Snapshot()函数将返回一个***进程的快照的句柄hSnapshot;接着通过hSnapshot句柄以及调用的Process32First()函数来得到快照中描述第一个进程的结构体PROCESSENTRY32,将结构体中的szExeFile字段与进程名进行比较,相同则说明此进程存在,记录此进程ID;如果不相同则调用Process32Next()函数来遍历快照中所有进程信息,如果找到进程,那么就记录进程ID,并跳出循环,如果遍历完毕依然没有找到进程,则将进程ID设置为-1;最后调用CloseHandle()来关闭快照句柄,返回进程ID。
(5)、创建findConnection函数,该函数用来判断目标进程是否有网络通信。
findConnection函数在执行时,首先调用system()函数,以“netstat-ano|findstr进程ID>C:\\tmp.txt”作为参数,执行完成之后,进程ID所标识的进程的所有连接与监听端口信息都会写在C:\\tmp.txt文件中;然后调用CreateFile()函数,将“C:\\tmp.txt”作为目标文件名,将期望的访问方式设为GENERIC READ,并且将操作设定为OPEN_EXISTING,完成打开文件,得到文件句柄的操作,接下来以文件句柄为参数调用ReadFile()函数,读取文件中的内容;接着调用Report对象的WriteReport函数,将其读取到的内容附在“网络通信行为:”字符串之后,写到报告中;最后调用CloseHandle()函数,关闭文件句柄。
(6)、创建main函数,该函数为监视模块的主流程。
监视模块在启动待检测程序前,会收到需要启动的程序的名称,在启动过程中,如图3所示,首先创建一个全局的Report对象r,调用其成员函数CreateReport();接着调用对象r的成员函数WriteReport(),将需要启动的程序名写附在“程序名:”字符串之后写入报告;再接着调用getAVDetails(),将杀毒软件信息写入报告;然后调用ifFileExist()函数来判断程序文件是否存在,如果不存在,说明文件已经被杀毒软件删除,调用r的成员函数WriteReport()将字符串“是否是病毒:是”写入报告,调用CloseReport()并退出程序;如果存在,则进行下一步;接着,调用CreateProcess()来启动待检测程序,调用***函数Sleep()等待一段的时间(可以设置为1秒钟)以确保进程已经完全启动;接着调用ifFileExist()来判断文件是否存在,如果存在,说明此程序已经被杀毒软件删除,调用r的成员函数WriteReport()将字符串“是否是病毒:是”写入报告,调用CloseReport(),并退出程序,如果存在,则进行下一步;然后,以程序名为参数调用CheckProcess()来判断此进程是否创建成功,如果返回的进程ID为-1,说明没有创建成功,说明此程序为可疑程序,调用r的成员函数WriteReport()将字符串“是否是病毒:可疑”写入报告,调用CloseReport(),并退出程序;如果进程存在,则进行下一步;最后调用findConnection()函数,记录目标进程的网络通信行为,之后调用CloseReport(),退出程序。
(7)、以Release模式编译,所得到的结果就是所述的监视模块。
以上是对本发明的恶意程序检测***的各个组成部分的功能以及具体实现的说明。
相对于现有技术,本发明包括以下优点:
1、可为不适于进行外网连接的用户提供服务。由于***中只有服务器需要与互联网连接,***的其它部分不需要与互联网通信,所以特别适用于对信息安全要求比较严格的公司,部队与保密部门使用。
2、可以快速批量检测程序。杀毒软件和监视模块对恶意程序的检测都是自动化的,检测速度很快。由于此***工作于局域网中,网络传输速度快,可以快速传输大量的检测文件及检测报告。
3、多平台检测,准确性高,适用性广。由于检测是将程序拷贝到安装了杀毒软件的虚拟机中进行的,并且所有的***平台都有虚拟机软件,所以对服务器的操作***平台没有特别的限制,并且在服务器中可以安装足够多的虚拟机将其配置成所有可能的***和杀毒软件的组合,所以***可为多种操作***平台下的程序进行检测,具有普适性;由于检测结果是由监视模块和多种杀毒软件综合分析得出的,所以准确性较单一杀毒软件的检测更为可靠。
4、检测过程不会泄露隐私和机密。由于检测过程在封闭内网环境,外界无法知道检测的行为及内容;程序只需上传到内部服务器,所以不会发生程序被他人获得的情况,有助于保护知识产权和机密。
最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制。尽管参照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,对本发明的技术方案进行修改或者等同替换,都不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。
Claims (5)
1.一种恶意程序检测***,其特征在于,包括用户交互模块、控制模块、由多个虚拟机组成的虚拟机群以及运行在所述虚拟机上的监视模块;其中,所述虚拟机群中的各个虚拟机运行在不同的软件环境下,且所述虚拟机安装有至少一种杀毒软件;
所述用户交互模块将待检测的程序提交给控制模块,由所述控制模块将待检测程序分配到所述虚拟机群的各个虚拟机上并运行,所述监视模块监测待检测程序在所述虚拟机上的运行过程,根据杀毒软件的检测结果与自身的监测情况提交检测报告。
2.根据权利要求1所述的恶意程序检测***,其特征在于,所述监视模块被启动后,首先检测所在虚拟机安装的杀毒软件的名称与版本,然后检测待检测程序文件是否存在,如果存在,就启动该待检测程序,然后再次对待检测程序文件存在与否进行检测,如果仍然存在,则进一步检测此程序的进程是否存在,如果存在,则检查此待检测程序是否有网络通信行为,如果有,作为可疑的程序特征进行记录。
3.根据权利要求1所述的恶意程序检测***,其特征在于,所述的控制模块从外部网络接收杀毒软件包,以对所述虚拟机中所安装的杀毒软件进行升级。
4.根据权利要求1所述的恶意程序检测***,其特征在于,所述的用户交互模块采用图像化用户操作界面、命令行交互方式、服务器浏览器交互方式中的一种实现。
5.根据权利要求1所述的恶意程序检测***,其特征在于,所述检测报告包括用于记录以下内容的字段:程序名、杀毒软件名称、杀毒软件版本号、是否是病毒,网络行为特征。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010105153433A CN101977188A (zh) | 2010-10-14 | 2010-10-14 | 恶意程序检测*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010105153433A CN101977188A (zh) | 2010-10-14 | 2010-10-14 | 恶意程序检测*** |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101977188A true CN101977188A (zh) | 2011-02-16 |
Family
ID=43577033
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010105153433A Pending CN101977188A (zh) | 2010-10-14 | 2010-10-14 | 恶意程序检测*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101977188A (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102419803A (zh) * | 2011-11-01 | 2012-04-18 | 成都市华为赛门铁克科技有限公司 | 计算机病毒查杀方法、***及装置 |
CN103067384A (zh) * | 2012-12-27 | 2013-04-24 | 华为技术有限公司 | 威胁处理方法及***、联动客户端、安全设备及主机 |
CN103559441A (zh) * | 2013-10-28 | 2014-02-05 | 中国科学院信息工程研究所 | 一种恶意文件云环境下跨平台检测方法及*** |
CN103778373A (zh) * | 2014-01-10 | 2014-05-07 | 深圳市深信服电子科技有限公司 | 病毒检测方法及装置 |
CN103810222A (zh) * | 2012-11-15 | 2014-05-21 | 北京金山安全软件有限公司 | 样本文件的处理方法及装置 |
TWI461952B (zh) * | 2012-12-26 | 2014-11-21 | Univ Nat Taiwan Science Tech | 惡意程式偵測方法與系統 |
CN104363221A (zh) * | 2014-11-10 | 2015-02-18 | 青岛微智慧信息有限公司 | 一种网络安全隔离文件传输控制方法 |
CN104714831A (zh) * | 2015-03-31 | 2015-06-17 | 北京奇虎科技有限公司 | 一种检测虚拟机中的寄生进程的方法和装置 |
CN105718798A (zh) * | 2015-08-18 | 2016-06-29 | 哈尔滨安天科技股份有限公司 | 基于私有网络信息放大的恶意代码自动分析方法及*** |
CN111143839A (zh) * | 2019-12-30 | 2020-05-12 | 厦门服云信息科技有限公司 | 一种基于虚拟化行为分析技术的恶意代码检测方法及装置 |
CN112989344A (zh) * | 2021-03-16 | 2021-06-18 | 北京理工大学 | 基于硬件追踪技术的恶意程序智能检测方法、装置及*** |
CN116150797A (zh) * | 2023-04-21 | 2023-05-23 | 深圳市科力锐科技有限公司 | 数据保护方法、***、设备及存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101827104A (zh) * | 2010-04-27 | 2010-09-08 | 南京邮电大学 | 一种基于多反病毒引擎的网络病毒联合防御方法 |
-
2010
- 2010-10-14 CN CN2010105153433A patent/CN101977188A/zh active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101827104A (zh) * | 2010-04-27 | 2010-09-08 | 南京邮电大学 | 一种基于多反病毒引擎的网络病毒联合防御方法 |
Non-Patent Citations (1)
Title |
---|
JOHN OBERHEIDE等: "CloudAV:N-Version Antivirus in the Network Cloud", 《PROCEEDINGS OF THE 17TH CONFERENCE ON SECURITY SYMPOSIUM》, 31 August 2008 (2008-08-31) * |
Cited By (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102419803A (zh) * | 2011-11-01 | 2012-04-18 | 成都市华为赛门铁克科技有限公司 | 计算机病毒查杀方法、***及装置 |
CN102419803B (zh) * | 2011-11-01 | 2014-12-03 | 华为数字技术(成都)有限公司 | 计算机病毒查杀方法、***及装置 |
CN103810222A (zh) * | 2012-11-15 | 2014-05-21 | 北京金山安全软件有限公司 | 样本文件的处理方法及装置 |
TWI461952B (zh) * | 2012-12-26 | 2014-11-21 | Univ Nat Taiwan Science Tech | 惡意程式偵測方法與系統 |
CN103067384A (zh) * | 2012-12-27 | 2013-04-24 | 华为技术有限公司 | 威胁处理方法及***、联动客户端、安全设备及主机 |
CN103067384B (zh) * | 2012-12-27 | 2016-12-28 | 华为技术有限公司 | 威胁处理方法及***、联动客户端、安全设备及主机 |
CN103559441B (zh) * | 2013-10-28 | 2016-04-27 | 中国科学院信息工程研究所 | 一种恶意文件云环境下跨平台检测方法及*** |
CN103559441A (zh) * | 2013-10-28 | 2014-02-05 | 中国科学院信息工程研究所 | 一种恶意文件云环境下跨平台检测方法及*** |
CN103778373B (zh) * | 2014-01-10 | 2017-02-08 | 深圳市深信服电子科技有限公司 | 病毒检测方法及装置 |
CN103778373A (zh) * | 2014-01-10 | 2014-05-07 | 深圳市深信服电子科技有限公司 | 病毒检测方法及装置 |
CN104363221A (zh) * | 2014-11-10 | 2015-02-18 | 青岛微智慧信息有限公司 | 一种网络安全隔离文件传输控制方法 |
CN104714831A (zh) * | 2015-03-31 | 2015-06-17 | 北京奇虎科技有限公司 | 一种检测虚拟机中的寄生进程的方法和装置 |
CN104714831B (zh) * | 2015-03-31 | 2018-04-17 | 北京奇虎科技有限公司 | 一种检测虚拟机中的寄生进程的方法和装置 |
CN105718798A (zh) * | 2015-08-18 | 2016-06-29 | 哈尔滨安天科技股份有限公司 | 基于私有网络信息放大的恶意代码自动分析方法及*** |
CN111143839A (zh) * | 2019-12-30 | 2020-05-12 | 厦门服云信息科技有限公司 | 一种基于虚拟化行为分析技术的恶意代码检测方法及装置 |
CN112989344A (zh) * | 2021-03-16 | 2021-06-18 | 北京理工大学 | 基于硬件追踪技术的恶意程序智能检测方法、装置及*** |
CN112989344B (zh) * | 2021-03-16 | 2022-07-05 | 北京理工大学 | 基于硬件追踪技术的恶意程序智能检测方法、装置及*** |
CN116150797A (zh) * | 2023-04-21 | 2023-05-23 | 深圳市科力锐科技有限公司 | 数据保护方法、***、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101977188A (zh) | 恶意程序检测*** | |
US9740703B2 (en) | Deploying policies and allowing offline policy evaluation | |
US9684795B2 (en) | Inspecting code and reducing code size associated to a target | |
RU2444056C1 (ru) | Система и способ ускорения решения проблем за счет накопления статистической информации | |
US8667583B2 (en) | Collecting and analyzing malware data | |
US9531595B2 (en) | Intelligent policy deployment | |
US7433804B2 (en) | Automated test script for communications server | |
CN101156156A (zh) | 补救不希望有的应用程序的影响 | |
CN104182688A (zh) | 基于动态激活及行为监测的Android恶意代码检测装置和方法 | |
CN107273748A (zh) | 一种基于漏洞poc实现安卓***漏洞检测的方法 | |
CN105631312A (zh) | 恶意程序的处理方法及*** | |
CN110362994A (zh) | 恶意文件的检测方法、设备和*** | |
CN101344740A (zh) | 图像形成装置,程序控制方法及程序 | |
CN107508829B (zh) | 一种非侵入式的webshell检测方法 | |
KR100915202B1 (ko) | 악성코드 수집 방법 및 장치 | |
Ii | TECHNICAL EVALUATION AND LEGAL OPINION OF WARDEN: A NETWORK FORENSICS TOOL | |
CA2565746C (en) | Automated test script for communications server | |
Forman et al. | Automated end-to-end system diagnosis of networked printing services using model-based reasoning | |
Kremer | Real-time intrusion detection for Windows NT based on Navy IT-21 audit policy | |
Kremer | Calhoun |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20110216 |