Задачи для средней школы. Скрещивание Microsoft Active Directory (LDAP) и Hashicorp Vault на домашнем стенде, часть 1

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Изначально я такой низкокачественный лонг лонг рид писать не хотел, но в комментариях задали вопрос про доучивание, затем эта статья вызвала у меня некое недоумение своим обрывом на полуслове. Поскреб по амбарам, нашел черновик заметки по дообучению коллег от уровня "начинающий" до уровня "как пойдет", немного отформатировал, дописал и по частям выложу - вдруг кому-то интересно. Уровень статьи, на мой взгляд, подойдет для старших классов средней школы, может быть для "ит-колледжа". Одновременно попробую пояснять, почему в домашней работе сделано именно так, и почему так не надо делать в продуктивной среде. Вопросы в комментарии, дополнения туда же. Статья будет разбита на три части для удобства чтения и осуждения.

Часть 1 из N, подготовка стенда или вечер первый

Что потребуется по аппаратной части: 6 Гб оперативной памяти и 80 Гб места – 60 под Windows Server с развернутой AD (хватит и 25) и 20 под Debian. Правильней ставить сразу отдельно второй сервер с Windows CA – но это в другой раз. Диск можно использовать "медленный" - SSD/NVME для этой задачи не нужен. CPU на 4 Ггц и 200 ядер, последнего поколения - тоже не нужен. Интернет, разумеется, будет нужен.

По програмной части: у меня на домашнем ПК стоит самый обычный Windows 11 Home, разворачивать и лицензировать на нем Hyper-V мне не интересно. Поэтому будет взят VMware Workstation Player. Лицензирование: бесплатен для домашнего использования. Где брать: скачивать с официального сайта.

VMware Workstation Player is free for personal, non-commercial use (business and nonprofit use is considered commercial use). If you would like to learn about virtual machines or use them at home, you are welcome to use VMware Workstation Player for free.

Если не нравится Player - можно взять Virtual Box, если дома развернут Linux - тоже можно.

Hidden text

apt install qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils libguestfs-tools genisoimage virtinst libosinfo-bin

На роль носителя AD берется Windows server 2016/2019/2022 – в домашней работе выбор 2016/2022 не так значим. Windows server ставим английский, это сбережет массу времени и сейчас и в будущем. Лицензирование и скачивание - с официального сайта.

Register, then download and install. (Note: This evaluation edition expires in 180 days.) - Зарегистрируйтесь, скачайте файл и выполните установку. (Примечание. Ознакомительная версия действительна в течение 180 дней).

Нюансы

Evaluation versions of Windows Server must activate over the internet in the first 10 days to avoid automatic shutdown.

Для учебных заведений есть Academic лицензии.

Для всего остального есть Microsoft Learn.

Официальная политика лицензирования MS одна и та же с времен Windows 2016 - должны быть лицензированы (покрыты лицензиями Core) все ядра всех серверов, на которых может исполняться Windows Server.

Пиратство это плохо, и УК РФ 146.2 активно используется, так что обязательно перед началом работы уточните у ближайшего официального представителя Microsoft Россия о допустимости использования ознакомительной версии Ms Server в целях учебы. Кстати они с 23 февраля ничего не пишут в блоге, так бы можно было их спросить напрямую про текущую политику лицензирования. Я против пиратства и вообще за Слово и дело закон и порядок

  • Register, then download and install. (Note: This evaluation edition expires in 180 days.)

(тут у меня задублировался элемент списка, который не виден в редакторе, но виден в пред просмотре)

Под Hashicorp Vault был выбран Debian. Это не самый лучший выбор, учитывая что в продуктиве раньше коллеги предпочитали Centos. Почему Debian: нам регулярно хотели продать "импортозамещение" (которое очень напоминало Debian 8/9), поэтому взяли ванильный свежий Debian "на посмотреть". Брать на официальном сайте.

Многие спросят, почему Hashicorp Vault? Ведь пароли можно хранить в One note, Excel, и почему-то редко (всего один раз в статье вспомнили) используемый RatticDB. Его даже не вспомнили в статье 12 лучших менеджеров паролей. Кто-то скажет Bitwarden (bitwarden_rs, rubywarden, bitwarden-go, vault warden) - и тоже будет прав. Кто-то вспомнит еще 40 парольных менеджеров (сайт с статьей 46 Open-source Free Password managers - очень хотел показать мне рекламу) или Mozilla SOPS. Кто-то скажет, что надо поддержать рублем Passwork - я не готов, денег нет, держусь. Кто-то скажет про хранение в гите. Ключевые для меня требования для менеджера паролей для домашних работ: 1. Бесплатно, 2. С интеграцией с LDAP, 3. Оффлайн (он-прем, изолированные среды, в том числе с air-gap), 4. Разделяемый по правам, 5. С API 6.Поддерживаемый и развиваемый.

Часть 2 из N. Готовим пароли.

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

Windows: Domain Administrator - Pa$$word1

Пароль восстановления AD - Restore1

Debian:

vuser / vPa$$word

root / rootPa$$word

НИКОГДА НЕ ИСПОЛЬЗУЙТЕ ПРОСТЫЕ ПАРОЛИ И ПАРОЛИ ИЗ ПРИМЕРОВ В РАБОЧЕЙ СРЕДЕ. Потому что в любом тесте на проникновение (или не тесте) ваши пароли (хеши паролей) сольют (попытаются слить) и первым делом проверят по словарям простых паролей и паролей из примеров. Хранить пароли в текстовом файле на рабочем столе - тоже очень плохая идея, по той же причине.

Часть 3 из N. Установка системы.

Безопасность сети

Поскольку в данном примере мы не изучаем сетевую безопасность, то ни о каких разделениях VLAN, настройке DHCP Snooping, 802.1x и так далее речи не идет. В хоть как-то настроенной сети с минимальным SOC - не используемые порты должны быть выключены на коммутаторе, любое подключение к сети ПК без сертификата должно отслеживаться, а широковещательные пакеты в пользовательском сегменте (Access) должны быть обрезаны на уровне сети. Поэтому первая часть описанной атаки, в даже минимально настроенной сети, не должна быть успешной без физического доступа к включенному порту в серверном сегменте, или захвата управления неким ПК, например с использованием USB Rubber Ducky. Да, так настраивать и эксплуатировать сложно и кому-то покажется избыточным, но для сетей тоже есть средства автоматизации.

Поставили VMware player, создали VM (Тип сети – NAT), ставим Windows + AD. Правильнее, конечно, все же развернуть CA на отдельном сервере, но про это я напишу попозже и отдельно. Но это не точно.

Процесс скучен. Не забываем после установки Windows в VM: поставить пароль локальному администратору (который станет доменным), переименовать VM (у меня это dc001), поставить патчи. Ставить патчи стоит до настройки AD и до настройки статического IP в VM, чтобы на первом этапе не заниматься с настройками DNS в домене.

После перезагрузок стоит включить RDP, и зайти через него. Почему RDP: потому что это домашняя работа, потому что в дальнейшем будет какое-то количество скриптов, и их удобней копировать в RDP сессии. В дальнейшем, конечно, стоит переходить к удаленному управлению через консоль (New-PSSession), но для начинающих удобней RDP. В рабочей среде RDP, скорее, стоит отключить - пока не появились новые BlueKeep CVE-2019-0708, BlueGate (CVE-2020-0609/0610)

Start - Run – mstsc / User name: ./Administrator и входим.

После установки останется настроить static IP, DNS, затем добавить роль AD. Поехали.

Просмотр IP, если кто забыл – правую кнопку мыши – run – powershell , ipconfig/all

Get-NetAdapter (нам нужен ifindex)

  • Register, then download and install. (Note: This evaluation edition expires in 180 days.)

(тут тоже задублировался элемент списка, который не виден в редакторе, но виден в пред просмотре)

Get-NetIPAddress (опять же, нужен interface index)

Get-NetIPConfiguration

Было

Стало (10 - потому что ifindex 10)

IPv4DefaultGateway : 192.168.31.2

DNSServer 192.168.31.2

Set-DnsClientServerAddress -InterfaceIndex 10 -ServerAddresses 192.168.31.151


New-NetIPAddress -InterfaceIndex 10 -IPAddress 192.168.31.151 -PrefixLength 24 -DefaultGateway 192.168.31.2

Что касается IP v6, то отключать его НЕ НАДО НИ В КОЕМ СЛУЧАЕ, о чем много лет написано в Guidance for configuring IPv6 in Windows for advanced users - We do not recommend that you disable IPv6 or its components. Я не знаю, заметками из какого года руководствовалась автор статьи Не обновлениями едиными: как получить привилегии администратора домена без эксплуатации уязвимостей, тогда как Best Practices for Securing Active Directory свободно доступны для чтения, как и достойный наследник MBSA - Microsoft Security Compliance Toolkit 1.0

Можно сделать, как давно описано: нажать правую кнопку на пуске, выбрать run – powershell и выполнить простейший скрипт отсюда.(Предварительно, разумеется, прочитав что он делает).

Описывать установку первого контроллера домена в новом лесу я не буду. В моем случае домен будет Contoso.lab, первый сервер в новом лесу, далее-далее-готово.

И сразу настроим DNS – можно в GUI

Лучше в powershell:

Get-DnsServer -ComputerName “dc001.contoso.lab” | Export-Clixml -Path "c:\DnsServerConfig.xml"

Notepad "c:\DnsServerConfig.xml"

Это разнесения явно сделано для того, чтобы не привыкали к хорошему, потому что настройка DNS forward вызывается отдельно, и мало того – видна только при запуске powershell от имени администратора.

Жизнь без бороды в консоли без запуска ее от администратора

Жизнь с бородой в консоли от администратора

(я уже из gui настроил 8.8.4.4 )

Но все равно добавим

Add-DnsServerForwarder -IPAddress 8.8.8.8 –PassThru

Часть 4 из N. Про безопасность.

Несмотря на то, что утилиту Mimikatz определяет и блокирует даже Windows defender - который по умолчанию идет с времен сервера 2016, и может быть поставлен даже на 2012R2 - прикрыться от него все же стоит. Обфускаторы, или просто игнорирование сотрудником элементарных вещей - мыть руки, не хватать что попало и не запускать файлы "вам срочно из налоговой.exe.zip" возможны. Необходимо обсудить с руководством, и скорее всего отобрать у всех пользователей домена, включая администраторов, права на Debug через GPO - Computer Configuration -> Windows Settings -> Security Settings -> Local Policies -> User Rights Assignment - Debug Program. Затем отключить WDigest, отключить LM и NTLM, отключить возможность сохранения сетевых паролей, отключить Reversible Encryption, отключить кеширование локальных паролей(Computer Configuration -> Windows Settings -> Local Policy -> Security Options), включить LSA memory protection, подкрутить TokenLeakDetectDelaySecs в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa. и подкрутить Credential Guard. Подробные и полные инструкции в интернете есть, ссылок давать не буду. Сделать эти настройки надо один раз, после чего борьба с хацкерами уйдет на новый уровень - настройку автоматического завершения неактивных сессий (Computer Configuration -> Policies -> Administrative Templates -> Windows Components -> Remote Desktop Services -> Remote Desktop Session Host -> Session Time Limits), включения APP locker, а дальше уже аудит логов, пересылка событий, и маленький домашний Security Operation Center хотя бы на базе Solar Winds. Если у вас это не сделано - сели и сделали один раз. В данной домашней работе этот абзац не нужен, но я не удержался. Проблемы от отключения перехвата debug будут - при обновлении разного не очень качественного ПО, будет нужна и отладка, и запуск обновлений от System. Или отключить политику на время установки.

Часть 5 из N – Создаем пользователей в AD, странненьких и кривеньких.

Создадим OU для имитации рабочей среды, и пользователей: трех сотрудников и служебную учетную запись. Создаем:

Organizational unit (OU): Zoo MSK/N Watch, Robo base/Vault

Такие странные имена добавлены для того, чтобы показать возможность работы с пробелами в имени OU.

В Zoo MSK/N Watch создаем трех пользователей и группу:

В OU Zoo MSK/N Watch – Ivan Ivanov (contoso/ivanov), Ivan Petr(contoso/petr), Иван Волк и группу vault login

Петрова сразу включим в группу vault login.

В OU Robo base/Vault – создаем vault connector (contoso/vault)

OU, двух сотрудников и служебную запись можно (нужно) создать скриптом, это сэкономит немного времени, но добавит поучительных проблем.

Внимательно следим за пробелами при изменении под себя.

Создаем OU (документация по OU): -ProtectedFromAccidentalDeletion $False используется, поскольку это стенд и каждый раз снимать чекбокс «разрешить удаление» в GUI / ADUC мне лень.

New-ADOrganizationalUnit -name "Zoo MSK" -Path "DC=CONTOSO,DC=LAB" -ProtectedFromAccidentalDeletion $False
New-ADOrganizationalUnit -name "N Watch" -Path "OU=Zoo MSK,DC=CONTOSO,DC=LAB" -ProtectedFromAccidentalDeletion $False $False
New-ADOrganizationalUnit -name "Robo base" -Path "DC=CONTOSO,DC=LAB" -ProtectedFromAccidentalDeletion $False
New-ADOrganizationalUnit -name "Vault" -Path "OU=Robo base,DC=CONTOSO,DC=LAB" -ProtectedFromAccidentalDeletion $False

Создаем пользователей: Документ по созданию поновей, документ по созданию постарей, но интересней. ЕЩЕ РАЗ! Внимательно следим за пробелами и кавычками при изменении под себя, иначе вставите пару пробелов и получите ошибку - New-ADUser : Directory object not found

$Pwd = ConvertTo-SecureString "Pa$$word2" -AsPlainText -Force
New-ADUser -name "Vault connector" -Accountpassword $Pwd -DisplayName "Vault connector" -Enabled $true -Path "OU=Vault,OU=Robo base,DC=CONTOSO,DC=LAB" -SamAccountName "VaultSAM" -userPrincipalName "VaultUPN"
Remove-Variable -Name Pwd

Теперь сходите в GUI и посмотрите, какая беда вышла. Но нам так и надо для примера, что с такими именами и паролями все будет работать плохо. Увидите ниже (в второй части).

Заводим еще две учетные записи, такие же кривые:

$OUP = "OU=N Watch,OU=Zoo MSK,DC=CONTOSO,DC=LAB"
$Pwd = ConvertTo-SecureString "Pa$$word3" -AsPlainText -Force
New-ADUser -name "Ivan Ivanov" -Accountpassword $Pwd -DisplayName "Ivan Ivanov" -Enabled $true -Path $OUP -SamAccountName "Ivanov" -userPrincipalName "Ivanov"
Remove-Variable -Name Pwd
$Pwd = ConvertTo-SecureString "Pa$$word4" -AsPlainText -Force
New-ADUser -name "Ivan Petr" -Accountpassword $Pwd -DisplayName "Ivan Petr" -Enabled $true -Path $OUP -SamAccountName "Petrov" -userPrincipalName "Petrov"
Remove-Variable -Name Pwd
New-ADGroup -Name "Vault login" -SamAccountName "VltADM" -GroupCategory Security -GroupScope Global -Path $OUP -Description "Example"
Add-ADGroupMember -Identity "VltADM" -Members Petrov
Get-ADGroupMember -Identity "VltADM" | ft

И одного пользователя в OU: OU=N Watch,OU=Zoo MSK создаем из GUI – Иван Волк, username Volk, пароль Pa!!word5 (обратите внимание, у двух пользователей пароли Pa$$word, у третьего – Pa!!word5)

На этом настройка Windows server и AD завершена и это конец первой части. Всего, при таком делении, частей получится три, вторая будет Debian + Vault (тоже элементарная), третья - Vault + LDAP (чуть сложней).

PS. Я очень сомневаюсь, что такой низкоуровневый контент тут нужен, мнения о нужности принимаются в комментариях.

Источник: https://habr.com/ru/post/682966/


Интересные статьи

Интересные статьи

Vault от HashiСorp — довольно известное open-source-решение для хранения секретов и неплохая альтернатива реализации секретов в Kubernetes. Vault использует свой сайдкар-контейнер на каждом поде, кото...
В ноябре завершился последний в этом году коммитфест изменений PostgreSQL 14. О двух предыдущих, июльском и сентябрьском уже говорилось. Громкими киллер-фичами нас не побаловали, наде...
Привет, Хабр! Меня зовут Владимир. Я отвечаю за мобильную разработку в Vivid Money. Vivid Money — это финтех-стартап для европейского рынка с большим набором функционала — платежи и ...
История реле Метод «быстрой передачи сведений», или Зарождение реле Дальнописец Гальванизм Предприниматели А вот, наконец, и реле Говорящий телеграф Просто соединить Забытое покол...
Всем привет! Мы продолжаем запуски новых потоков по уже полюбившимся вам курсам и сейчас спешим сообщить о том, что у нас стартует новый набор по курсу «Администратор Linux», который запустится в...