APP下载

Windows内核级防护系统

2016-05-16孟晨宇史渊王佳伟周洁康晓凤

软件 2016年3期
关键词:信息安全

孟晨宇+史渊+王佳伟+周洁+康晓凤

摘要:Windows操作系统是当今应用最广泛的个人计算机操作系统,针对这一操作系统的病毒和木马层出不穷。大多数杀毒软件主要依赖特征码识别技术、校验和技术、软件模拟技术检测病毒。本系统从手动杀毒角度出发,变被动防御为主动查杀,特别是Rootkit保护的内核级木马,通过检测相应的被挂钩函数,内核中被修改的地址,找到相应的进程,从而实现了木马进程的强杀、相应内核内容的恢复等功能,更有效的保护计算机操作系统的安全。

关键词:内核防护;手动杀毒;信息安全;Rootkit

中图分类号:TP311 文献标识码:A DOI:10.3969/j.issn.1003-6970.2016.03.004

0引言

随着网络技术的发展,计算机在人民生活中的地位越来越重要。计算机在给人民的生活和工作带来极大便利的同时,也带来了信息安全问题。Windows操作系统是当今应用最广泛的个人计算机操作系统,针对这一操作系统的病毒和木马层出不穷。而且更为严重的是内核级Rootkit的诞生,给系统安全带来了极大的破坏性。内核是操作系统的核心,内核的完整性保护对维护操作系统至关重要。所以本系统旨在从内核出发,全方位的利用多种综合检测技术维护系统内核的安全性以及完整性。

1系统设计

1.1系统整体设计方案

本系统主要分为用户层和内核层,用户层利用VC++6.0开发,采用C++语言实现,内核层利用WDK开发,采用C语言实现。用户层是与用户交互的界面,用户层通过调用DeviceloControl函数,实现3环与0环的通信。内核层实现系统各个模块的具体功能,从内核维护监测系统安全。如图1系统架构设计图所示。

本系统主要包括七个功能模块,分别为内核监测模块,系统钩子检测模块,隐藏进程检测模块,隐藏端口检测模块,系统服务描述符表监测模块,IDT监测模块,过滤驱动枚举模块。通过这些模块从而实现系统内核的实时监测,隐藏进程、端口、钩子的检测等功能。

1.2系统流程设计

系统启动后,先将内核模块加载到操作系统中,呈现程序主界面,等待用户点击主界面,发送指令,再调用各功能模块完成相应的操作。若所需完成的操作需要调用内核函数才能完成,则通过相关处理将指令发送至内核模块,调用相应的分发函数,获取信息或完成相应的操作,并将执行结果反馈给用户层应用程序。软件的运行流程图如图2所示:

2系统的实现

2.1内核监测模块

内核模块(“软件驱动”)是运行在系统核心层,恶意软件为了获取更强的系统权限,往往会利用驱动加载技术向操作系统中加载自己的模块,因此监测系统中内核模块,有利于发现恶意软件的踪迹。

该模块能够从用户层寻找保存内核模块信息的对象,完成对其获取和分析,从其中找到需要的信息,包括模块名、内核模块基址、内核模块大小、内核模块标志、内核模块加载顺序、内核模块加载次数,模块路径等,并将信息呈现给用户。虽然内核模块运行在内核层,但是监测内核模块却可以在用户层利用Windows API实现。点击主界面上工具栏的第二个按钮开始检测操作系统中内核模块。在系统上列举的内核模块加载情况如图3所示。

2.2系统钩子检测模块

系统钩子可以拦截事件消息,在窗口响应前完成对消息的处理,也可以拦截应用层Windows API对内核函数的调用,因此恶意软件很有可能对系统关键进程安装钩子,以期获取更高的权限和更好的隐蔽效果。本模块就是要从用户层进入系统核心层,将系统中的所有钩子检测出来,明确每个钩子的句柄,钩子相应的处理,以及钩子的类型,还有每个钩子“挂钩”的进程,线程。

点击主界面上工具栏的第二个按钮开始检测操作系统中系统钩子。在系统上列举的系统钩子情况如图4所示:

2.3隐藏进程检测模块

在隐藏进程检测模块中,首先采用在用户态,调用Windows API,获取进程信息,然后在内核态枚举高端内存,获取进程信息,其后比较两次信息,确定隐藏进程。用户态通过调用API ZwQuery-SystemInformation方法,内核态通过遍历PspCidTable句柄表、遍历csrss.exe进程的HandleTable表等两种方法获取到系统所有进程信息。

点击主界面上工具栏的第三个按钮开始检测操作系统中所有进程。在系统上检测到所有进程图5所示:

从图5中,可以看到,当前系统中的所有进程的PID,进程名和EPROCESS,系统中没有隐藏进程,和任务管理器中的获取的进程信息是一致的。

2.4隐藏端口检测模块

在内核态获取端口信息,主要是通过直接获取设备对象/device/tcp和/device/udp,继而获取文件操作对象,随后构造IRP请求信息获取端口信息。该模块绕过中间步骤,直接调用内核,获取内核中设备对象,获取端口信息,从而使隐藏端口无处藏身。

点击主界面上工具栏的第四个按钮开始检测操作系统中所有正在通信进程。在系统上检测到所有端口如图6所示:

2.5系统服务描述符表监测模块

系统服务描述符表SSDT不仅是一个地址索引表,还包含很多其他信息,比如地址索引的基地址、服务函数个数。点击主界面上工具栏的第五个按纽开始检测操作系统中所有SSDT表项。在系统上检测到SSDT信息如图7所示:

2.6 IDT监测模块

IDT(Interrupt Descriptor Table中断服务表)是一个有256入口函数线形表,每个IDT的入口是8个字节说明符,所以整个IDT表字节数是8*256—2048 bytes。检测IDT钩子同样可以使用对比函数原始地址和函数内存地址的方法。[2lIDT在内存中的地址可以通过sidt指令IDTR寄存器内容,IDTR中存放着IDT中断服务入口信息,从而在其中获取IDT服务函数的内存地址。

IDT服务函数的原始地址可以在ntoskrnl.exe中获取,通过获取ntoskrnl.exePE文件在内存中的基地址,然后获取镜像文件的INIT段,读取该段内容后,匹配特征“\xB9\x00\x08\x00\x00\xCl\xE9\x02\xF3\xA5”,特征后就是IDT服务函数的原始地址。

点击主界面上工具栏的第八个按纽开始检测操作系统中所有IDT表项。在系统上检测到IDT如图8所示:

2.7过滤驱动枚举模块

所谓过滤就是在本来已有的设备栈中加入一个自己的设备。在这里把插入设备栈的用户设备叫做过滤设备,建立这个设备并使其具有特殊功能的驱动叫做过滤驱动。本模块所实现的功能就是枚举操作系统中所有已加载的过滤驱动,并将驱动路径、驱动对象名、类型设备宿主驱动对象名等信息显示在列表框中。点击主界面上工具栏的第九个按纽开始检测操作系统中所有已加载过滤驱动。在系统上检测到过滤驱动如图9所示:

3结语

本系统在充分研究病毒、木马原理和Windows内核编程的基础上,设计实现了一个界面友好,使用方便,高效便捷的内核级手动杀毒系统。主要实现了监视内核模块、监视系统钩子、检测隐藏进程、检测隐藏端口、监视SSDT、IDT监视、过滤驱动枚举等功能。本系统从手动杀毒角度出发,变被动防御为主动查杀,更有效的查杀计算机感染的病毒及木马,特别是Rootkit保护的内核级木马,通过检测相应的被挂钩函数,内核中被修改的地址,找到相应的进程,从而实现了木马进程的强杀、相应内核内容的恢复等功能,保护了计算机操作系统的安全。在经济利益的驱使下,木马编写者也在不断研究新型的隐藏技术,逃避传统的检测技术,本系统也可以与时俱进,研究新的隐藏技术,并将对应的检测技术加入到系统中。

猜你喜欢

信息安全
《信息安全与通信保密》征稿函
基于三级等级保护的CBTC信号系统信息安全方案设计
《信息安全研究》2018年(第4卷)总目次
信息安全专业人才培养探索与实践
计算机网络信息安全及防护策略
保护信息安全要滴水不漏
高校信息安全防护
保护个人信息安全刻不容缓
WebSocket技术在信息安全系统中的应用
中国信息安全认证中心