22 апреля 2022 г.

KB5004442 и старые версии ЛОЦМАН:PLM

В сентябре 2021 года вышло обновление Windows с исправлением уязвимости CVE-2021-26414. Подробности уязвимости не раскрываются, сказано лишь, что уязвимость связана с кражей учетных данных пользователя при подключении к злонамеренному серверу.

Для закрытия уязвимости исправление KB5004442 повышает минимальный уровень проверки подлинности при удаленных вызовах DCOM.

Для пользователей ЛОЦМАН:PLM это означает, что все версии меньше 2017 перестанут работать.

Так как исправление потенциально затрагивает большое количество программ, Microsoft вводит обновление в три этапа:
  1. До 14 июня 2022 г. ужесточенные настройки отключены по умолчанию, но могут быть включены с помощью ключа реестра.
  2. С 14 июня 2022 г. по 14 марта 2022 г. ужесточенные настройки будут включены по умолчанию, но их можно будет отключить с помощью реестра.
  3. С 14 марта 2023 г. ужесточенные настройки останутся включенными постоянно, и отключить их будет невозможно.

Чтобы помочь пользователям увидеть проблемные приложения в Журнал событий Windows записываются примерно такие сообщения:
Приложение C:\Program Files (x86)\ASCON\Loodsman\Client\Loodsman.exe с ИД процесса 2d98 запрашивает активацию CLSID {392BA982-A82F-44AB-BA8A-69BE25199F73} на компьютере AS с уровнем проверки подлинности по умолчанию на 2. Самый низкий уровень проверки подлинности активации, требуемой DCOM, составляет 5 (RPC_C_AUTHN_LEVEL_PKT_INTEGRITY). Чтобы повысить уровень проверки подлинности активации, обратитесь к поставщику приложения.

Так как старые версии ЛОЦМАН:PLM официально не поддерживаются (список поддерживаемых версий), то есть несколько вариантов самостоятельного решения данной проблемы.

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

Во вторых, можно пропатчить исполняемые файлы. Достаточно заменить один параметр в вызове CoInitializeSecurity. Ниже 5 — это необходимый уровень проверки подлинности RPC_C_AUTHN_LEVEL_PKT_INTEGRITY. В оригинальном коде на этом месте 1.
CoInitializeSecurity(nil, -1, nil, nil, 5, 4, nil, 0, nil);
Делать это нужно самостоятельно, так как по закону только конечный пользователь может модифицировать купленное ПО для обеспечения его работоспособности.

Третий вариант очень похож на второй, но исполняемый файл модифицируется уже после загрузки в память. Для этого в процесс Лоцман Клиент нужно загрузить свой код. Проще всего рядом с Loodsman.exe положить специально созданную DLL вроде shfolder.dll. Загрузчик операционной системы выполнит код из нашей DLL, который подменит CoInitializeSecurity.

Готовая скомпилированная shfolder.dll данного варианта и ее исходный код на GitHub. DLL нужно положить в папку рядом с Loodsman.exe.

Есть еще четвертый вариант — перед запуском Лоцман Клиент запустить приложение, которое делает правильный вызов CoInitializeSecurity и создает удаленный COM-объект на сервере приложений, например LWF (версии 1.1.0.930 и старше).

Судя по всему, контекст активации компонента DCOM кэшируется сервером, поэтому последующий запуск Лоцман Клиент проходит успешно. И до тех пор, пока первый клиент с правильным CoInitializeSecurity не освободит объекты, они будут работать. Так же будет возможно создание новых объектов (например, движение по бизнес-процессу с помощью библиотеки WorkflowBusinessLogic.dll, запуск интегратора или запуск дизайнер бизнес-процессов).

Недостаток метода в том, что LWF заберет клиентские лицензии. Теоретически, это можно обойти, если сделать специальный режим работы, в котором LWF будет устанавливать правильный уровень проверки подлинности и создавать объекты на сервере приложений без вызова ConnectToDB. Но так как есть третий вариант, думаю этот пока не актуален.

Пользователям старых версий рекомендую установить ключ реестра RequireIntegrityActivationAuthenticationLevel (подробнее в статье KB5004442) и попробовать разные варианты.

В LWF уровень проверки подлинности исправлен в версия 1.1.0.930 (и старше).

Комментариев нет:

Отправить комментарий