Global Mutex可能导致其自身应用程序发生DoS

可以由Windows上的不同用户(管理员,非管理员)一次运行的应用程序。它的关键部分无法由不同(或相同)用户同时执行。

为防止通过调用WinApi使用我的Global Mutex: CreateMutex(NULL,true,"Global\\MyMutex");,然后在完成工作后释放Mutex。添加“全局”前缀以使Mutex在所有Windows会话之间可见。 (这是可选的,但我想介绍一下这个互斥对象不是本地的。)

现在是问题所在:

假定有一个攻击者想要阻止任何人执行关键部分,因此她创建了一个程序,该程序创建名称为"Global\\MyMutex"的互斥量,并且从不释放该互斥量...这样,她就能够对其他用户的应用程序进行DoS攻击-因为他们无法访问关键部分。

问题是-如何使用Global Mutex防止这种攻击情况?

pengjigui 回答:Global Mutex可能导致其自身应用程序发生DoS

首先,使用全局互斥锁需要管理员。其次,您可以使用简单的名为互斥锁的方法来做到这一点,在这种情况下,恶意应用程序可能会阻止您的应用程序运行。但是,在您的系统中运行的恶意应用程序可能所做的不仅仅是阻止您的应用程序,还有很多问题。

解决方案:

  1. 基于一些奇怪的唯一字符串(例如CLSID)创建一个命名的互斥锁,这样恶意应用程序就不会轻易检测到它。

  2. 不锁定每个应用程序。您可能会对发现已锁定很长时间的互斥锁发出警告,但仍然会让用户继续。这取决于您的应用程序设计要做什么。我认为这是更好的方法。

  3. 不要打扰。如果一个恶意应用程序创建者确实攻击了您的应用程序,那么您无论如何都会成功的。

,

您可以:

  • 不使用全局互斥锁。

基本上就是这样。

但是您说,“如何停止我的应用程序同时执行两次操作?”

好吧,如果攻击者一遍又一遍地执行该操作,将会发生什么?这会搞砸您的应用程序,因为没有其他人可以同时执行它,对吧?互斥锁或无互斥锁。

因此,您需要弄清楚如何制作它,以便可以同时完成。

您的另一个选择是声明您实际上并不关心安全性。有时候,这是一个选择,例如,如果您信任每个登录计算机的人。如果有人确实决定攻击您的应用程序,那就不好了。

本文链接:https://www.f2er.com/2771795.html

大家都在问