来源:自学PHP网 时间:2015-04-17 19:06 作者: 阅读:次
[导读] 自2004以来,Rootkit技术得到了快速发展。很多人发现rootkit既使用IDT(Interrupt Descriptor Table,中断描述符表)连接又使用DKOM(Direct Kernel Object Manipulation)来隐藏自己,不管怎样,这些rootkit就是有...
自2004以来,Rootkit技术得到了快速发展。很多人发现rootkit既使用IDT(Interrupt Descriptor Table,中断描述符表)连接又使用DKOM(Direct Kernel Object Manipulation)来隐藏自己,不管怎样,这些rootkit就是有办法隐藏于大部分可执行程序而不被发现。或许他们利用的是压缩工具(packer)和加密工具(encryptor)来掩人耳目,加密工具是指一种解码算法,当压缩镜像加载到内存时能够解压;或许可执行程序载有包含解密工具的多重引擎。总之,在rootkit载入内存前根本无法被察觉,压缩镜像中也很难以被检测出异常。 我们可以从概念证明方法来试想,模仿DNS并尝试监测rootkit对网络服务器的连接,当rootkit在网络流量中与网络服务器通信时,试图记录系统的行为。但是回到该理论来看,内存分析理论是基于这样的事实:操作系统使用的数据位置与用于定位内存转储中的数据的位置有所不同。RAM的物理内存并不充分,不能包含所有正在运行的进程。这样Windows内存管理器就需要创建一个虚拟地址空间以模拟一个更大的内存空间,并且微处理器的硬件单元需要描绘出虚拟地址空间到物理地址的路径。总之,内存分析会涉及到地址解析,但是所有这些工作怎样能够形成完整性检查呢? 内存分析 模拟一个更大的内存空间通常是这样实现的:为每个进程创建一个虚拟地址空间,并通过数据结构(主要的数据结构是页目录和页表)将虚拟地址空间解译为物理存储位置。通过使用数据结构,内存管理器创建出所谓的页表,而CPU则将虚拟地址解析为物理地址,每个虚拟地址都与系统空间结构(称为PTE,page table entry)相关联,PTE包含虚拟地址所指代的物理地址。 能够为系统进程提供物理内存的数量被称为工作组,因此每个进程都是从空工作组或者零工作组开始的。随着进程开始不断触及虚拟地址,工作组也随之增加。当windows对系统内存进行管理时,工作组需要计算出其进程所需要的物理内存大小,他们是通过记录的进程行为来计算的:内存需要和页访问率。当内存管理器认为工作组足够大时,它会先清理出旧的作业,即那些很长时间没有被使用的。当这些信息被清出后,并没有被毁灭或者删除,因为它们代表进程所使用过的数据记录。所以windows会将这些页保存在不同的目录中,这些目录包括: free page list;
页文件大小问题 不是简单地将RAM大小乘以1.5,最好计算出所有专有字节内存总和,然后乘以1.5。大多数人在检查系统中的恶意软件时都会很自然地进行全部内存转储,但是当系统崩溃或者破坏时,问题基本上都是发生在内核模式。设备驱动程序是让CPU开放所有硬件I/O端口的唯一途径,然而,windows设备驱动程序从来没有直接访问过物理设备。作为界面或者地址总线类型的HAL功能,能够为驱动程序传递需要的信息完成路径。它与rootkit的共同点在于:都是使用算法的。他们都是用代码修改自身而不被发现,他们都是启发式的,他们都利用这样的理论:文件可以通过替代数据流和指示转换来隐藏在NTFS文件系统中。Rootkit在加载的时候,会改变自身的名称创建服务(这意味着它们与SCM有通信)而不被发现,只有当他们以前被发现过并且被写入签名才可能被发现。话虽如此,我们有理由认为有效的rootkit工具会检查内核代码是否被修改:Ntoskrnl.exe和HAL.dll内核组件的.text与磁盘内核文件是否相符。请注意,.text指代代码部分(cs寄存器),这可能是因为代码自我修复功能可以取代一些硬件相关的功能以符合实际硬盘情况。 我们假设对RPC DCOM缓冲区漏洞的经常性写入,例如代码名为oc192-dcom.c,我们将该代码下载至我们的Linux ISO发挥系统中,但是首先我们要启动TFTP服务器并运行,TFTP使用的UDP协议可以配置为绕过防火墙(例如DNS/53),因此,它是可以来回转移文件的: #! /usr/local/sbin/atftpd --daemon --user group root /tftp
fu -pss#process_pid System
我们应该要监控进程及其镜像路径,我们应该寻找陌生的API系统调用,并检查是否查询服务主机程序(svchost.exe 或者rundll32.exe)。Process Monitor工具的过滤功能可以让你对所有最近用户活动和注册表项变化进行操作,如果你捕获到恶意隐藏进程,可以将其放入反汇编程序中并保存其代码。因为不管代码链接的是IDT表还是使用内核模块直接访问(DKMA),都是间接连接IRQL的。用户模式代码在IRQL PASSIVE_LEVEL运行,当系统代码执行时,它是在DISPATCH_LEVEL(中断级别)运行,这种情况下,可以用来启用调度程序。DISPATCH_LEVEL最低软件中断级别,但是如果某线程要避免被取代,会将IRQL提高到DISPATCH_LEVEL,不过会禁用调用程序。 然后该线程会被允许在整个操作中执行,再重新启用调用程序,这基本上告诉调度程序找到另一个线程以在拥有特权的线程外运行。现在如果设备驱动程序与调度程序运行,则会分配到分页池缓冲区,释放缓冲,然后尝试连接页面,它会一直读取到页面结束为止,任何违法操作都将使系统崩溃,屏幕篮屏,毁坏物理内存。也可能是由于这个漏洞:windows设备驱动程序在Ring 0加载,这就意味着任何设备驱动都可以修改windows 内核的I/O |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com