DLL劫持防御策略



DLL的搜索路径顺序:

 

·  The directory from which the application loaded.

·  The system directory.

·  The 16-bit system directory.

·  The Windows directory.

·  The current directory.

·  The directories that are listed in the PATH environment variable.

 

防御策略:

1. 保护游戏目录,不是自己的程序不让拷贝。(主要是防止被加入恶意的DLL到游戏的目录,驱动实现)。

2. 创建一份游戏模块的白名单,游戏启动时对游戏目录下的文件进行检查,检查可疑的文件。白名单可本地加密存储。

3. 将容易被劫持的Windows DLL 写进注册表,那么凡是此项下的DLL文件就会被禁止从EXE自身目录下调用,而只能从系统目录,也就是system32目录下调用。防止从游戏目录加载其它DLL。注册表路径:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs]确保用户的机器上面的KnownDLLs下是完整的。

4. 确保windows文件保护功能是打开的。“计算机配置”→“管理模板”→“系统”→“Windows 文件保护”.

5. 将游戏的DLL打上签名,防止自身的DLL被劫持。游戏运行时检查游戏目录下模块的签名。(没有签名拒绝加载--必须确保检查签名服务打开)

注意:通过命令行“net  stop  cryptsvc”关闭签名检验服务可使得客户端签名校验失效。

6. 使用Process Monitor 检查游戏进程的可劫持的DLL 

 

一些针对DLL劫持的安全编码的规范:

     1)调用LoadLibraryLoadLibraryExCreateProcessShellExecute等进行模块加载的函数时,指明模块的完整(全)路径,禁止使用相对路径,这样就可避免从其它目录加载DLL

     2)在应用程序的开头调用SetDllDirectory(TEXT(""));从而将当前目录从DLL的搜索列表中删除,也就是搜索时不搜索当前目录。SetDefaultDllDirectoriesAddDllDirectoryRemoveDllDirectory这几个API配合使用,可以有效的规避DLL劫持问题。可惜的是,这些API只能在打了KB2533623补丁的Windows72008上使用

 

思考:

如果劫持的不是游戏自己的DLL,通常选择劫持那些导出函数较少的不是关键的系统DLL,如USP10.DLL, LPK.DLL, KSUSER.DLL, MIDIMAP.DLLCOMRES.DLL, d3d8.dll, sxs.dll等。可重点检查这些模块。

 

参考:

http://blog.csdn.net/magictong/article/details/6931520

http://security.tencent.com/index.php/blog/msg/20

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx

http://msdn.microsoft.com/en-us/library/windows/desktop/ff919712(v=vs.85).aspx

 

附:

 

WIN 7 x64

 

默认的表里只包含了3个容易被劫持的DLL。可添加其它容易被劫持的DLL到注册表当中。

 

Xp sp3

 

 

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值