2010-11-24 2 views
4

Как я могу помешать пользователям помешать, остановить или сбой службы Windows, выполняющей работу в фоновом режиме, которая может занять некоторое время?Защита службы Windows от ненадежных пользователей

После получения запроса на остановку служба должна дождаться завершения работы до остановки.

Для служб есть флаг CanStop, но я не уверен, как ответить на сообщение OnStop. И если пользователь пытается свернуть службу, как я могу предотвратить дальнейшее вмешательство?


Edit: Обобщенная вопрос родительского контроля в любой фоновый процесс.

+0

Там было много вопросов о том, можно ли предотвратить задачу от быть прекращено. Это всегда вызывает другой вопрос: что, если я вытащу шнур питания? – wj32 2010-11-25 08:56:19

+0

@ wj32: Я предпочитаю сосредоточиться на решении проблемы, которая * может быть решена. – 2010-11-25 11:42:44

+0

Я хочу сказать, что вы не можете решить эту проблему. Рассмотрим пример, который я вам дал. В чем разница между этим и методом завершения программного обеспечения, например, вызов PsTerminateProcess из драйвера? – wj32 2010-11-26 02:50:09

ответ

3

Пользователи должны иметь администратора, чтобы прекратить услуги. Я не думаю, что есть надежный способ защитить программу от кого-то, у кого есть администратор на коробке. Если вы не хотите, чтобы «ненадежные пользователи» останавливали serivce, не давайте «недоверенным пользователям» admin privs.

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

Подумайте о своем ответе здесь. Любая программа, которая намеренно пытается удалить удаление администратором, является по определению malware.

Я знаю, что он был довольно стандартным, так как NT вышел, чтобы дать всем пользователям прав администратора домашних ПК, чтобы они могли устанавливать и играть в игры до их сердца. Однако с Vista и Win7 это уже не очень важно, и люди должны отказаться от этой привычки. Это очень плохая практика безопасности, даже для «доверенного» пользователя.

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

1

Ваш threat model? Без модели угрозы невозможно определить правильный способ потратить ваши усилия.

На данный момент давайте рассмотрим вопрос о предотвращении остановки службы, а не о предотвращении или фальсификации или сбое.

T.E.D верно, говоря, что если какой-либо администратор хочет остановить службу, вы обычно не должны пытаться предотвратить это. В противном случае администратор может выполнить изоляцию ошибок, запустить Windows в режиме голых костей и т. Д.?

Как вы говорите, свойство ServiceBase.CanStop используется для предотвращения остановки службы. Это свойство обычно используется только службами, критичными по ОС, которые должен запустить.

В основной служебной теме вы можете просто проигнорировать событие и цикл OnStop навсегда. Таким образом, SCM подумает, что сервис был остановлен, хотя он все еще работает. Это довольно неприятно, но должно работать. SCM просто выдает запрос на остановку, а не фактически останавливает остановку.

Смежные вопросы