Как regedit может удалить ключ с разрешениями «запретить всем»?

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

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

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

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

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

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

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

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

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


person NoBrassRing    schedule 15.01.2019    source источник
comment
Regedit требует прав администратора. Админу нельзя отказать в разрешениях.   -  person Ken White    schedule 15.01.2019
comment
Это неправда. Пользователь с правами администратора (даже «Администратор») не похож на суперпользователя Linux. Такой пользователь, как и любой пользователь, ограничен разрешениями Windows. Напишите несколько простых скриптов powershell, чтобы убедиться в этом самостоятельно. Однако тот же пользователь, работающий с regedit, похоже, имеет особые привилегии. В этом суть моего вопроса.   -  person NoBrassRing    schedule 16.01.2019
comment
PsExec -i -s regedit (или PsExec64 -i -s regedit) из командной строки с повышенными правами должно помочь!   -  person JosefZ    schedule 18.01.2019
comment
Спасибо за ваше предложение, но оно не отвечает на мой вопрос. У Regedit уже есть особая привилегия (очевидно): привилегия удалить ACL «запретить всем». Вам не нужно запускать его как System (используя psexec), чтобы получить эту привилегию. Мой вопрос в том, что это за привилегия? Как regedit может обойти все ограничения разрешений, влияющие на другие программы (даже те, которые запускаются от имени системы или администратора).   -  person NoBrassRing    schedule 19.01.2019


Ответы (1)


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

Что regedit может сделать, так это открыть ключ с доступом для записи dacl. Проблемный ACE этого не отрицает.

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

Дох!

person NoBrassRing    schedule 21.02.2019