内核态下的系统服务分配表挂钩主动防御技术

来源 :电脑迷 | 被引量 : 0次 | 上传用户:suzuzl
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要 恶意程序利用内核态下的系统服务分配表挂钩可以隐藏进程,过滤数据等,严重威胁计算机系统安全。本文提出了一种针对系统服务分配表挂钩技术的主动防御技术,通过内核驱动程序,为系统关键内核服务函数添加自我保护功能,能在恶意程序挂钩相关服务函数系统服务分配表后,该服务函数能够立刻感知,及时修复相应表项值、报警,最后设计程序验证方案有效性。
  关键词 挂钩 防御 系统服务
  中图分类号:TP391 文献标识码:A
  0引言
  挂钩技术应用广泛,安全产品利用挂钩技术可以对软件行为进行分析过滤,阻止恶意程序进行威胁操作,例如,有的防火墙就用到了SPI和NDIS的挂钩技术。近年来,恶意程序作者对windows系统进行深入研究,使用的挂钩技术越来越先进,由于系统服务分配表(System Service Dispatch Table,SSDT)肩负着在用户模式的win32 API和内核模式下的内核API之间建立地址映射的使命,所以恶意程序作者常挂钩SSDT表,达到隐藏自身进程、过滤数据、对抗安全产品等目的,为此,本文提出了一种针对SSDT表挂钩的主动防御技术,给一些系统关键的服务函数添加自我保护的性质,使其一旦被SSDT表挂钩,能够及时察觉、修复、报警,较之于传统的静态似的枚举检测,本文提出的方法效率高,而且能在恶意程序给用户造成损失以前及时阻止。
  图1 SSDT挂钩原理图
  1系统服务调度原理及SSDT挂钩技术
  系统服务函数是操作系统提供的一个函数集,应用程序通过调用API函数执行系统服务。对于应用层的API首先调用Ntdll.dll这个动态链接库转译成内核服务,Ntdll.dll中的包装函数做进入内核前的装备,如将服务号放入eax、将存放用户参数的用户栈指针放入edx、执行中断,进入到内核态。在Windows XP下,包装函数形式如下:
  mov eax, ServiceID
  lea edx, ParameterTable
  call dword [ptr]edx
  retn
  其中ServiceID是将要调用内核服务的服务号。
  内核层的系统服务分配表,该表存放了系统服务号和服务函数所对应的地址,进入中断后,内核根据所传的服务号(eax)在SSDT表中查找相对应的服务函数地址。
  若要挂钩SSDT,只需修改表中服务号所对应的函数地址,使其指向自定义函数地址,在执行相应代码后再调用原系统服务函数代码。原理图如图1所示。
  2相关SSDT表挂钩技术检测与恢复方法
  2.1基于执行状态分析的检测方法
  如果入侵者挂钩SSDT某个内核函数,该函数的一些执行状态(指令个数、寄存器状态、CPU状态等)将与正常的执行状态有所区别,通过对比可以大致检测出是否被挂钩。但该方法实现复杂,例如指令对比法。执行指令的数量不同,一定程度预示着该服务函数被挂钩了。但为了统计指令,系统必须处于单步追踪模式下,每执行一条指令就要触发一次中断,因此系统性能明显降低。而且,系统服务函数每次运行时指令个数不同,具有不确定性。
  2.2基于对比的检测恢复方法
  内核文件Ntosknl.exe中有个KiserviceTable,存放未重定位的服务地址,可以经过文献提出的方法,定位该表。通过这些地址可以计算出服务函数相对于基地址的偏移量。将其映射进内存中,将该文件中服务函数的偏移量加上正在运行的内核模块的基地址,可以得到各服务函数的虚拟地址。利用该地址可以产生新的SSDT,利用该表和运行的SSDT表进行对比,发现服务地址若有不同,就是被挂钩的地方,将其按新的SSDT表的内容经行恢复。该方法是静态的被动式的匹配检测,由于SSDT函数数量多,调用频繁,该检测方法会占用内存,CPU等资源进行不断的检测,发现异常再恢复,会严重影响系统性能。
  2.3SSDT表挂钩主动防御技术
  针对SSDT表挂钩,本文提出了一种主动防御技术,为系统一些关键服务函数添加保护性质,使其具有在被调用时先检测自己在SSDT表中的函数地址是否被挂钩的能力。由于多数恶意程序在挂钩SSDT表后,先执行自定义代码,再调用系统服务函数,所以本文提出的方法能够有效检测SSDT表的挂钩,如图2所示。要完成向系统服务函数添加检测功能,可以直接修改服务函数体和使用SSDT挂钩技术。但由于在内核直接修改函数代码,容易导致系统崩溃,而且由于Windows版本不同,内核也不同,兼容性较差。所以本文采用SSDT挂钩技术,达到给系统服务函数添加检测恢复功能的目的,以后恶意程序再挂钩SSDT表,将被及时检测恢复。本文以恶意程序经常挂钩的内核ZwQuerySystemlnformation函数说明,如何使其防止被SSDT挂钩。
  图2 SSDT挂钩防御原理图
  SSDT结构如下:
  typedef struct _SYSTEM_SERVICE_TABLE{
  PVOID ServiceTableBase;//系统服务函数分配表基地址
  PULONG ServiceCounterTableBase;//服务表项被调用的次数
  ULONG NumberOfService;//系统所支持服务个数
  ULONG ParamTableBase;//指向系统服务参数表
  };SYSTEM_SERVICE_TABLE,
  *P SYSTEM_SERVICE_TABLE;
  typedef struct _SERVICE_DESCRIPTOR_TABLE{
  SYSTEM_SERVICE_TABLE ntoskrnl.exe;   //ntoskrnl.exe的服务函数
  SYSTEM_SERVICE_TABLE win32k;
  //win32k.sys的服务函数
  SYSTEM_SERVICE_TABLE null1;//未使用
  SYSTEM_SERVICE_TABLE null2;//未使用
  } SERVICE_DESCRIPTOR_TABLE,
  *PSERVICE_DESCRIPTOR_TABLE;
  KeserviceDescriptorTable是由内核Ntoskrnl.exe导出的内核实体,该表包含指向SSDT表的指针。因此只要定位该表,就可以定位SSDT表的基地址Base,而函数的服务号ServiceID也可通过KeserviceDescriptorTable获得,从而可以得到其地址Addr=Base+ServiceID*4,修改该地址中内容,使其指向新定义的函数。
  SSDT位于windows系统内核空间中,要修改SSDT的内容必须使用设备驱动程序,而且在Windows XP操作系统中对SSDT所在内存区域启用了写保护机制,要修改SSDT表中内容,需要绕过内存保护机制。
  定义新的函数HookZwQuerySystemlnformation,易定位该函数内存地址为nAddress,在驱动程序的入口函数中将函数的地址重定向到HookZwQuerySystemlnformation并返回原函数地址sAddress。
  定义PTR_ZwQuery为ZwQuerySystemInformation函数指针。
  NTSTATUS DriverEntry( IN PDRIVER_OBJECT
  theDriverObject, IN PUNICODE_STRING theRegistryPath )
  { _asm
  {
  push eax
  mov eax,CR0
  and eax,0FFFEFFFFh
  mov CR0,eax
  pop eax
  }//关闭写保护
  sAddress=(PTR_ZwQuery)InterlockedExchange((PLONG) KeServiceDescriptorTable.ServiceTableBase[*(PULONG) ((PUCHAR)(PTR_ZwQuery)+1)],(LONG)
  HookZwQuerySystemInformation );
  _asm
  {
  push eax
  mov eax,CR0
  or eax, NOT 0FFFEFFFFh
  mov CR0,eax
  pop eax
  }//开启写保护
  }
  恶意程序挂钩ZwQuerySystemlnformation函数,实际挂钩HookZwQuerySystemlnformation函数,该函数被调用时先检查nAddress和该函数ServiceID所对应的SSDT表项中的值是否相等,如果不相等,判定函数被挂钩,恢复该表项的值后报警,如果相等,继续执行ZwQuerySystemlnformation函数。该函数伪代码如下:
  TypeX HookZwQuerySystemlnformation(…)
  {if(地址相等)
  return sAddress;//执行原函数
  else
  virusAddress=(PTR_ZwQuery)InterlockedExchange((PLONG) KeServiceDescriptorTable.ServiceTableBase[*(PULONG) ((PUCHAR)(PTR_ZwQuery)+1)],(LONG)
  HookZwQuerySystemInformation );//恢复表项值,返回病毒地址
  return value _of_TypeX;//返回报警值
  }
  在实际中,需要保护多个函数时,可以将驱动程序的加载、病毒报警及处理等模块抽象为公共模块处理,以节省系统资源。Nguye等人通过监测文件访问和进程活动构建了系统调用层次模版。我们可以对系统之间的调用关系抽象成调用图,赋予各个函数不同权值,找寻关键服务函数进行保护,以此提高效率。
  3实验结果与分析
  操作系统:Windows 7,CPU Intel Core2,2.0Ghz;内存:2GB; 虚拟机VMvare WorkStation7.0;虚拟机 (下转第37页)(上接第33页)操作系统:Windows 7;编译工具VS2010、DDK2003;在此环境下测试Hook_ZwQuerySystemlnformation病毒,该病毒通过Hook掉SSDT表中的ZwQuerySystemlnformation函数来改变进程链表结构,从而达到隐藏自身的目的。文提出的方法能够在函数被挂钩后立即检测恢复并且报警。
  4结论
  本文提出的针对SSDT挂钩技术的主动防御方法,赋予了关键函数自我保护的性质,一旦函数被挂钩、调用能及时发现恢复。较之其它静态式的被动检测方法,本方法能够及时发现并且阻止恶意程序,而且由于函数在被调用时才占用资源,所以资源占用量少,效率高,但随着保护函数数量的增加,效率会降低,因此找寻系统关键函数进行保护显得尤为重要。同时针对直接修改函数内核体的挂钩技术,怎么提取病毒特征,使函数具有自我保护性质,怎么使函数具有自我保护性质,还需进一步探索。
  参考文献
  [1] 韩芳.基于可执行路径分析的隐藏进程检测方法[J].计算机与数字工程,2009,1.
  [2] 左黎明,蒋兆峰等.Windows Rootkit隐藏技术与综合检测方法[J].计算机工程,2009, 35(10).
  [3] 何耀彬,李祥和等.二次跳转的SSDT挂钩及检测方法研究[J].计算机工程与应用,2012, 48(6).
  [4] 李伟,苏璞瑞.基于内核驱动的恶意代码动态检测技术[J].中国科学院研究生院学报:2010, 27(5).
  [5] Richter J, Nasarre C.Windows核心编程[M].5版.北京:清华大学出版社,2008.
  [6] lyer A, Ngo H Q. Towards a theory of insider threat assessment[C]//proceedings of the 2005 International Conference on Dependable Systems and Networks,2005:108-117.
其他文献
该文从挂篮荷载计算、施工流程、支座及临时固结施工、挂篮安装及试验、合拢段施工、模板制作安装、钢筋安装、混凝土的浇筑及养生、测量监控等方面人手,介绍了S226海滨大桥
期刊
摘 要 云计算带来的云存储服务,为用户带来了新的数据存储方式和资源共享模式,方便了人们的生活和工作,但云环境面临的挑战还很多,如何确保云存储的安全是必要的,本文介绍了几种云存储的安全策略。  关键字 云计算 云存储 安全 策略  中图分类号:TP3 文献标识码:A  在云计算方式中,如果软硬件的信息和资源是共享的,那么就可以按照所设定的命令进行信息和资源的传递,将信息和资源传递给其他的计算机,由于
摘 要 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。  关键词 数据库 数据存取量 时间复杂性 概念模式
摘 要 随着科技的日新月异,各个科研实验领域对于信息资源的需求量也日益增长,人们在实验资源的获取和使用上对信息技术的发展提出了更高的要求,更加注重资源获取的便捷性和精准性,云计算应运而生,其强大功能性和共享性为计算机与软件实验资源管理提供了强有力的技术支撑。  关键词 云计算 计算机与软件实验资源 管理  中图分类号:TP3 文献标识码:A  0前言  当前的信息技术领域最为热门的莫过于云计算,它
摘 要 计算机网络是计算机科学技术与互联网通信技术相结合的产物,它将计算机联接起来,实现了软件、硬件等方面的资源共享,有效地解决了一系列以往单机使用过程中所出现的问题。本文针对机房计算机网络的发展现状,阐述了机房计算机网络的结构建设,并从环境、配置、布线、安全等方面提出了机房网络维护工作的具体措施,以此来指导广大单位做好机房计算机网络建设和维护的工作,保证相关单位工作的正常有序进行。  关键字 机
摘 要 随着社会的飞速发展和科技技术水平地提高,计算机网络正不断深入人们的学习和生活中。在人们都关注计算机的网络技术发展的同时,其本身存在的安全性理由也成了现在人们关注的焦点理由,所以确保数据信息的安全性极其重要。现在计算机加密出现了很多技术,这些数据加密技术的产生大大地提升了计算机的安全性。  关键词 数据加密技术 计算机网络的安全性 应用分析  中图分类号:TP393 文献标识码:A  1关于
摘 要 从大规模网络庞大的数据量中找出有用的信息成为网络安全态势感知研究中的棘手问题,根据大数据技术特有的海量存储、并行计算、高效查询等特点,对基于大数据的网络安全态势感知进行了初步探讨,对其可行性进行了初步研究。  关键词 大数据 网络安全 态势感知  中图分类号:TP393.08 文献标识码:A  0 引言  对于一个大型网络,在网络安全层面,除了访问控制、入侵检测、身份识别等基础技术手段,需
摘 要 近年来,由于信息网络技术的应用愈加广泛,我国信息网络的安全问题也逐渐突显出来。本文以加快信息网络法制建设作为主要研究对象,通过阐述维护网络社会秩序的必要性,在结合当前信息网络法制建设过程中出现相关问题的基础上,为加快我国信息网络法制建设,维护网络社会的安全秩序提出了合理的意见和建议。  关键词 信息网络 法制建设 网络社会 安全秩序  中图分类号:D922.1 文献标识码:A  0前言  
“没有建设用地指标,有项目也干不了.”近日,一位乡村旅游企业主对笔者道出了他的苦恼.但是,北京休闲农业创新联盟秘书长李河对此却有不同看法,确实,我国严格限制耕地转为建
该文从挂篮荷载计算、施工流程、支座及临时固结施工、挂篮安装及试验、合拢段施工、模板制作安装、钢筋安装、混凝土的浇筑及养生、测量监控等方面人手,介绍了S226海滨大桥