基于NT内核操作系统的RootKit的实现

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:wencentss
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:介绍了Windows NT平台下RootKit实现的基本原理及步骤,探讨了在Windows平台下进行Ring0级编程的实现及如何修改安全参考监视器来彻底突破NT的安全防御系统,并给出了整个RootKit的部分核心汇编源代码。
  关键词:RootKit;Windows NT;Ring 0;安全参考监视器
  中图分类号:TP309文献标识码:A文章编号:1009-3044(2008)35-2550-03
  NT Operating System Kernel Based on the Realization of the RootKit
  ZHAO Xiao-juan
  (HuNan Urban Construction College,Xiangtan 41110 )
  Abstract: Introduced the Windows NT platform RootKit to achieve the basic principles and steps on the Windows platform under Ring0-level programming to achieve security and how to modify the reference to thoroughly monitor the safety of NT breakthrough defense system, and gives the whole RootKit The core part of the compilation of source code.
  Keywords: rootkit; windows NT; ring 0; security reference monitor
  
  1 引言
  
  Rootkit最初指被修改和重新编译后用来隐藏入侵者活动痕迹的一组Unix 工具(典型的工具有ps、netstate 和passwd)。现在,Rootkit 是入侵者或非法的黑客为了隐藏它存在的痕迹和使用其系统而执行未经许可的功能,用来破坏计算机获取目录使用权的一套软件工具。Rootkit的存在可追溯到上个世纪90年代初,那时Solaris 和Linux 操作系统是Rootkit主要的攻击对象。而现在Rootkit不再局限于像Unix这样的系统,其他的操作系统,如Microsoft Windows也已成为入侵者的目标。
  RootKit的目的是保留持续的系统访问权和在计算机中隐藏自己, 它可以通过两种不同层次来实现,一种是修改或者替换和包装系统中用户包括管理员运行的可执行文件和库文件,在操作系统的用户态下执行, 这种方式的被称为“ 用户模式” 另一种是控制和修改操作系统内核,运行在操作系统的内核态,这种方式是“ 内核模式”。[1]
  Windows 下应用程序有自己的地址空间,只能调用自己地址空间中的函数,所以,在挂钩API函数之前,必须将一个可以替代API 执行的函数的执行代码注入到目标进程,然后再想办法将目标进程对该API 的调用改为对注入到目标进程中自定义函数的调用。[2]
  
  2 NT的安全保护措施
  
  2.1 基于网络的安全与Windows NT信任域
  NT内核中有一个执行组件叫做安全参考监视器(SRM)。在DoD的红皮书中也已定义了一个“安全参考监视器”。在红皮书中,一个安全域被一个单一的实体所管理。
  “一个单一的信任系统犹如一个单一的实体一样,通过一个单一的信任证据所接受。一个单一信任系统网络执行相关的参考监视器来加强对对象访问时所应遵循的清晰的和良好定义的网络安全政策。[2]”
  以上描述在NT中就是主域控制器(PDC),记住每一个系统都有本地安全和域安全。PDC的安全参考监视器负责管理域内的所有对象,与此同时,它创建了一个单一的控制点,和一个单一信任系统网络。
  2.2 如何侵犯系统的完整性
  DoD红皮书定义了“信任处理基础”(TCB)。在Windows NT中使用安全特权SE_TCB_PRIVILEGE指令和“担当操作系统一部分”的用户权利非常相似,可以通过使用管理员权限来将这个安全特权添加给某一个用户。
  如果有权担当TCB的一部分,几乎可以做任何事情。现在在进程和剩下系统之间几乎没有安全措施。如果TCB不再被信任了,那么整个网络系统的完整性也已受到攻击。将要展示的就是这样的一个例子,如果它被安装在一个工作站上,就会侵犯一个网络分区。如果它被安装在主域控制器上,将会侵犯整个网络的完整性。
  在一个相同的主机里,可能拥有两个唯一的区域:TCB在传统的红皮书里被评价为受信任处理基础和NTCB。这些分区没有必要相互交迭,但是可以这样做。如果任何的一个组件被侵犯了,那么看上去其他的也同样被侵犯了。换句话说,如果一台主机受到了危害,那么NTCB可能也受到了危害。
  很显然,只有管理员才能在TCB上安装一个补丁,或拥有安装设备驱动程序的能力。为了使木马或病毒正常的执行,依靠某人的知识来安装这些补丁是很简单的事情。
  2.3 NT下Ring0特权级保护机制
  Windows操作系统运行在保护模式下,严格将用户权限分为内核模式和用户模式[3]。在Win9X和Windows NT操作系统中,为了充分利用虚拟空间并保证多任务的正常运行,应用程序都运行在保护模式。为了管理临界段资源,系统使用了特权级的概念。Intel X86处理器支持四个特权级,即Ring0 级到Ring3级。但Windows操作系统只使用了其中两个特权级:Ring0 作为“内核模式”,Ring3 作为“用户模式”。Ring0 级是最高等级的特权级, 所有内核状态执行线程在这一级执行,这就有效地保护了操作系统不受任何应用程序的损害。而所有应用程序都在Ring3 特权级内运行,这样可以避免影响系统内核的运行。
  2.4 安全参考监视器
  安全参考监视器负责加强访问控制。在NT下,所有的SRM函数都由ntoskrnl。exe传递。如果这些代码的完整性受到了侵犯,那么安全参看监视器也不再是受信任的了。整个安全系统就等于失败了。安全参考监视器负责对任何对象的访问提出同意或否定。它参考一个进程表来获取当前运行进程的访问令牌。然后它会比较访问令牌和对象的访问需求。每个对象都有一个安全描述(SD)。比较这两个结构,SRM就可以拒绝或允许访问这个对象。
  参考确认机制必须面对的三个设计需求条件:1)参考确认机制必须提供篡改证据;2)参考确认机制必须总是被调用;3)参考确认机制必须足够小到经受起分析和测试,它的完全性必须被确认。
  安全参考监视器不能提供篡改证据。它可能被TCB安全特权所保护,但是真正的能提供篡改证据的SRM应该使用加密机制。使用一个攻击工具如病毒或木马,一个补丁可以轻易的在TCB的环境下被安装。
  如果对存储器映射有访问权限,可以修改安全参考监视器。这样,可以插入一个特别的用户ID可以随时访问的后门,这只是一个可以运用到NT RootKit中的一个小技巧。
  
  3 NT平台上RootKit的实现
  
  3.1 RootKit实现步骤
  1) 插入无效的数据。无效的数据可以被插入到任何的网络流中,同样可以插入一些错误数据到固定的存储系统中,可能是敏锐的时间信息等,这样可能会破坏系统的备份。这样将会侵犯系统的可靠性和完整性。
  2) 修改进入的ICMP数据报。使用ICMP作为隐藏的渠道,补丁可以读取进入到核心的ICMP数据报内部的命令。
  3) 修改进入的以太网数据报。在不使用任何驱动组件的情况下担当嗅探器的角色。如果它已经修改了以太网,那么同样可以发送/接收与外网的数据报。它还可以嗅探秘密的关键字。
  4) 修改已经存在的动态链接库,比如wininet.dll,追踪进入的数据。
  5) 修改入侵检测系统。它可以修改如Tripwire或RealSecure等程序来破坏它们的完整性。
  6) 修改审核系统,如系统事件日志来忽略一些事件日志消息。
  3.2 获得Ring 0特权
  在Windows NT下,普通用户没有直接写物理内存的权限"因此不能直接修改GDT或IDT。要获取Ring 0 权限,首先要求用户有写物理内存的权限,然后修改GDT,构造一个调用门,最后访问该调用门,执行Ring 0 代码[4]。 实现思路如下:
  1) 使用户可读写\Device\PhysicalMemory对象GDT位于内核区域, 普通Ring 3 级应用程序无权直接访问该内存区域,Windows NT提供了一个名为PhysicalMemory 的Section对象, 通过该对象可以读写物理内存。通过分析,正常情况下只有SYSTEM用户才有对该对象的读写权限,administrator用户只有读权限。要使特定普通用户有写该对象的权限,需要以administrator用户身份增加另一个访问控制列表(ACL)到\Device\PhysicalMemory对象:首先打开一个\Device\PhysicalMemory对象的句柄并获得其安全描述符(GetSecurityInfo),接着在当前ACL中增加读写权限(SetEntriesInAcl),最后更新安全描述符(Set-SecurityInfo)。
  2) 构造调用门:根据ntddk.h中的定义,当selector=8时,该调用门指向的处理代码以Ring 0 权限运行。函数地址低16位和函数地址高16位分别为Ring 0 代码的地址的高低16位。 Dpl位为调用该门的代码的最低权限,应设为3,present应设为1,表明该调用门可用。
  3) 将调用门写入GDT中:从GDT尾部开始循环查找GDT中每一项,当找到一个不存在的描述符 (paresent=0)时停止,并将该描述符的各项修改为前面构造的调用门结构。
  4) 访问调用门,运行Ring 0 代码:常规访问该调用门的方法不可行"因为当前应用程序运行在用户态,即Ring 3 级必须通过远调用far call来访问该调用门。
  3.3 核心代码实现
  首先对函数SeAccessCheck()进行逆向分析,通过使用IDA对函数进行了反汇编,部分代码如下所示。
  8019A20C push [ebp arg_24]
  8019A20F push [ebp arg_14]
  8019A212 push edi
  8019A213 push [ebp arg_1C]
  8019A216 push [ebp arg_10]
  8019A219 push [ebp arg_18]
  8019A21C push ebx
  8019A21D push dword ptr [esi]
  8019A21F push dword ptr [esi 8]
  8019A222 push [ebp arg_0]
  8019A225 call sub_80199836
  8019A22A cmp [ebp arg_8], 0
  8019A22E mov bl, al
  8019A230 jnz short loc_8019A238
  8019A232 push esi
  8019A233 call SeUnlockSubjectContext
  8019A238 mov al, bl
  8019A23A pop edi
  8019A23B pop esi
  8019A23C pop ebx
  8019A23D pop ebp
  8019A23E retn 28h
  8019A23E SeAccessCheck endp
  子程序被SeAccessCheck所调用。大多数的工作都是在此完成,因此对该函数进行了修改。
  80199AD3 mov [ebp var_C], 0
  80199ADA add esi, 8
  80199ADD cmp [ebp var_10], 0
  80199AE1 jz loc_80199B79
  80199AE7 test edi, edi ;
  80199AE9 jz loc_80199B79
  80199AEF test byte ptr [esi 1], 8
  80199AF3 jnz short loc_80199B64
  80199AF5 mov al, [esi]
  80199AF7 test al, al
  80199AF9 jnz short loc_80199B14
  80199AFB lea eax, [esi 8]
  80199AFE push eax
  80199AFF push [ebp var_8]
  80199B02 call sub_801997C2
  80199B07 test al, al
  80199B09 jz short loc_80199B64
  80199B0B mov eax, [esi 4]
  80199B0E not eax
  80199B10 and edi, eax
  80199B12 jmp short loc_80199B64
  
  4 总结
  
  介绍了RootKit技术及Windows NT平台如何实现RootKit,探讨了NT平台的安全措施,以及绕过安全措施的方法。给出了具体实现RootKit的思路及方法,并给出了部分核心汇编代码。随着Windows平台安全性的提升,要实现RootKit也越来越难,但是越是难以实现的RootKit,一旦实现了就越具有隐蔽性,因此对RootKit技术的探讨有助于信息安全技术的不断更新与发展。
  
  参考文献:
  [1] 雷校勇,黄小平.Windows RootKit技术原理及防御策略[D].上海:上海交通大学,2006.
  [2] 程彦,杨建召.Win32 中API拦截技术及其应用[J].长春工业大学学报:自然科学版,2006(04):99-101.
  [3] 黄华星,舒辉,谢余强,等.Win32下ring0级保护机制的安全隐患研究 [A].全国网络与信息安全技术研讨会2004论文集[C],2004.
  [4] 唐俊.一种基于行为的RootKit检测方法[J].计算机与数字工程,2008(9):32-34.
其他文献
摘要:《计算机科学与技术》专业课程会基于经济、社会、科技的发展而持续地更新,为了培养高素质的实用型人才,即增强学生的职业胜任能力,高校务必调整专业学习和知识结构。为此,该文阐述了《计算机科学与技术》专业教学中如何调整专业学习和知识结构,从而增强学生职业胜任能力的有效对策。  关键词:计算机科学;技术;知识结构;职业胜任;能力  中图分类号:G642 文献标识码:A 文章编号:1009-3044(2
摘要:移动互联行业已进入高速发展期,致使开发人才需求急剧增加。该文以常州信息职业技术学院移动互联应用技术专业为例,从移动互联人才的培养模式、课程体系建设和实训基地建设等方面阐述了在工学结合模式下该专业在人才培养方面的探索与实践。  关键词:工学结合;移动互联应用技术专业;人才培养;课程体系  中图分类号:G424 文献标识码:A 文章编号:1009-3044(2015)10-0106-02  1
摘要:线性代数是理工专业本科学生的基础数学课程,相比其他数学课程,线性代数学习内容抽象、课时少。如何将抽象的理论知识更直观自然地教授给学生是线性代数教学过程中研究的内容,特别针对二本学院学生。该文根据软件学院办学特点,在讨论数字图像原理的基础上,对线性代数教学进行了探讨,并在此基础上给出提高教学效果的一系列建议。  关键词:软件学院; 图像处理;线性代数  中图分类号:G64 文献标识码:A 文章
摘要:随着Internet的出现,网络、计算机、通讯等技术的飞速发展,“数字”一词则进入了各个领域,社会各界通过网络、计算机、移动通讯等方式来传递信息,改变了人们获取信息的方式,促使文献资源的建设、管理、服务、获取信息方式等由纸质型向数字网络化方向转型,数字图书馆成为了未来图书馆的主要发展方向,在文献资源建设中,很多数据库不断涌现。结合作者的实际工作经历,论文以“花卉资源的关联规则算法研究”项目为
摘要:初中生物对将来的生物学习起着地基的作用。教材是课程的依托,是教学和学习的重要参考资料。笔者通过扫描整理得到电子版维吾尔文初中生物四册教材的文本,使用统计软件统计出四册教材中的词汇和词频,经过手工统计得到其中的生物词汇和词频,从中选取高词频的生物词汇,参照国家教育部2011年发布的课程标准,通过专业词汇的词频分析了对初中生物教材知识点的符合程度,结合维吾尔文语言学的特点,针对维吾尔文初中生物的
摘要:大学开放的学习环境以及不逃课就不算上过大学这种错误的思想观念的影响,再加上很多大一新生刚从高中时代那种封闭的学习环境中解脱出来,自身的放松使得他们对课堂学习不重视,玩手机、逃课等现象严重。这使得大学课堂的学习氛围普遍不高,学习效率低下。那么如何调动高校学生课堂学习的积极性呢?该文从学生的角度出发,剖析了当前高校学生课堂学习积极性不高的原因,通过以单片机的学习为例,介绍了课堂理论学习与实验学习
摘要:本系统采用VB 6.0和Access 2000分别作为主要开发工具和数据库,主要实现了对学生的学籍,班级、所学课程、成绩和考勤信息的统一管理,减少了管理方面的工作量。使对学生信息的管理实现了自动化和规范化,并且在实现其功能的基础上,增加了用户的使用权限。系统按功能共分为五部分:学籍管理模块、班级管理模块、课程管理模块、成绩管理模块和考勤管理模块。  关键词:VB 6.0;模块;学生管理系统 
摘要:根据应用需求,基于MATLAB GUI设计了数据格式标准化软件。首先对基于MATLAB GUI的软件设计流程进行了概述,之后对MATLAB GUI 数据传递的关键技术方法进行了介绍,结合对设计软件的主要功能的说明,分析了MATLAB GUI设计的优缺点。  关键词:MATLAB;GUI;数据格式;软件设计  中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2015)01
摘要:該文针对永磁同步电机(PMSM)的矢量控制,针对PMSM在坐标下的数学模型使用扩展卡尔曼滤波方法,根据测量永磁同步电机的电压、转速和转子位置对永磁同步电机三相电流进行观测,最后在Simulink里搭建永磁同步电机的矢量控制模型与EKF电流观测器模型。仿真结果表明电流观测器估计精度较高、运行稳定,动静态性良好。  关键词:永磁同步电机;矢量控制;电流观测器;扩展卡尔曼滤波  中图分类号:TP1
摘要:人脸识别在实际应用中,通常由于光照的影响导致识别率的大幅下降。针对这一情况,该文从人脸图像预处理和特征提取算法两方面进行改进。文章首先采用了基于光照分量的算法进行人脸图像预处理,提高了算法对于光照的鲁棒性,然后提出了改进的结合了Gabor小波和LBP滤波的算法,并在有光照变化的标准人脸库上进行识别率测试。实验结果表明,该文算法对于变化光照的鲁棒性较高,在标准人脸库中的识别率最高可达到98.9