• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья BloodHound

BabaDook

(L1) cache
Забанен
Регистрация
20.04.2015
Сообщения
734
Реакции
524
Пожалуйста, обратите внимание, что пользователь заблокирован
Automated Derivative Administrator Search


Intro

Эскалация домена Active Directory является важной частью большинства пентестеров. Хотя получение прав администратора домена / предприятия не является конечной целью оценки, это часто делает достижение целей тестирования намного проще.
Типичный процесс эскалации домена вращается вокруг возможности собирать простые учетные данные или токены пользователей, зарегистрированных в системах, которые у вас есть, и могут привести к повышенные привилегий, - способность, наиболее известная для mimikatz. Найдите администратора домена, зарегистрированного в системе, на которой у вас есть права администратора, с помощью этой системы и получения учетных данных администратора.
Но что, если вы находитесь в более сложной ситуации, когда у вас сразу нет прав администратора в системе, где находится администратор домена? Вы можете быть одном, двух, трёх или более шагах от возможности компрометации администратора домена, и вам нужно будет сделать довольно небольшой анализа (или просто методом проб и ошибок), чтобы найти вектор.
Давайте посмотрим на гипотетическую ситуацию: мы получили права пользователя на уровне домена в среде с сотнями тысяч рабочих станций серверов, подключенных к лесу Active Directory с несколькими доменами с разным доверием. Наша цель состояла в том, чтобы повысить наши права до Администратора предприятия. К счастью, топология сети была практически плоской; Тем не менее, клиент применял чрезвычайно строгие методы с наименьшими привилегиями. После борьбы, чтобы найти средство для повышения наших прав, мы, наконец, смогли скомпрометировать учетную запись администратора сервера, которую мы будем называть «Steve-Admin».

«Steve-Admin» был локальным администратором на серверах, в которых он должен был быть администратором, и нигде больше. Мы возьмем этот список серверов и узнаем, какие пользователи были зарегистрированы на этих серверах. Однако в этот момент нам нужно было решить, с какими пользователями мы будем работать идти. Ни один из зарегистрированных пользователей, с которыми мы могли бы что-то сделать не были администраторами в блоках, где были зарегистрированы Domain Admins. Нам нужно было выбрать учетную запись, найти системы, на которых были права администратора, перечислить пользователей на этих машинах и продолжить, пока мы не найдем путь, который сработал. В среде с сотнями тысяч компьютеров и пользователей этот процесс может занять несколько дней или даже недель.
В этом посте я объясню и продемонстрирую доказательство концепции автоматизации этого процесса.

Предварительная работа
Это доказательство концепции в значительной степени зависит от существующих инструментов и концепций, любезно предоставленных публикой некоторыми очень умными, очень трудолюбивыми людьми:

Теория графов
Представьте себе, что вместо того, чтобы искать путь от «Steve-Admin» до Enterprise Admin, мы пытались найти путь из Сиэтла, штат Вашингтон, в Портленд, штат Орегон. Как человек, вы можете взглянуть на карту и довольно легко определить, что Interstate 5 доставит вас туда. Компьютер может найти путь между Сиэтлом и Портлендом (и между «Steve-Admin» и Enterprise Admin, если таковой существует)

PowerView
может предоставить нам большую часть данных, необходимых для автоматизации процесса поиска пути от «Steve-Admin» до Enterprise Admin. Остальное приходит из области теории графов

  • Вершины(Vertices) . Вершина (или узел) - это точка, используемая для представления отдельного элемента представляемой системы. Вы можете думать о городах на карте как о вершинах.
  • Края(Edges ) - ребро используется для соединения вершин. Края могут быть направлены (то есть: в одну сторону) или неориентированы (то есть: двунаправленные). Края в общем случае представляют собой взаимосвязь. Если Сиэтл и Портленд можно рассматривать как вершины, I-5 можно рассматривать как двунаправленный край, соединяющий эти города.
  • Путь(Path ) - путь - это набор ребер и узлов, соединяющих один узел с другим, являются ли эти узлы смежными или нет.
  • Adjacency - Вершины, которые разделяют ребро, говорят, что они смежны.

Графический дизайн
Доказательство концепции, которую я придумал для этой проблемы, было разработано с одной целью - автоматизировать процесс поиска кратчайшего пути к компрометации администратора домена, не записывая ничего на диск или не требуя автономного анализа. Таким образом, дизайн этого графика может оказаться неприемлемым для других
  • Каждый пользователь и компьютер являются вершинами.
  • Все ребра направлены и невзвешены.
  • Ориентированный край от пользователя к компьютеру указывает права локального администратора.
  • Ориентированный край от компьютера к пользователю указывает зарегистрированного пользователя.
Представьте себе очень базовую сеть, состоящую из двух компьютеров и двух пользователей. У учетной записи «Администратор» есть права администратора на обе системы. В одной из этих систем существует пользователь «mnelson». Визуальное представление этой системы, используя описанную выше конструкцию, будет выглядеть так:

Screen-Shot-2016-02-06-at-3.46.00-PM.png


Каждый пользователь и компьютер являются вершинами. Оранжевые цвета говорят нам, что учетная запись администратора имеет права администратора на две системы. Синеватый край говорит нам, что «mnelson» зарегистрирован на HR-WS-002. В этом дизайне ребро всегда означает, что исходная вершина может скомпрометировать целевую вершину. Администратор может скомпрометировать HR-WS-002, а HR-WS-002 (т.е.: учетная запись SYSTEM на этом компьютере) может скомпрометировать mnelson.

Создание графика
Найти вершины для нашего графика не могло быть проще. Поскольку мы рассматриваем каждого пользователя и компьютер как узел, это так же просто, как использование двух командлетов
PowerView - Get-NetUser и Get-NetComputer :

Screen-Shot-2016-02-14-at-10.46.31-PM-1.png


Визуальное представление графика в этот момент может выглядеть так:

Screen-Shot-2016-02-07-at-9.32.23-PM.png


При подготовке к выполнению Алгоритма Дейкстры мы даем каждой вершине следующие свойства:

  • Имя - имя вершины. Пример: «mnelson» или «HR-WS-002»
  • Ребра - Массив вершин эта вершина имеет преимущество в. Первоначально установлено значение $ Null.
  • Расстояние - количество переходов, необходимых для получения из исходной вершины в эту вершину. Первоначально установлено значение Infinity. Обратите внимание, что это невзвешенный график.
  • Посещение - Определено ли кратчайшее расстояние до этого узла. Первоначально установлено значение $ False.
  • Предшественник - имя предыдущей вершины в пути от исходной вершины к этой вершине. Первоначально установлено значение $ Null.
Screen-Shot-2016-02-14-at-10.48.05-PM.png


Идентификация краев каждой вершины несколько больше. Опять же, мы можем использовать командлет PowerView - на этот раз это Get-NetSession . Этот командлет возвращает информацию о сеансе для каждого компьютера, на котором мы запускаем его, что позволяет нам видеть, что у пользователей есть сеансы на этом компьютере и откуда происходит этот сеанс, что позволяет нам определять, что пользователи регистрируют, где все - без лишних прав. Используя эту информацию, мы можем заполнить вершины компьютеров ребрами для зарегистрированных пользователей. Далее, для каждого компьютера у нас есть информация для входа в систему для пользователей, мы рекурсивно перечислим пользователей локального администратора на этом компьютере. Эта информация позволяет нам заполнить соответствующие пользовательские вершины ребрами с указанием прав локального администратора на этом компьютере.

Screen-Shot-2016-02-14-at-10.51.55-PM.png


В моей тестовой лаборатории завершенный график со всеми краями можно визуально представить следующим образом:

Screen-Shot-2016-02-06-at-5.48.56-PM.png


Напомним, что user -> computer обозначает права администратора, а край computer -> user - зарегистрированный пользователь.

Очевидно, что учетная запись «Администратор» является администратором каждого из трех компьютеров. Пользователь «mnelson» является администратором OPS-WS-002. Пользователь jwarner является администратором на IT-SRV-002.

HR-WS-002 имеет одного пользователя, которого вы вошли в систему: mnelson. OPS-WS-002, один пользователь: jwarner. Наконец, IT-SRV-002 с тремя зарегистрированными пользователями: rwinchester, jfrank и Administrator. Пользователь jdimmock не является ни администратором, ни зарегистрирован нигде (он, вероятно, на PTO).

Теперь у нас есть все необходимое, чтобы найти кратчайший путь от любой вершины к любой другой.

Вспомните сценарий, который я изложил ранее. Из «Steve-Admin» у нас есть десятки компьютеров и пользователей для таргетинга, ни одна из которых не дает нам немедленного доступа к учетной записи администратора домена. Вместо того, чтобы проводить часы, дни или даже недели, анализируя каждый вариант (или, что еще хуже: используя наши варианты в методологии проб и ошибок), мы можем использовать алгоритм, чтобы найти этот путь для нас за считанные минуты.

Алгоритм Дейкстры
  1. Определите исходную вершину. Установите его расстояние до 0. Установите расстояние каждой другой вершины до бесконечности.
  2. Определите невидимую вершину с наименьшим значением расстояния и отметьте ее как Текущую вершину.
  3. Рассмотрим ребра текущей вершины. Для каждой вершины, прилегающей к текущей вершине, сравните ее расстояние с расстоянием Текущая вершина плюс один - обновите расстояние соседней вершины, если это вычисленное расстояние ниже текущего значения и обновите значение предшествующего предшественника соседнего имени Текущая вершина.
  4. Перейдите к шагу 2 до тех пор, пока не будут посещены все вершины.
Screen-Shot-2016-02-15-at-1.54.32-PM.png


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

  1. Возьмите имя целевой вершины и добавьте ее в наш массив путей.
  2. Возьмите последнюю добавленную вершину в массиве путей и найдите ее предшественницу. Добавьте предшественника в массив путей.
  3. Повторяйте, пока не будет предшественников. В этот момент мы достигли нашей исходной вершины.
Screen-Shot-2016-02-14-at-10.54.27-PM.png




Вывод и доказательство концепции
Мы едва затронули поверхность того, что здесь возможно. Есть некоторые очень интересные возможности применения теории графов к атакам и защите Active Directory (ознакомьтесь с этой замечательной записью от Brandon Helms aka cr0n1c: https://cr0n1c.wordpress.com/2016/01/27/use-sccm-to-violate-best-practices/). Например, изменив направление каждого края на этом графе и используя права администратора, чтобы получить больше данных.
В пользовательских данных, мы могли бы указать пользователя «Администратор» в качестве источника и определить с одной итерацией Алгоритма Дейкстры все учетные записи в AD, которые могут поставить под угрозу учетную запись «Администратор».
Здесь вы можете найти доказательство сценария:
https://github.com/andyrobbins/PowerPath


Источник: https://wald0.com/?p=14
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
Intro & Background
В феврале этого года я отправил сценарий проверка концепции под названием « PowerPath » , которое в сочетании PowerView от автора Will Schroeder’s , концепция Justin Warner’s о производной локального администратора , теории графов, и (Jim Truher в @jwtruher ) реализации PowerShell Алгоритма Дейкстры доказать что можно автоматизировать анализ эскалации привилегий домена Active Directory. Я оказал большую помощь со стороны следующих людей и проектов:
  • Sam Briesemeister ( @systemalias ), который познакомил меня с теорией графов и предложил использовать графики для автоматизации анализа повышения привилегий в домене.
  • Justin Warner ( @sixdub ), который помог мне разобраться с производным локальным администратором более формальным образом и продолжает помогать мне созвать свой краткий набор навыков и навыков тестирования на проникновениеJustin and Will изначально заселили семя в моем мозгу за эту концепцию наличия «Оскорбительной приборной панели» - веб-приложения, которое послужило множителем силы для операторов.
  • Will Schroeder ( @ harmj0y ), чей инструмент PowerView был и остается самым полным и расширенным инструментом для перебора Active Directory.
  • Lucas Bouillot and Emmanuel Gras , проект Active Directory Control Paths послужил основным источником вдохновения для PowerPath и BloodHound.
PowerPath
был действительно интересным доказательством концепции и важным шагом к чему-то значительно большему. Наша команда давно предвидела «offensive dashboard », которая автоматизирует большую часть утомительной работы, которая анализирует пути атаки эскалации домена Active Directory. Мы хотели, чтобы решение было оперативно сфокусированным, простым в использовании и имели скрытые возможности сбора данных.

Теперь я чрезвычайно горжусь тем, что представляю BloodHound, что является конечным результатом многолетней тяжелой работы, основанной на этих идеалах. BloodHound был выпущен как бесплатный инструмент с открытым исходным кодом в DEF CON 24. BloodHound совместно развивается мной, Rohan Vazarkar ( @CptJesus ) и Will Schroeder ( @ harmj0y ).

BloodHound-White-on-Red.png


Что такое BloodHound?
BloodHound берет ключевые концепции оригинального доказательства PowerPath концепции и превращает их в оперативную, интуитивную, удобную в использовании возможность для анализа и анализа данных, которые могут эффективно и точно показать, как эскалация прав в домене AD. BloodHound не было бы возможно без Rohan and Will :
  • Rohan взял мои довольно грубые макеты веб-интерфейса и превратил их в настоящее, функциональное веб-приложение. Rohan также стал экспертом по шифру, разрабатывая несколько общих и аналитических запросов для работы с BloodHound. Cypher - это язык запросов, который управляет взаимодействиями neo4j.
  • BloodHound в значительной степени зависит от инструмента Will, PowerView, для сбора данных. Кроме того, Will построил PowerView и сделал несколько пользовательских изменений и добавил несколько функций для подачи базы данных BloodHound с необходимой ей информацией.

Интерфейс BloodHound, показывающий групп «Администраторы домена» в двух доменах.

Почему моя команда использует BloodHound?
BloodHound - общедоступный и свободно доступный инструмент, который использует теорию графов для автоматизации большую часть взаимодействий отношениями в среде Active Directory. Ваша команда может использовать BloodHound, чтобы быстро получить глубокое понимание AD, зная, на каких компьютерах у любого пользователя есть права администратора, какие пользователи имеют права администратора, информацию о членстве в группе.
Screen-Shot-2016-08-29-at-6.25.38-PM.png

BloodHound показывает всех членов группы.
Наиболее захватывающей особенностью BloodHound является его способность идентифицировать пути атаки. Эта концепция, которая описывает Justin очень хорошо в своем блоге здесь , является невероятно мощной и надежной для повышения прав в домене AD. Автоматизируя анализ, необходимый для использования этой концепции, BloodHound будет хорошо служить вашей команде.
Screen-Shot-2016-08-29-at-6.31.37-PM.png

BloodHound находит самый короткий путь атаки для пользователя слева в группе «Администраторы домена» справа.

Как начать работу с BloodHound?
Мы используем вики GitHub для официальной документации для BloodHound. В wiki вы можете найти страницу « Начало работы», в которой есть все необходимое для быстрого и быстрого запуска.


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

Официальная документация и контент от создателей:

Другие источники:


Исток: https://wald0.com/?p=68
 
Последнее редактирование:


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх