доверительные отношения в предприятии
Как установить доверительные отношения между компьютером и основным доменом
Здравствуйте Уважаемые читатели Хабрахабра! В просторах интернета каждый из нас может найти много отдельных статей о не прохождении аутентификации компьютера через домен-контроллер, если точнее сказать, компьютер подключенный к домену теряет связь с ним.
Итак, приступим к изучению этой проблемы.
У многих IT – инженеров, которые работают в больших и малых компаниях, имеются компьютеры с операционной системой Windows 7, 8.1 и т.п. и все эти компьютеры подключены к доменной сети (DC).
Данная проблема происходит из-за того, что сетевой протокол Kerberos не может синхронизироваться и пройти аутентификацию с компьютером (The trust relationship between this workstation and the primary domain failed), который подключен к домену. Тогда мы можем увидеть такую ошибку (см. фото ниже).
После чего мы ищем стороннюю программу, скачиваем ее, создаем загрузочную флешку и локального админа, далее логируемся через него и выходим с домена, добавляем компьютер в Workgroup-у и потом обратно подключаем этот компьютер к домену.
Используя Windows Batch scripting, я хочу создать bat file и автоматизировать процесс создания и добавления локального админа. Единственное, что нам будет необходимо, так это после создания данного файла запустить его.
Открываем наш текстовой редактор, вписываем команду, которая показана внизу.
Пройдем все команды по пунктам для устранения неясных моментов.
• net user admin (вместо слова админ Вы можете добавить любое имя, которое Вас устраивает, по умолчанию ставится administrator, в моем случае это admin).
Далее мы видем пароль, который я там поставил Ww123456(Вы можете поставить любой запоминающийся для Вас пароль).
После мы видем /add /active:yes –добавить и активировать: ДА
• WMIC USERACCOUNT WHERE «Name=’admin’» SET PasswordExpires=FALSE – данная команда означает, что админ, который добавляется, имел постоянный пароль без срока действия (см. картинку ниже).
• Третий и четвертый пункт связаны между собой тем, что по умолчанию, когда создается локальный админ в пункте Member Of стоит Users (см. фото). Нам он не нужен (Users), потому что мы создаем полноправного администратора для нашей ОС. Поэтому четвертая команда — net localgroup Users admin /delete – удаляет Users, а предыдущая команда — net localgroup Administrators admin /add, добавляет администратора (см. фото).
• Последняя команда- netsh advfirewall set allprofiles state off, отключает брандмаузер Windows-a.
Иногда, чтобы установить какую-либо программу или дать какую-либо команду в Windows-e необходимо отключить firewall (После запуска скрипта Вы можете ввести команду- netsh advfirewall set allprofiles state on и включить его заново. У меня по умолчанию стоит off, так как я использую сторонний брандмаузер. Данный момент на усмотрение каждого лично).
Далее идем к нашему блокноту, нажимаем File, save as… (сохранить как. ) вводим имя нашего скрипта( в моем случае: localadmin).Затем ставим точку (.) и пишем формат скрипта bat. Выбираем место, где сохранить данную запись и нажимаем save. Более детально показано на картинке.
Получается вот такой скрипт (см. фото).
Данный скрипт при запуске необходимо открывать от имени администратора:
• Нажимаем правую кнопку мыши и Run as administrator (см. фото).
После запуска скрипта у Вас должно появиться вот такое окошко (см. фото).
Если по каким-либо причинам выйдет ошибка, то в 90% таких случаев это связано с тем, что у Вас образ с которого Вы установили Windows, имеет нелицензионный характер, какие-либо repack или т.п. Скачивайте и используйте лицензионный и проверенный софт.
После удачного добавления локального админа, Вы можете этот скрипт запустить на всех рабочих машинах в Вашем офисе, в которых установлена ОС Windows.
Если у Вас когда-нибудь появится такая ошибка: The trust relationship between this workstation and the primary domain failed- Вам нужно будет только сделать switch user и где логин написать.\admin (запомните! В начале до слеша ставится точка!), далее внизу вводите пароль, который Вы добавили в Ваш скрипт (в моем случае: Ww123456). После этого Вы заходите на рабочую ОС.
Осталось снять наш компьютер с домена и добавить в Workgroup-у. Вместо Workgroup-а вписываем любую букву (см. фото).
Далее вводится пароль администратора домена и компьютер просит нас о перезагрузке.
После перезагрузки ещё раз заходим под нашим локальным админом и дальше уже добавляем компьютер к нашему домену. Система в очередной раз требует перезагрузиться и Вуаля! Наш User опять может подключиться к домену без всяких проблем!
P.S – Данная система работает также для серверной части Windows, однако если Вы будете писать такой скрипт для серверов после отключения брандмаузера необходимо будет включить его еще раз (до — netsh advfirewall set allprofiles state off, после netsh advfirewall set allprofiles state on).
Как создать доверительные отношения в команде
Вы когда-нибудь руководили коллективом, члены которого не доверяли друг другу? Если да, то вы знаете, насколько это сложно.
Команда без доверительных отношений – это даже не команда; это просто группа людей, работающих вместе и часто добивающихся неутешительных результатов. Они могут спорить насчет прав и обязанностей, не делиться информацией и не общаться друг с другом. Неважно, насколько способны и талантливы ваши сотрудники; они могут не реализовать полностью свой потенциал, если в коллективе нет доверия.
Напротив, когда оно есть, каждый человек в команде становится сильнее, потому что он является частью эффективной сплоченной группы. Когда люди доверяют друг другу, группа достигает поставленных целей.
Как помочь своей команде установить доверительные отношения, которые просто необходимы для процветания?
В статье мы рассмотрим вопрос доверия внутри команд, расскажем, почему это важно и что вы можете сделать для этого.
Важность доверия
Одно определение описывает доверие как «уверенность в положительных качествах характера, способностях, сильных сторонах или верности кого-либо».
Подумайте об этих словах одну минуту. Доверие означает, что вы нисколько не сомневаетесь, что человек поступает правильно в той или иной ситуации. Вы убеждены в его порядочности и других положительных качествах до такой степени, что можете не бояться рисковать.
Доверие необходимо для эффективной работы команды, потому что оно дает чувство безопасности. Когда члены коллектива чувствуют себя в безопасности друг с другом, им становится проще «открыться»; они смелее идут на разумный риск и не боятся показать свои слабые места.
Без доверия люди неохотно взаимодействуют друг с другом, не внедряют инновации, не ищут творческие решения и работают непродуктивно. Они тратят время на защиту себя и своих интересов, тогда как это время нужно тратить на помощь группе достичь целей.
Доверие также важно для обмена знаниями. Исследование, опубликованное в Журнале управления знаниями, показало, что доверие является ключевым элементом в приобретении знаний. Проще говоря, если члены коллектива доверяют друг другу, они охотнее делятся знаниями и общаются более открыто.
Как помочь сотрудникам установить доверительные отношения
1. Подайте пример
Если вы хотите укрепить отношения в коллективе, то станьте примером и покажите остальным – команде, коллегам и боссу, – что вы доверяете им. Помните о том, что сотрудники всегда следят за вашими действиями и берут с вас пример. Покажите им, как на самом деле выглядит доверие к другим.
Если вы руководите виртуальным коллективом, общайтесь с людьми так же, как если бы вы работали в одном офисе. Вы должны вовремя подключаться к конференц-связи или видеосвязи, а также не забывать сообщать сотрудникам о своем отсутствии или уходе в отпуск.
Вы должны выполнять обещания, которые даете. Станьте примером для остальных. Это особенно важно в случае с виртуальным коллективом, потому что очень часто ваше слово – это все, что вы можете им дать. Вы сможете укрепить отношения с командой, если сотрудники увидят, что вам можно доверять; это создаст правильный рабочий настрой и повысит их ожидания.
2. Общайтесь открыто
Члены команды не должны стесняться говорить друг с другом честно и конструктивно. Для достижения этой цели можно использовать несколько стратегий.
Во-первых, создайте Устав коллектива. В нем обозначьте цели команды, а также роль каждого сотрудника. Представьте Устав на первом собрании, предложите каждому задать вопросы и обсудите ожидания.
Используйте командообразующие упражнения. При правильном выборе и планировании такие упражнения помогают «растопить лед» и побуждают людей раскрыться и начать общение.
Регулярно собирайтесь вместе, чтобы у членов команды была возможность рассказать о своем прогрессе и обсудить волнующие их проблемы. Так они смогут лучше узнать друг друга. Кроме того, это создает возможности начать общаться и помогать друг другу в решении проблем.
Подкрепляйте слова действиями: если у вас есть важная актуальная информация, которую нужно сообщить остальным, – не откладывайте. Покажите, что открытое общение важно для вас; делитесь с группой информацией. Чем чаще сотрудники будут видеть, что вы ничего не утаиваете от них, тем быстрее они начнут доверять вам и остальным.
3. Добавьте моменты неформального общения
Один из способов завоевать доверие – сделать так, чтобы члены коллектива узнали друг друга лучше. Создайте ситуации, где они смогут поделиться личными историями.
Начните с себя. Расскажите немного о себе, а затем спросите остальных о семье, увлечениях или любимой музыке.
Еще один способ установить доброжелательные отношения в коллективе – это общаться после работы или во время обеда. Например, вы можете выделить время для неформальных групповых обсуждений один раз в неделю. Попросите членов команды выдвинуть предложения по темам, которые было бы полезно обсудить. Для начала вы можете поговорить о ценностях каждого. Расскажите о том, что важно для вас, и попросите других рассказать об их ценностях. Они есть у каждого человека, и, если вы предложите эту тему для обсуждения, вы подчеркнете важность гуманного отношения в команде.
Если вы руководите виртуальным коллективом, запланируйте ознакомительную онлайн-встречу (если это новая команда), чтобы помочь людям лучше узнать друг друга. Попросите каждого написать в своих онлайн-профилях параграф или два об их опыте, навыках и интересах. Пользуйтесь чатами и мессенджерами для обмена мгновенными сообщениями, чтобы всегда быть на связи.
ВАЖНО:
Не задавайте слишком личные вопросы сотрудникам. Соблюдайте деловой этикет.
4. Не будьте строгим критиком
Когда люди работают вместе, трудно избежать ошибок и неприятностей. Обвинить того, кто их совершил, – это самый простой путь; но атмосфера быстро становится напряженной, когда все начинают указывать пальцем на одного. Это ухудшает рабочий настрой, подрывает доверие и в конечном итоге приводит к плохим результатам.
Вместо этого поощряйте коллектив конструктивно размышлять об ошибке. Что каждый из сотрудников может сделать для того, чтобы исправить ситуацию? Как сделать так, чтобы ошибка не повторилась в будущем?
5. Не закрывайте глаза на «группировки»
«Группировки» часто образовывают люди с общими интересами или рабочими задачами. Такие группы могут – даже непреднамеренно – заставить других чувствовать себя одинокими. Они также подрывают доверие между членами группы.
Как руководитель начните открытое обсуждение этого вопроса и посмотрите, что сотрудники думают о «группировках» и их влиянии на других членов коллектива. Открыто обсудив проблему (и только так), вы сможете предотвратить такое вредоносное поведение.
6. Обсудите вопросы доверия
Если вы руководите устоявшейся командой, члены которой так и не сформировали доверительные отношения, важно выяснить, как возникают проблемы; после этого вы сможете выработать стратегию их решения.
Мы рекомендуем раздать сотрудникам анкету, которую они должны будут заполнить анонимно. Включите в нее вопросы об уровне доверия в группе, а также о том, почему они думают, что в коллективе не хватает доверия. Как только вы узнаете результаты, соберите коллектив вместе, чтобы обсудить эти проблемы (ни в коем случае не настаивайте на раскрытии анонимности).
Атаки на трасты между доменами
Рано или поздно в ходе пентеста встает задача компрометации всего леса — при условии, что есть какие-либо права в одном из доменов. В такие моменты возникает куча вопросов о трастах, их свойствах и самих атаках. Попробуем во всем этом разобраться.
Доверие между доменами используется для прохождения аутентификации пользователей одного домена на контроллере другого домена. Иначе говоря, чтобы пользователи с домена А могли иметь доступ к ресурсам домена Б. Доменная структура может быть двух видов:
При создании дерева доменов между доменами по умолчанию устанавливаются транзитивные доверительные отношения. Все компьютеры имеют общие:
№ | Trust Type | Transitivity | Direction | Authentication Mechanism | Description |
1 | External | Non-transitive | One-way or two-way | NTLM Only | Устанавливаются между доменами, принадлежащими к разным лесам, либо c доменом Windows NT 4.0. |
2 | Realm | Transitive or non-transitive | One-way or two-way | Kerberos Only | Устанавливаются между Windows и не Windows доменами, использующими протокол Kerberos. Данный тип доверительных отношений может использоваться для обеспечения сквозной аутентификации на Windows и UNIX-системах. |
3 | Forest | Transitive | One-way or two-way | Kerberos or NTLM | Устанавливаются между лесами. При этом администраторы сами решают, какими будут отношения — двусторонними или односторонними. |
4 | Shortcut | Transitive | One-way or two-way | Kerberos or NTLM | Устанавливаются между доменами различных деревьев, принадлежащих к одному лесу. Используются для уменьшения пути доверия, тем самым повышая эффективность взаимодействия между двумя доменами. |
5 | Parent-Child | Transitive | Two-way | Kerberos or NTLM | Устанавливаются автоматически при создании в дереве нового домена. В рамках дерева доменов отношения описываются схемой Parent-Child. |
6 | Tree-Root Trust | Transitive | Two-way | Kerberos or NTLM | Устанавливаются автоматически при создании в существующем лесе нового дерева доменов. Фактически доверительные отношения устанавливаются между корневым доменом леса и создаваемым доменом, который будет являться корневым для нового дерева. |
Более наглядно типы доверий между доменами проиллюстрированы на картинке ниже.
Транзитивность (Transitivity)
Транзитивность нужна для определения доверия за пределами двух доменов, между которыми оно было сформировано, и используется для расширения отношений доверия с другими доменами. Если мы добавляем к домену дочерний домен, между родительским и дочерним доменами устанавливаются двусторонние доверительные отношения. Эти отношения транзитивны, т.е. если домен A доверяет домену D и домен D доверяет домену E, то домен A доверяет и домену E.
Нетранзитивное доверие можно использовать для отказа доверия с другими доменами.
Направление (Direction)
Путь доверительных отношений — это ряд доверительных отношений между доменами, к которому должны поступать запросы на проверку подлинности. Иными словами, прежде чем аутентифицировать пользователя, определяется доверие между доменами. Чтобы пользователи домена A могли получить доступ к ресурсам домена D, домен D должен доверять домену A.
Направление доверия бывает двух типов:
Двустороннее доверие — это комбинация двух однонаправленных доверительных отношений. В двунаправленном доверии между доменами A и B их пользователи имеют доступ к ресурсам обоих доменов. Такой тип доверия транзитивен.
Направление доверия всегда противоположно направлению доступа. Показательная схема от Microsoft ниже:
Ссылки для более глубокого ознакомления с типами доверий:
Kerberos между доверенными доменами
Рассмотрим пример. Client пытается получить доступ к Server.
Изменения начинаются с пункта 4: появляется inter-realm TGT-тикет, так называемый реферальный тикет, который шифруется/подписывается inter-realm ключом, создаваемым из доверенного пароля. Доверенный пароль задается при установке доверительных отношений и известен обоим контроллерам домена. Используя inter-realm TGT-тикет, пользователь домена 1 может запросить TGS-тикет для доступа к ресурсам домена 2.
NTLM между доверенными доменами
Атаки на трасты между доменами
Итак, для проведения атаки нам потребуется информация о доверительных отношениях в нашем домене.
Перечисление трастов
Существует 3 основных метода для перечисления трастов в домене:
Перечисление осуществляется с помощью вызова функции DsEnumerateDomainTrusts, которая возвращает структуру DS_DOMAIN_TRUSTSA. При использовании данного метода возвращается SID и GUID целевого домена, флаги и атрибуты, характеризующие текущие доверительные отношения в домене.
DS_DOMAIN_DIRECT_INBOUND | Enumerate domains that directly trust the domain which has ServerName as a member. |
DS_DOMAIN_DIRECT_OUTBOUND | Enumerate domains directly trusted by the domain which has ServerName as a member. |
DS_DOMAIN_IN_FOREST | Enumerate domains that are a member of the same forest which has ServerName as a member. |
DS_DOMAIN_NATIVE_MODE | Enumerate domains where the primary domain is running in Windows 2000 native mode. |
DS_DOMAIN_PRIMARY | Enumerate domains that are the primary domain of the domain which has ServerName as a member. |
DS_DOMAIN_TREE_ROOT | Enumerate domains that are at the root of the forest which has ServerName as a member. |
TRUST_ATTRIBUTE_NON_TRANSITIVE | Disallow transitivity. |
TRUST_ATTRIBUTE_UPLEVEL_ONLY | The trust link is not valid for client operating systems earlier than Windows 2000. |
TRUST_ATTRIBUTE_FILTER_SIDS | Quarantine domains. |
TRUST_ATTRIBUTE_FOREST_TRANSITIVE | The trust link may contain forest trust information. |
TRUST_ATTRIBUTE_CROSS_ORGANIZATION | This trust is to a domain/forest that is not part of this enterprise. |
TRUST_ATTRIBUTE_TREAT_AS_EXTERNAL | Trust is treated as external for trust boundary purposes. |
TRUST_ATTRIBUTE_WITHIN_FOREST | Trust is internal to this forest. |
BloodHound собирает информацию с помощью метода Win32 API.
Используется метод GetCurrentDomainиз пространства имен [System.DirectoryServices.ActiveDirectory.Domain], который возвращает экземпляр класса System.DirectoryServices.ActiveDirectory.Domain. В этом классе реализован метод GetAllTrustRelationships, который возвращает все доверительные отношения для текущего домена.
Использование данного метода реализовано в модуле Get-DomainTrust в PowerView.
Одним из преимуществ этого метода является его простота. Информацию легко читать и понимать, но ее объем значительно меньше, чем при выполнении перечисления другими методами.
Информация о доверительных отношениях домена хранится в Active Directory как objectClass класса trustedDomain.
PowerView по умолчанию использует данный метод.
Имея информацию о доменах и типах доверия, можно переходить непосредственно к самой атаке. Рассмотрим 2 варианта:
С правами администратора одного из доменов
В зависимости от домена, который был скомпрометирован, можно выделить несколько векторов атак:
№ | Стартовый домен. Позиция атакующего | Атакуемый домен | Техника атаки | Доверительные отношения |
1 | Root | Child | Golden Ticket + Enterprise Admin Group | Inter-realm (2-way) |
2 | Child | Child | Эксплуатация SID History | Inter-realm Parent-Child (2-way) |
3 | Child | Root | Эксплуатация SID History Эксплуатация билетов доверия | Inter-realm Tree-Root(2-way) |
4 | Forest 1 | Forest 2 | Printer Bug | Inter-realm Forest or External trust (2-way) |
Стоит отметить, что для успешной реализации всех векторов необходимо двустороннее доверие между доменами.
1. Эксплуатация SID History
SID History был введен для облегчения миграции пользователей из одного домена в другой. Атрибут cодержит в себе предыдущие SID объекты. Каждый раз, когда объект перемещается из одного домена в другой, создается новый SID, который становится objectSID. Предыдущий SID добавляется в свойство sIDHistory.
В каждом лесу есть группа пользователей Enterprise Admins, которая существует только в root-домене и имеет права локального администратора на контроллерах домена всех Child-доменов леса. Впервые данная атака был продемонстрирована Sean Metcalf на BlackHat USA 2015. Суть атаки в том, что мы выпускаем Golden-тикет с добавлением дополнительного SID группы Enterprise Admins. Это выполняется путем добавления ExtraSids в структуре KERB_SID_AND_ATTRIBUTES, которая отправляется в структуре KERB_VALIDATION_INFO.
В impacket есть скрипт, который все это автоматизирует.
2. Golden Ticket + Enterprise Admin Group
Имея права администратора в Root-домене, мы можем создать Golden Ticket с добавлением пользователя в группу Enterprise Admins (519).
Как было написано выше, Enterprise Admin имеет права локального администратора на DC Child-доменов. Таким образом нам удастся скомпрометировать в лесу все Child-домены.
3. Эксплуатация билетов доверия
Атака особенно актуальна, когда служба ИБ заметила угрозу и сменила пароль krbtgt 2 раза. В этом случае мы сможем создавать golden-тикеты, используя доверенный пароль между доменами.
4. Printer Bug
В Windows Print System Remote Protocol (MS-RPRN) есть метод RpcRemoteFindFirstPrinterChangeNotification(Ex), включенный по умолчанию, который позволяет принудительно выполнить аутентификацию на любом компьютере с запущенной службой Spooler на указанном хосте по протоколу Kerberos либо NTLM. В случае c NTLM мы можем выполнить NTLM-relay, либо начать брутить пароль компьютера (никогда не сбрутите). В случае с Kerberos необходима скомпрометированная машина с неограниченным делегированием. Тогда мы сможем забрать TGT-тикет и развить атаку.
Рисунок ниже демонстрирует этапы, показанные на видео.
У нас нет прав администратора домена
Немного теории. Carlos Garsia в своем докладе привел отличную таблицу, которая иллюстрирует свойства разных типов групп.
Because of the way that groups are enumerated by the Global Catalog, the results of a back-link [i.e. memb search can vary, depending on whether you search the Global Catalog (port 3268) or the domain (port 389), the kind of groups the user belongs to (global groups vs. domain local groups).
1. Пользователи другого домена, которые имеют права локального администратора на машинах в нашем домене
Поиск пользователей из другого домена, являющихся локальными администраторами на хостах в нашем домене в BloodHound:
2. Пользователи из других доменов, состоящие в группах домена пользователя. Группы, содержащие пользователей из другого домена
Как уже говорилось выше, в глобальный каталог реплицируются пользователи, состоящие только в группах типа Universal. Для демонстрации этой особенности выполним запрос групп в глобальном каталоге, содержащих хотя бы одного пользователя и прямой ldap-запрос к контроллеру домена.
При выполнении запроса к глобальному каталогу, мы видим только одну группу Universal Group c типом AD Universal из домена one.jet.lab.
Если мы выполним прямой LDAP-запрос к домену one.jet.lab, то увидим другие группы с типом AD Domain local и AD Global.
Это важно учитывать при выполнении перечисления пользователей и групп.