天下网吧 >> 网吧天地 >> 网吧技术 >> 网吧软件 >> 正文

内存分析如何执行完整性检查

2008-12-25不详佚名
    自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;
  zero page list;
  modified page list;
  standby list
    
    当windows从工作进程组清理出一个内存页时,被清理的是那些进程并没有表示不再需要使用的空间。应该要弄清楚的是,如果一个页被修改,就必须被写入。如果进程向页面写入数据,则该页专属于这个进程,这意味着它不在属于共享内存。Windows中的任何能够共享的内存都可以共享,包括代码和DLL,但不包括数据。在记事本中写入的数据是专属于记事本进程的,其他进程都不能访问该数据。与此同时,要记住的是,进程对于系统而言,代表着一个应用程序的实例。但是由于应用程序需要向虚拟地址空间、操作系统、配置设备驱动程序描绘其代码和数据,以及内核模式中使用的数据也需要被描绘,这就意味着windows内存保护将用户模式地址空间从内核模式中分离了。如果某用户模式线程需要调用系统,则需要使用DLL函数调用功能以过渡到内核模式。那么,如果我们安装了一个rootkit,我们将如何执行完整性检查呢?需要考虑这一点,文字部分是只读的,因此代码不需要修改,应该检查关键系统DLL的代码部分和系统驱动程序(内核模块)在内存和磁盘中相应的PE文件是一样的,同时不要忘记9 7 3 1 2 3 4 8 :

本文来源:不详 作者:佚名

声明
声明:本站所发表的文章、评论及图片仅代表作者本人观点,与本站立场无关。文章是出于传递更多信息之目的。若有来源标注错误或侵犯了您的合法权益,请作者持权属证明与本网联系,我们将及时更正、删除,谢谢。 Email:support@txwb.com,系统开号,技术支持,服务联系微信:_WX_1_本站所有有注明来源为天下网吧或天下网吧论坛的原创作品,各位转载时请注明来源链接!
天下网吧·网吧天下
  • 本周热门
  • 本月热门
  • 阅读排行