首页 百科知识 基于硬件虚拟化的网络通信监测系统

基于硬件虚拟化的网络通信监测系统

时间:2022-10-05 百科知识 版权反馈
【摘要】:恶意代码攻击检测关键在于获取可靠的原始数据, 与以往防火墙和入侵检测原理不同, 结合Intel系统硬件虚拟化技术从底层监测主机通信, 构筑了基于硬件辅助虚拟化的网络通信监测系统, 达到获取并分析流过计算机网卡的原始数据包功能, 同时结合系统上层数据判断是否有恶意代码流经, 其目的是最大程度上避免恶意通信的通过, 保证了网络系统的计算机信息安全。因此主机的通信检测和防护已经成为网络安全的基石。

北京理工大学 贾丛飞 韦 伟 王 帅

指导老师: 高平

摘 要

恶意代码攻击检测关键在于获取可靠的原始数据, 与以往防火墙和入侵检测原理不同, 结合Intel系统硬件虚拟化技术从底层监测主机通信, 构筑了基于硬件辅助虚拟化的网络通信监测系统, 达到获取并分析流过计算机网卡的原始数据包功能, 同时结合系统上层数据判断是否有恶意代码流经, 其目的是最大程度上避免恶意通信的通过, 保证了网络系统的计算机信息安全。

关键词: 硬件辅助虚拟化; 虚拟机监视器; 网络通信监测; 过滤数据包

1 选题背景

网络安全领域普遍采用通过保护网络边界来阻止恶意代码的攻击。 但由于系统、 网络设计本身的缺陷和漏洞, 使恶意代码能利用其缺陷和漏洞访问边界保护内的主机。 因此主机的通信检测和防护已经成为网络安全的基石。

常用的防火墙是基于传输驱动程序接口(TDI)枚举网络通信进程, 恶意程序直接使用自定义的网络驱动接口规范(NDIS)协议驱动发送和接收数据包, 就可以绕过基于TDI接口的防火墙/入侵检测系统。 随着Rootkit技术的发展, 通信隐藏技术已深入到内核, 传统的检测技术对它们的检测越来越困难。

针对这种问题, 我们开发出了基于NDIS的防火墙。 根据恶意程序的通信隐藏检测的关键在于获取可靠的原始数据的原理, 我们提出了使用基于硬件辅助虚拟化的方法检测网络通信, 使检测程序深入到计算机网络底层, 直接获取分析原始数据包, 检测到可疑通信数据。

图1 系统网络构架图

2 系统总体方案

目前木马技术隐藏得越来越深层次化, 通过寻找木马进程来避免木马程序对计算机的破坏变得越来越困难, 由于大多数木马是C/S模式, 这就需要检测大量通信数据中隐藏的木马通信数据, 避免对其他进程的修改, 并直接读取网卡流经的数据。

为了获取可靠的原始数据, 采用硬件辅助虚拟化技术, 其原理在于我们构建的虚拟机监视器处于硬件网卡和Windows网络构架之间, 系统网络构架如图1所示。

虚拟机监视器会截获来自硬件的中断请求, 从网卡中读取原始数据, 根据TCP/IP协议, 结合应用层的监测, 通过建立的规则及已有的数据特征对数据包进行匹配, 一旦检测出非法数据就对其进行过滤, 并切断相应的连接, 杜绝其后续的数据交互。 系统原理如图2所示。

图2 系统原理图

3 系统设计与实现

3.1 功能设计

在操作系统之下架设虚拟机监视器(VMM), 当网卡在收发数据产生中断, 被虚拟机监视器捕获,此时, VMM将DPC处理例程插入到DPC队列, 然后将中断注入虚拟机。 操作系统会自动调用DPC处理例程, 从内存中读取网络通信的原始数据, 并将数据链表传递到通信模块, 同时会激活内核事件。 当应用程序被事件激活后, 与通信模块建立通信, 读取内核数据, 同时接收用户态的通信进程并枚举信息, 对比分析两个链表的数据, 将结果显示在用户界面。 其系统功能结构如图3所示。

图3 系统功能结构图

3.2 系统模块组成

系统模块分别是虚拟机监视器 (VMM)、 底层监测、设备驱动、 应用层监测、 整合分析/配置与系统保护以及NDIS中间层驱动过滤模块。 各模块之间的协作关系如图4所示。

图4 系统各模块之间的协作关系

3.3 各模块原理及设计

3.3.1 设备驱动模块

整个系统的核心部分是以NT驱动的形式加载并实现的, 设备驱动模块完成了驱动设备对象的建立、 内核数据的初始化与维护、 VMM模块的加载以及用户层模块对驱动程序的I/O请求等工作。

在分析数据链表时需要频繁的内存申请和回收操作,一般的操作方法会导致产生大量的内存空洞, 最终导致无法申请内存, 所以采用Lookaside结构增加内存申请和回收的效率及管理。 因此首先需要初始化Lookaside对象, 初始化操作完成后就可以使用函数ExAllocateFromNPagedLookasideList和ExFreeToNPagedLookasideList进行内存的申请和回收操作。 接下来需要在Lookaside的基础上进行内核数据链表和用户层数据链表的初始化操作, 并且需要将该两者建立映射联系。

延迟过程调用(DPC)广泛应用于驱动程序的开发中, 它运行在DISPATCH_LEVEL的IRQL级别,除了ISR, 其他例程无法中断该调用。 因此本系统的网络数据解析的操作放到DPC中完成, 所以首先需要对DPC对象进行初始化。

同时对网卡相关数据结构以及地址进行初始化, 通过写读CONFIG_ADDRESS(0x0CF8)、 CONFIG_DATA(0x0CFC)两个PCI寄存器, 获得网卡的PCI配置空间的基地址, 即网卡Memory Mapped I/O空间的基地址, 然后将其转换并映射此基地址起始的64K地址空间为内核可读写的虚拟地址。 随后通过READ_REGISTER_UCHAR宏操作读取并保存网卡MAC地址、 Status Block物理地址、 Receive Return Ring物理地址等相关数据。

设备驱动程序在注册驱动调用函数、 创建设备之后, 还肩负着开起CPU虚拟化模式, 建立VMM虚拟机监视器的任务。

用户层程序通过设备驱动与内核模块进行数据交换与通信, 所有的I/O请求都通过DO_DIRECT_IO直接内存访问方式来进行数据交换。这样可以避免频繁内存操作,以提高运行效率。

3.3.2 虚拟机监视器

VMM模块处于内核层, 通过对VMCS的控制来获得所有的硬件的外部中断。 并判断出是否为网卡中断, 如果是, 则将数据处理函数插入到操作系统的DPC队列中, 等待处理数据。

首先是构建VMM所需结构, 检测CPU是否支持Intel VT-x, 设置相关状态位。 并申请VMCS及VMXON空间, 并获得对应的虚拟地址。 并初始化这两个区域, 将数据清零。 将申请的内存地址的虚拟地址转换为物理地址。

虚拟机开启成功之后, 后续工作如图5所示。

图5 虚拟机开启后续工作

在开启虚拟机之后, 需要激活VMCS域, 并将内部的数据结构进行初始化, 主要设置的区域为虚拟机状态保存区、 宿主状态保护区、 虚拟机运行控制域、 VMEXIT行为控制域、 VMENTRY行为控制域、 VMEXIT相关信息域等。

配置的关键在于以下两点:

1) VMEXIT行为控制域与VMENTRY行为控制域。 由于需要截取系统的外部中断信息, 所以将PIN_BASED_VM_EXEC_CON-TROL的0位设置为1, 还需要设置APIC应答位VM_EXIT_CON-TROLS设置为1。 当外部中断到来时CPU会自动从APIC得到该中断的中断号, 以及错误码等相关内容并存放在VMEXIT信息域中。

2) 设置客户机与宿主机的堆栈指针和指令指针。 此处将客户指令指针指向了调用启动VMM函数的下一条语句, 堆栈也设置为相应的堆栈。

将VMCS配置成功后, 使用VMLAUNCH命令可以调用客户机运行。 到此VMM的架构就建立起来, 实现了操作系统动态迁移到了非根模式下运行。 VMM在根模式下运行, 一旦外部触发产生, 就会触发VM-EXIT事件。 陷入VM中对该事件进行处理。

VMM架构一旦运行后, 主要运行的是中断处理函数, 每次外部中断到来时, 首先获取VMEXIT域中的中断信息, 并判断其是否为网卡中断。 如果是网卡中断, 即可以将数据处理函数插入到系统DPC队列中等待处理数据, 否则进行下一步处理。 通过系统的标志寄存器判断是否响应中断, 如果可以响应中断, 则立即注入事件; 否则将中断信息保存在系统维护的数据队列中, 并且关闭外部中断, 开启中断窗口。 返回后更新通用寄存器, 然后调用Resume返回客户机运行。

开启了中断窗口后,当IF位变为1时会触发中断窗口事件,在分发函数对外部中断的处理过程中我们通过对外部中断控制和中断窗口的控制来实现了中断的截获。通过这种方式截获中断,并将自己的处理函数加载到DPC队列中,可以使得处理函数早于中断处理函数的DPC被调用。因此获得最原始的网卡数据。

3.3.3 底层监测模块

底层监测模块是本系统数据获取与分析的重点, 它被放在延迟过程调用例程(DPC例程)中执行,其DPC对象在设备驱动对象创建后初始化。 VMM虚拟机监视器截获中断, 经判断后将其DPC例程插入到系统DPC队列当中, 当系统中断请求级(IRQL)恢复到DISPATCH_LEVEL时, DPC会依次从队列中弹出, 并执行相应的DPC例程。

接收到的数据包被网卡控制器DMA存放到主机内存中, 同时在内存中维护着一个由512个Receive Buffer Descriptors组成的Receive Return Ring, 这些每一个被使用的Receive Buffer Descriptor都指向一个指定长度的内存空间, 用来存放从网卡DMA来的待处理的数据包, 如图6所示。 而Receive Return Ring的地址又可以通过Ring Control Blocks来获取, 即如图7所示。

图6 Receive Buffer Descriptors结构

图7 Receive Return Ring的地址结构

同时, 在网卡Memory Mapped I/O空间中的Status Block中记录着本次中断待处理的Receive Buffer Descriptor的Indices索引。 通过读取Status Block中的Receive Return Ring Indices便得到Return Ring中待处理的BD的索引值Index。 因此, Index_Last(通过IOCTL_INITINDEX_EVENT获得)与Index之间的各BD所指向的指定长度的内存空间即是本次DPC例程需要获取并分析的数据包所在。

3.3.4 应用层监测模块

在应用层, 首先调用WSAStartup函数完成对Winsock服务的初始化, 然后加载Iphlpapi.lib库, 使用其中导出的GetExtendedTcpTable和GetExtendedUdpTable函数获得应用程序的TCP和UDP链接信息。调用函数成功后, 当前系统的TCP、 UDP链接信息保存在MIB_TCPROW_OWNER_PID和MIB_UD-PROW_OWNER_PID结构中。 根据结构中的进程PID, 调用函数CreateToolhelp32Snapshot得到进程快照, 根据PID得到该网络链接的相关信息。 最后将网络通信进程的相关信息保存在term链表当中, 之后通过对比分析得到进程快照。

3.3.5 整合分析/配置与系统保护模块

3.3.5.1 整合分析/配置

比较用户层枚举得到的链表和从内核得到的数据链表: 同时在两个链表中出现的通信为正在通信的进程; 没有在枚举链表中出现, 而在原始数据链表中出现的通信为可疑的隐藏通信进程。

根据少量内建的预置规则及特征库对可疑的隐藏通信数据进行分析, 实现主动地添加过滤规则到NDIS中间层驱动, 其方式有两种, 一是在匹配到预置过滤规则或特征后, 会自动向NDIS中间层驱动添加规则, 屏蔽可疑网络通信, 并且会用户界面显示, 通知用户。 二是用户根据自己的意愿和检测到的网络流量进行判断, 手动添加规则。

系统在运行中会自动生成三个日志文件, 分别记录添加过滤规则配置信息、 用户操作和可疑链接。

1) 在系统增加或删除过滤规则时, 会自动实时更新过滤规则配置文件MyFireWall.fnk, 保持系统的同步以及下次启动时的初始化信息。

2) 在用户进行操作时, 系统会记录用户的操作行为以及操作时间, 包括更改过滤模式, 关闭系统等到MyFireWall.log中。

3) 在系统对比分析中, 根据底层数据包的分析结果和应用层枚举信息的对比和预置规则, 判断可疑连接, 并将可疑连接记录到可疑连接日志文件VMMFireWall.log中。

3.3.5.2 系统保护

本系统使用DKOM(直接内核对象操作)技术实现了对自身进程、 设备驱动程序的更底层的隐藏,保证了不被恶意程序以非法手段结束服务进程。

1) 进程保护。

通过遍历在每个进程的EPROCESS结构中引用的一个双向链表, 可以获得Windows操作系统的活动进程列表。 通过遍历操作系统的活动进程链表, 对需要本系统进程的EPROCESS结构进行出链操作即可实现隐藏。

2) 驱动保护。

当服务控制管理器(SCM)加载一个驱动的时候, 就会生成一个对应的驱动对象DRIVER_OBJECT,每一个驱动对象里的DriverSection中保存着一个指向KLDR_DATA_TABLE_ENTRY结构体的指针, 这个结构体被用来保存驱动模块的一些信息。

3) 文件保护。

本系统采用文件过滤驱动来保护程序的目录、 生成文件不被恶意程序删除。 实现方式基于微软WDK中的Minifilter框架, 通过对保护目录路径的IRP_MJ_WRITE请求的过滤, 从而防止规则文件被删除。

3.3.6 NDIS中间层驱动过滤模块

NDIS是Network Driver Interact Specification的缩写, 即网络驱动接口标准, 它在Windows网络体系结构中占据着重要的角色, 它为网络驱动抽象了网络硬件, 指定了分层网络驱动间的标准接口。

NDIS中间层驱动位于NIC驱动之上, 同时又在一个传输驱动(可能是多层次的)之下, 该传输驱动程序在它的上边界支持TDI(传输驱动层接口)。 一个NDIS中间层驱动在它的下边界给出MiniportXxx函数供上层的Protocol驱动使用, 在它的上边界给出ProtocolXxx提供给下层的Miniport驱动使用。 在微软的WDK中, 有一个附带的中间层驱动例子passthru。 本系统利用此中间层过滤驱动结合底层监测模块,通过一些内建规则, 手动/自动地将过滤规则写进中间层驱动, 实现对数据封包的过滤。

4 创新与特色

4.1 创建了将硬件虚拟化应用于通信监测领域的方案

采用硬件辅助虚拟化技术, 该技术可以经操作系统动态迁移到非根模式下, 使得用户操作运行权限进一步缩小, 保证了操作系统的安全。 同时由于在VMM层只会对某几个敏感指令进行操作, 所以不会影响操作系统的稳定性。 并根据对VMM的设置可以捕获所有外部中断, 而且会优先于操作系统获得中断。 在网卡中断处理程序、 处理网络数据之前, 获取真实可靠的原始数据。

4.2 将检测系统核心架设在操作系统之外

现代通信检测系统核心都是在操作系统框架内完成, 过多依赖于系统提供的某些功能。 本系统核心虚拟机监视器构建在计算机硬件与操作系统之间, 对最原始的网络数据进行分析, 获取网络通信信息,并避免了恶意程序通过Hook等技术首先获取原始数据, 并对数据内容进行篡改等操作。

专家点评

作品材料齐全, 文档规范。

作品选题有创意, 特色鲜明。 作品结合Intel系统硬件虚拟化技术从底层监测主机通信, 构筑了基于硬件辅助虚拟化的网络通信监测系统。 该系统首先获取并分析流经主机网卡的原始数据包, 再经上层应用判断是否存在恶意代码, 可最大程度上检测并避免主机恶意代码的通信。

作品完成优秀, 答辩思路清楚, 回答问题正确。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈