当前位置:首页 期刊杂志

内核级恶意程序监控与测评系统的设计与实现

时间:2024-05-20

颜建林 张蕊蕊

摘 要 随着病毒木马技术的发展,传统的依赖特征码查杀病毒木马的方法不能很好地查杀病毒木马。病毒木马可以通过加壳,混淆等方法绕过特征码查杀。同时近年来,勒索软件的流行,大部分杀毒软件针对已存在的勒索软件进行防御,却不能很好的防御未知或者新型的勒索软件,因此找到一种能够防御已知和未知的勒索软件的方法就显的尤为重要。针对病毒木马,本软件没有采用基于特征码的方式去检查,而是采用了在内核中对各个关键点进行监测,以此来避免用户层的监测被病毒木马绕过的情况。同时在对病毒木马行为监测的同时会对关键数据进行记录,如注入的数据,操作的文件,注册表敏感位置的修改,能够极大的减少后续人工逆向分析的时间。本文采用了多种方法进行防御勒索软件:通过放置陷阱文件,监测进程的文件读写数量,记录每个进程最近读写文件的内容,能尽最大的可能发现勒索软件的存在,同时减少错误中止进程的概率。

关键词 行为分析;勒索软件;检测;恶意软件;网络安全

中图分类号 TP3 文献标识码 A 文章编号 1674-6708(2018)217-0110-03

1 恶意软件的发展和现状

恶意软件是病毒,木马,流氓软件等一系列软件的总称。在早期个人计算机运算能力不足,存储容量不够的情况下,流行的主要是以破坏为目的或者黑客以炫耀技术为目的的病毒。Mcafee在他们的2016年度报告中称2016年为勒索软件之年,就可以看出勒索软件在近年来的发展趋势。勒索软件流行不仅仅是因为个人计算机上存储的敏感数据增多,相比其他类型的木马勒索软件更具隐蔽性,更容易逃过杀毒软件的查杀,而且一旦受害者计算机被感染后只能选择交付赎金解密也是勒索软件流行的一个原因。比较知名的勒索软件有TeslaCrypt,CryptXXX,Jigsaw等,目前在多数情况下,被勒索软件加密的文件无法解密,只有少数存在设计缺陷如密钥管理不当,密钥空间过小的勒索软件能够被解密。

2 恶意软件防御与检测现状

早期恶意软件数量较少时,多数杀毒软件,防火墙检测恶意软件的方法都是特征码扫描,在这个时期,特征码扫描的方法是较为准确可靠的。但是,在Mcafee的2016年度报告中,仅2016年第2季度就有6亿恶意软件被检测到。因此传统的特征码扫描在惡意软件大量增多的情况下,就显得十分不可靠,低效率。

现在大部分杀毒软件都开始采用动态行为分析,云端检测等多种方法来查杀恶意软件,也有部分安全产品使用了机器学习来查杀恶意软件。但是勒索软件比较容易绕过这些防御手段,主要在于勒索软件相比其他恶意软件可能不会有添加开机启动项,频繁联网,修改注册表等操作。目前主要是通过放置陷阱文件,备份,以及基于机器学习,通过行为分析,布置蜜罐等方法来防御勒索软件的。

3 系统设计与实现

3.1 用户层管理与显示模块

该模块是本程序中用户唯一可见的模块,主要起到初始化整个程序,显示恶意进程处理结果,转发模块之间消息的作用。为了提高通信效率,采用了多线程的方式在多模块之间进行消息传递。

3.1.1 初始化

该模块会使用net start命令启动已经安装在操作系统中的其他模块,然后运行,针对不同的模块,分别创建线程进行通信。

3.1.2 通信信息处理

在进行通信前需要定义好通信协议的结构,同时要确定通信的发起方。在文件过滤模块与用户层通信时,用户层首先与驱动建立连接,确定通信端口,之后用户层的通信线程一直处于循环中,等待内核发来消息。当过滤模块监测到异常文件操作时会将信息按预先定义好的结构发向用户层,当有消息发来时,用户层的线程会接收消息,按格式提取出进程信息,并将该消息发向其他驱动中。

用户层与行为分析基础框架模块进行通信时采用的时DeviceIoControl函数,需要预先定义对应的控制码类型,如TYPE_RANSOMEWARE是关于勒索软件信息,TYPE_INJECT是关于进程注入的信息。当存在勒索软件时,用户层软件会主动向行为分析模块发生勒索软件信息,行为分析模块尝试中止勒索软件后将处理结果返回。但是当用户层软件查询注入,注册表等其他敏感操作时,会发起一个对应类型的请求,然后进入阻塞等待状态,直到有对应类型的恶意操作产生,内核中的行为分析模块才会进行消息的回复,用户层的线程接收到消息后会恢复运行,按预先定义的格式提取出敏感操作发起的进程信息。

当系统中存在勒索软件时,消息的传递方向和顺序。首先文件过滤模块会使用FltSendMessage函数将数据按预先定义的格式发向用户层,用户层接收到消息后马上将消息以TYPE_RANSOMEWARE的类型发向行为分析模块,行为分析模块中止勒索进程后将处理结果发向用户层进行显示。

查询注入情况的消息处理流程,首先由用户层发起查询注入情况的请求,然后进入等待状态,行为分析模块会一直再内核中监测注入情况,直到存在注入,才会将消息返回用户层,会话用户层线程的运行状态。

3.2 行为分析基础模块

该部分主要是整个程序的基础部分,用户层的管理显示模块会将其他模块的信息转发到这个。比如防御勒索软件的模块检测到勒索软件,它会将进程与其相关的信息发向用户层的管理显示模块,再由用户层的管理显示模块发向行为分析基础模块中去终止该进程。行为分析基础模块维护了整个系统中的进程以及进程相关的其他信息,如进程的文件读写操作,注册表操作等。

3.2.1 基础框架和结构

在操作系统中每个程序都是以进程为单位进行资源的分配。所以最为基础的是记录当前操作系统中存在的进程,在程序中以一个自定义的结构保存进程信息。该结构保存了每个进程的文件路径,父进程信息,以及每个进程的威胁分数。结构体中的score就是威胁分数。一个进程添加了自启动项,会增加一个自启动对应的分数,一个进程注入了其他进程会添加一个注入对应的分数,一旦进程威胁分数达到一个阈值就可以判断这个进程是一个可疑进程。

如果只是记录单个进程的威胁分数,可能会存在不能检测到部分恶意软件的情况。因为现在很大恶意软件将恶意操作分布到多个进程中执行,所以在程序中还保存了每个进程父进程的信息,如果存在一个恶意软件创建一个新的进程,并将恶意代码解密出来,注入到新的进程中执行的情况,虽然两个进程的威胁分数都没有达到阈值也会被判断为可疑进程。

进程的信息需要实时的更新,当有新的进程创建时需要把新进程信息保存下来,当有进程退出时需要将进程信息释放,避免整个程序信息的不可靠和冗余。因此需要在NtCreateUserProcess等进程相关的API处进行HOOK,系统中所有的进程以双向链表的形式保存,每当有新的进程创建时,将新进程信息写入链表末尾,有进程退出时,将进程信息从链表中删除。

3.2.2 恶意操作监测

在有了之前的基础上,对恶意操作的监测就是对SSDT中的函数进行hook了。

恶意软件为了保证自身常驻与操作系统中肯定会想办法在每次开机时启动,这可以通过添加注册表操作的回调函数来进行监测,同时恶意软件肯定会为了逃避杀软查杀使用各种小技巧,比如将自身恶意代码注入正常进程,这可以通过对进程创建和内存读写的函数进行hook。

除了上文提到的方法还有以下几种方法检测进程注入:

1)针对特殊进程,比如svchost的进程父进程是一个映像文件在D盘中的进程,就可以判断存在进程注入。

2)当一个进程中的代码段的属性为可读可写可执行时,也可以判断存在有壳,注入的情况。

3)比较VAD和PEB中是否都存在主模块,如果是进程注入,VAD中会不存在主模块。

对注册表的监测主要在于对一些启动项的监测和对一些恶意软件常常读取用来判断自己是否在虚拟机中的位置进行监测。常见的启动项HKCU\ Software\Microsoft\Windows\Curr

entVersion\Policies\Explorer,Software\ Microsoft\Windows\CurrentVersion\Run, Software\Micro

soft\Windows\CurrentVersion\RunOnce等。

还有一些恶意软件会阻止分析,比如阻止任务管理器的打开,阻止cmd的运行,阻止控制面板的打开等。

在内核中提供了注册表操作通知的回调接口。可以使用CmRegisterCallback注册回调函数。在回调函数中可以最任意的注册表操作进行记录和监控。

3.3 文件过滤模块

这个模块主要使用多种方法结合进行防御勒索软件。如果只是单纯的对短时间内大量读写文件的进程进行中断,错误率极高,因此使用了3种方法,分别是陷阱文件是否被修改,文件读写数量是否达到阈值,文件读写内容是否符合勒索软件特点。

3.3.1 文件过滤

本系统使用minifilter而不是传统的文件过滤驱动,当驱动检查到有异常时会把异常进程的信息通过FltSendMessage发向用户层,用户层再将该信息发向保存进程列表的驱动中做进一步的判断和决定是否中止进程。

3.3.2 陷阱文件

这里模仿的是安全防御中常见的蜜罐的思想,蜜罐是一种故意布置在网络中存在漏洞或者安全问题的计算机系统,主要的作用是用来提醒網络管理员去防范某一类攻击,或者去追溯黑客组织信息。蜜罐中暴露出来的信息实际上都是虚假的或者无意义的。在本防火墙中就布置了类似思想的陷阱文件。陷阱文件的布置由用户层管理与显示模块在初始化时完成。陷阱文件本身的内容是无意义的,但是一旦陷阱文件被加密就可以产生一个警报给操作系统使用者。

除去针对MBR进行加密的勒索软件,几乎所有加密文件的勒索软件会调用FindFirstFile,FindNextFile这两个API对文件进行遍历,然后对文件进行加密。所以可以放置一个陷阱文件,实时的监测这个文件的读写状态,如果这个文件被修改就可以判断有勒索软件存在,因为这个陷阱文件是无实际意义的文件,一般情况下是不会有进程对其进行修改的,只有勒索文件在遍历磁盘加密文件时,会对该陷阱文件进行读写操作。

3.3.3 文件读写数量和内容监测

勒索软件还有一个特征就是短时间内会进行大量的文件读写,因此可以设置一个时间,比如1分钟,如果在这一分钟内某一个进程对文件的读写超过阈值就可以说这个进程是可疑的,但是很多正常进程同样会在短时间内会对文件进行大量读写,所以在该模块中对每个进程增加一个结构,保存该进程最近读取的文件名字和路径,因为勒索软件读取的时候是按照顺序来的,那么肯定会对同一目录下的多个文件进行加密,如果在该结构中检查到同一个目录下多个文件,再加上这个进程短时间内有大量的读写情况,就能减少误判的概率。

3.4 网络流量监测模块

这个模块是整个防火墙的最后一道防线,除了勒索软件的恶意软件,其他的恶意软件如DDOS木马,远控木马,窃取敏感信息的木马最后都会有联网的操作,一旦能够在联网的过程中将其阻止,阻断其与控制端通信的途径,即使恶意软件收集到了足够多的敏感信息也不会造成损失。

流量监测:

这个模块需要结合行为分析基础模块,一个进程在行为分析的过程中达到威胁的阈值,该模块的网络连接就会被中断。

4 结论

本系统设计了一个基于行为分析检测的内核级恶意程序监控与分析系统,在内核层对系统关键API进行监测,并且对流量进行过滤和记录就可以在一定程度上避免恶意程序造成的破坏。

参考文献

[1]谭文,陈铭霖,张佩,等.Windows内核安全与驱动开发[M].北京:电子工业出版社,2015:45-78.

[2]Mark Russinovich,David A.Solomon,Alex Ionescu.深入解析Windows操作系统上册[M].北京:电子工业出版社,2014:69-127.

[3]Mark Russinovich,David A.Solomon,Alex Ionescu.深入解析Windows操作系统:卷2.北京:人民邮电出版社,2013,200-230.

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!