内核文件加载执行控制方案实现(win7, win8 64位)--windows内核安全策略的演变

对于xp和32位win7系统,内核层文件加载执行控制主要是通过对系统服务描述符表(SSDT)进行hook来实现。在64位系统下,由于patchguard内核防护技术的存在,SSDT等关键的内核数据结构已无法被第三方驱动程序修改。patchguard技术在windows内核启动阶段开启安全定时器,并对SSDT等关键数据结构的完整性进行定期检查,一旦发现这些数据结构被修改,则立即转入紧急处理模式(多数情况下会导致蓝屏)。由于patchguard代码使用了大量混淆技术,且可查的官方文档寥寥无几,无法通过逆向摸清其代码逻辑,尝试了大量破解办法均失败。

幸运的是,由于patchguard的防御过于强大,在保障安全的同时也会使得不少安全软件的正常功能无法使用,包括360等安全软件和PCHunter等逆向软件,均需要读写某些内核结构来完成正常功能。因此微软提供了一系列内核层的系统事件回调接口,允许驱动程序向系统注册自定义的回调函数,在某些系统事件(进程创建,dll加载,文件读写等)发生前率先调用,从而实现一些安全监控,防护功能。

其中,PsSetCreateProcessNotifyRoutineEx(execallback)回调注册函数,允许驱动注册自定义的回调函数execallback,并将当前进程的创建信息作为参数传给该自定义函数,从而实现了与hook SSDT等价的进程创建内核监控功能。

VOID usercallback(
    PEPROCESS              Process,
    HANDLE                 ProcessId,
    PPS_CREATE_NOTIFY_INFO CreateInfo
)

PsSetLoadImageNotifyRoutine(dllcallback))回调注册函数,允许驱动注册自定义的回调函数dllcallback,并将当前dll文件信息作为参数传给该自定义函数,从而实现了与hook SSDT等价的dll文件加载内核监控功能。


VOID imageload_callback(

__in_opt PUNICODE_STRING  FullImageName, 

__in HANDLE  ProcessId, 

__in PIMAGE_INFO  ImageInfo

)


从xp到win7 64的内核hook方式的改变,可以发现,微软对windows内核的开放性逐渐限制,而对安全性保障逐渐加强。也就是说,由于patchguard技术和驱动签名验证等新机制的出现,第三方驱动可以实现的功能越来越有限,对系统的监控能力也在变弱。这对于增强整个内核的安全性和稳定性是有帮助的,因为更少的开放接口自然减少了引入潜在漏洞的可能。这和可信执行环境(TEE)技术出现的背景是一致的,日益复杂的操作系统内核安全性无法得到保障,只能通过减少调用接口和隔离核心安全组件来减少引入漏洞的风险。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下内容假设你是以管理员权限运行WIN7. ——>>没有UAC提示,没有“以管理员身份运行”提示,或其他类似的提示…<<—— 如何使用: 解压存档的内容到任意位置...按顺序执行文件名称 说明: ---------------------------------------------------------------------------------------------- 1.cmd (批处理文件,为你创建一个新的BCD项) 2.exe (字节补丁,使用dUP2...修改复制NTOSKRNL和WINLOAD) 3.cmd (批处理文件,修改后的文件会拷贝到\Windows\System32) checksum.exe (这可以解决PE校验,所以在启动时不会收到0xC0000221的错误。) ---------------------------------------------------------------------------------------------- 按顺序运行1,2,3即可。然后可以安全地删除这些文件。不需要运行checksum.exe,它已经在3.cmd中运行。 重新启动计算机,选择“PatchGuard Disabled v2”启动项来启动系统... 这将允许加载未签名的X64位驱动,挂钩NTOSKRNL,进程隐藏,等 如果有任何建议,或者问题?通过论坛与我联系! 如何卸载: ---------------------------------------------------------------------------------------------- 以管理员权限打开CMD.EXE并输入: bcdedit /delete {46595952-454E-4F50-4747-554944FEEEEE} 然后在\Windows\System32\下删除:ntkrnlmp.exe 和 osload.exe ---------------------------------------------------------------------------------------------- 若不想禁用 WIN7 X64内核保护/驱动签名,开机时选择“Windows 7”启动项即可。 永远记住这一点:这个补丁是为逆向工程和64位内核模式的探索。 这不是为最终用户…如果你不理解“是什么”或“为什么”——请不要使用它。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值