Как regedit может удалить ключ с правами «запретить всем»? - PullRequest
0 голосов
/ 15 января 2019

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

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

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

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

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

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

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

Так какой же прием использует regedit для переопределения этого разрешения?

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

1 Ответ

0 голосов
/ 21 февраля 2019

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

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

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

Doh!

...