Как я могу запретить WIX CAQuietExec регистрировать командную строку?
Чтобы предотвратить появление командных окон во время установки, я использую встроенное пользовательское действие WIX CAQuietExec.
Сначала я определяю командную строку:
<CustomAction Id="A01"
Property="QtExecCmdLine" Value=""MyExe.exe" /password [PASSWORD]" />
Примечание: свойство PASSWORD определяется как скрытое. Это не позволяет установщику Windows записать значение свойства в журнал.
Затем я вызываю встроенное расширение WIX:
<CustomAction Id="A02" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="immediate" Return="ignore" />
Это отлично работает.
Однако когда я захожу во временную папку и открываю журнал MSI, я вижу следующую запись:
CAQuietExec: "C: \ Program Files \ MyExe.exe" / пароль INCLEARTEXT
Т.е. пароль отображается открытым текстом и не скрыт.
Как я могу запретить CAQuietExec регистрировать пароль в виде открытого текста?
5 ответов
В src\ca\wcautil\qtexec.cpp есть эта строка в функции QuietExec:
WcaLog(LOGMSG_VERBOSE, "%ls", wzCommand);
который регистрирует командную строку в подробном режиме. Там нет условного, чтобы остановить его от регистрации.
Взял несколько гуглов и попытался найти решение, чтобы создать свойство и назначить Hidden="yes", прежде чем присваивать значение свойству. В приведенном выше коде вы должны создать новое свойство QtExecCmdLine перед присвоением значения.
<Property Id="QtExecCmdLine" Hidden="yes"></Property>
затем
<CustomAction Id="A01" Property="QtExecCmdLine" Value=""MyExe.exe" /password [PASSWORD]" />
затем
<CustomAction Id="A02" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="immediate" Return ....
CustomAction
тег имеет HideTarget
атрибут, который должен удерживать данные пользовательских действий от записи в журнал.
Есть много способов атаковать ваш пароль. Я мог бы посмотреть на MSI в ORCA. Я мог бы запустить путь WMIC win32_process, пока он работает, и увидеть аргументы командной строки. Сокрытие этого от журнала будет иметь небольшую ценность.
Я бы посоветовал зашифровать пароль, который хранится в MSI, и ваш exe-файл может его расшифровать. В зависимости от того, для чего используется этот пароль, вы можете захотеть принять и другие меры, например, заставить EXE создать случайный пароль во время выполнения и зашифровать / сохранить его где-нибудь на случай, если какой-то другой процесс сможет получить к нему доступ.
Если пароль поступает из пользовательского ввода в последовательности пользовательского интерфейса, вы можете выполнить пользовательское действие, которое шифрует данные как второе свойство, а затем передает его в EXE-файл. Или вы можете просто преобразовать исходный код C++ в QuietExec и изменить его так, чтобы он не записывался в файл журнала.
Взгляните на статью " Предотвращение записи конфиденциальной информации в статью журнала", особенно пункт № 3. В основном это говорит о том, что если свойство скрыто, но для политики отладки задано специальное значение, командные строки все равно будут выгружаться в файл журнала в виде открытого текста. Убедитесь, что это может быть причиной, по которой вы испытываете упомянутое поведение.
И я не верю, что это может быть ошибкой в QuietExec CA:)