Доступ в пользовательском режиме к TPM в Windows

Я разработал приложение для Windows, которое, помимо прочего, обращается к NVM TPM. Во время разработки я протестировал его, запустив от имени администратора, и все отлично работает. Проблема в том, что я не хочу, чтобы он работал от имени администратора, когда он будет выпущен и использован проектом.

Я думал о повышении привилегий приложения на ограниченный период времени, но для этого требуется, чтобы учетная запись администратора назначала учетной записи пользователя права, которых у него не должно быть.

Затем я наткнулся на этот документ: https://docs.microsoft.com/en-us/windows/win32/tbs/using-tbs, в котором говорится, что можно изменить ограничения доступа, создав значение реестра, но не сказано, как это сделать.

  1. Какой путь лучше для достижения вышеуказанной цели?
  2. Если это повышение привилегий, то какое? а почему лучше?
  3. Если это с использованием вышеуказанного метода документа, то как я могу изменить ограничения доступа и как?

person Alex    schedule 06.05.2020    source источник


Ответы (1)


Для TPM 2 в Windows 8 и более поздних версиях вам нужно будет добавить конкретную команду, которую вы хотите использовать, в список разрешенные команды по порядковому номеру.

Расположение реестра:

HKEY_LOCAL_MACHINE    
   Software
      Microsoft
         Tpm
            AllowedW8Commands
               List

Например, если вы хотите разрешить команду NV Read, вы должны добавить новую запись реестра REG_DWORD с именем «14E», так как это шестнадцатеричный код для порядкового номера TPM2_CC_NV_READ со значением «1».

person mnistic    schedule 09.05.2020
comment
Спасибо за ответ. Я тоже это пробовал, в документации Microsoft указано, что это должно быть под: HKEY_LOCAL_MACHINE\ Software\ Microsoft\ Tpm\ AllowedW8Commands\ List Что ж, я пробовал и то, и другое (со списком или без него), но до сих пор нет доступа к энергонезависимой памяти, и я считаю, что добавил все команды, которые я использовал, и, возможно, более. Что мне не хватает? - person Alex; 10.05.2020
comment
Да, это с List, извините за это. Какая у вас версия Windows и версия TPM? Кроме того, вы можете поделиться фрагментом кода, который вы пытаетесь выполнить? - person mnistic; 10.05.2020
comment
К сожалению, я не могу поделиться кодом, но на самом деле я пишу и читаю NVM TPM. Я использую эту библиотеку TPM: ссылка и запускаю пример записи/чтения. Когда я запускаю его от имени администратора, я могу успешно писать и читать, когда я запускаю тот же пример от имени пользователя, он терпит неудачу, даже после установки этих значений реестра. Что еще может помешать учетной записи пользователя получить доступ к этой функции TPM? или какая-либо функция TPM? - person Alex; 10.05.2020
comment
Итак, я предполагаю, что у вас также есть запись для TPM2_CC_NV_Write (с шестнадцатеричным кодом 137). Также обратите внимание, что для учетной записи пользователя вы должны использовать ключ реестра AllowedW8UserCommands (ключ AllowedW8Commands в моем ответе предназначен для учетной записи администратора, я только что понял это в нижней части этой статьи), так что попробуйте это ... - person mnistic; 10.05.2020
comment
Поэтому я тоже попробовал это, и приложение все еще не могло получить доступ как пользователь. Я отладил приложение и увидел, что при демаршалинге в Tss2_Sys_ExecuteFinish возвращается ошибка Esys_hierarchyChangeAuth_Finish. Я проверил еще раз и добавил код команды 129 (hierarchyChangeAuth) в список AllowedW8UserCommands. - person Alex; 11.05.2020
comment
Нам не хватает чего-то еще, возможно, какой-то другой конфигурации Windows. - person Alex; 11.05.2020
comment
Хм, не понимаю, почему задействован HierarchyChangeAuth, если все, что вы пытаетесь сделать, это прочитать память. Трудно помочь в дальнейшем устранении неполадок без кода... Удачи! - person mnistic; 11.05.2020
comment
Давайте продолжим обсуждение в чате. - person Alex; 11.05.2020