Отключение SeDebugPrivilege в C#

У меня есть программа, основанная на WPF на C#, и я хочу удалить привилегии пользователя для отладки приложения (SeDebugPrivilege) (по крайней мере, в режиме Release). Какой лучший способ пойти по этому поводу? Я нашел несколько способов сделать это в коде, который требует небезопасных вызовов неуправляемого кода. Я бы предпочел сделать это либо просто в C#, либо, что еще лучше, через манифест приложения или каким-либо другим способом, который вообще не позволяет пользователю иметь SeDebugPrivilege во время выполнения моего приложения. Есть ли способ объявить группу Windows и отозвать привилегию для всей группы? Мотивация для этого - часть толчка, чтобы лучше защитить мое приложение, следуя принципам наименьших привилегий. Есть и другие привилегии, которые, я уверен, я бы хотел удалить в какой-то момент позже, но я хотел бы беспокоиться об одной вещи за раз.

2 ответа

Решение

Я думаю, что вы можете неправильно понимать влияние таких привилегий, как SeDebugPrivilege, Хотя вы, безусловно, можете удалить привилегию из токена процесса, используя AdjustTokenPrivileges это не предотвращает отладку приложения, а предотвращает выполнение самим приложением определенных действий по отладке. Однако это можно использовать для уменьшения влияния возможных уязвимостей в вашем приложении, предотвращая его влияние на другие процессы с помощью средств, которые требуют привилегий.

Обратите внимание, что по умолчанию пользователь может отлаживать приложение, которое он сам запустил, даже без SeDebugPrivilege Таким образом, даже если он запускается как пользователь без прав администратора (который по умолчанию вообще не имеет этой привилегии), это не помешает отладке приложения.

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

Вы могли бы, возможно, периодически проверять System.Diagnostics.Debugger.IsAttached и предпримите некоторые действия, если значение true, но это было бы относительно просто преодолеть для того, кто решил отладить приложение.

Я хотел бы знать, как отменить использование SeDebugPrivilege пользователем или группой

Итак, вы хотите, чтобы ваше приложение отозвало разрешение у пользователя? Кажется, вы хотите, чтобы пользователь с правами администратора не смог отладить ваше приложение.

Это в корне неверный путь. Я, пользователь, являюсь владельцем моей машины. Я тот, кто определяет, что ваша заявка может делать, а не наоборот.

Это возможно для приложения, которое имеет SeDebugPrivilege делать практически все, что пожелает, и, скорее всего, это лишает вошедшего в систему пользователя привилегий администратора. However, if you manage to turn me into a non-admin on my own machine, without my consent, then after restoring from backup (I'm the only admin on this machine and so I'll be kind of stuffed) I'll be sure to write some rather unhappy blog posts about your software...:)

My take on this: the user is in charge. Not the application. There is little you can do about this, and I hope that with time, there will be even less you can do about it.

Другие вопросы по тегам