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

来源:互联网 发布:excel数据统计分析方法 编辑:程序博客网 时间:2024/05/29 13:47

对于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 0
原创粉丝点击