首页 > 解决方案 > 全局互斥可能导致它自己的应用程序的 DoS

问题描述

可以由不同用户(管理员、非管理员)在 Windows 上一次运行的应用程序。它有一个临界区,不能由不同(或相同)用户同时执行。

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

现在的问题是:

假设有一个攻击者想要阻止任何人执行关键部分,所以她创建了一个程序,该程序创建了一个带有名称的互斥锁"Global\\MyMutex"并且从不释放它......这样她就能够对我的应用程序执行 DoS 攻击以供其他人使用用户 - 因为他们无法到达关键部分。

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

标签: c++multithreadingmutex

解决方案


你可以:

  • 不使用全局互斥锁。

基本上就是这样。

但是你说,“我怎样才能阻止我的应用程序同时执行两次?”

那么,如果攻击者一遍又一遍地做那件事会发生什么?它会搞砸你的应用程序,因为没有其他人能够同时做到这一点,对吧?互斥锁或无互斥锁。

所以你需要弄清楚如何制作它,以便它可以同时完成。

您的另一个选择是声明您并不真正关心安全性。有时这是一种选择,例如,如果您信任所有登录计算机的人。如果有人决定攻击您的应用程序,这看起来不太好。


推荐阅读