SystemCrashDumpStateInformation加载驱动创建时间:2008-04-13 文章属性:原创 文章提交:MJ0011 (tyjaaa_at_163.com) 使用如下代码可将系统中的atapi.sys (如果你的机器磁盘PORT驱动是atapi.sys的话,如果是scsiport的话会有不同)加载到系统中。 模块名为dump_atapi.sys(如果已配置了生成dump则无法生效) HMODULE hlib = LoadLibrary("ntdll.dll"); PVOID p = GetProcAddress(hlib , "NtSetSystemInformation"); ULONG stat; __asm { push 0 push 0 push 0 push 34 //SystemCrashDumpStateInformation call p mov stat ,eax } 代码非常简单,而且不需要任何额外权限,user权限也可以调用 结合替换或感染atapi.sys则可加载自己的驱动 不过,只能加载而已,加载完了系统会将加载的信息保存到IopDumpxxxx结构中,等到KeBugCheckEx调用IopWriteCrashDump时会调用到这个驱动 也就是说,实现攻击所要条件: 1.宿主机关闭了crash dump 选项(貌似很多机器都关闭了,尤其是XX优化版,XX美化版) 2.宿主机上存在引发bsod的驱动程序(很多杀毒软件、HIPS都有这样的设计缺陷) 这两点条件具备则可达成攻击。但其实还有一些细节要处理,例如,部分HIPS会报警写SYSTEM32下文件,因此我们需要直接通过磁盘读写该文件 另外,需要让原本不生成crashdump 的机器调用IopWriteCrashDump也是需要一定方法的 下面说说主要原理: 系统生成crash dump(崩溃转储)的当时其实并没有写入文件,而是实现在pagefile.sys中分配预留一块区域,将物理内存写入这块区域,等重启时再转储到文件中 之所以这么做,是因为WINDOWS不希望在转储时(BSOD时)使用文件系统相关功能,因为它可能已经被破坏了,而磁盘驱动其实也是可能被破坏的,因此WINDOWS在Config CrashDump时,将系统中的atapi.sys磁盘端口驱动备份了一份,以dump_xxxx.sys的方式加载,等到BSOD时调用此驱动来写入磁盘。 这个功能还可以帮助我们做另一件事,例如系统原始的atapi.sys可能被HOOK了,那么我们可以利用dump_atapi.sys来写磁盘 |