Взлом сети через групповые политики Active Directory

Active Directory

Груп­повые полити­ки сто­ят далеко не на самом пер­вом мес­те в чек‑лис­те типовых уяз­вимос­тей Active Directory. Тем не менее, зло­упот­ребляя ими, ата­кующий смо­жет получить чрез­вычай­но выгод­ное положе­ние, зах­ватив сра­зу целый OU. В этой статье рассмотрим взлом сети Windows через групповые политики Active Directory.

Еще по теме: Создание стенда для атак на Active Directory

Взлом сети через групповые политики Active Directory

Поль­зователь vaska име­ет подоз­ритель­но высокие пра­ва на GPO с GUID {31B2F340-016D-11D2-945F-00C04FB984F9}. PowerView треть­ей вер­сии (он же PowerView DEV) не отста­ет от сво­его млад­шего соб­рата, но отли­чает­ся тем, что не уме­ет авто­мати­чес­ки пре­обра­зовы­вать SID в понят­ное для челове­ка имя поль­зовате­ля, поэто­му в конец каж­дого коман­дле­та добав­ляет­ся огромная стро­ка:

На­конец, мож­но исполь­зовать BloodHound:

Те­перь, обна­ружив полити­ки и воз­можный мис­конфиг в виде поль­зовате­ля vaska с подоз­ритель­ными при­виле­гиями, мож­но прис­тупать к получе­нию учет­ной записи это­го поль­зовате­ля. При­чем раз­ведка на этом не закан­чива­ется, мы можем обна­ружить объ­екты, которые име­ют пра­во соз­давать новые GPO в домене:

Что­бы най­ти все OU, на которые рас­простра­няет­ся полити­ка, вос­поль­зуем­ся вот таким скрип­том:

Взлом сети Active Directory

Те­перь поищем поль­зовате­лей, которые могут свя­зывать GPO с OU:

Эксплуатация

mmc

Кри­во нас­тро­енные пра­ва мож­но экс­плу­ати­ровать и с помощью стан­дар­тно­го при­ложе­ния mmc.exe, уста­нов­ленно­го на каж­дом компь­юте­ре c Windows. Сна­чала запус­каем это при­ложе­ние от лица поль­зовате­ля, име­юще­го пра­ва на какую‑либо полити­ку. Далее добав­ляем нуж­ную оснас­тку.

Взлом Active Directory

До­бав­ляем оснас­тку Group Policy Management, выбира­ем полити­ку и тог­да смо­жем ее редак­тировать.

Взлом сети Windows

Нап­ример, соз­дадим юзе­ра, зай­дя по сле­дующе­му пути:

А затем добавим его в груп­пу локаль­ных адми­нис­тра­торов:

Файл .ini

Этот спо­соб я под­смот­рел у Дмит­рия Неверо­ва, руково­дите­ля груп­пы ана­лиза защищен­ности внут­ренней инфраструк­туры в ком­пании «Рос­телеком‑Солар». Чаще все­го дос­тупа к гра­фичес­кому интерфей­су у нас не будет, поэто­му при­дет­ся либо исполь­зовать инс­тру­мен­ты, опи­сан­ные ниже, либо вруч­ную соз­давать спе­циаль­ный кон­фигура­цион­ный файл.

Нап­ример, если наша задача — выпол­нить скрипт на конеч­ных устрой­ствах, то сна­чала нуж­но соз­дать каталог \Machine\Scripts\Startup в кор­не GPO и помес­тить в него скрипт Test.ps1. Содер­жимое скрип­та может быть любым, абсо­лют­но любые коман­ды. Сле­дующим шагом в катало­ге \Machine\ в кор­не GPO пот­ребу­ется открыть файл psscripts.ini. Это скры­тый файл. Если фай­ла не сущес­тву­ет, его нуж­но соз­дать. Содер­жимое фай­ла будет таким:

Этот файл содер­жит ссыл­ку на скрипт, который нуж­но выпол­нить. Так­же при необ­ходимос­ти в нем про­писы­вают­ся парамет­ры выпол­нения (ког­да они есть). Если нуж­но запус­тить нес­коль­ко скрип­тов, пер­вый сим­вол в этом фай­ле будет инкре­мен­тировать­ся. Для скри­пов .bat исполь­зует­ся файл scripts.ini.

Пос­ле завер­шения под­готови­тель­ных дей­ствий оста­ется толь­ко изме­нить атри­бут gpcmachineextensionnames с помощью PowerView:

Зна­чения 42B5FAAE-6536-11D2-AE5A-0000F87571E3 и 40B6664F-4972-11D1-A7CA-0000F87571E3 докумен­тирова­ны как ProcessScriptsGroupPolicy и Scripts (Startup/Shutdown). Исполь­зуя их в GPO, мы соз­даем воз­можность выпол­нения скрип­та при при­мене­нии груп­повой полити­ки.

При­чем если атри­бут gpcmachineextensionnames уже содер­жит дру­гие записи, то их тоже нуж­но внес­ти в коман­ду. Так­же сто­ит изме­нить параметр Version в фай­ле GPT.ini на еди­ницу. Теперь пос­ле перезаг­рузки компь­юте­ра скрипт Test.ps1 будет выпол­нен. По умол­чанию задер­жка на выпол­нение скрип­тов сос­тавля­ет пять минут.

По­доб­ным обра­зом мож­но добав­лять локаль­ных адми­нис­тра­торов на компь­юте­ре. Сна­чала соз­даем файл GptTmpl.inf по пути \Machine\Microsoft\Windows NT\SecEdit (иног­да эти катало­ги отсутс­тву­ют и их при­дет­ся соз­дать). Содер­жимое фай­ла будет сле­дующим:

Здесь к локаль­ной груп­пе локаль­ных адми­нис­тра­торов (S-1-5-32-544) добав­ляет­ся SID домен­ного поль­зовате­ля (S-1-5-21-2722789902-3858190539-1593706810-1119). При добав­лении поль­зовате­ля в груп­пу локаль­ных адми­нис­тра­торов необ­ходимо учи­тывать порядок при­мене­ния GPO. Наши дей­ствия могут при­вес­ти к тому, что легитим­ные локаль­ные адми­нис­тра­торы будут уда­лены из груп­пы локаль­ных адми­нис­тра­торов, поэто­му сто­ит добавить и их SID в файл GptTmpl.inf через запятую.

Сле­дующий шаг зак­люча­ется в изме­нении атри­бута gpcmachineextensionnames, эту задачу мож­но выпол­нить с помощью PowerView:

827D319E-6EAC-11D2-A4EA-00C04F79F83A име­ет зна­чение Security, а 803E14A0-B4FB-11D0-A0D0-00A0C90F574B — Computer Restricted Groups. При­меняя их к GPO, мы можем изме­нять спис­ки учас­тни­ков локаль­ных групп.

Пом­ни: если атри­буты gpcuserextensionnames и gpcmachineextensionnames уже содер­жат дру­гие записи, их так­же нуж­но внес­ти в нашу коман­ду PowerView. Наконец, не забудь изме­нить параметр Version в фай­ле GPT.ini на еди­ницу.

Создание GPO

Ес­ли на эта­пе раз­ведки получи­лось обна­ружить поль­зовате­ля, который име­ет пра­во соз­давать GPO и свя­зывать ее с OU, то это так­же может помочь при экс­плу­ата­ции. PowerView не име­ет воз­можнос­ти соз­давать GPO, поэто­му сле­дует исполь­зовать RSAT. Уста­нов­ка этой ути­литы не пред­став­ляет никаких слож­ностей:

Взломать сеть Active Directory

За­водим новую GPO:

Взломать групповые политики

Свя­зыва­ем с OU:

Взлом групповые политики

Пос­ле успешно­го свя­зыва­ния мож­но либо вруч­ную изме­нять соз­данную GPO, как было показа­но выше, либо исполь­зовать для это­го под­ходящие инс­тру­мен­ты, нап­ример SharpGPOAbuse или pyGPOAbuse.

Ког­да работы завер­шатся, GPO будет отвя­зана от OU:

И уда­лена:

Перемещение через GPO

Нич­то не меша­ет нам исполь­зовать GPO как средс­тво боково­го переме­щения. Опять же ста­вим RSAT:

И изме­няем соз­данную полити­ку, добав­ляя в реестр (в ключ авто­заг­рузки) наш пей­лоад:

Ес­ли уста­новить RSAT нет воз­можнос­ти, то мож­но импорти­ровать PowerShell-скрипт, который поз­воля­ет соз­дать зап­ланиро­ван­ную задачу:

Заключение

Самое глав­ное — не забывай, что изме­нения при­меня­ются далеко не сра­зу. Компь­юте­рам нуж­но вре­мя для син­хро­низа­ции. Если ждать нет воз­можнос­ти, исполь­зуй коман­ду gpupdate /force.

Дима (Kozhuh)

Эксперт в кибербезопасности. Работал в ведущих компаниях занимающихся аналитикой компьютерных угроз. Анонсы новых статей в Телеграме.

Добавить комментарий