AppLocker и CRL


Проверка списков отзыва сертификатов (CRL) полезная вещь позволяющая нам избежать взаимодействия с системами, у которых скомпрометирован сертификат.

Со временем политика использования сертификатов на Windows системах ужесточается. Мы все ощутили это в то время, когда RDP клиент на Windows 7 начал делать жесткие проверки сертификатов. Многие инфраструктуры пришлось тогда подчистить и подправить, чтобы пользователи не испытывали проблем с подключениями к удаленным рабочим столам.

Проверки CRL также могут вызывать проблемы — в виде задержек. Это уже было в нашем опыте с Sharepoint и Exchange серверами. Собственно это все тот же CAPI.

На днях выяснилось, что этой проблеме подвержен AppLocker. Оказывается, даже если он выключен, он всё равно работает где-то в недрах системы, пытается что-то проверять и даже провоцирует проверки сертификатов и CRL. А уж если он включен, и настроены правила Publisher, то и подавно.

Это имеет один неожиданный побочный эффект. Собственно так это и было обнаружено. Суть в том, что PowerShell имеет встроенную поддержку AppLocker, т.е. делает специальные вызовы API, чтобы проверить можно ли запускать тот или иной скрипт. Побочный эффект в том, что из-за проверок CRL в AppLocker PowerShell может работать медленнее: задержка запуска, задержки при загрузке модулей, задержки при выполнении скриптов.

Надо отметить, что эта проблема чаще всего возникает в изолированных сетях. Но иной раз и в сетях, которые просто неправильно сконфигурированы (фаервол и, особенно, DNS).

Неправильно сконфигурированные сети надо лечить.

Рекомендация для изолированных сетей простая: групповыми политиками уменьшить тайм-аут проверки CRL.

Ссылки:

Рекомендация отсюда

Обсуждение PowerShell

Remote Desktop 2019 — профили и миграция. Часть 2


Как я уже упоминал (Remote Desktop 2019 — профили и миграция), обновление терминального сервера с множеством профилей это не рабочий вариант. Процесс обновления сервера с более чем 2000 профелей тянулся целый месяц. Затем рухнул. Откат прошёл криво. Сервер переустановлен. Вот такой результат эксперимента.

Рабочий вариант это использовать перенаправление папок. Перед началом миграции все профили с сервера удаляются. После миграции пользователь получает новый профиль и прежние перенаправленные папки со своей информацией.

Remote Desktop 2019 — профили и миграция


В начале февраля выбрал для пробы один узел терминальной фермы на Windows Server 2012 R2 и запустил обновление до Windows Server 2019. Февраль на исходе, я в отпуске, катюсь на горных лыжах, а миграция всё ещё идёт: на ферме всего навсего пара тысяч с хвостиком профилей.

В общем, это совсем не рабочий сценарий.

Единственный вариант ускорить процесс это удалить все профили перед миграцией. Это можно сделать простым скриптом, который использует WMI Win32_UserProfile. После обновления профилей миграция пролетит быстро.

Что если профили содержат важную информацию и вам нужно всё же перенести её в новые профили? Тут вам придётся разработать план работ, который отражает вашу конкретную конфигурацию. Ничего универсального не существует (если только что-то коммерческое).

Если у вас терминальная ферма и профили лежат на шаре, то удаление вышеупомянутым скриптом затронет только локальные копии, на шаре информация сохранится.

Если профили только локальные (один сервер), то придется сделать их копию.

Если у вас была настроена переадресация папок профиля спомощью групповых политик, то после создания новых профилей переадресация восстановится, и пользователи увидят свои файлы. Это удобно для упрощения миграции.

Если вы используете персональные виртуальные диски для профилей пользователей терминальной фермы, то опять у вас много забот, и нужен специальный план.

Кстати, профили теперь имеют суффикс V6. Да, Windows 10 начала с V5, а теперь уже V6. Какая-то бесконечная миграция профилей.

Подробная история профилей Windows https://www.ivanti.com/blog/a-brief-history-of-windows-profiles

Официальная статья на эту тему https://support.microsoft.com/en-us/help/3056198/roaming-user-profiles-versioning-in-windows-10-and-windows-server

Remote Desktop 2019 – Проблема с перемещаемыми профилями


После обновления терминальной фермы до версии 2019 появилась небольшая, но неприятная проблема синхронизации профилей.

Как это проявляется:

— при завершении сеанса пользователи стали получать сообщение, что их профиль не до конца синхронизирован

— в логах появились сообщения User Profile General с номером Event Id 1509 и Winlogon с номером Event Id 6001

Windows cannot copy file \\?\C:\Users\user\AppData\Roaming\Microsoft\Search\Data\Applications\S-1-5-21-538639244-1736677612-1463291260-1131 to location \\?\UNC\domain\share\user.BIS.V6\AppData\Roaming\Microsoft\Search\Data\Applications\S-1-5-21-538639244-1736776612-1463291260-1131. This error may be caused by network problems or insufficient security rights.

 DETAIL — Access is denied.

Причина

Причина в том, что на серверах версии Windows Server 2012 R2 нет предустановленного сервиса Windows Search (если он нужен, то необходимо установить эту дополнительную компоненту), а с версии Windows Server 2016 этот сервис установлен. Только на 2016 он по умолчанию выключен, а на 2019 он включен. После обновления до 2019 мы внезапно получаем запущенный Windows Search сервис. Этот сервис создает в профиле пользователя индексные файлы и не закрывает их, когда пользователь закрывает сеанс, и, более того, ставит на них особые права доступа, в результате эти индексные файлы не могут быть скопированы на шару во время синхронизации профиля.

Лечение

  1. Выключить сервис Windows Search групповой политикой.
    1. Если ферма новая, то этого достаточно, т.к. профили пользователей не будут содержать индексных файлов.
    2. Если профили уже созданы, то они содержат индексные файлы и проблема остается – нужно создавать политику/скрипт удаления этих паразитных файлов.
  2. Настроить исключения (рекомендую)
    1. Выключение сервиса Windows Search может быть неудобно, если пользователи используют меню Старт и некоторые программы, которые требуют запущенного Windows Search. Если ферма используется для работы с Office и другими офисными программами, то Windows Search становится критически необходимым для удобной работы пользователей.
    2. Поэтому с помощью групповой политики настраиваем исключения папок, которые не должны копироваться при синхронизации профилей с шарой: User Configuration – Administrative Templates – System – User Profiles Prevent the following directories from roaming with the profile. Указываем AppData\Roaming\Microsoft\Search и применяем политику.
    3. После применения групповой политики она действует сразу без перезагрузки.

Remote Desktop – миграция на Windows Server 2019


  1. В документации как-то двусмысленно написано про обновление брокеров в конфигурации active-active: в одном месте – исключите из развертывания все брокеры кроме одного, в другом – обновляйте офлайн. Обновили так: у одного выключили сеть и обновили офлайн (включили только после завершения обновления второго брокера), второго обновили онлайн (с подключенной сетью) – никаких манипуляций с конфигурацией развертывания не делали.
  2. После обновления выяснилоcь, что сервис Remote Desktop сыпется и перезапускается со страшной скоростью. Это какая-то бага. Проблема провоцируется подключением к серверу брокера по RDP. Обходной путь: запретить через GPO протокол UPD в Remote Desktop Host на брокерах. После этого сервис перестал падать при подключении с Windows 10 (хотя вроде падает при подключении с Windows 7). Проблема отслеживается на форуме Technet.

Полезные ссылки (для 2016, но актуальны):

  1. https://blogs.technet.microsoft.com/tip_of_the_day/2017/01/30/rds-tip-of-the-day-upgrading-your-remote-desktop-services-deployments-to-windows-server-2016/
  2. https://docs.microsoft.com/en-us/windows-server/remote/remote-desktop-services/upgrade-to-rds

PS:

Ошибка падения сервиса:

Log Name:      Application
Source:        Application Error
Date:          04.02.2019 9:48:10
Event ID:      1000
Task Category: (100)
Level:         Error
Keywords:      Classic
User:          N/A
Computer:      rdcb1.bis.bashtel.ru
Description:
Faulting application name: svchost.exe_TermService, version: 10.0.17763.1, time stamp: 0xb900eeff
Faulting module name: ntdll.dll, version: 10.0.17763.1, time stamp: 0xa369e897
Exception code: 0xc0000374
Fault offset: 0x00000000000fb349
Faulting process id: 0x1a64
Faulting application start time: 0x01d4bc421689ed0b
Faulting application path: C:\WINDOWS\System32\svchost.exe
Faulting module path: C:\WINDOWS\SYSTEM32\ntdll.dll
Report Id: 3dd20b15-d2e1-48b5-ab57-cf1cb821eb1b
Faulting package full name: 
Faulting package-relative application ID: 
Event Xml:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Application Error" />
    <EventID Qualifiers="0">1000</EventID>
    <Level>2</Level>
    <Task>100</Task>
    <Keywords>0x80000000000000</Keywords>
    <TimeCreated SystemTime="2019-02-04T04:48:10.524513800Z" />
    <EventRecordID>3268</EventRecordID>
    <Channel>Application</Channel>
    <Computer>rdcb1.bis.bashtel.ru</Computer>
    <Security />
  </System>
  <EventData>
    <Data>svchost.exe_TermService</Data>
    <Data>10.0.17763.1</Data>
    <Data>b900eeff</Data>
    <Data>ntdll.dll</Data>
    <Data>10.0.17763.1</Data>
    <Data>a369e897</Data>
    <Data>c0000374</Data>
    <Data>00000000000fb349</Data>
    <Data>1a64</Data>
    <Data>01d4bc421689ed0b</Data>
    <Data>C:\WINDOWS\System32\svchost.exe</Data>
    <Data>C:\WINDOWS\SYSTEM32\ntdll.dll</Data>
    <Data>3dd20b15-d2e1-48b5-ab57-cf1cb821eb1b</Data>
    <Data>
    </Data>
    <Data>
    </Data>
  </EventData>
</Event>

Log Name:      Application
Source:        Application Error
Date:          04.02.2019 9:21:40
Event ID:      1000
Task Category: (100)
Level:         Error
Keywords:      Classic
User:          N/A
Computer:      rdcb1.bis.bashtel.ru
Description:
Faulting application name: svchost.exe_TermService, version: 10.0.17763.1, time stamp: 0xb900eeff
Faulting module name: RDPBASE.dll, version: 10.0.17763.1, time stamp: 0x2e058d64
Exception code: 0xc0000005
Fault offset: 0x00000000000de496
Faulting process id: 0xf04
Faulting application start time: 0x01d4bc40fa908148
Faulting application path: C:\WINDOWS\System32\svchost.exe
Faulting module path: C:\WINDOWS\system32\RDPBASE.dll
Report Id: 045e21ce-373b-402e-bad2-aca8a3af462d
Faulting package full name: 
Faulting package-relative application ID: 
Event Xml:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Application Error" />
    <EventID Qualifiers="0">1000</EventID>
    <Level>2</Level>
    <Task>100</Task>
    <Keywords>0x80000000000000</Keywords>
    <TimeCreated SystemTime="2019-02-04T04:21:40.086665100Z" />
    <EventRecordID>2864</EventRecordID>
    <Channel>Application</Channel>
    <Computer>rdcb1.bis.bashtel.ru</Computer>
    <Security />
  </System>
  <EventData>
    <Data>svchost.exe_TermService</Data>
    <Data>10.0.17763.1</Data>
    <Data>b900eeff</Data>
    <Data>RDPBASE.dll</Data>
    <Data>10.0.17763.1</Data>
    <Data>2e058d64</Data>
    <Data>c0000005</Data>
    <Data>00000000000de496</Data>
    <Data>f04</Data>
    <Data>01d4bc40fa908148</Data>
    <Data>C:\WINDOWS\System32\svchost.exe</Data>
    <Data>C:\WINDOWS\system32\RDPBASE.dll</Data>
    <Data>045e21ce-373b-402e-bad2-aca8a3af462d</Data>
    <Data>
    </Data>
    <Data>
    </Data>
  </EventData>
</Event>

Built-in OverUsed и остальное про лиценции Remote Desktop


Описано подробно в статье.

Собственно Built-in Overused напоминалка, что у вас есть пользователи, которые подключаются к серверам более низкой версии, чем версия установленных лицензий, и возможно вам нужно установить лиценции для серверов более низкой версии, хотя это необязательно.

Remote Desktop — медленное подключение


В Windows Server 2012 и Windows Server 2012 R2 есть небольшая, но неприятная, проблема, когда при подключении по RDP вы видите черный экран некоторое время, а в логе появляется событие Event ID 20499 «Remote Desktop Services has taken too long to load the user configuration from server …».

Лечение описано в статье https://support.microsoft.com/en-us/help/4021856/sbsl-issue-when-you-create-an-rdp-connection-to-windows-server . Собственно нужно добавить в реестр ключ fQueryUserConfigFromLocalMachine со значением 1.

В Windows Server 2016/2019 проблема уже исправлена, и ключ в реестр добавлять не нужно.