日期:2011-01-25 01:59:00  来源:本站整理

Windows平台内核级文件拜候[Windows安全]

赞助商链接



  本文“Windows平台内核级文件拜候[Windows安全]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

后台

windows平台下,利用程序普通利用API函数来举行文件拜候,成立,翻开,读写文件.从kernel32的 CreateFile/ReadFile/WriteFile函数,到本地系统服务,再到FileSystem及其FilterDriver,阅历了很多 层次.在每个层次上,都存在着安全防护软件,病毒大概后门作监督大概过滤的机会.作为安全产品开辟者,我们需求比别人走得更远,因此我们需求一个底层的“windows平台内核级文件拜候”的办法来确保我们可以看到精确的干净的文件系统.

直接拜候FSD的内核级别文件拜候

FSD(FileSystemDriver)层是文件API函数经过本地系统服务层(native API)最后到达的驱动层次.假如我们可以模拟操作系统,在我们自己的驱动程序里直接向FSD发送IRP,便可以绕过那些native API 和win32 API了,也便可以绕过设置在这些层次上面的API钩子等监控办法.

文件的Create和Open

文件的Create和Open可以通过发送IRP_MJ_CREATE给FSD,大概调用IoCreateFile函数来完成.Create和Open的辨别实际上在于IoCreateFile/IRP_MJ_CREATE的一个参数Disposition的取值.

通过发送IRP_MJ_CREATE给FSD的办法与此近似,可以参考IFSDDK document的IRP_MJ_CREATE阐明.差别于上面办法的是需求自己成立一个FILE_OBJECT,好过上面办法的是这种办法不需求一个 HANDLE,HANDLE是线程依靠的,FileObject则是线程无关.

文件的Read和Write

我们通过给FSD发送IRP_MJ_READ来读取文件,给FSD发送IRP_MJ_WRITE来改写文件.

假如我们是通过一个HANDLE来履行(如利用IoCreateFile翻开的文件),就要先用ObReferenceObjectByHandle函数来得到这个Handle对应的FileObject.我们只能给FileObject发送IRP.

之后我们利用IoAllocateIrp分配一个IRP.按照FileObject->DeviceObject->Flags的值,我们判断目标文件系统利用什么样的IO方法.

对每种差别的IO方法利用差别的地址传送方法.随后我们填充IRP内的各个参数域,便可以发送IRP了.

接着要考虑假如IRP不能及时完成,会异步的返回的情形,我们安装一个CompletionRoutine,在CompletionRoutine里面设置一个事件为已激活,告诉我们的主线程读取大概写入操作已经完成.

目前可以发送IRP了.假如不采纳特别的办法的话,IRP发送目标是FileObject对应的DeviceObject.发送后,等候IRP的完成并且释放资源,返回.

文件的Delete

Delete实际上是通过向FSD发送IRP_MJ_SET_INFORMATION的IRP,并把 IrpSp->Parameters.SetFile.FileInformationClass设置为 FileDispositionInformation,用一个FILE_DISPOSITION_INFORMATION构造填充buffer来履行 的.

文件的Rename

近似于Delete,Rename是向FSD发送IRP_MJ_SET_INFORMATION的IRP,把 IrpSp->Parameters.SetFile.FileInformationClass设置为 FileRenameInformation,填充buffer为FILE_RENAME_INFORMATION构造.

综上,于是我们可以在驱动里面通过发送IRP来直接拜候文件系统了,绕过了native API 和win32 API层次.

绕过文件系统过滤驱动和钩子

有了以上的内容,我们目前可以直接给FSD发送恳求操作文件.但是这还不够,因为有很多的杀毒软件大概监督工具利用FSD Filter Driver大概FSD Hook的办法来监控文件操作

对付文件系统过滤驱动

文件系统过滤驱动Attach在正常的文件系统之上,监督和过滤我们的文件拜候.文件系统驱动栈就是由这一连串的Attach起来的过滤驱动组 成.我们可以用IoGetRelatedDeviceObject这个函数来得到一个FileObject对应的最底层的那个功效驱动对象(FDO).但 是这样固然绕过了那些过滤驱动,却同时也绕过了正常的FSD如Ntfs/Fastfat,因为正常的FSD也是作为一个过滤驱动存在的.磁盘文件对象的对 应的最底层的FDO是Ftdisk.sys,它已经因为过于底层而不能处理我们送达的IRP恳求.

其实正常的FSD信息存储在一个Vpb构造中,我们可以利用IoGetBaseFileSystemDeviceObject这个未公开的内核函数来得到它.它就是我们发送IRP的目标了.

对付替换DispatchRoutine的FSD Hook

这是一种常用的FSD Hook方法.我们需求得到本来的DispatchRoutine,向本来的DispatchRoutine发送我们的IRP.这里供应一个思绪:我们可 以读取本来FSD驱动的.INIT段大概.TEXT段,查找其DriverEntry函数,在它的DriverEntry函数中必定设置了自己的 DriverObject的各个DispatchRoutine.在这个函数中我们就可以找到我们想要的DispatchRoutine的地址.只需求利用 特点码搜索的办法便可以搜索到这个值.

对付Inline Hook DispatchRoutine函数本身的FSD Hook

这种Hook办法对比毒辣,但不是非常常见于安全产品中,普通利用在木马和rootkit上,比方我自己写的rootkit.它没有更改 DriverObject里面的DispatchRoutine的函数指针,而是向函数开首写入汇编指令的JMP来跳转函数.对付它的基本思绪就是读取存 在磁盘上的FSD的文件,加载到内存一份干净的备份,察看我们要调用的DispatchRoutine开首的几个字节和这个干净备份能否一致.假如不一 致,特别是存在JMP,RET,INT3一类的汇编指令的时刻,极大概就是存在了Inline Hook.(但要充分考虑重定位的情形.)假如存在Inline Hook,我们就把干净的函数开首拷贝过来覆盖掉被传染的函数头.然后在发送IRP,就不会被Inline Hook监督或篡改了.

怎么样?看完了后你有什么设法?对!就是用这种办法来冲破主动防备类软件,目前主动防备已经是将来杀软的一个发展趋向了,而想冲破主动防备,必必要有踏实的编程功底,今后的免杀(指主动防备)再也不是菜鸟所能制作的了,所以各位真的想玩免杀的话,今后编程就是必不可缺了!   以上是“Windows平台内核级文件拜候[Windows安全]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • Windows 8调整回收站大小的办法
  • Windows8常常呈现无呼应且无法关闭的问题办理办法
  • windows 2003翻开本地用户和组提醒无权限的办理办法
  • Windows Server 2012虚拟机的导入本领
  • 若何办理Windows 8在桌面上老是显示大小写锁定和数字锁定图标的问题
  • 若何对Windows Server 2008上的ARP缓存举行管理的步骤
  • Windows8激活办法 用Skype免费打英国电池激活的办法教程(图文)
  • Windows 8怎样启用.net framework 3.5的办法介绍
  • Windows8无法更新驱动的办理办法(图文教程)
  • 平板电脑里装的Windows 8 Metro版的操作指南
  • 在Windows7中将U盘用BitLocker加密的操作步骤
  • 在固态硬盘上若何安装Windows 7
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .