站长查询工具 | 站长广告代码大全 | 百度最近收录查询 | 搜索引擎提交 | 站长赚钱 | CSS在线编辑器

特殊注册表键值“AppInit_Dlls”

时间:2008-07-04 20:24:33  来源:  作者:

众所周知,Windows服务程序的启动时机是可以非常早的,往往在用户登录之前就完成启动了,而这个时候最常见的Run键值还不一定被处理完,而且Windows服务程序拥有相当高的权限(默认是Local System,可以对系统里面所有的资源进行操作),因此如果一个恶意软件被加载到Windows服务里面,那么是会非常危险的。前文提到,任何进程使用了User32.DLL,都会对AppInit_Dlls键值指向的DLL进行加载,如果是一个Windows服务程序,也不例外!

由于AppInit_Dlls是一种系统全局性的Hook(system-wide hook),要规避此类的Hook的确很困难,虽然使用驱动程序进行保护能够规避此类问题,但也不是非要使用驱动程序进行处理的。前文说过,只有当使用到User32.DLL这个模块的时候才会触发读取AppInit_Dlls指向的DLL,如果不使用User32.DLL,那么AppInit_Dlls是不会被使用到的。但是要让一个程序不使用User32.DLL会变得非常困难(命令行窗口没有使用User32.DLL),因为任何的窗口、消息都和这个模块有关,为了保证有良好的用户体验,100%的窗口程序都和这个模块有关。从开发角度来说,最好的一种解决办法就是将程序功能逻辑和界面逻辑完全分离,功能逻辑模块负责功能,界面逻辑模块负责界面显示,2者之间采用IPC机制进行交互,功能逻辑模块不依靠User32.DLL,,而且作为独立进程进行处理,这样就可以规避AppInit_Dlls造成的Hook了。

类似的Windows安全相关的缺陷点其实还有很多的,这些缺陷点的来源是为了保证向下的兼容性。相信MIcrosoft已经发现并正在修补这些地方,从Windows Vista上可以看到,AppInit_Dlls的键值在Windows Vista上是不起作用的,因此在Windows Vista里面,这个键值已经被抛弃了(改用另外一个键值执行类似的功能,但是增加了基于UAC的安全防护)。


Tags:


文章评论

共有 0人发表了评论 查看完整内容

推荐教程

最新教程