Вопрос или проблема
Окружение
Windows 7 Professional SP1 PL, подключен к домену.
Проблема
С 2014-06-12 несколько наших компьютеров (но определенно не все, по крайней мере, пока) столкнулись с проблемой совместного использования принтера, которая быстро объяснилась отключением службы Windows Firewall.
Попытки запустить службу Windows Firewall заканчиваются неудачей с ошибкой № 5 («Доступ запрещен»), возвращаемой службой.
Windows EventLog показывает, что проблема началась в указанную выше дату и повторяется каждое утро при запуске – либо при любой попытке вручную запустить службу.
Диагностика
С любезной помощью Google мы быстро выяснили, что проблема связана с доступом к подклучам следующего ключа реестра:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SharedAccess
На нескольких веб-сайтах утверждается, что проблема была вызвана недостаточным доступом к некоторым значительным подклучам этого ключа для NT Service\MpsSvc
. Наиболее авторитетным источником кажется статья базы знаний Microsoft KB943996. Хотя эта статья касается Windows Vista, она предоставляет ссылку на более общий веб-сайт с Firewall FixIt Tool.
Мы попытались применить предложения, найденные в базе знаний, и получили следующие результаты:
- Мы смогли проверить, что только подклуч
\Epoch
отсутствовал в рекомендованном наборе ACL. - Мы не смогли добавить
NT Service\MpsSvc
вручную, так как Windows не могла найти такого пользователя. Мы проверили правильность области поиска (локальный компьютер) и включили все типы объектов. Мы установили, что эта учетная запись может быть правильно найдена и использована на исправных машинах. - Инструмент FixIt правильно назначил права на подклуч
\Epoch
дляNT Service\MpsSvc
(!), но это не решило проблемы, которую сам инструмент FixIt признал в пострановом тесте.
Мы проверили, что вышеуказанный ключ реестра является ключом к нашей проблеме. Мы сделали это, назначив наследуемые права Full Access
для Everyone
– с этими правами служба Windows Firewall запускалась правильно. Однако это не решает нашу проблему из-за очевидных проблем безопасности. Нам нужно правильно ее исправить.
В ходе нашего дальнейшего расследования мы попытались отслеживать вышеуказанный ключ с помощью Sysinternals Process Monitor. Мы установили, что служба Windows Firewall завершает работу после ACCESS DENIED
на подклуче \Epoch2
, о котором мы не знали.
При запуске regedit.exe
с учетной записью, имеющей права локального администратора, мы не могли увидеть этот подклуч. Однако этот ключ был четко виден:
- на здоровых машинах, с использованием тех же привилегий,
- на пораженных машинах, запуская
regedit.exe
как пользовательSYSTEM
(psExec -s -i regedit.exe
)
Учетные записи, перечисленные в ACL на подклуче Epoch2
, также не содержат записи NT Service\MpsSvc
. На пораженной машине это:
CREATOR OWNER
SYSTEM
Administrators
Users
LOCAL SERVICE
На здоровой/непораженной машине записи правильно выглядят следующим образом:
CREATOR OWNER
SYSTEM
Administrators
Users
MpsSvc
Поскольку мы не можем вручную назначить эти разрешения, мы несколько растеряны, что делать дальше.
Масштаб и значимость
Проблема была выявлена только в нескольких областях, но затрагивает примерно 50% компьютеров в первой области, которую нам удалось подробно проверить.
Проблема, вероятно, может затронуть и другие области. Поскольку она требует взаимодействия пользователя с пораженными функциями Windows (печать на принтере, общими с пораженным компьютером), сообщения пользователей, вероятно, будут редкими по сравнению с возможным масштабом проблемы.
Хотя общие принтеры сейчас не так распространены, эта функция не является большой проблемой. Но отключенный брандмауэр определенно является проблемой, которую необходимо решить.
Результат
Первое: у нас нет представления о возможной причине этой проблемы.
Все компьютеры (как пораженные, так и здоровые) работают в управляемой среде установки программного обеспечения. Пользователи не имеют административных привилегий, программное обеспечение разворачивается автоматически через Wpkg. Все вышеуказанные компьютеры имеют идентичный программный профиль – это означает, что были установлены одни и те же программные продукты. Эти компьютеры даже идентичны в аппаратных терминах, все они были приобретены в одной партии и имеют последовательные серийные номера.
Наше основное подозрение, связанное с общим временем возникновения проблемы, заключается в какой-то избирательной проблеме с одним из недавних обновлений Windows от 2014-06-10. К сожалению, нам совершенно не удалось воспроизвести эту проблему в наших привидениях времени виртуальной тестовой машины, так что это подозрение несколько неубедительное.
Тем не менее, обнаружение источника важно как для устранения проблемы, так и для ее предотвращения в будущем.
Второе: у нас нет удовлетворительного представления о том, как решить проблему. Мы думаем о:
- добавлении прав для пользователя
MpsSvc
через какой-то инструмент командной строки для ACL, хотя это потребует много времени и человеческих ресурсов, если проблема начнет распространяться; - возможно, развертывание этих прав через GPO (GPO примет здесь любого пользователя), но сначала нам нужно установить, что права на
\Epoch2
– единственные отсутствующие.
Прежде чем предпринимать что-либо радикальное на уровне домена, мы были бы признательны за комментарии. Прежде всего, опыт предыдущих решений, идеи для решения и идеи о возможном источнике проблемы.
Может быть, у кого-то еще была эта проблема недавно?
Я боролся с той же проблемой в течение нескольких дней, и я также не смог увидеть учетную запись NT Service\MpsSvc
при проверке разрешений ключа реестра. Очевидно, что это сделано специально(?), и учетная запись NT Service\MpsSvc
доступна, но скрыта; нужно просто ввести ее вручную в диалоговом окне [Добавить…]. После этого и предоставления учетной записи Full Control
на ключе Shared Access
, Windows Firewall теперь запускается так, как должен.
Могу только отметить, что Linux с iptables по сравнению – чудо простоты.
Это произошло со мной на этой неделе, единственными очевидными изменениями были два патча безопасности за ноябрь 2017 года (KB4047206, KB4048960).
Могу подтвердить, что удаление и повторное добавление указанных ключей реестра, как указано в KB943996, исправило это для меня. Дополнительно я предоставил своей учетной записи доменного пользователя полные разрешения для ключей и подклучей Epoch, Epoch2 и FirewallPolicy, а также для NT Service\MpsSvc
.
.
Ответ или решение
Теория
Проблема, описанная в вашем вопросе, связана с невозможностью запуска службы Windows Firewall на компьютерах с Windows 7 Professional SP1 PL, что сопровождается ошибкой 5 — «Отказано в доступе». Несмотря на то, что ошибка и описывается в статье KB943996, конкретная рекомендация из этого источника не помогла решить проблему в вашей ситуации. Главный вопрос заключается в предоставлении доступа для службы NT Service\MpsSvc к определённым разделам реестра, без чего служба не может корректно функционировать.
Пример
Как показывают ваши диагностика и результаты, проблема заключается в отсутствии должного доступа для NT Service\MpsSvc к ключам реестра, таким как HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SharedAccess и его поддерево, включая Epoch2. При попытке вручную предоставить доступ к ключам, вы столкнулись с трудностью добавления NT Service\MpsSvc, поскольку данный учетный элемент не видим напрямую в графическом интерфейсе редактора реестра, хотя и существует в системе.
Ошибки подобные этой иногда возникают после обновлений безопасности. В вашем случае вопрос был зафиксирован после обновлений от 10 июня 2014 года. Хотя напрямую воспроизвести баг в ваших виртуальных тестовых машинах не удалось, предполагается, что недавние обновления могли повлиять на систему безопасности, изменив доступные ACE в ACL потенциально на уровне ядра.
Применение
Для разрешения данной проблемы следует выполнить несколько шагов:
-
Восстановление доступа через командную строку:
- Откройте командную строку от имени администратора.
- Используйте утилиту
subinacl
, чтобы вручную назначить правильно права, например так:
subinacl.exe /keyreg HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SharedAccess /grant="NT Service\MpsSvc"=F
Данная команда назначает NT Service\MpsSvc полный доступ к ветке реестра. Убедитесь, что вы осуществляете команду
subinacl.exe
на всех необходимых ветвях и подведках. -
Использование Sysinternals:
- Убедитесь, что вы используете Sysinternals Process Monitor для проверки попыток доступа службой и выяснения проблемных мест в реестре.
- Посредством Sysinternals PsExec запускайте
regedit.exe
с правами SYSTEM, чтобы модифицировать скрытые участки реестра.
-
Поддержка групповых политик (GPO):
- Групповые Политики можно использовать для автоматического применения необходимых прав на всех затронутых машинах.
- Включение изменения прав доступа, добавление
MpsSvc
для ключей.
-
Дополнительные рекомендации:
- Проверьте все установленные обновления, которые могли задействовать службы безопасности или изменить управление введением доверенных участников в ACL для различных наборов прав.
- Временно откатите или отключите последние обновления на тестовом окружении, наблюдая за изменением в поведении Firewall.
- Проведите аудит всех установленных приложений и их потенциальных конфликтов на уровне сетевой компоненты и безопасности.
Заключение
Настройка и управление службами безопасности Windows могут оказаться весьма сложной задачей, в особенности если это касается доступа на уровне системного реестра. Важно помнить о выполнении регулярных проверок и бэкапов реестра прежде чем делать какие-либо изменения. Кроме того, всей среде, в которой находится ваш домен, необходимо обеспечивать полную безопасность, что может включать периодические пересмотры настроек групповых политик и регулярные обновления оборудования и ПО во избежание повторения таких ситуаций.
Если же проблема повторяется или начинает охватывать больше машин, рекомендуется привлечь специалистов по безопасности или рассмотреть консультацию с Microsoft для более детальной оценки.