Как regedit может удалить ключ с правами "запретить всем"?

Сначала я должен предоставить некоторый контекст.

Я могу настроить запуск procmon на некоторой высоте, отличной от высоты по умолчанию, сделав два изменения в ключе 'HKLM\SYSTEM\CurrentControlSet\Services\PROCMON24\Instances\Process Monitor 24 Instance':

  1. Изменение значения высоты со стандартного значения 385200 на требуемое значение; например. '136500'
  2. И добавив специальное разрешение для ключа: пользователь: Все тип: Запретить разрешения:('установить значение' | 'удалить')

Причина изменения высоты очевидна. Причина добавления специального разрешения менее очевидна: без этого procmon просто сбросит высоту до значения по умолчанию.

Хорошо, вот мой вопрос:

Я не могу программно удалить добавленное разрешение или изменить этот ключ или его значения. Это неудивительно, потому что разрешение запрещает доступ "всем".

Однако я могу легко удалить это разрешение, используя regedit. Я просто выбираю разрешение и удаляю его.

Так какой трюк regedit использует, чтобы переопределить это разрешение?

Я вижу, что он работает как текущий пользователь, а не как "СИСТЕМА". Я могу использовать psexec для запуска сценария удаления как "SYSTEM", но это также запрещает доступ.

1 ответ

Оглядываясь назад, становится ясно, что regedit не использует какой-либо специальный трюк или привилегию для удаления ACE "запретить всем". Проблемный ACE не запрещает все операции с разделом реестра. Это только отрицание "удалить" и "установить значение". С этим ACE это место, даже regedit не может удалить или установить значения. То есть он не может открыть ключ с доступом "удалить" или "установить значение".

Что может сделать regedit - это открыть ключ с доступом write-dacl. Проблемный ТУЗ не отрицает этого.

Как только regedit (или любая другая программа) открывает ключ с доступом write-dacl, он может удалить проблемный ACE и затем внести любые другие необходимые изменения в ключ.

Doh!

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