Global Mutex может вызвать DoS своего собственного приложения - PullRequest
0 голосов
/ 14 января 2020

Приложение, которое может запускаться разными пользователями (Admin, Non-Admin) на Windows одновременно. У него есть критическая секция, которая не может быть выполнена одновременно другим (или одним и тем же) пользователем.

Чтобы не использовать Global Mutex из WinApi, позвоните по номеру: CreateMutex(NULL, true, "Global\\MyMutex");, а затем после завершения задания сделано Mutex выпущен. Глобальный префикс добавлен, чтобы сделать Mutex видимым между всеми сеансами Windows. (Это необязательно, но я хочу представить, что этот Mutex не является локальным).

А теперь проблема:

Предположим, что существует злоумышленник, который хочет предотвратить выполнение критического раздела кем-либо поэтому она создала программу, которая создает мьютекс с именем "Global\\MyMutex" и никогда не освобождает его ... Таким образом, она смогла выполнить DoS-атаку на мое приложение для других пользователей, поскольку они не могут добраться до критической секции.

Вопрос в том, как я могу предотвратить такой сценарий атаки с помощью Global Mutex?

Ответы [ 2 ]

0 голосов
/ 14 января 2020

Вы можете:

  • Не использовать глобальный мьютекс.

Вот и все.

Но вы говорите: «Как я могу остановить мой приложение делает что-то дважды одновременно? "

Ну, что будет, если злоумышленник сделает это снова и снова? Это испортило бы ваше приложение, потому что никто другой не смог бы сделать это одновременно, верно? Мьютекс или нет мьютекса.

Так что вам нужно выяснить, как сделать это так, чтобы это можно было сделать одновременно.

Другой вариант - заявить, что вас это не волнует. о безопасности. Иногда это вариант, например, если вы доверяете всем, кто заходит на компьютер. Плохо выглядит, если кто-то решит атаковать ваше приложение.

0 голосов
/ 14 января 2020

Во-первых, для этого с глобальным мьютексом требуется администратор. Во-вторых, вы можете сделать это с простым именем mutex, в котором да, вредоносное приложение может помешать вашему приложению работать. Но вредоносное приложение, работающее в вашей системе, может сделать намного больше проблемных c вещей, чем просто блокировать ваше приложение.

Решения:

  1. Создать именованный мьютекс на основе некоторых странная уникальная строка (скажем, CLSID), поэтому вредоносное приложение не сможет легко ее обнаружить.

  2. Не блокировать каждое приложение. Вы можете выдать предупреждение о мьютексе, который был заблокирован в течение длительного времени, но все же позволить пользователю продолжить. Это зависит от того, для чего предназначено ваше приложение. На мой взгляд, это лучший подход.

  3. Не беспокойтесь. Если один из создателей вредоносных приложений попытается атаковать ваше приложение, вы все равно добьетесь успеха.

...