Ошибка DCOM ID 10036, решаем за минуту
Добрый день! Уважаемые читатели IT блога Pyatilistnik.org, в прошлый раз мы с вами разобрали за, что отвечает библиотека vcruntime140.dll и на сколько она важна для работы многих программ. Сегодня я хочу вам рассказать, об интересном случае, когда специализированный софт может не получить доступ к удаленному компьютеры по RPC протоколу из-за новых политик безопасности DCOM. В логах будет фигурировать событие об ошибке DCOM ID 10036 "политика уровня проверки подлинности на стороне сервера не разрешает пользователю". Давайте смотреть в чем дело.
❌Описание ошибки DCOM ID 10036 (EOleException)
Обратился ко мне мой коллега с просьбой показать ему, как отправлять сообщение всем пользователям терминального хоста. Я предложил ему бесплатную утилиту Terminal Services Manager и подумал, что задача выполнена, но не тут то было. Коллега сказал, что у него не подключается к RDSH хосту и высвечивается ошибка доступа. Я решил так же проверить данную ситуацию.
Запустив Terminal Services Manager, в логе я увидел вот такую ошибку подключения:
Сразу отмечу, что права на удаленный сервер у меня были и сетевая доступность присутствовала. Первым делом я полез на сам сервер, куда не удавалось произвести подключение. В логах системы я обнаружил массовую ошибку:
Давайте выяснять в чем дело и как это можно обойти.
⚙️Причина ошибки DCOM ID 10036
Первое, что я стал изучать, что такое RPC_C_AUTHN_LEVEL_PKT_INTEGRITY. В итоге я наткнулся на статью Microsoft о константах уровня аутентификации.
Константы уровня аутентификации представляют собой уровни аутентификации, передаваемые различным функциям времени выполнения. Эти уровни перечислены в порядке возрастания аутентификации. Каждый новый уровень добавляет к аутентификации, обеспечиваемой предыдущим уровнем. Если библиотека времени выполнения RPC не поддерживает указанный уровень, она автоматически обновляется до следующего более высокого поддерживаемого уровня.
В итоге есть вот такой список констант:
- RPC_C_AUTHN_LEVEL_DEFAULT - Использует уровень проверки подлинности по умолчанию для указанной службы проверки подлинности.
- RPC_C_AUTHN_LEVEL_NONE - Не выполняет аутентификацию.
- RPC_C_AUTHN_LEVEL_CONNECT - Аутентифицируется только тогда, когда клиент устанавливает связь с сервером.
- RPC_C_AUTHN_LEVEL_CALL - Выполняет аутентификацию только в начале каждого вызова удаленной процедуры, когда сервер получает запрос. Не применяется к удаленным вызовам процедур, выполненным с использованием последовательностей протоколов на основе соединения (тех, которые начинаются с префикса "ncacn"). Если последовательность протокола в дескрипторе привязки представляет собой последовательность протокола на основе соединения, и вы указываете этот уровень, эта процедура вместо этого использует константу RPC_C_AUTHN_LEVEL_PKT.
- RPC_C_AUTHN_LEVEL_PKT - Аутентифицирует только то, что все полученные данные получены от ожидаемого клиента. Не проверяет сами данные.
- RPC_C_AUTHN_LEVEL_PKT_INTEGRITY - Аутентифицирует и проверяет, что никакие данные, передаваемые между клиентом и сервером, не были изменены.
- RPC_C_AUTHN_LEVEL_PKT_PRIVACY - Включает все предыдущие уровни и гарантирует, что данные в открытом виде могут быть видны только отправителю и получателю. В локальном случае это предполагает использование безопасного канала. В удаленном случае это включает шифрование значения аргумента каждого удаленного вызова процедуры.
Теперь стало понятно, за что отвечает RPC_C_AUTHN_LEVEL_PKT_INTEGRITY и видимо Microsoft, ужесточила какую-то политику безопасности, я стал изучать вопрос дальше. Поиск ошибки DCOM ID 10036 привел меня ну обсуждение нового обновления KB5004442, которое как я выяснил и вызывает эту ситуацию.
KB5004442 призвана усилить защиту DCOM объектов. Удаленный протокол модели распределенных компонентов (DCOM) — это протокол для предоставления объектов приложений с помощью удаленных вызовов процедур (RPC). DCOM используется для связи между программными компонентами сетевых устройств. Многие из нас на самом деле не понимают этого, и мы не можем диагностировать ошибки DCOM в наших журналах событий, которые, по-видимому, не оказывают серьезного влияния на наши сети. Эта технология представляет собой протокол для предоставления объектов приложения с помощью удаленных вызовов процедур (RPC).
RPC являются ключевой частью Windows. RPC - это клиент-серверный протокол, который разработчики приложений могут использовать для вызова процедур на локальном или удаленном узле в сети. Детали подключения и сортировка данных выполняются за кулисами на уровне RPC, что дает разработчикам средства для прямого подключения клиентских приложений к удаленному компьютеру. Это позволяет разработчикам не беспокоиться о знании деталей того, как данные передаются между двумя машинами и как вызываются процедуры.
Согласно бюллетеню, злоумышленник сначала воспользуется уязвимостью, предложив клиенту DCOM каким-либо образом подключиться к специально созданному серверу, как правило, отправив пользователю фишинговое электронное письмо, чтобы завладеть системой. Затем злоумышленник использует эту информацию для доступа к серверу DCOM, а затем скомпрометирует его. Патч исправляет и усиливает аутентификацию, используемую между клиентами и серверами DCOM.
Я проверил RDSH хосты и действительно там прилетело данное обновление. Microsoft пока полностью не закрутило данную политику безопасности и ее еще можно обойти, но самое правильное, это доделать приложение, чтобы оно при обращении к серверу и запросе данных выполняло все требования вендора. На текущий момент есть вот такой график внедрения:
- 8 июня 2021 г. - Изменения защиты отключены по умолчанию, но с возможностью включить их с помощью ключа реестра.
- 14 июня 2022 г. - Защитные изменения включены по умолчанию, но с возможностью отключить их с помощью ключа реестра.
- 14 марта 2023 г. - Усиление изменений включено по умолчанию, отключить их невозможно. К этому моменту вы должны решить все проблемы совместимости с усиливающими изменениями и приложениями в вашей среде.
Так же помимо события ID 10036, есть еще два:
- %1 — путь к приложению
- %2 — PID приложения
- %3 — CLSID класса COM, который приложение запрашивает для активации
- %4 — имя компьютера
- %5 — значение уровня аутентификации
💡Как устранить ошибку ID 10036
Первое, что вы должны сделать, это установить все доступные обновления, как на стороне сервера, куда идет подключение, так и на стороне системы откуда идет подключение. Напоминаю, что последнего можно найти в тексте ошибки:
Тут IP-адрес откуда идет подключение 10.11.11.210, там и нужно установить все возможные обновления безопасности.
Как только я обновился, ошибка EOleException ушла и мой Terminal Services Manager успешно подключился к серверу.
Если по каким, то причинам ваше приложение не заработало, а вам нужно, то есть лазейка до 2023 года в виде ключа реестра, который вы должны добавить на сервере, куда вы пытаетесь производить подключение. Запустите реестр Windows и перейдите в раздел:
И создайте там ключ реестра с типом REG_DWORD (32-бита) с именем RequireIntegrityActivationAuthenticationLevel.
- RequireIntegrityActivationAuthenticationLevel = 0x00000000 выключает политику
- RequireIntegrityActivationAuthenticationLevel = 0x00000001 включает политику
Если и данный метод вам не помог, то как крайняя мера может быть, это удаление обновления. Посмотрите список установленных обновлений командой:
После чего просто прочитайте инструкцию, как это сделать. Надеюсь, что вам оказалась полезна данная статья, и вы устранили ошибку EOleException. Если остались вопросы, то пишите их в комментариях. С вами был Иван Сёмин, автор и создатель IT портала Pyatilistnik.org.
Дополнительные ссылки
- https://docs.microsoft.com/en-us/windows/win32/rpc/authentication-level-constants
- https://support.microsoft.com/en-us/topic/kb5004442-manage-changes-for-windows-dcom-server-security-feature-bypass-cve-2021-26414-f1400b52-c141-43d2-941e-37ed901c769c
- https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-26414
Очень помог! Спасибо.
Здравствуйте, а как решить проблему без обновлений?
А что вас смущает в обновлении системы?
Ну, как минимум, на стороне клиента может быть устройство не-windows…