一种API日志监控方法及装置
技术领域
本发明涉及计算机的反病毒领域,特别是指一种API日志监控方法及装置。
背景技术
在反病毒领域,计算机产生的样本增量都是海量的,目前已有的样本自动分析可以归为两类:
1.静态自动分析:通过反汇编代码分析、样本静态内容比对以及一***启发式规则对比来给样本定性。这种静态自动分析的技术的优点是:快速,吞量高,可以应对每日的海量样本,并给出结果;缺点是:精准度一般,无法给出样本的恶意行为,对加密处理过的样本存在较多的误报和漏报。
2.动态自动分析:通过动态执行样本,并记录样本运行过程中的动态行为,并对该动态行为进行分析,以样本进行定性。这种动态自动分析的技术的优点是:精准度高,可以明确指出样本恶意行为并可以精确对样本进行定性;缺点是:低速,吞吐量低,若想应对海量样本,需要大量硬件资源投入。
由于病毒行为本身是病毒样本区别于正常文件的最本质的属性,也是病毒家族分类的根本依据,而样本的动态分析可以精确地指出其产生的各种恶意行为,因此具有很高的精确度,且有很强的事后检索能力,可以实现精确定位一个病毒家族的一组样本。
目前已有的样本的动态分析方法的步骤包括如下:
1.在特殊的监控环境下执行病毒样本;
2.记录病毒对文件、注册表的修改和访问;
3.记录进程、线程创建信息并跟踪;
4.记录病毒及其衍生进程、线程产生的API(Windows***接口函数)流日志,并根据***已知文件或者文件路径过滤***文件产生的API流日志,排除干扰;
5.记录产生的网络通信记录;
6.利用已有规则对上述2、3和4步骤中的产生的结果进行分析,并给出最终结果。
其中,该方法中,利用***已知文件名或者文件路径过滤存在以下缺点:
1.有潜在的风险,将与***文件同名的病毒的API流日志漏掉;
2.针对替换***文件的病毒手法,会将病毒的API流日志漏掉;
3.针对感染型病毒,感染***文件后的病毒的API流日志漏掉;
4.针对文件映像指向***正常文件,但内存内容为病毒的内容的API流日志漏掉;
5.针对将***文件名改名并调用的病毒手法,会产生大量的垃圾信息。
发明内容
本发明要解决的技术问题是提供一种API日志监控方法及装置,可以精确判断API所属模块的安全性,并精确过滤掉无关的模块产生的API流记录,避免漏掉关键API流日志,从而使得到的API流日志更加全面,精确。
为解决上述技术问题,本发明的实施例提供一种API日志监控方法,包括:
确定目标样本运行过程中产生的所有进程中的模块以及后续动态加载的模块是否可信;
获得所述目标样本运行过程中产生的每一条API日志,若所述API日志所属的模块可信,则不记录所述API日志,否则,记录。
其中,所述确定目标样本运行过程中产生的所有进程中的模块以及后续动态加载的模块是否可信的步骤包括:
生成一可信文件列表;
获得所述目标样本运行过程中产生的所有进程中的模块以及后续动态加载的模块对应的***文件以及所述模块对应的***文件的标识;
若在所述可信文件列表中匹配到所述对应的***文件的标识,则将所述对应的***文件对应的模块标记为可信,否则,标记为不可信。
其中,所述生成一可信文件列表的步骤包括:
获得***磁盘中每个***文件的唯一标识;
将所述标识记录在一动态库文件中;
根据所述动态库文件,生成一可信文件列表。
其中,所述获得***磁盘中每个***文件的唯一标识的步骤包括:
对所述每个***文件进行Hash运算,将得到的Hash值作为所述每个***文件的唯一标识;其中,所述Hash值包括:对所述***文件全文进行校验得到的第一校验值以及对所述***文件的头部分进行校验得到的第二校验值;
所述动态库文件包括:顺序存储的所述每个***文件的Hash值形成的序列。
其中,所述根据所述动态库文件,生成一可信文件列表的步骤包括:
从所述动态库文件的每个***文件的Hash值形成的序列中,动态申请多个所述***文件的Hash值,形成所述可信文件列表。
其中,所述获得所述目标样本运行过程中产生的所有进程中的模块以及后续动态加载的模块对应的***文件,以及所述对应的***文件的标识的步骤包括:
对所述目标样本运行过程中产生的进程及衍生进程中的所有模块以及后续动态加载的模块进行定位,获得所述模块对应的***文件;
对所述模块对应的***文件进行Hash运算,将得到的所述模块对应的***文件的Hash值作为所述每个***文件的唯一标识;其中,所述模块对应的***文件的Hash值包括:对所述模块对应的***文件全文进行校验得到的第三校验值以及对所述模块的内存影像的头部分进行校验得到的第四校验值。
其中,所述若在所述可信文件列表中匹配到所述对应的***文件的标识,则将所述对应的***文件对应的模块标记为可信,否则,标记为不可信的步骤包括:
根据所述第三校验值以及所述第四校验值,在所述可信文件列表中进行检索,若检索到与所述第三校验值相同的第一校验值以及与所述第四校验值相同的第二校验值,则将所述模块标记为可信,否则,标记为不可信。
其中,采用二分法,在所述可信文件列表中检索是否存在与所述第三校验值相同的第一校验值以及与所述第四校验值相同的第二校验值。
其中,所述Hash运算是64位Hash运算;所述第一校验值、所述第二校验值、所述第三校验值以及所述第四校验值均是采用CRC32校验算法进行校验获得的。
本发明的实施例还提供一种API日志监控装置,包括:
确定模块,用于确定目标样本运行过程中产生的所有进程中的模块以及后续动态加载的模块是否可信;
记录模块,用于获得所述目标样本运行过程中产生的每一条API日志,若所述API日志所属的模块可信,则不记录所述API日志,否则,记录。
本发明的上述技术方案的有益效果如下:
上述方案中,通过确定目标样本运行过程中产生的所有进程中的模块以及后动态加载的模块是否可信,若可信,则对该模块进行标记,并进一步判断目标样本运行过程中产生的每一条API日志所属的来源模块是否被标记为可信,若可信,则记录该条API,否则,不记录该条API;从而可以精确判断API所属模块的安全性,并精确过滤掉无关的模块产生的API流记录,避免漏掉关键API流日志,从而使得到的API流日志更加全面,精确。
附图说明
图1为本发明的实施例API日志监控方法流程图;
图2为图1所示方法中,判断模块是否可信的流程图;
图3为图1所示方法中,判断API日志是否被记录的流程图。
具体实施方式
为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。
如图1所示,本发明的实施例提供一种API日志监控方法,包括:
步骤11,确定目标样本运行过程中产生的所有进程中的模块以及后续动态加载的模块是否可信;
步骤12,获得所述目标样本运行过程中产生的每一条API日志,若所述API日志所属的模块可信,则不记录所述API日志,否则,记录。
本发明的该实施例通过确定目标样本运行过程中产生的所有进程中的模块以及后动态加载的模块是否可信,若可信,则对该模块进行标记,并进一步判断目标样本运行过程中产生的每一条API日志所属的来源模块是否被标记为可信,若可信,则记录该条API,否则,不记录该条API;从而可以精确判断API所属模块的安全性,并精确过滤掉无关的模块产生的API流记录,避免漏掉关键API流日志,从而使得到的API流日志更加全面,精确。
在本发明的另一实施例中,包括上述步骤11和12的基础上,其中,步骤11具体可以包括:
步骤111,生成一可信文件列表;
步骤112,获得所述目标样本运行过程中产生的所有进程中的模块以及后续动态加载的模块对应的***文件以及所述模块对应的***文件的标识;
步骤113,若在所述可信文件列表中匹配到所述对应的***文件的标识,则将所述对应的***文件对应的模块标记为可信,否则,标记为不可信。
其中,步骤111可具体包括:
步骤1111,获得***磁盘中每个***文件的唯一标识;如遍历***磁盘C盘中的所有***文件(如可移植的执行体PE文件)
步骤1112,将所述标识记录在一动态库文件中,如一指定DB文件中;
步骤1113,根据所述动态库文件,生成一可信文件列表。
进一步地,步骤1111可具体包括:对所述每个***文件进行Hash(哈希)运算,优选的,进行64位Hash运算,将得到的Hash值作为所述每个***文件的唯一标识,其中,所述Hash值包括:对所述***文件全文进行校验得到的第一校验值以及对所述***文件的头部分进行校验得到的第二校验值;所述第一校验值、所述第二校验值均是采用CRC32校验算法进行校验获得的。
相应的,所述动态库文件包括:顺序存储的所述每个***文件的Hash值形成的序列,如下表所示,最终得到动态库文件(DB文件)为顺序存储的文件Hash特征序列:
file_sig_1 |
file_sig_2 |
file_sig_3 |
... |
进一步地,上述1113可以包括:从所述动态库文件的每个***文件的Hash值形成的序列中,动态申请多个所述***文件的Hash值,形成所述可信文件列表。
在本发明的另一实施例中,包括上述步骤111-113,以及步骤12的基础上,其中,步骤112包括:
步骤1121,对所述目标样本运行过程中产生的进程及衍生进程中的所有模块以及后续动态加载的模块进行定位,获得所述模块对应的***文件;
步骤1122,对所述模块对应的***文件进行Hash运算,优选的,进行64位Hash运算,将得到的所述模块对应的***文件的Hash值作为所述每个***文件的唯一标识,其中,所述模块对应的***文件的Hash值包括:对所述模块对应的***文件全文进行校验得到的第三校验值以及对所述模块的内存影像的头部分进行校验得到的第四校验值;其中,所述第三校验值、所述第四校验值均是采用CRC32校验算法进行校验获得的。
进一步地,上述步骤113可以具体包括:
步骤1131,根据所述第三校验值以及所述第四校验值,在所述可信文件列表中进行检索,若检索到与所述第三校验值相同的第一校验值以及与所述第四校验值相同的第二校验值,则将所述模块标记为可信,否则,标记为不可信。
具体地,对目标进程及其衍生进程中的所有已有模块及后续动态加载模块进行判断,根据模块路径定位到对应***文件,对***文件计算文件全文full_crc32特征,对模块的内存映像的头部分计算head_crc32特征,利用该两部分特征到可信文件列表中检索,若匹配成功标记模块可信,否则标记不可信,并将模块信息***模块信息链表以备API监控阶段用于过滤。
优选的,采用二分法,在所述可信文件列表中检索是否存在与所述第三校验值相同的第一校验值以及与所述第四校验值相同的第二校验值。
本发明的上述实施例通过判断目标样本运行过程中的所有模块以及后续动态加载的模块是不可信,并采用了磁盘的***文件Hash及内存映像Hash相结合的方式,判断模块是否可信,其中,磁盘的***文件采用全文Hash,防止漏过感染代码导致校验被绕过;内存映像头部件Hash计算防止病毒通过修改内存映像的方式逃避检测;并进一步采用头部取特定长度数据计算Hash的方式(64位Hash以及CRC32校验),防止正常软件内存映像对特定字段正常修改导致校验失败。
与上述方法相应的,本发明的实施例还提供一种API日志监控装置,包括:
确定模块,用于确定目标样本运行过程中产生的所有进程中的模块以及后续动态加载的模块是否可信;
记录模块,用于获得所述目标样本运行过程中产生的每一条API日志,若所述API日志所属的模块可信,则不记录所述API日志,否则,记录。
其中,确定模块进一步用于完成如上述方法实施例中步骤111-113以及这些步骤的所有具体实现方式,因此,该装置的实施例也能达到与上述方法实施例相同的技术效果,在此不再赘述。
该装置实施例中,可以将该装置部署在一个安全干净的目标操作***(以XP***为例)中,确保该***中不存在任何恶意文件。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明所述原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。