Можно ли предотвратить доступ определенной программы к реестру Windows? Я знаю, что есть ACL для блокировки пользователя, но как насчет каждого исполняемого элемента управления?
2 ответа
Извините, это невозможно, по крайней мере, в той степени, в которой вы этого не хотите. Как уже упоминалось в комментариях Ƭᴇcʜιᴇ007, все управление доступом к Windows основано на пользователях. К каждому процессу прикреплен токен, который определяет, каким пользователем он запущен. Нет разницы между тем, как вы выполняете действие, и программой, выполняемой под вашей учетной записью, которая выполняет это действие, поскольку вы делаете буквально все через тот или иной процесс. «Программы не атакуют пользователей; пользователи атакуют пользователей».
Кроме того, практически каждый процесс обращается к реестру. Даже если сама программа явно не осуществляет доступ к Реестру, исследование Process Monitor показывает, что каждое приложение с графическим интерфейсом начинается с загрузки считываний Реестра, чтобы выяснить, как настроить графические элементы управления. Запустите Process Monitor для приложения, которое, по вашему мнению, не нуждается в реестре; вы будете удивлены
Но если вы хотите заблокировать все записи и только записи, на самом деле есть кое-что, что может помочь. В Windows есть понятие "уровни целостности", которое является частью UAC. По сути, программа, работающая с определенным уровнем целостности, не может писать в объекты, помеченные с более высоким уровнем целостности. Обычные процессы и обычные файлы (и ключи реестра) имеют средний уровень целостности, но вы можете вручную запускать процессы с низким уровнем. Загрузите инструмент PsExec . Если вы хотите создать командную строку, которая не может писать в обычные места, запустите это:
psexec -l -i cmd
-l
устанавливает Низкую целостность; ключ -i
делает процесс интерактивным. Полученная командная строка может записывать только в места, специально помеченные как Низкая целостность
C:\Users\Ben>reg add HKCU\Test
ERROR: Access is denied.
Эта команда работает в обычной командной строке, но не в закрытой.
Другим решением является использование Sandboxie. Эта программа может выполнить любой процесс внутри песочницы, так что любое изменение в системе, сделанное этим процессом, может быть отменено.