Введение

В очередной Patch Tuesday, Microsoft выпустила исправление, чтобы предотвратить атаку "человек посередине", когда GPO скачиваются с контроллеров домена клиентами.

Отлично звучит! Но, на самом деле, есть нюанс. :) Исправление это меняет обработку в поведении GPO. Ничего особо ужасного здесь нет, но некоторые объекты групповых политик могут перестать применяться. Именно об этом мы и поговорим.

Вернуться к началу


Как воспроизвести поведение

  1. Обновление MS16-072 установлено на клиентах

  2. Администратор удалил группу Authenticated Users из фильтра безопасности
  3. Администратор добавил выделенную группу безопасности в фильтр

   Примечание:  Учетная запись компьютера не имеет прав Чтение на объекте групповой политики

Вернуться к началу


Поведение по умолчанию

Все пользовательские разделы GPO выполняются, поскольку пользователь имеет право читать и применять политику, даже если у компьютера нет права чтения на конкретном объекте.

Измененное поведение, которое приносит элемент "неожиданности".

Все пользовательские разделы не выполняются (если уз компьютера не имеет права чтения объекта)

Почему так происходит? Ответ из статьи базы знаний "Before MS16-072 is installed, user group policies were retrieved by using the user’s security context. After MS16-072 is installed, user group policies are retrieved by using the machines security context"

Итак, большие перемены пришли: для обработки пользовательских разделов политики, Компьютеру нужны права чтения. И если вы удалите группу AUTHENTICATED USERS из GPO, компьютер не сможет больше прочитать его, и соответственно, GPO не применится должным образом.

Вернуться к началу


Исправления

Вы можете вручную обновить каждый объект политик чтобы восстановить их работу после обновления, и для этого есть два пути:
  •  #1: Просто добавить группу Domain Computers в фильтр безопасности
  •  #2: Добавить группу Domain Computers “неявно”, используя вкладку "Delegation" |

Для автоматического исправления можно воспользоваться oneliner'ом

Get-GPO -All | Set-GPPermissions -TargetType Group -TargetName "Domain computers" -PermissionLevel GpoRead

Какой способ лучше?

Достоинства и недостатки:

Способ 1:

Когда вы добавляете группу Domain Computers напрямую в фильтр безопасности, вы можете сразу же визуально считывать ситуацию

Способ 2:

Если вы используете вкладку "Делегирование", то не получаете 2наглядной" картины происходящего. Пока вы снова ее не откроете, не сможете увидеть, должны ли применяться объекты политик или же нет.

Заметьте также, что второй способ не работает с SBS 2008 или SBS 2011.

Хорошо, я исправил все свои GPO, которые у меня были, что дальше?

Вернуться к началу


Изменение схемы - Group-Policy-Container

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

Для этого:

  1. Откроем ADSI Edit
  2. Подключимся к конексту schema 
  3. Найдем объект “CN = Group-Policy-Container” 
  4. И откроем его атрибут defaultSecurityDescriptor и добавим следуещее значение в конец:  (A;CI;LCRPLORC;;;DC)

Screenshot_15

"DC" здесь “Domain Computers” а не не “Domain Controllers”, как многие подумали. Контроллеры домена сокращенно будут “ED”, поскольку входят в группу “Enterprise Domain Controllers”.

5. Примените изменения, закройте все консоли и откройте заново. У новых созданных GPO должно появиться право чтения.

Screenshot_16

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

Если это кажется очень страшным, то есть всегда добрый друг Powershell!

Давайте попробуем сделать тоже самое с его помощью. Запуск скрипта для изменения GPO без параметров выведет отчет о текущем состоянии:

Screenshot_17

Как поменять поведение по умолчанию для компьютеров?

Без глубогого погружения в Security Descriptor Definition Language (SDDL), рассмотрим разрешения, которые нам нужно добавить для следующих 6 полей:

Тип ACE:

  • A = Access Allowed

Флаги ACE:

  • CI = Container Inherit

Разрешения:

  • LC = List Contents
  • RP = Read All Properties
  • LO = List Object
  • RC = Read Permissions

Тип объекта:

  • (здесь у нас пустое поле)

Унаследованный тип объекта:

  • (и здесь тоже)

Trustee:

Выполним скрипт с параметром -Action и проверим, что битовая маска изменена:

Screenshot_18

Вернуться к началу


Другие ресурсы

Вернуться к началу