
Скрипт PowerShell, помогающий находить уязвимые настройки в групповых политиках AD. (устарел, используйте Grouper2 вместо него!)
НЕ ИСПОЛЬЗУЙТЕ GROUPER БОЛЬШЕ. ИСПОЛЬЗУЙТЕ GROUPER2! https://github.com/l0ss/Grouper2
Скрипт PowerShell для поиска уязвимых настроек в групповых политиках Active Directory.

Grouper — это модуль PowerShell, предназначенный для пентестеров и редтимеров (хотя, вероятно, также полезен для сисадминов). Он просеивает (обычно очень шумный) XML-вывод командлета Get-GPOReport (часть модуля групповых политик Microsoft) и выявляет все настройки, определённые в объектах групповой политики (GPO), которые могут оказаться полезными для того, кто пытается сделать что-то весёлое/зловредное.
Примеры того, что он находит в GPO:
Да, это довольно грубо, но это экономит мне огромное количество времени, которое я тратил на чтение тех ужасных 150-мегабайтных HTML-отчётов GPO, и если это работает для меня, может сработать и для вас.
Примечание: Хотя некоторые имена функций могут содержать слово «audit», Groper НЕ предназначен для исчерпывающего аудита на соответствие лучшим практикам и т.д. Если вам нужно это, используйте Microsoft SCT и LGPO.exe или что-то подобное.
Создайте отчёт GPO на машине Windows с установленными командлетами групповых политик. Они установлены на контроллерах домена по умолчанию, могут быть установлены на клиентах Windows через RSAT или включены через мастер «Добавление компонентов» на серверах Windows.
Get-GPOReport -All -ReportType xml -Path C:\temp\gporeport.xml
Импортируйте модуль Grouper.
Import-Module .\grouper.psm1
Запустите Grouper.
Invoke-AuditGPOReport -Path C:\temp\gporeport.xml
Также есть несколько параметров, которые можно менять, чтобы изменить, какие настройки политик будет показывать Grouper:
-showDisabled
По умолчанию Grouper показывает только GPO, которые в данный момент включены и привязаны к подразделению в AD. Этот параметр переключает это поведение.
-Online
По умолчанию Grouper работает только с фактическим XML-выводом из Get-GPOReport и не выполняет никаких сетевых взаимодействий, что делает его довольно «безопасным с точки зрения OPSEC», хотя я ненавижу этот термин.
Если запустить его с параметром -Online, Grouper включит проверки, требующие связи (как минимум) с доменом AD, из которого был создан отчёт, но, вероятно, также потребуется связь с, например, файловыми серверами. Это позволит Grouper выполнять полезные действия, такие как отчёт о ACL для файлов, на которые ссылаются GPO, и проверка, может ли текущий пользователь записывать в этот файл.
-Level
Grouper имеет 3 уровня фильтрации, которые можно применить к его выводу.
Использование простое. -Level 3, -Level 2 и т.д.
Get-GPOReport отлично работает на машинах, не входящих в домен, через runas /netonly. Вам понадобятся учётные данные с низкими привилегиями, но это ожидаемо.
Сделайте так:
runas /netonly /user:domain\user powershell.exe
на машине, не входящей в домен, но имеющей связь с контроллером домена.
Затем в полученном сеансе PowerShell сделайте так:
Get-GpoReport -Domain example.com -All -ReportType xml -Path C:\temp\gporeport.xml
Легко.
Для работы Grouper нужен только PowerShell 2.0 и xml-файл, выводимый из Get-GPOReport. Вы можете запустить его на виртуальной машине без сетевой карты, если беспокоитесь, и он всё равно будет работать.
Тем не менее, это довольно простой код, поэтому не составит труда убедиться, что он не делает ничего подозрительного.
Короткий ответ: Ага.
Длинный ответ: Да, сделать что-то из этого было бы лучше, но есть пара вещей, которые пока мешают мне это сделать.
В идеале я хотел бы разбирать файлы политик прямо из SYSVOL, но они хранятся в множестве разных форматов, некоторые из них проприетарные, их очень трудно читать, и у меня нет ни времени, ни желания писать с нуля наборы парсеров для них, когда Microsoft уже предоставляет командлеты, которые отлично справляются с этой задачей.
В не столь отдалённом будущем я хотел бы встроить Get-GPOReport от Microsoft в Grouper, чтобы вам вообще не понадобился RSAT, но нужно выяснить, не будет ли это нарушением авторских прав. Также нужно разобраться, как реализовать то, что я только что сказал.
Grouper — это не сканер уязвимостей. Grouper просто фильтрует огромное количество мусора и шума в отчётах групповых политик, показывая только те настройки, которые МОГУТ быть сконфигурированы эксплуатируемым образом.
Насколько это возможно, я работаю над каждой категорией проверок, добавляя дополнительную фильтрацию для удаления очевидно не уязвимых конфигураций и ещё больше снижая уровень шума, но групповые политики чрезвычайно гибки, и довольно трудно предугадать каждую возможную ошибку администратора.
Отлично, вы только что нашли способ улучшить Grouper! Прокрутите вниз, и вы увидите небольшое руководство по добавлению новых проверок в Grouper.
Я прикрою тебя, парень. В репозитории есть файл test_report.xml, с которым можно попробовать. Он содержит кучу плохих настроек, так что вы сможете увидеть, как это выглядит.
Вам нужно будет запустить его с флагом -showDisabled, потому что в нём так много действительно ужасных конфигураций, что я даже не стал включать этот GPO в лабораторной среде.
ОК.