




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一.Rootkit例子Rootkit 嵌入到MBR,Mebroot利用rootkit下载一个450KB的文件,将自身存储在硬盘的最后几个扇区,将自举管理程序写入MBR,实现隐藏磁盘访问,内核中实现,覆盖DISK.sys,调用DISK.sys,创建看门狗线程,如果没有安装,进行安装.查找NDIS隐藏和文档中未出现的函数,与NDIS通信,构造TCP/IP协义栈。Rootkit一般有两种类型:用户模式和内核模式,用户模式的rootkit如HackerDefender100r容易被发现,但holy_father提供了HxDef的修改版本,命名为Silver andGold并开始销售,也能够防止系统级别的进程,内核模式的rootkit的运行级别与驱动程序是一个级别,内核rootkit不能工作于所有版本的Windows,增加了操作系统的不稳定性,每个rootkit都可以被探测到,但是准确探测的难度和时间超过了结果的价值二.钩子的艺术 2.1 软钩子进程附加操作,对INT3中断指令的使用以截获程序流,FireFox挂钩,在PR_Write上设下一个钩子,当钩子命中时,读取栈上第二个参数所指向的ASCII字符串,如果这一字符串与我们之前定下的pattern变量相匹配时,它将被输出至控制台. 如果将软钩子施加于调用频繁的函数身上时,目标进程的运行状态可能会极慢,或者会崩溃,因为软钩子所依赖的INT 3指令会导致中断处理例程接过控制权,直到相应的钩子代码执行完毕交还目标进程的控制权,若这一过程每秒钟需要发生上千次的话,大量的性能损失将不可能避免. 2.2 硬钩子以硬编码形式向目标进程写入一条跳转指令,以使得同样使用汇编编写而成的钩子代码能够得以执行,软钩子适用于拦截那些调用次数少的函数,而调用次数多的函数,为了对目标进程施加最小的影响,硬钩子成为不二选择,硬钩子首要拦截对象是调用频繁的堆管理例程以及高密度的文件I/O操作。当使用硬钩子时,目标进程从未真正意义地停止过,使用FastLogHook简易钩子类,构建一个硬钩子的基本框架Imm=immlib.Debugger()Fast=immlib.FastLogHook(imm)Fast.logFunction(address,num_arguments) #负责布置钩子,如果选择某个函数的出口位置只须将num_arguments设置为零值即可,Fast.logRegister(register) /在钩子命中时记录特定寄存器中的值Fast.logDirectMemory(address)#记录某一已知内存地址上的值Fast.logBaseDisplaycement(register,offset)接受一个寄存器以及一个偏移地址作为参数,解析栈上的参数或者提取(以某寄存器为基地址)某偏移位置上的内存数据而设计.如果要取所有的信息使用getAllLog(),对于一般的cdecl函数调用约定我们只需使用普通的FastLogHook即可,其他还可以使用STDCALLFastLogHookImmunity Debugger下还有一个名为hippie的PyCommand命令,当打开notepad打开文件对话框时大约会引发4500次对RtlAllocate或者RtlFreeHeap的调用,如果是 IE的话,次数会更多。三.内核模式RootKit 其威力最大,内核模式技术依赖于复杂的底层硬件,底层以x86体系结构为基础的3.1保护层次虚拟化技术使得指令集中加入了一个新的层次,Ring-1,客户操作系统使用的虚拟化硬件,产生了虚拟化的RootKit,CPU能够动态地根据需要将特权从ring3提升为ring0,当执行特殊CPU指令SYSENTER系统调用中断或其他安装的调用门内核模式中的任何程序都可以访问其他任何程序(包括操作系统本身的程序)的内存,数据,和堆栈。实际上,任何组件都能将自身登记为任何类型数据的处理程序,包括网络流量,击键,文件系统信息,而不需要考虑是否需要访问这些信息,只要承诺按照规则办事,否则系统会崩溃。如你废弃一个空指针,很可能会蓝屏,Windows三个环境(1) Win32,环境子程序负责在Windows执行层为用户模式应用程序和服务代理内核模式。这个子系统具有内核模式组件,主要是Win32k.sys和用户模式组件(最主要是csrss.exe)子系统DLL作为必须使用一部分核心模式所提供的功能的32程序的网关,这个功能由Windows Executive提供,尽管Win32子系统DLL不是内核模式组件,但是它们仍然是内核模式Rootkit高价值目标,这些DLL为用户应用程序甚至系统服务进程提供入口,因此,污染这些入口将扩展Rootkit在任何用户模式应用程序上的能力.Win32k.sys是处理用户模式的图形操作调用的内核驱动程序,实现于图形设备接口(GDI)之中,这个驱动程序处理用户体验的核心,如菜单,窗口,鼠标和键盘,以及屏幕特效,外部图形驱动程序也可以看作Win32子系统的一部分.Win32 API主要由用户模式程序使用,原生(Native)API由内核模式程序调用,这种分类的结果是大部分Win32API只是调用原生API的存根(Stub,在调用实际函数之前检查参数的小型二进制程序)其中一些API依次调用Windows内核中埋藏的未在文档中列出的函数.Win32子系统DLL主要实现:1. kernel32.dll 访问文件系统,设备,创建线程和进程以及内存管理提供基本服务2. advapi32.dll 操作Windows组件(如注册表和用户账户)提供高级服务3. user32.dll 实现窗口和图形结构,如按钮,鼠标指针等4. gdi32.dll 提供显示器和输出设备的访问以用户模式实现,但是重要部分需要访问内核模式中Windows Executive,如调用kernel32.dll中的ReadFile,实际调用NtReadFile(),这些DLL常成为rootkit的目标NTDLL.dll(守门人)为从用户模式调用系统服务以及Windows组件所使用的未归档的支持函数提供一个小的存根程序,验证所有传入缓冲或者参数,查找并且调用Executive中对应的系统服务函数,通过发出SYSENTER迁移到内核模式Windows Executive(NTOSKRNL.exe)委员会功能 Executive实际上由实现系统服务核心的许多子组件构成,包括配置管理器,I/O管理器等 当今内核rootkit很少对付HAL,要花费许多不必要的精力(2) POSIX(3) OS/21.特别模块寄存器Model-Specific Registers MSR钩子Rootkit有很大的可能装入不实现这些寄存器的系统上,发出不受支持的x86指令,第三方检测引擎难以验证IA32_SYSENTER_EIP的目标是合法的,指向的是未写入文档的KIFastCallEntry(),检测引擎无法分辨.如/?v=3&a=3Jamie Butler发布的SysEnterHook概念性Rootkit_asmMov ecx,0x176;/176 is the index into the MSR table for IA32_SYSENTER_EIPRdmsr /读IA32_SYSENTER_EIP 寄存器的值Mov d_origKiFastCallEntry,eaxMov eax,MyKiFastCallEntry /Hook function addressWrmsr /写IA32_SYSENTER_EIP寄存器的值对策:在未来它们可能不被支持,在x64系统上的Patchguard监控MSR的修改,第三方检测引擎难以验证IA32_SYSENTER_EIP的目标是合法的,其应该指向一个未写入文档的内核函数KiFastCallEntry(),第三方不知道SYSENTER目标和rootkit目标之间的差别2.映像修改 Detours/patches 修补和内联钩子,修改二进制代码中一个函数的前几个字节(被称为函数序言function prologue),一个序言由设置使函数能够正常执行的堆栈和CPU寄存器的汇编语言组成,函数尾声相反,弹出堆栈项目并且返回,内联修补修改的是函数的其他部分.如果目标在操作系统修补或更新之后发生变化,detour就必须重做。例如Greg Hoglund的Migbot Rootkit修补 SeAcessCheck函数,禁用Windows安全令牌.3.Rootkit可以使用图形处理单元4.创建一个美观的界面,启动扇区病毒,入口点混淆病毒(entry-point obscuring ,EPO病毒)5.Michael A.Davis人物 Aaron LeMasters Sean M.Bodmer安全工具snort ,ngrep,dsniff,honeyd,5. 对补丁进行逆向工程以开发利用程序6. 最大,最活跃的恶意软件集团Russian Business Network,Bagle,MyDoom,NetSky,CoolWebSearch 都是出自其手7. 伪装成文本文件,Serials.txt.exe 要保证运行之后自启动,自删除8. 逆向工程文件idapro和ollyDbg软件9. StormWorm Trojan.peacomm 变形,多态,基于硬件的设备感染10. 变形,躲过杀软的特征码查杀,W32.Evol.W32.Simile,依赖于变形算法11. 多态,W32.Rahack.h W32.Polip W32.Dengue,通过加密,病毒每次重复都完全不同12. 寡形,W95.Sma 从一组有限的程序集中选择解密13. 混淆 存档程序,加密程序和打包程序,W32.Beaglemm!enc使用打包程序不需要访问硬盘,不采用知名的打包程序,否则极容易被发现,Aspack,NsPack,MEW1. 动态域名服务(W32.Reatle.Emm) 防止ip被发现DDNS ,Fast.Fluxsingle-FluxDouble-Flux,ttl设置非常短,不会被缓冲2. Contagion蠕虫3. Fs2you ed2k 类网络协议链接,一旦打开,自动调用相关程序4. 击键记录程序基于内核,在暗中破坏OS内核,得到硬件的未经许可的访问权,像键盘驱动程序一样工作,在键盘输入的信息发送给OS的时候进行捕捉.被攻破?要求所有内核模式代码具有自已的数字签名,基于Windows:GetMessage/PeekMessage,尝试直接与API挂钩,捕获WM_CHAR消息,WM_CHAR消息由键盘在TranslateMessage函数翻译WM_KEYDOWN消息时发送到一个窗口,这些函数都与GDI函数相关,在user32.dll中定义,user32.dll调用ntdll.dll,之后再传递给W32k.sys,而W32k.sys位于用户空间相对的内核空间中,使用GetAsyncKeyState和GetForegroundWindow这样函数记录关于哪个窗口拥有焦点,每秒轮询键盘状态数百次并避免高CPU利用率 Rootkit 如Mebroot嵌入到计算机的主引导记录(MBR),MBR是计算机主硬盘的头512字节,计算机的BIOS通知CPU执行这512字节中的机器码,这段机器码通常被称为自举管理程序(boot manager),一般是启动操作系统并且引导其访问系统的第一个可用分区,如果操作系统允许改写硬盘的头512字节,自举管理程序就可以被其他代码替换,rootkit下载一个450KB的文件,运行这个文件会将自身存储在硬盘的最后几个扇区中,并且将一个Rootkit的自举管理程序副本写入到MBR中,执行Rootkit本身,能够执行进程,隐蔽式的磁盘访问,在内核中实现.1. Mebroot编写一组算法查找NDIS中隐藏的和文档中未出现的函数,使rootkit可以与NDIS通信而不需要安装驱动程序,rootkit实现自已的tcp/ip协议栈来通信.2. Rootkit使用基于sha-1加密算法,通知rootkit执行将dll安装到任何进程或者安装新版本的mebroot,3. 卸载一个用户模式的DLL或者Mebroot4. 命令一个可信的进程根据文件启动新的进程5. 执行内核模式下的任何驱动程序Mebroot的对策:1.控制台上运行fixmbr命令,BIOS某些设置使MBR成为只读1. 内核rootkit不能工作于所有版本的windows,增加操作系统的不稳定性2. 每个rootkit都能探测到,但准确探测的难度可能超过了结果的价值3. 用户模式的rootkit,Hacker Defender和其他rootkit源代码可以公开下载,但大部分被查杀,HxDef的100r版本,hxdef100.exe进行安装 bdcli100.exe用于进程的连接后门.4. Kernel32.dll 处理输入/输出,中断和内存管理的用户模式,不存在于内核,在用户空间与user32.dll协同工作5 EasyHook开源的注入软件,在/easyhook上搜索EasyHook内核模式Rootkit特性,隐蔽性,持续性,清除之后存活下去,移植性问题,击键记录rootkit常用技术是创建一个DEVICE_OBJECT,并且将其连接到操作系统的键盘设备栈.6 rootkit面临问题找到一个装入方式,SCM或使用(DirectKernel ObjectManipulation DKOM)提升进程权限,获得管理员权限,但会创建一个注册表项和痕迹,GreyHoglund 编写 的Migbot Rootkit使用NTDLL.dll中未写入文档的ZwSetSystemInformation 使用任意模块名称将二进制代码装入内存,一旦装入不重启无法卸载,但可能导致系统崩溃,驱动程序被装入到可分页的内核内存,这种表现是操作系统的可中断性,在Windows中以中断请求级别(interrupt request level ,IRQL)的方式实现,系统可以在任何给定的时间点运行各种IRQL,在较高的IRQL下,大部分系统服务不被执行,内存管理器的页面错误处理程序就是这样一个服务,如果驱动程序运行于过高的IRQL并且导致一个页面错误(请求之前已被交换出内存的数据或者代码),内存管理器将不会运行并且不会捕捉这个问题,结果是系统缺陷检查(蓝屏),开发内核程序时,可能没有什么能够避免崩溃.利用AdSyndicator广告经营者赚钱,PPC单击付费广告.armadillo packer 打包恶意软件,大部分防火墙允许443上的通信,Bot程序一旦安装作为(BHO)(Browser Helper Object)访问所有常规HTTP通信Microsoft Office 2003-2007 版本比较脆弱,CVE-2008-0081 MS08-14远程代码EXCEL执行,MS08-014.mspx补丁卸载.rootkit的执行,在装入之后,rootkit在Windows驱动程序体系结构的规则下操作,它在执行之前必须要等待I/O操作发生,内核驱动程序在需要时执行并且在初始化I/O的调用进程的上下文下运行,如果驱动是由于中断请求而被调用,则运行在任意的上下文中.与用户通信,rootkit有一个作为指挥控制代理的用户模式的用户模式组件,并且不经常通信以免引起怀疑,也可以是用户模式中的一个单独的睡眠线程,获得一个应用程序如(Internet Explorer)中的持续存在,这个线程可以在几种任务中循环,例如,轮询远程站点获取新命令,读取和发出这些命令给rootkit驱动程序,然后再休眠一段预先设置的时间.保持隐藏性和持续性,在多个系统函数及/或服务上安装多个钩子,修改注册表在启动时重新装入rootkit,隐藏在更高的内存区域(如内核存储),使防病毒软件无法查看,或隐藏在磁盘未分区的空间,或感染启动扇区,在下次启动时先于操作系统执行.3.2表格钩子隐身的rootkit必须全力隐藏修改,例如建立影子表格(保留原始表格的一个副本),通过监控准备读取修改后表格的应用程序/驱动程序,rootkit很快将原始表格换回到内存以愚弄应用程序,这种影子可以使用TLB同步攻击实现.3.3系统服务调度表(SSDT)挂钩这个表格的目标是重定向程序执行流向,当用户应用程序(甚至用户模式的系统服务)请求系统调用时,就被重定向到rootkit驱动程序代码,为了挂钩SSDT中单独项目,在运行时定位结构.1. 引用NTOSKRNL.exe的输出动态地在rootkit源码中输入KeServiceDescriptorTable标志2. 使用ethread结构,每个执行中的线程都有一个指向SSDT的内部指针,这由OS在运行时自动填写,该指针存在于线程的数据结构ethread中一个可预测的偏移量中,这个结构可以由线程调用Win32API函数PsGetCurrentThread()来获得.3. 查找与OS相关的偏移量来使用内核的进程控制块(kernels processor Control Block,KPCB)将这个偏移量放入rootkit作者希望挂钩的函数的SSDT中,可以使用公开的源码,或者反汇编该函数并且寻找第一条MOV EAX,index手工查找位置,index值引用函数在表格中的索引,注意,这仅对Nt*和Zw*Win32API函数有效,这两类函数都是调用系统服务调度程序的系统存根程序4. 将索引值赋值为rootkit重定向函数/SSDT hooking pseudocodeKeServiceDescriptorTablefunction_offset=AddrOfRootkitHookingFunction;5在rootkit驱动程序中,过滤真正的API调用所获得的信息/Pseudoncode for hooking functionReturnvalue RootkitHookingFuction(parameters) ReturnData=ZwHookedFunction(parameters) FilterInformation(ReturnData); Return ReturnData;常见的挂钩函数包括NtQuerySystemInformation()和NtCreateFile(),用来隐藏进程和文件.许多rootkit使用这种技术,如He4hook Rootkit.6,对策 随着OS的修补,Windows经常增加,删除,修改SSDT项目,所以rootkit在试图查找数据结构的设定偏移量时,必须考虑这些变数,在x64系统上,Windows使用patchguard来实现更聪明的避免SSDT钩子的方法,在NTOSKRNL.exe内部表格在系统启动和运行时都进行检查,杀软一般持续监控数据结构修改或者完全限制访问该结构的方式,卡巴实际上是在动态地迁移SSDT3.4 IDT 中断调度表IDT钩子的目标是挂钩已经注册到给定中断的任意函数,低级击键记录程序就是通过替换存储在IDT中用于键盘的服务例程,x86指令SIDT在CPU寄存器中存储IDT地址用于读取,在替换所希望的中断的ISR之后,整个表格可以使用x86指令LIDT复制回原来的位置,如下面的skape,是一个本地的Windows内核模式后门技术的目录 ,如下面演示操作Static NTSTATUS HookIdtEntry(IN UCHAR DescriptorIndex,IN ULONG_PTR newHandler,OUT PULONG_PTR OriginalHandler OPTIONAL) PIDT_DESCRIPTOR Descriptor=NULL; IDT Idt; _asm sidtIdt Descriptor=&Idt.DescriptorsDescriptorIndex;/将当前IDT复制到局部结构,存储我们希望挂钩的描述符项目 *OriginalHandler=(ULONG_PTR)(Descriptor-OffsetLow+(Descriptor-OffsetHighOffsetLow=(USHORT)(Newhandler&0xffff); Descriptor-OffsetHigh=(USHORT)(NewHandler16)&0xffff);/合并低16位和高16位得到32位的原始ISR地址. _asm lidtIdt/用x86指令LIDT更新IDT Return STATUS_SUCCESS;IDT结构是表现x86 IDT的字段的自定义结构.1. 对策,MS 的Patchguard在64位系统上阻止对这个表格的任何访问,许多开源rootkit工具GMER,RootkitRevealer和Ice Sword都可以发现这些类型的钩子3.5 GDT全局描述符表和局部描述符表LDT GDT是按处理器划分的结构,用于保护描述内存区域的地址和访问特权的段描述符,这张表格在每次访问内存时由CPU使用,用于确保执行代码有权访问在段寄存器中指出的内存段,LDT本质上也一样,但是它是按进程而不是按照处理器划分的,它被单独的进程用于定义进程内部受保护的内存区域.Rootkit只能使用少数有良好文档的方法来侵害这些表格,但是影响很明显,如果一个rootkit能修改GDT,它将全面改变系统上的内存段的执行特权,对LDT的修改仅影响特定的进程,修改这两个表格都使用户模式代码能够装入和执行任何内核模式代码.可以安装定制的调用门,本质上是从用户模式代码进入内核模式代码的屏障,调用门是GDT中的一类描述符,具有4个字段,其中一个是描述符特权级(Descriptor Privilege Level,DPL),这个字段定义使用调用门所需要的请求代码特权级.调用门是GDT中的一类描述符,具有4个字段,其中一个是描述符特权级(Descriptor Privilege Level,DPL).这个字段定义使用调用门所需要的请求代码特权级(也就是Ring0,Ring1,Ring2,Ring3),每当执行代码试图使用一个调
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 羽毛球拍制造知识培训课件
- 羽毛球培训理论知识课件
- 文化产业材料供应计划及保障措施
- 2025年骨科手术常见并发症预防措施评估答案及解析
- 仓储物流安防项目服务质量保障措施
- 香港友邦加裕智倍保课件
- 设备等级评定管理办法
- 财务票据核销管理办法
- 财政专户开户管理办法
- 贵州餐饮公章管理办法
- 传播学概论课件
- 大于号小于号等于号田字格描红
- DISC沟通风格测试
- 员工个人职业健康监护档案
- 《护理伦理学》教学大纲
- 老年学概论(第3版)PPT完整全套教学课件
- (完整版)Hamilton汉密尔顿焦虑量表
- 浙江大学高分子化学第章课件绪论
- DB31-T 1380-2022 社会消防技术服务机构质量管理要求
- 景观生态学课件
- 常见天气系统课件
评论
0/150
提交评论