请选择 进入手机版 | 继续访问电脑版

专注代码检测 - 阅镜

 找回密码
 立即注册
热搜: 安装 代码
查看: 130|回复: 0

避免相对路径导致的安全问题(DLL、EXE劫持等问题)

[复制链接]

70

主题

70

帖子

232

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
232
发表于 2021-9-10 20:12:42 | 显示全部楼层 |阅读模式
在程序中,使用相对路径可能导致一些安全风险,例如DLL、EXE劫持等问题。

例如以下代码,可能存在劫持问题:

  1. int Foo() {
  2.   // 传入的是dll文件名,如果当前目录下被写入了恶意的同名dll,则可能导致dll劫持
  3.   HINSTANCE hinst = ::LoadLibrary("dll_nolib.dll");
  4.   if (hinst != NULL) {
  5.     cout<<"dll loaded!" << endl;
  6.   }
  7.   return 0;
  8. }
复制代码

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

1)调用LoadLibrary,LoadLibraryEx,CreateProcess,ShellExecute等进行模块加载的函数时,指明模块的完整(全)路径,禁止使用相对路径,这样就可避免从其它目录加载DLL。
2)在应用程序的开头调用SetDllDirectory(TEXT("")); 从而将当前目录从DLL的搜索列表中删除。结合SetDefaultDllDirectories,AddDllDirectory,RemoveDllDirectory这几个API配合使用,可以有效的规避DLL劫持问题。这些API只能在打了KB2533623补丁的Windows7,2008上使用。

关联漏洞:
  1.   中风险-逻辑漏洞
复制代码


回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

QQ|Archiver|手机版|小黑屋| 阅镜 ( 京ICP备2020034574号 )|网站地图|网站地图点击这里给我发消息

GMT+8, 2022-1-17 10:06 , Processed in 0.058369 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表