Global Mutex может вызвать DoS своего собственного приложения

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

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

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

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

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

Всего 2 ответа


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

Решения:

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

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

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


Вы можете:

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

Это в основном это.

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

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

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

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


Есть идеи?

10000