基于密码算法分析的计算机病毒检测方法及系统与流程

文档序号:17741634发布日期:2019-05-24 20:10阅读:467来源:国知局
基于密码算法分析的计算机病毒检测方法及系统与流程

本发明涉及网络安全技术领域,特别涉及一种基于密码算法分析的计算机病毒检测方法及系统。



背景技术:

目前,密码是网络信息安全的核心技术和基础理论支撑,是数据保护和认证的最重要手段之一。但是,密码算法的发展是一把双刃剑,密码也为黑客和犯罪分子躲避检测和追查提供了技术支撑,他们逐渐地掌握和运用密码加密技术,用于保护病毒样本不被检测、隐藏通信特征、躲避网络防护设备和加密用户文件等。密码加密手段被攻击者的广泛应用,加大了安全企业和政府对病毒检测和分析的工作量和难度,给用户带来巨大的经济损失。同时,随着计算机病毒文件中密码应用攻击方式的迅速发展,计算机病毒的密码检测分析能力越来越成为一个必须给予重视的安全性检测内容。

目前计算机病毒分析方法主要分为静态分析和动态分析两类。静态分析通过逆向工程抽取病毒样本静态特征,分析pe文件格式、api函数调用和汇编指令等序列。但是计算机病毒会使用代码混淆、加密加壳等手段对抗静态分析,造成静态分析结果不准确。动态检测是使用沙箱或虚拟机模拟运行病毒程序,通过api拦截或行为监控的方式分析程序运行时的动态行为特征,分析计算机病毒执行过程中的文件操作、网络操作、注册表操作、进程操作等,识别恶意行为进行病毒检测。

病毒加壳技术的相关研究。壳是一种专门负责保护病毒不被修改或反编译的一段程序,它一般是先于病毒运行,在执行过程中才会将病毒实体释放,可有效躲避基于静态特征码的查杀。加密壳侧重是软件程序的保密不易被破解,加密壳种类比较多。计算机病毒加壳特征分析和检测方面,很多安全产业界及学术界人员都进行了研究。四川大学王俊峰等人发明的“基于静态特征的pe文件加壳检测方法”首先对其进行静态文件分析,提取出该pe文件的9个特征值,然后使用pe文件分类器来进行加壳检测。北京瑞星国际软件有限公司发明的“一种用于对文件进行脱壳的模块和方法”包括:虚拟机,用于模拟真实计算机;控制器,用于检测所述文件的壳类型;以及脱壳模块,用于基于所述检测的壳类型,确定所述文件的脱壳程序中需要在所述真实计算机中执行的代码。

病毒加密网络通信的相关研究。计算机病毒一般都具有网络通信的功能,方便接收黑客的指令和传递窃取的数据。木马病毒是一类典型的计算机病毒程序,用户的肉鸡电脑和远程控制端需要隐蔽通信,往往采用aes等对称加密算法,或者使用https协议加密传输数据。对网络病毒程序的加密通信分析的重点包括加密算法和通信过程的逆向分析两个方面。加密算法的分析确保能够正确解密截获的数据包,通信过程的分析确保能够解析解密后的数据包。通过对病毒程序的网络通信过程的加密算法的逆向分析,完成加密过程的还原、验证与甚至破解。潘吴斌等人发表的“网络加密流量识别研究综述及展望”中指出,木马和僵尸网络等通过加密和隧道技术绕过防火墙及入侵检测系统,将机密信息发送到外网,并对现有的加密流量识别技术进行了概述和对比。blakeanderson等人发表的“decipheringmalware’suseoftls(withoutdecryption)”文章中提出一种识别恶意代码使用的tls协议流量的方法,并且通过分析流量的特征可以将恶意代码的家族区分开。

勒索软件对文件加密的相关研究。勒索软件(ransomware)是近两年流行的病毒程序,通过删除和加密用户文件等方式,使用户数据资产或计算机资源无法正常使用,并以此为条件向用户勒索钱财。研究典型勒索软件使用的密码算法,分析各类密码算法的优势和应用场景,为勒索软件的防御和阻断提供依据。勒索软件主要采用对称加密和非对称加密等算法。勒索软件发展到今天,越来越多的使用非对称加密算法比如rsa等,这使得解密文件几乎成了不可能,因为解密的私钥是存放在攻击者的服务器中。勒索软件locky,采用对称+非对称加密的方式,使用rsa-2048和aes-128算法来对文件进行加密。勒索软件pyran,采用的加密方式是base64+aes,因为是对称加密算法,可以编写出解密工具解密被该恶意程序感染加密的文件。勒索软件wannacry,会随机生成aes密钥,使用aes-128-cbc方法对文件进行加密,然后将对应的aes密钥通过rsa-2048加密,再将rsa加密后的密钥和aes加密过的文件写入到最终的wncry文件里,并将解密密钥保存到黑客服务器上,只有用户付赎金才能获得相应的解密密钥。

目前密码算法在计算机病毒文件中的应用已经日益普遍,给病毒的检测和防御工作带来极大的难度。但是,目前国内对计算机病毒密码检测分析缺乏系统性的方法。



技术实现要素:

本发明提供一种基于密码算法分析的计算机病毒检测方法及系统,采用静态分析和动态分析相结合的技术,对密码算法在计算机病毒的加壳、网络通信加密和数据文件加密等过程中的应用方法进行分析,为计算机病毒的加密算法识别和检测防御提供依据。

一种计算机病毒检测方法,包括以下步骤:

对病毒文件进行处理,判断病毒文件的加壳状态,所述加壳状态包括存在已知壳、存在未知壳或不存在壳中的任意一种;

对病毒文件进行静态分析,获得病毒文件的静态数据信息;

对病毒文件进行动态分析,获得病毒文件的动态数据信息。

进一步的,

所述对病毒文件进行处理,判断病毒文件的加壳状态,所述加壳状态包括存在已知壳、存在未知壳或不存在壳中的任意一种的步骤包括:

获取病毒文件的壳的壳特征码,通过特定工具将壳特征码与现有已知壳的特征码进行比较,如果存在与壳特征码一致的特征码,加壳状态存在已知壳。

进一步的,

在所述获取病毒文件的壳的壳特征码,通过特定工具将壳特征码与现有已知壳的特征码进行比较后还包括:

如果不存在与壳特征码一致的特征码,则计算病毒文件每部分数据的熵ei和该部分大小ni;

通过以下公式加权求和,得到整个病毒pe文件的熵,包括:

entropy=∑ei*ni/∑ni(i=1,2…n);

t为预设值;

若entropy>t,则该病毒文件的状态为存在未知壳;若entropy<t,则该病毒文件的状态为不存在壳。

进一步的,

所述对病毒文件进行静态分析,获得病毒文件的静态数据信息的步骤包括:

获取病毒文件的静态特征码,根据静态特征码的密码算法确定该静态特征码为hash函数、分组密码算法以及公钥密码算法中的任意一种。

进一步的,

所述对病毒文件进行静态分析,获得病毒文件的静态数据信息的步骤包括:

对病毒文件进行反汇编,获得病毒文件的静态特征码。

进一步的,

所述对病毒文件进行动态分析,获得病毒文件的动态数据信息的步骤包括:

通过分析虚拟机获取病毒文件的调用数据、执行数据以及镜像数据;

所述执行数据包括病毒文件创建新文件、修改文件、删除文件、读取文件、下载文件、屏幕截图;

所述镜像数据包括病毒文件的内存镜像以及病毒文件的客户机的完整内存镜像。

进一步的,

所述对病毒文件进行动态分析,获得病毒文件的动态数据信息的步骤包括:

识别病毒程序执行过程中加载的密码算法动态链接库;

通过api函数的hook确定该病毒文件加密函数及传递参数,并对函数名和传递参数进行识别生成调用序列,获得病毒文件中密码算法的调用流程及多类密码算法的组合。

进一步的,

所述对病毒文件进行动态分析,获得病毒文件的动态数据信息的步骤包括:

获取病毒文件的pcap文件,并根据pcap文件确定病毒文件使用的加密通信协议、ip地址以及端口信息。

一种计算机病毒检测系统,包括以下模块:

加壳状态判断模块:用于对病毒文件进行处理,判断病毒文件的加壳状态,所述加壳状态包括存在已知壳、存在未知壳或不存在壳中的任意一种;

静态分析模块:用于对病毒文件进行静态分析,获得病毒文件的静态数据信息;

动态分析模块:用于对病毒文件进行动态分析,获得病毒文件的动态数据信息。

进一步的,

所述加壳状态判断模块包括已知壳判断模块,所述已知壳判断模块用于获取病毒文件的壳的壳特征码,通过特定工具将壳特征码与现有已知壳的特征码进行比较,如果存在与壳特征码一致的特征码,加壳状态存在已知壳。

进一步的,

所述加壳状态判断模块包括未知壳判断模块,所述未知壳判断模块用于在如果不存在与壳特征码一致的特征码,则计算病毒文件每部分数据的熵ei和该部分大小ni;

通过以下公式加权求和,得到整个病毒pe文件的熵,包括:

entropy=∑ei*ni/∑ni(i=1,2…n);

t为预设值;

若entropy>t,则该病毒文件的状态为存在未知壳;若entropy<t,则该病毒文件的状态为不存在壳。

本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。

下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。

附图说明

附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:

图1为计算机病毒检测方法的流程图;

图2为加壳状态判断步骤的流程图;

图3为静态分析步骤的流程图;

图4为动态分析步骤的流程图;

图5为计算机病毒检测系统的结构示意图;

图6a为第一示意图像;

图6b为第二示意图像;

图7a为第三示意图像;

图7b为第四示意图像;

图8a为第五示意图像;

图8b为第六示意图像;

图9a为第七示意图像;

图9b为第八示意图像;

图10a为第九示意图像;

图10b为第十示意图像;

图11a为第十一示意图像;

图12b为第十二示意图像;

图13a为第十三示意图像;

图13b为第十四示意图像;

图13a为第十五示意图像;

图14b为第十六示意图像。

具体实施方式

以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。

本发明实施例提供了一种计算机病毒检测方法,如图1所示其流程图,包括以下步骤:

s1、加壳状态判断步骤:对病毒文件进行处理,判断病毒文件的加壳状态,所述加壳状态包括存在已知壳、存在未知壳或不存在壳中的任意一种。

在一个实施例中,如图2所示,所述对病毒文件进行处理,判断病毒文件的加壳状态,所述加壳状态包括存在已知壳、存在未知壳或不存在壳中的任意一种的步骤包括a1、已知壳判断步骤:获取病毒文件的壳的壳特征码,通过特定工具将壳特征码与现有已知壳的特征码进行比较,如果存在与壳特征码一致的特征码,加壳状态存在已知壳。采用exeinfope等工具来识别病毒加壳算法。已知的壳,不论是压缩壳,还是加密壳,都是有特定的加壳算法。不同应用程序使用同种加壳算法加密时,加壳后的文件有一部分机器码是相同的,它们被称为壳的“指纹”或者“特征码”。例如exeinfope检测工具,是通过特征码库中的特征码来辨别壳,其中,upx的特征码是一段“60be??????008dbe??????ff”,“??”可以对应任意字节,只要病毒文件出现了这一部分机器码,就可认为该病毒文件添加了upx壳。

在一个实施例中,在所述获取病毒文件的壳的壳特征码,通过特定工具将壳特征码与现有已知壳的特征码进行比较后还包括a2、未知壳判断步骤:如果不存在与壳特征码一致的特征码,则计算病毒文件每部分数据的熵ei和该部分大小ni;

通过以下公式加权求和,得到整个病毒pe文件的熵,包括:

entropy=∑ei*ni/∑ni(i=1,2…n);

t为预设值;

若entropy>t,则该病毒文件的状态为存在未知壳;若entropy<t,则该病毒文件的状态为不存在壳。通过计算病毒的pe文件的信息熵的方式检测文件是否加壳。信息熵是通信领域的一个概念,为离散随机事件的出现概率,在壳检测中可理解为一个pe文件的信息量或者其中某段(section)的信息量,由于压缩或加密后的数据往往携带着更多的信息量,所有如果计算机病毒的pe文件携带信息量过多的就意味着该病毒文件可能被加壳。由于加壳主要是针对pe文件的代码段和数据段等部分,为了提高壳检测的准确率,病毒文件的信息熵(entropy)的计算不能将整个pe文件笼统计算。本发明中,不需要计算信息熵的数据包括:pe文件头、导出表、导入表、资源数据、尾部全0数据等。

如图3所示,s2、静态分析步骤:对病毒文件进行静态分析,获得病毒文件的静态数据信息。所述对病毒文件进行静态分析,获得病毒文件的静态数据信息的步骤包括:

b1、第一静态分析步骤:获取病毒文件的静态特征码,根据静态特征码的密码算法确定该静态特征码为hash函数、分组密码算法以及公钥密码算法中的任意一种。上述步骤主要是通过抽取加密算法所用到的静态特征码,并以此标识该种加密算法,密码算法的静态特征码的可靠性直接决定了本发明中密码算法识别的精度。按照密码算法加密原理的不同可以把密码算法分为hash函数、分组密码算法、公钥密码算法。

a)hash函数,在实现时会用到初始链值来实现对加密数据的处理。例如产生256位散列值的sha256算法在初始化过程中用到了8个32位的初始链值,该算法可以采用不同的实现方式完成以上初始化工作,但是这8个常量是不变的,所以选取算法的8个初始链值作为sha256算法的静态特征。

b)分组密码算法,在实现时会用到s盒、置换盒等常数。以aes分组密码为例,s盒是分组加密过程中进行查表操作的对象,一般被定义为静态数组,以s盒为静态特征码,扫描检测计算机病毒文件,如果在该文件中匹配到了aes分组密码算法定义的s盒,那么该计算机病毒文件中就很有可能包含aes算法。

c)公钥密码算法,在实现时也会用到很多的静态特征。如rsa是基于大整数因子分解问题,算法生成密钥时需要构造大量的大素数,产生大素数的代码经常会包含一个小素数表,小素数表一般出现在病毒文件的数据段,所以查找表和小素数代码片断可以作为标识rsa公钥密码算法的静态特征码。

所述对病毒文件进行静态分析,获得病毒文件的静态数据信息的步骤包括:

b2、第二静态分析步骤:对病毒文件进行反汇编,获得病毒文件的静态特征码。上述利用逆向工程对可执行文件反汇编,建立密码函数签名特征、汇编指令特征、程序逻辑结构及多轮循环特征等。密码算法处理数据过程中,一般使用多轮或多步相似的函数对数据进行处理,具体而言就是相同模式的代码循环出现;另一方面,密码算法加密过程中是一个高密度的数据操作处理过程,反汇编结果中核心处理子程序内的算术运算、逻辑运算和移位操作指令出现较为密集。所以密码算法的实现机制决定了其在汇编级别所具有的指令统计特征,可以以此为线索进行目标代码与密码算法的相似性判定,从而实现识别的目的。

如图4所示,s3、动态分析步骤:对病毒文件进行动态分析,获得病毒文件的动态数据信息。所述对病毒文件进行动态分析,获得病毒文件的动态数据信息的步骤包括:

c1、数据确定步骤:通过分析虚拟机获取病毒文件的调用数据、执行数据以及镜像数据;所述执行数据包括病毒文件创建新文件、修改文件、删除文件、读取文件、下载文件、屏幕截图;所述镜像数据包括病毒文件的内存镜像以及病毒文件的客户机的完整内存镜像。cuckoosandbox主要由中央管理软件和各分析虚拟机组成。中央管理软件也称为hostmachine,负责管理各样本的分析工作,如启动分析工作以及生成报告等;分析虚拟机又称为guestmachine,主要完成对恶意程序的分析以及向中央管理软件报告分析结果等工作。

每个分析虚拟机都是一个相对独立干净的执行环境,能安全隔离各恶意程序的执行和分析工作。cuckoo的主要功能有:跟踪记录恶意软件所有的调用情况;获取恶意软件在执行过程中创建新文件、修改文件、删除文件、读取文件或下载文件的行为;获取恶意软件的内存镜像;获取恶意软件执行过程中的屏幕截图;获取执行恶意软件的客户机的完整内存镜像。

cuckoo环境的分布式搭建,可以加快处理样本分析速度,为了降低恶意样本在执行中可能造成的危害,将样本分析的实验环境设置在虚拟机中,设置了快照与检查机制。当系统检测到恶意样本尝试逃逸分析机时,启动快照回滚到干净状态。

在一个实施例中,

所述对病毒文件进行动态分析,获得病毒文件的动态数据信息的步骤包括:

c2、病毒文件密码确定步骤:识别病毒程序执行过程中加载的密码算法动态链接库;通过api函数的hook确定该病毒文件加密函数及传递参数,并对函数名和传递参数进行识别生成调用序列,获得病毒文件中密码算法的调用流程及多类密码算法的组合。

其中部分病毒程序并不会直接编写密码算法源代码,而是通过调用现有的密码算法库(如cryptapi、openssl等)实现,因此使用静态分析手段从计算机病毒中匹配密码算法特征的方法不在奏效。本方法采用了基于动态分析的病毒加密算法库调用过程识别技术。该方法能识别病毒程序执行过程中加载的密码算法动态链接库,通过对api函数的hook能识别调用的加密函数及传递的参数,通过分析函数名和参数识别密码算法,能生成密码算法调用序列,最终达到获得病毒中密码算法的调用流程及多类密码算法的组合使用的过程。

常用密码库(cryptapi、openssl等)在软件中应用广泛,这类库的加解密算法信息具有重要的研究意义,因为在常用库的密码算法实现中,密码算法的含义和函数的参数、返回值定义明确,且调用函数时的参数,返回值信息也可获取。分析常用的密码库,总结发现常用密码库在实现算法时有两个共同点:(1)库函数在实现某一算法时,程序中算法的算法名、对称算法的加解密数据、密钥、加解密模式,哈希算法的哈希数据哈希值,密钥交换算法的输出密钥,公钥算法的公私钥等信息可以从函数的参数、返回值、函数名上提取出来;(2)算法实现的模式信息可以从实现算法的一系列函数中总结出来。如用openssl实现某一加解密算法,有三种途径:一是直接调用最基本的函数实现算法;二是通过调用算法的evp封装方式完成运算;三是通过调用bio(basici/oabstraction)封装方式实现。三种实现方式均可从实现算法的函数中提取算法信息。而使用cryptapi实现算法则有点不同,该库的算法信息及加解密数据信息都得从参数中提取,且实现对称密码算法时,密钥生成算法还会用到哈希算法。

在一个实施例中,所述对病毒文件进行动态分析,获得病毒文件的动态数据信息的步骤包括:

c2、病毒文件通讯地址确定步骤:获取病毒文件的pcap文件,并根据pcap文件确定病毒文件使用的加密通信协议、ip地址以及端口信息。其中病毒在动态分析过程中的网络流量数据将会保存成pcap文件,从pcap文件中可以分析病毒使用的https等加密通信协议,分析通信的ip地址和端口信息。对于受感染的机器,无论主机操作系统类型如何,它都可能使用网络与攻击者通信,而且为了躲避检测往往采用加密通信手段。通过分析加密通信流量,可以获得病毒外部连接的控制端或代理中转节点的ip地址。对于简单的加密通信方式,可以尝试对流量还原。对于高强度的加密方式,即使还原流量难度很大,也可以在获得通信ip地址的基础上,借助防火墙产品对木马及僵尸网络等进行及时有效阻断,降低用户信息丢失的风险及各种危害。

一种计算机病毒检测系统,如图5所示其结构示意图,包括以下模块:

加壳状态判断模块:用于对病毒文件进行处理,判断病毒文件的加壳状态,所述加壳状态包括存在已知壳、存在未知壳或不存在壳中的任意一种;

静态分析模块:用于对病毒文件进行静态分析,获得病毒文件的静态数据信息;

动态分析模块:用于对病毒文件进行动态分析,获得病毒文件的动态数据信息。

在一个实施例中,

所述加壳状态判断模块包括已知壳判断模块,所述已知壳判断模块用于获取病毒文件的壳的壳特征码,通过特定工具将壳特征码与现有已知壳的特征码进行比较,如果存在与壳特征码一致的特征码,加壳状态存在已知壳。

在一个实施例中,

所述加壳状态判断模块包括未知壳判断模块,所述未知壳判断模块用于在如果不存在与壳特征码一致的特征码,则计算病毒文件每部分数据的熵ei和该部分大小ni;

通过以下公式加权求和,得到整个病毒pe文件的熵,包括:

entropy=∑ei*ni/∑ni(i=1,2…n);

t为预设值;

若entropy>t,则该病毒文件的状态为存在未知壳;若entropy<t,则该病毒文件的状态为不存在壳。

在一个实施例中,所述静态分析模块包括第一静态分析模块,用于获取病毒文件的静态特征码,根据静态特征码的密码算法确定该静态特征码为hash函数、分组密码算法以及公钥密码算法中的任意一种。

在一个实施例中,所述静态分析模块包括第二静态分析模块,用于对病毒文件进行反汇编,获得病毒文件的静态特征码。

在一个实施例中,

所述动态分析模块包括数据确定模块:

用于通过分析虚拟机获取病毒文件的调用数据、执行数据以及镜像数据;

所述执行数据包括病毒文件创建新文件、修改文件、删除文件、读取文件、下载文件、屏幕截图;

所述镜像数据包括病毒文件的内存镜像以及病毒文件的客户机的完整内存镜像。

在一个实施例中,

所述动态分析模块包括病毒文件密码确定模块:

用于识别病毒程序执行过程中加载的密码算法动态链接库;

通过api函数的hook确定该病毒文件加密函数及传递参数,并对函数名和传递参数进行识别生成调用序列,获得病毒文件中密码算法的调用流程及多类密码算法的组合。

在一个实施例中,

所述动态分析模块包括病毒文件通讯地址确定模块:

用于获取病毒文件的pcap文件,并根据pcap文件确定病毒文件使用的加密通信协议、ip地址以及端口信息。

在一个实施例中,以加密勒索软件wannacry为例。本发明将wannacry勒索病毒样本放入密码算法分析系统运行后,检测到一系列加解密函数调用及其参数,通过分析对其流程进行还原如下:

(1)病毒文件调用cryptacquirecontexta函数,来获得指定csp的密钥容器的句柄,其中参数provider_type用于指定加密算法的类型,数值24代表prov_rsa_aes,即指定了病毒程序采用非对称密码算法rsa和对称密码算法aes混合加密的方式,如图6a和图6b所示。

(2)调用cryptgenkey函数,用于生成rsa子密钥(包括子公钥和子私钥),其中algorithm_identifier=0x0000a400(calg_rsa_keyx)代表rsa算法,flags=2048代表rsa算法的密钥长度是2048。如图7a和图7b所示。

(3)调用cryptexportkey函数,用于导出rsa子公钥。其中blob_type=6,含义为publickeyblob,表示导出公钥。如图8a和图8b所示。

(4)调用ntwritefile函数,将rsa子公钥写入“00000000.pky”文件中。如图9a和图9b所示。

(5)调用cryptexportkey函数,用于导出rsa子私钥。其中blob_type=7,含义为privatekeyblob,表示导出私钥。如图10a和图10b所示。

(6)调用“system”类的“ldrgetprocedureaddress”函数,并调用“cryptsp”库里的“cryptgetkeyparam”函数,该函数可以指定额外的加密参数。如图11a和图11b所示。

(7)调用“encrypt”函数,使用rsa主公钥加密rsa子私钥。如图12a和图12b所示。

(8)调用“ntwritefile”函数,将步骤7加密rsa子私钥后的结果保存进“00000000.eky”文件。如图13a和图13b所示。

(9)程序@wannadecryptor@.exe会创建一个“00000000.res”,内容为加密的文件数量、大小等信息,随后@wannadecryptor@.exe样本将该文件内容回传到攻击者的暗网服务器。如图14a和图14b所示。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1