mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/mobile-pentesting/ios-pentesting/ios-universal-links.md
This commit is contained in:
parent
ed645fa5c1
commit
ccd8b91248
@ -6,7 +6,7 @@
|
||||
|
||||
Universal links는 사용자가 Safari 리디렉션 없이 앱에서 직접 콘텐츠를 열 수 있도록 하는 **매끄러운 리디렉션** 경험을 제공합니다. 이러한 링크는 **고유**하고 안전하여 다른 앱이 주장할 수 없습니다. 이는 웹사이트의 루트 디렉토리에 `apple-app-site-association` JSON 파일을 호스팅함으로써 보장되며, 웹사이트와 앱 간의 검증 가능한 링크를 설정합니다. 앱이 설치되지 않은 경우, Safari가 사용자에게 웹페이지로 안내하여 앱의 존재를 유지합니다.
|
||||
|
||||
침투 테스트를 수행하는 테스터에게 `apple-app-site-association` 파일은 **민감한 경로**를 드러낼 수 있어 특히 흥미롭습니다. 여기에는 출시되지 않은 기능과 관련된 경로가 포함될 수 있습니다.
|
||||
침투 테스터에게 `apple-app-site-association` 파일은 **민감한 경로**를 드러낼 수 있기 때문에 특히 관심이 있습니다. 여기에는 출시되지 않은 기능과 관련된 경로가 포함될 수 있습니다.
|
||||
|
||||
### **Associated Domains Entitlement 분석하기**
|
||||
|
||||
@ -44,7 +44,7 @@ Universal links는 사용자가 Safari 리디렉션 없이 앱에서 직접 콘
|
||||
|
||||
#### **데이터 핸들러 메서드 검증**
|
||||
|
||||
유니버설 링크가 앱을 열면, URL과 함께 `NSUserActivity` 객체가 앱에 전달됩니다. 이 URL을 처리하기 전에 보안 위험을 방지하기 위해 이를 검증하고 정리하는 것이 중요합니다. 다음은 이 과정을 보여주는 Swift 예제입니다:
|
||||
유니버설 링크가 앱을 열면, `NSUserActivity` 객체가 URL과 함께 앱에 전달됩니다. 이 URL을 처리하기 전에 보안 위험을 방지하기 위해 이를 검증하고 정리하는 것이 중요합니다. 다음은 이 과정을 보여주는 Swift 예제입니다:
|
||||
```swift
|
||||
func application(_ application: UIApplication, continue userActivity: NSUserActivity,
|
||||
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
|
||||
@ -91,7 +91,7 @@ return false
|
||||
| 1 | **AASA 파일의 과도한 `paths` / `components`** (예: `"/": "*"` 또는 `"/a/*"`와 같은 와일드카드). | • 다운로드한 AASA를 검사하고 `*`, 후행 슬래시 또는 `{"?": …}` 규칙을 찾습니다.<br>• 여전히 규칙과 일치하는 알려지지 않은 리소스를 요청해 보세요 (`https://domain.com/a/evil?_p_dp=1`). | 유니버설 링크 하이재킹: 동일한 도메인을 등록한 악성 iOS 앱이 이러한 링크를 주장하고 피싱 UI를 표시할 수 있습니다. 실제 사례로는 2025년 5월 Temu.com 버그 바운티 보고서에서 공격자가 `/a/*` 경로를 자신의 앱으로 리디렉션할 수 있었습니다. |
|
||||
| 2 | **딥 링크 경로에 대한 서버 측 검증 누락**. | 허용된 경로를 식별한 후, 존재하지 않는 리소스에 대해 `curl`/Burp 요청을 발행하고 HTTP 상태 코드를 관찰합니다. `404` 이외의 모든 것(예: 200/302)은 의심스럽습니다. | 공격자는 허용된 경로 뒤에 임의의 콘텐츠를 호스팅하고 이를 합법적인 도메인을 통해 제공하여 피싱 또는 세션 토큰 도난의 성공률을 높일 수 있습니다. |
|
||||
| 3 | **스킴/호스트 화이트리스트 없이 앱 측 URL 처리** (CVE-2024-10474 – Mozilla Focus < 132). | 직접 `openURL:`/`open(_:options:)` 호출 또는 임의의 URL을 전달하는 JavaScript 브리지를 찾습니다. | 내부 페이지는 브라우저의 URL 바 안전 검사를 우회하는 `myapp://` 또는 `https://` URL을 밀반입할 수 있어 스푸핑 또는 의도하지 않은 권한 있는 작업으로 이어질 수 있습니다. |
|
||||
| 4 | **권한에서 와일드카드 서브도메인 사용** (`*.example.com`). | 권한에서 `*.`를 `grep`합니다. | 서브도메인이 인수되면(예: 사용되지 않는 S3 버킷을 통해) 공격자는 자동으로 유니버설 링크 바인딩을 얻습니다. |
|
||||
| 4 | **권한에서 와일드카드 서브도메인 사용** (`*.example.com`). | 권한에서 `*.`를 `grep`합니다. | 서브도메인이 인수되면(예: 사용되지 않는 S3 버킷을 통해) 공격자는 자동으로 유니버설 링크 바인딩을 획득합니다. |
|
||||
|
||||
### 빠른 체크리스트
|
||||
|
||||
@ -103,7 +103,7 @@ return false
|
||||
|
||||
## 도구
|
||||
|
||||
- [GetUniversal.link](https://getuniversal.link/): 앱의 유니버설 링크 및 AASA 파일의 테스트 및 관리를 단순화하는 데 도움을 줍니다. 도메인을 입력하여 AASA 파일 무결성을 확인하거나 사용자 정의 대시보드를 사용하여 링크 동작을 쉽게 테스트할 수 있습니다. 이 도구는 Apple이 다음에 AASA 파일을 인덱싱할 시기를 결정하는 데도 도움을 줍니다.
|
||||
- [GetUniversal.link](https://getuniversal.link/): 앱의 유니버설 링크 및 AASA 파일의 테스트 및 관리를 단순화하는 데 도움을 줍니다. 도메인을 입력하여 AASA 파일 무결성을 확인하거나 사용자 정의 대시보드를 사용하여 링크 동작을 쉽게 테스트할 수 있습니다. 이 도구는 Apple이 다음에 AASA 파일을 인덱싱할 시기를 결정하는 데도 도움이 됩니다.
|
||||
- [Knil](https://github.com/ethanhuang13/knil): 도메이에 의해 선언된 모든 유니버설 링크를 직접 장치에서 가져오고, 구문 분석하며 **탭 테스트**를 할 수 있는 오픈 소스 iOS 유틸리티입니다.
|
||||
- [universal-link-validator](https://github.com/urbangems/universal-link-validator): 엄격한 AASA 적합성 검사를 수행하고 위험한 와일드카드를 강조하는 CLI / 웹 검증기입니다.
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
Microsoft 원격 프로시저 호출(MSRPC) 프로토콜은 클라이언트-서버 모델로, 프로그램이 네트워크의 세부 사항을 이해하지 않고도 다른 컴퓨터에 위치한 프로그램으로부터 서비스를 요청할 수 있게 해줍니다. 이 프로토콜은 처음에 오픈 소스 소프트웨어에서 파생되었으며, 이후 Microsoft에 의해 개발되고 저작권이 부여되었습니다.
|
||||
|
||||
RPC 엔드포인트 매퍼는 TCP 및 UDP 포트 135, TCP 139 및 445에서 SMB(널 또는 인증된 세션 사용)로, TCP 포트 593에서 웹 서비스로 접근할 수 있습니다.
|
||||
RPC 엔드포인트 매퍼는 TCP 및 UDP 포트 135, TCP 139 및 445에서 SMB(널 또는 인증된 세션 사용)로, 그리고 TCP 포트 593에서 웹 서비스로 접근할 수 있습니다.
|
||||
```
|
||||
135/tcp open msrpc Microsoft Windows RPC
|
||||
```
|
||||
@ -18,7 +18,7 @@ RPC 엔드포인트 매퍼는 TCP 및 UDP 포트 135, TCP 139 및 445에서 SMB(
|
||||
|
||||
## **노출된 RPC 서비스 식별하기**
|
||||
|
||||
TCP, UDP, HTTP 및 SMB를 통한 RPC 서비스의 노출은 RPC 로케이터 서비스 및 개별 엔드포인트를 쿼리하여 확인할 수 있습니다. rpcdump와 같은 도구는 **IFID** 값으로 표시되는 고유한 RPC 서비스의 식별을 용이하게 하여 서비스 세부정보 및 통신 바인딩을 드러냅니다:
|
||||
TCP, UDP, HTTP 및 SMB를 통한 RPC 서비스의 노출은 RPC 로케이터 서비스 및 개별 엔드포인트를 쿼리하여 확인할 수 있습니다. rpcdump와 같은 도구는 **IFID** 값으로 표시된 고유한 RPC 서비스의 식별을 용이하게 하여 서비스 세부정보 및 통신 바인딩을 드러냅니다:
|
||||
```
|
||||
D:\rpctools> rpcdump [-p port] <IP>
|
||||
**IFID**: 5a7b91f8-ff00-11d0-a9b2-00c04fb6e6fc version 1.0
|
||||
@ -67,7 +67,7 @@ rpcdump.py <IP> -p 135
|
||||
|
||||
[https://github.com/mubix/IOXIDResolver](https://github.com/mubix/IOXIDResolver)를 사용하면 [Airbus research](https://www.cyber.airbus.com/the-oxid-resolver-part-1-remote-enumeration-of-network-interfaces-without-any-authentication/)에서 제공하는 _**ServerAlive2**_ 메서드를 _**IOXIDResolver**_ 인터페이스 내에서 악용할 수 있습니다.
|
||||
|
||||
이 방법은 HTB 박스 _APT_에서 **IPv6** 주소로 인터페이스 정보를 얻는 데 사용되었습니다. [여기](https://0xdf.gitlab.io/2021/04/10/htb-apt.html)에서 0xdf APT 작성물을 확인할 수 있으며, 여기에는 _stringbinding_을 사용하는 [Impacket](https://github.com/SecureAuthCorp/impacket/)의 rpcmap.py를 사용하는 대체 방법이 포함되어 있습니다.
|
||||
이 방법은 HTB 박스 _APT_에서 **IPv6** 주소로 인터페이스 정보를 얻는 데 사용되었습니다. [여기](https://0xdf.gitlab.io/2021/04/10/htb-apt.html)에서 0xdf APT 작성물을 확인하면, _stringbinding_을 사용하는 [Impacket](https://github.com/SecureAuthCorp/impacket/)의 rpcmap.py를 사용하는 대체 방법이 포함되어 있습니다.
|
||||
|
||||
### 유효한 자격 증명을 사용한 RCE 실행
|
||||
|
||||
@ -131,10 +131,10 @@ Import-DataToNeo4j -Neo4jHost 192.168.56.10:7474 -Neo4jUsername neo4j
|
||||
```
|
||||
`Import-DataToNeo4j`는 JSON 아티팩트를 그래프 구조로 변환합니다:
|
||||
|
||||
* RPC 서버, 인터페이스 및 프로시저는 **노드**입니다.
|
||||
* RPC 서버, 인터페이스 및 절차는 **노드**입니다.
|
||||
* 상호작용(`ALLOWED`, `DENIED`, `ERROR`)은 **관계**입니다.
|
||||
|
||||
Cypher 쿼리를 사용하여 위험한 프로시저를 빠르게 찾아내거나 충돌 이전의 정확한 호출 체인을 재생할 수 있습니다.
|
||||
Cypher 쿼리를 사용하여 위험한 절차를 빠르게 찾아내거나 충돌 이전의 정확한 호출 체인을 재생할 수 있습니다.
|
||||
|
||||
⚠️ 퍼저는 *파괴적*입니다: 서비스 충돌 및 BSOD를 예상하십시오 – 항상 격리된 VM 스냅샷에서 실행하십시오.
|
||||
|
||||
@ -160,13 +160,13 @@ $rpcinterfaces[0].Procedures[0] | Format-List *
|
||||
# Reverse the MS-EFSR (EfsRpc*) interface into C#
|
||||
Format-RpcClient $rpcinterfaces[0] -Namespace MS_EFSR -OutputPath .\MS_EFSR.cs
|
||||
```
|
||||
생성된 스텁 안에는 다음과 같은 메서드가 있습니다:
|
||||
생성된 스텁 안에는 다음과 같은 메서드가 포함되어 있습니다:
|
||||
```csharp
|
||||
public int EfsRpcOpenFileRaw(out Marshal.NdrContextHandle ctx, string FileName, int Flags) {
|
||||
// marshals parameters & calls opnum 0
|
||||
}
|
||||
```
|
||||
PowerShell 도우미 `Get-RpcClient`는 **대화형 클라이언트 객체**를 생성할 수 있어 즉시 프로시저를 호출할 수 있습니다:
|
||||
PowerShell 도우미 `Get-RpcClient`는 **대화형 클라이언트 객체**를 생성하여 절차를 즉시 호출할 수 있습니다:
|
||||
```powershell
|
||||
$client = Get-RpcClient $rpcinterfaces[0]
|
||||
Connect-RpcClient $client -stringbinding 'ncacn_np:127.0.0.1[\\pipe\\efsrpc]' `
|
||||
@ -183,14 +183,14 @@ $client.EfsRpcOpenFileRaw([ref]$ctx, "\\\127.0.0.1\test", 0)
|
||||
|
||||
정적 인터페이스 지식은 훌륭하지만, 실제로 원하는 것은 *컨텍스트 핸들*과 복잡한 매개변수 체인을 이해하는 **커버리지 기반 퍼징**입니다. 오픈 소스 **MS-RPC-Fuzzer** 프로젝트는 바로 그 워크플로우를 자동화합니다:
|
||||
|
||||
1. 대상 바이너리에서 내보낸 모든 인터페이스/프로시저를 열거합니다(`Get-RpcServer`).
|
||||
1. 대상 바이너리(`Get-RpcServer`)에 의해 내보내진 모든 인터페이스/절차를 열거합니다.
|
||||
2. 각 인터페이스에 대한 동적 클라이언트를 생성합니다(`Format-RpcClient`).
|
||||
3. 원래 **NDR 유형**을 존중하면서 입력 매개변수(와이드 문자열 길이, 정수 범위, 열거형)를 무작위화합니다.
|
||||
4. 한 호출에서 반환된 *컨텍스트 핸들*을 추적하여 후속 프로시저에 자동으로 공급합니다.
|
||||
4. 한 호출에 의해 반환된 *컨텍스트 핸들*을 추적하여 후속 절차에 자동으로 공급합니다.
|
||||
5. 선택한 전송(ALPC, TCP, HTTP 또는 명명된 파이프)에 대해 대량 호출을 실행합니다.
|
||||
6. 종료 상태/오류/타임아웃을 기록하고 *인터페이스 → 프로시저 → 매개변수* 관계 및 충돌 클러스터를 시각화하기 위해 **Neo4j** 가져오기 파일을 내보냅니다.
|
||||
6. 종료 상태/오류/타임아웃을 기록하고 *인터페이스 → 절차 → 매개변수* 관계 및 충돌 클러스터를 시각화하기 위해 **Neo4j** 가져오기 파일을 내보냅니다.
|
||||
|
||||
예제 실행(명명된 파이프 대상):
|
||||
예시 실행(명명된 파이프 대상):
|
||||
```powershell
|
||||
Invoke-MSRPCFuzzer -Pipe "\\.\pipe\efsrpc" -Auth NTLM `
|
||||
-MinLen 1 -MaxLen 0x400 `
|
||||
|
@ -18,7 +18,7 @@
|
||||
|
||||
**Active Directory Domain Services (AD DS)**는 네트워크 내에서 중앙 집중식 관리 및 통신을 위한 다양한 서비스를 포함합니다. 이러한 서비스는 다음과 같습니다:
|
||||
|
||||
1. **도메인 서비스** – 데이터 저장을 중앙 집중화하고 **사용자**와 **도메인** 간의 상호작용을 관리하며, **인증** 및 **검색** 기능을 포함합니다.
|
||||
1. **도메인 서비스** – 데이터 저장소를 중앙 집중화하고 **사용자**와 **도메인** 간의 상호작용을 관리하며, **인증** 및 **검색** 기능을 포함합니다.
|
||||
2. **인증서 서비스** – 안전한 **디지털 인증서**의 생성, 배포 및 관리를 감독합니다.
|
||||
3. **경량 디렉토리 서비스** – **LDAP 프로토콜**을 통해 디렉토리 지원 애플리케이션을 지원합니다.
|
||||
4. **디렉토리 연합 서비스** – 여러 웹 애플리케이션에서 단일 세션으로 사용자를 인증할 수 있는 **싱글 사인온** 기능을 제공합니다.
|
||||
@ -29,12 +29,12 @@
|
||||
|
||||
### **Kerberos Authentication**
|
||||
|
||||
AD를 **공격하는 방법**을 배우려면 **Kerberos 인증 프로세스**를 잘 **이해**해야 합니다.\
|
||||
AD를 **공격하는 방법**을 배우려면 **Kerberos 인증 프로세스**를 정말 잘 **이해**해야 합니다.\
|
||||
[**작동 방식을 아직 모른다면 이 페이지를 읽어보세요.**](kerberos-authentication.md)
|
||||
|
||||
## Cheat Sheet
|
||||
|
||||
AD를 열거/악용하기 위해 실행할 수 있는 명령어를 빠르게 확인하려면 [https://wadcoms.github.io/](https://wadcoms.github.io)에서 많은 정보를 얻을 수 있습니다.
|
||||
AD를 열거/악용하기 위해 실행할 수 있는 명령어를 빠르게 확인하려면 [https://wadcoms.github.io/](https://wadcoms.github.io)로 가세요.
|
||||
|
||||
> [!WARNING]
|
||||
> Kerberos 통신은 **전체 자격 이름(FQDN)**이 필요합니다. IP 주소로 머신에 접근하려고 하면 **NTLM을 사용하고 Kerberos를 사용하지 않습니다**.
|
||||
@ -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 버전에서는 작동하지 않습니다):
|
||||
- 이를 수행하는 방법에 대한 더 많은 정보는 일반 [**펜테스팅 방법론**](../../generic-methodologies-and-resources/pentesting-methodology.md)을 확인하세요.
|
||||
- **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 //`
|
||||
@ -72,7 +72,7 @@ AD 환경에 접근할 수 있지만 자격 증명/세션이 없는 경우 다
|
||||
- [**악성 UPnP 서비스 노출로 자격 증명 수집**](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)[**SDP**](https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856)
|
||||
- [**OSINT**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/external-recon-methodology/index.html):
|
||||
- 내부 문서, 소셜 미디어, 서비스(주로 웹)에서 사용자 이름/이름을 추출하고 공개적으로 이용 가능한 자료에서도 추출합니다.
|
||||
- 회사 직원의 전체 이름을 찾으면 다양한 AD **사용자 이름 규칙**을 시도해 볼 수 있습니다 (**[읽어보세요](https://activedirectorypro.com/active-directory-user-naming-convention/)**). 가장 일반적인 규칙은: _NameSurname_, _Name.Surname_, _NamSur_ (각각 3글자), _Nam.Sur_, _NSurname_, _N.Surname_, _SurnameName_, _Surname.Name_, _SurnameN_, _Surname.N_, 3 _무작위 문자와 3 무작위 숫자_ (abc123)입니다.
|
||||
- 회사 직원의 전체 이름을 찾으면 다양한 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)입니다.
|
||||
- 도구:
|
||||
- [w0Tx/generate-ad-username](https://github.com/w0Tx/generate-ad-username)
|
||||
- [urbanadventurer/username-anarchy](https://github.com/urbanadventurer/username-anarchy)
|
||||
@ -110,14 +110,14 @@ Get-GlobalAddressList -ExchHostname [ip] -UserName [domain]\[username] -Password
|
||||
> [!WARNING]
|
||||
> 사용자 이름 목록은 [**이 github repo**](https://github.com/danielmiessler/SecLists/tree/master/Usernames/Names)와 이곳 ([**statistically-likely-usernames**](https://github.com/insidetrust/statistically-likely-usernames))에서 찾을 수 있습니다.
|
||||
>
|
||||
> 그러나 이 전에 수행했어야 하는 정찰 단계에서 **회사의 직원 이름**을 알고 있어야 합니다. 이름과 성을 가지고 [**namemash.py**](https://gist.github.com/superkojiman/11076951) 스크립트를 사용하여 잠재적인 유효 사용자 이름을 생성할 수 있습니다.
|
||||
> 그러나, 이 전에 수행했어야 할 정찰 단계에서 **회사의 직원 이름**을 알고 있어야 합니다. 이름과 성을 가지고 [**namemash.py**](https://gist.github.com/superkojiman/11076951) 스크립트를 사용하여 잠재적인 유효 사용자 이름을 생성할 수 있습니다.
|
||||
|
||||
### 하나 이상의 사용자 이름 알기
|
||||
|
||||
좋습니다, 유효한 사용자 이름이 있지만 비밀번호는 없는 경우... 다음을 시도해 보세요:
|
||||
좋습니다, 유효한 사용자 이름이 있지만 비밀번호가 없는 경우... 그러면 시도해 보세요:
|
||||
|
||||
- [**ASREPRoast**](asreproast.md): 사용자가 _DONT_REQ_PREAUTH_ 속성이 **없다면**, 해당 사용자에 대한 **AS_REP 메시지**를 요청할 수 있으며, 이 메시지는 사용자의 비밀번호 파생으로 암호화된 데이터를 포함합니다.
|
||||
- [**Password Spraying**](password-spraying.md): 발견된 각 사용자에 대해 가장 **일반적인 비밀번호**를 시도해 보세요. 어떤 사용자가 나쁜 비밀번호를 사용하고 있을 수 있습니다(비밀번호 정책을 염두에 두세요!).
|
||||
- [**ASREPRoast**](asreproast.md): 사용자가 _DONT_REQ_PREAUTH_ 속성이 **없다면**, 해당 사용자에 대한 **AS_REP 메시지를 요청**할 수 있으며, 이 메시지는 사용자의 비밀번호 파생으로 암호화된 데이터를 포함합니다.
|
||||
- [**Password Spraying**](password-spraying.md): 발견된 각 사용자에 대해 가장 **일반적인 비밀번호**를 시도해 보세요. 아마도 어떤 사용자가 나쁜 비밀번호를 사용하고 있을 것입니다 (비밀번호 정책을 염두에 두세요!).
|
||||
- OWA 서버를 **스프레이**하여 사용자 메일 서버에 접근을 시도할 수도 있습니다.
|
||||
|
||||
{{#ref}}
|
||||
@ -126,7 +126,7 @@ password-spraying.md
|
||||
|
||||
### LLMNR/NBT-NS 중독
|
||||
|
||||
네트워크의 일부 프로토콜을 **중독**하여 **해시**를 **획득**할 수 있습니다:
|
||||
네트워크의 일부 프로토콜을 **중독**하여 **해시**를 **획득**할 수 있을지도 모릅니다:
|
||||
|
||||
{{#ref}}
|
||||
../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md
|
||||
@ -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,27 +156,27 @@ kerberos-double-hop-problem.md
|
||||
|
||||
### 열거
|
||||
|
||||
계정을 손상시키는 것은 **전체 도메인을 손상시키기 위한 큰 단계**입니다. 이제 **Active Directory 열거**를 시작할 수 있습니다:
|
||||
계정을 손상시키는 것은 **전체 도메인을 손상시키기 위한 큰 단계**입니다. 이제 **액티브 디렉토리 열거**를 시작할 수 있습니다:
|
||||
|
||||
[**ASREPRoast**](asreproast.md)와 관련하여 이제 모든 가능한 취약한 사용자를 찾을 수 있으며, [**Password Spraying**](password-spraying.md)와 관련하여 손상된 계정의 비밀번호, 빈 비밀번호 및 새로운 유망한 비밀번호를 시도할 수 있습니다.
|
||||
[**ASREPRoast**](asreproast.md)와 관련하여, 이제 모든 가능한 취약한 사용자를 찾을 수 있으며, [**Password Spraying**](password-spraying.md)와 관련하여 손상된 계정의 비밀번호, 빈 비밀번호 및 새로운 유망한 비밀번호를 시도할 수 있습니다.
|
||||
|
||||
- [**CMD를 사용하여 기본 정찰 수행**](../basic-cmd-for-pentesters.md#domain-info)
|
||||
- [**powershell을 사용하여 정찰**](../basic-powershell-for-pentesters/index.html)할 수도 있으며, 이는 더 은밀합니다.
|
||||
- [**powerview 사용**](../basic-powershell-for-pentesters/powerview.md)하여 더 자세한 정보를 추출할 수 있습니다.
|
||||
- Active Directory에서 정찰을 위한 또 다른 훌륭한 도구는 [**BloodHound**](bloodhound.md)입니다. 이는 **그리 은밀하지 않지만**(사용하는 수집 방법에 따라 다름), **그것에 대해 신경 쓰지 않는다면** 꼭 시도해 보세요. 사용자가 RDP할 수 있는 위치, 다른 그룹으로의 경로 등을 찾을 수 있습니다.
|
||||
- [**정찰을 위한 PowerShell 사용**](../basic-powershell-for-pentesters/index.html)도 가능합니다. 이는 더 은밀할 것입니다.
|
||||
- [**PowerView 사용**](../basic-powershell-for-pentesters/powerview.md)하여 더 자세한 정보를 추출할 수 있습니다.
|
||||
- 액티브 디렉토리에서 정찰을 위한 또 다른 훌륭한 도구는 [**BloodHound**](bloodhound.md)입니다. 이는 **그리 은밀하지 않습니다** (사용하는 수집 방법에 따라 다름), 그러나 **그것에 대해 신경 쓰지 않는다면** 꼭 시도해 보세요. 사용자가 RDP할 수 있는 위치를 찾고, 다른 그룹으로 가는 경로를 찾는 등의 작업을 할 수 있습니다.
|
||||
- **기타 자동화된 AD 열거 도구는:** [**AD Explorer**](bloodhound.md#ad-explorer)**,** [**ADRecon**](bloodhound.md#adrecon)**,** [**Group3r**](bloodhound.md#group3r)**,** [**PingCastle**](bloodhound.md#pingcastle)**.**
|
||||
- [**AD의 DNS 레코드**](ad-dns-records.md)도 흥미로운 정보를 포함할 수 있습니다.
|
||||
- 디렉토리를 열거하는 데 사용할 수 있는 **GUI 도구**는 **SysInternal** Suite의 **AdExplorer.exe**입니다.
|
||||
- **ldapsearch**를 사용하여 LDAP 데이터베이스에서 _userPassword_ 및 _unixUserPassword_ 필드에서 자격 증명을 찾거나 _Description_을 검색할 수 있습니다. cf. [PayloadsAllTheThings의 AD 사용자 주석에서 비밀번호](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment)에서 다른 방법을 확인하세요.
|
||||
- **Linux**를 사용하는 경우 [**pywerview**](https://github.com/the-useless-one/pywerview)를 사용하여 도메인을 열거할 수 있습니다.
|
||||
- 자동화 도구로는 다음을 시도할 수 있습니다:
|
||||
- **Linux**를 사용하는 경우, [**pywerview**](https://github.com/the-useless-one/pywerview)를 사용하여 도메인을 열거할 수 있습니다.
|
||||
- 자동화 도구로는:
|
||||
- [**tomcarver16/ADSearch**](https://github.com/tomcarver16/ADSearch)
|
||||
- [**61106960/adPEAS**](https://github.com/61106960/adPEAS)
|
||||
- **모든 도메인 사용자 추출하기**
|
||||
|
||||
Windows에서 도메인 사용자 이름을 얻는 것은 매우 쉽습니다(`net user /domain`, `Get-DomainUser` 또는 `wmic useraccount get name,sid`). Linux에서는 `GetADUsers.py -all -dc-ip 10.10.10.110 domain.com/username` 또는 `enum4linux -a -u "user" -p "password" <DC IP>`를 사용할 수 있습니다.
|
||||
Windows에서 모든 도메인 사용자 이름을 얻는 것은 매우 쉽습니다 (`net user /domain`, `Get-DomainUser` 또는 `wmic useraccount get name,sid`). Linux에서는 `GetADUsers.py -all -dc-ip 10.10.10.110 domain.com/username` 또는 `enum4linux -a -u "user" -p "password" <DC IP>`를 사용할 수 있습니다.
|
||||
|
||||
> 이 열거 섹션이 작아 보일 수 있지만, 이는 모든 것 중에서 가장 중요한 부분입니다. 링크를 확인하세요(주로 cmd, powershell, powerview 및 BloodHound 링크), 도메인을 열거하는 방법을 배우고 편안해질 때까지 연습하세요. 평가 중에는 DA로 가는 길을 찾거나 아무것도 할 수 없다고 결정하는 중요한 순간이 될 것입니다.
|
||||
> 이 열거 섹션이 작아 보일 수 있지만, 이는 모든 것 중에서 가장 중요한 부분입니다. 링크를 확인하세요 (주로 cmd, powershell, powerview 및 BloodHound 링크), 도메인을 열거하는 방법을 배우고 편안해질 때까지 연습하세요. 평가 중에는 DA로 가는 길을 찾거나 아무것도 할 수 없다는 결정을 내리는 중요한 순간이 될 것입니다.
|
||||
|
||||
### Kerberoast
|
||||
|
||||
@ -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
|
||||
@ -210,11 +210,11 @@ kerberoast.md
|
||||
```
|
||||
### NTLM Relay
|
||||
|
||||
활성 디렉토리를 열거하는 데 성공했다면 **더 많은 이메일과 네트워크에 대한 더 나은 이해**를 갖게 될 것입니다. NTLM [**릴레이 공격**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)**을 강제로 수행할 수 있을지도 모릅니다.**
|
||||
활성 디렉토리를 열거하는 데 성공했다면 **더 많은 이메일과 네트워크에 대한 더 나은 이해**를 갖게 될 것입니다. NTLM [**릴레이 공격**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)**을 강제할 수 있을지도 모릅니다.**
|
||||
|
||||
### 컴퓨터 공유에서 자격 증명 찾기 | SMB 공유
|
||||
|
||||
기본 자격 증명을 얻었으니 **AD 내부에서 공유되고 있는 흥미로운 파일을 찾을 수 있는지 확인해야 합니다**. 수동으로 할 수 있지만 매우 지루하고 반복적인 작업입니다(수백 개의 문서를 확인해야 하는 경우 더더욱 그렇습니다).
|
||||
기본 자격 증명을 얻었으니 **AD 내부에서 공유되고 있는 흥미로운 파일을 찾을 수 있는지 확인해야 합니다**. 수동으로 할 수 있지만 매우 지루하고 반복적인 작업입니다(수백 개의 문서를 확인해야 하는 경우 더더욱).
|
||||
|
||||
[**사용할 수 있는 도구에 대해 알아보려면 이 링크를 따르세요.**](../../network-services-pentesting/pentesting-smb/index.html#domain-shared-folders-search)
|
||||
|
||||
@ -240,7 +240,7 @@ printnightmare.md
|
||||
|
||||
### 해시 추출
|
||||
|
||||
운 좋게도 [AsRepRoast](asreproast.md), [Password Spraying](password-spraying.md), [Kerberoast](kerberoast.md), [Responder](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) 및 릴레이를 포함하여 [EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md), [로컬에서 권한 상승](../windows-local-privilege-escalation/index.html) 등을 통해 **로컬 관리자** 계정을 **손상시키는 데 성공했다면**.\
|
||||
운 좋게도 [AsRepRoast](asreproast.md), [Password Spraying](password-spraying.md), [Kerberoast](kerberoast.md), [Responder](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) 포함하여 릴레이, [EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md), [로컬에서 권한 상승](../windows-local-privilege-escalation/index.html) 등을 통해 **로컬 관리자** 계정을 **손상시키는 데 성공했다면**.\
|
||||
그런 다음, 메모리와 로컬에서 모든 해시를 덤프할 시간입니다.\
|
||||
[**해시를 얻는 다양한 방법에 대한 이 페이지를 읽어보세요.**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md)
|
||||
|
||||
@ -252,7 +252,7 @@ printnightmare.md
|
||||
|
||||
### 해시 우회/키 전달
|
||||
|
||||
이 공격은 **사용자 NTLM 해시를 사용하여 Kerberos 티켓을 요청하는** 것을 목표로 하며, 일반적인 NTLM 프로토콜을 통한 해시 전달의 대안입니다. 따라서, NTLM 프로토콜이 비활성화되고 **Kerberos만 인증 프로토콜로 허용되는** 네트워크에서 특히 **유용할 수 있습니다**.
|
||||
이 공격은 **사용자 NTLM 해시를 사용하여 Kerberos 티켓을 요청하는** 것을 목표로 하며, 일반적인 NTLM 프로토콜을 통한 해시 전달의 대안입니다. 따라서, NTLM 프로토콜이 비활성화되고 **Kerberos만 인증 프로토콜로 허용되는 네트워크에서 특히 유용할 수 있습니다**.
|
||||
|
||||
{{#ref}}
|
||||
over-pass-the-hash-pass-the-key.md
|
||||
@ -275,12 +275,12 @@ pass-the-ticket.md
|
||||
crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9cab376ecd08491764a0 | grep +
|
||||
```
|
||||
> [!WARNING]
|
||||
> 이 방법은 상당히 **시끄럽고** **LAPS**가 이를 **완화**할 수 있습니다.
|
||||
> 이 방법은 상당히 **시끄럽고** **LAPS**가 이를 **완화**할 것입니다.
|
||||
|
||||
### MSSQL 남용 및 신뢰 링크
|
||||
|
||||
사용자가 **MSSQL 인스턴스에 접근할 수 있는 권한**이 있다면, 그는 MSSQL 호스트에서 **명령을 실행**하거나 (SA로 실행 중인 경우), NetNTLM **해시**를 **탈취**하거나 심지어 **중계** **공격**을 수행할 수 있습니다.\
|
||||
또한, MSSQL 인스턴스가 다른 MSSQL 인스턴스에 의해 신뢰받는 경우(데이터베이스 링크). 사용자가 신뢰된 데이터베이스에 대한 권한을 가지고 있다면, 그는 **신뢰 관계를 사용하여 다른 인스턴스에서도 쿼리를 실행할 수 있습니다**. 이러한 신뢰는 연결될 수 있으며, 사용자가 명령을 실행할 수 있는 잘못 구성된 데이터베이스를 찾을 수 있는 시점이 있을 수 있습니다.\
|
||||
또한, MSSQL 인스턴스가 다른 MSSQL 인스턴스에 의해 신뢰받는 경우(데이터베이스 링크). 사용자가 신뢰된 데이터베이스에 대한 권한을 가지고 있다면, 그는 **신뢰 관계를 사용하여 다른 인스턴스에서도 쿼리를 실행할 수 있습니다**. 이러한 신뢰는 연결될 수 있으며, 어느 시점에서 사용자는 명령을 실행할 수 있는 잘못 구성된 데이터베이스를 찾을 수 있습니다.\
|
||||
**데이터베이스 간의 링크는 포리스트 신뢰를 넘어 작동합니다.**
|
||||
|
||||
{{#ref}}
|
||||
@ -300,7 +300,7 @@ unconstrained-delegation.md
|
||||
### 제약된 위임
|
||||
|
||||
사용자 또는 컴퓨터가 "제약된 위임"을 허용받으면, **컴퓨터의 일부 서비스에 접근하기 위해 어떤 사용자를 가장할 수 있습니다**.\
|
||||
그런 다음, 이 사용자/컴퓨터의 **해시를 손상시키면** **모든 사용자를 가장할 수 있습니다** (도메인 관리자 포함) 특정 서비스에 접근할 수 있습니다.
|
||||
그런 다음, 이 사용자/컴퓨터의 **해시를 손상시키면** **모든 사용자를 가장할 수 있습니다** (도메인 관리자 포함) 서비스에 접근하기 위해.
|
||||
|
||||
{{#ref}}
|
||||
constrained-delegation.md
|
||||
@ -341,7 +341,7 @@ rdp-sessions-abuse.md
|
||||
|
||||
### LAPS
|
||||
|
||||
**LAPS**는 도메인에 가입된 컴퓨터에서 **로컬 관리자 비밀번호**를 관리하는 시스템을 제공하여, 비밀번호가 **무작위화**, 고유하며 자주 **변경**되도록 보장합니다. 이러한 비밀번호는 Active Directory에 저장되며, 권한이 있는 사용자만 ACL을 통해 접근할 수 있습니다. 이러한 비밀번호에 접근할 수 있는 충분한 권한이 있으면, 다른 컴퓨터로 피벗할 수 있습니다.
|
||||
**LAPS**는 도메인에 가입된 컴퓨터에서 **로컬 관리자 비밀번호**를 관리하는 시스템을 제공하여, 비밀번호가 **무작위화**, 고유하며 자주 **변경**되도록 보장합니다. 이러한 비밀번호는 Active Directory에 저장되며, 권한이 있는 사용자만 ACL을 통해 접근할 수 있습니다. 이러한 비밀번호에 접근할 수 있는 충분한 권한이 있으면, 다른 컴퓨터로 피벗하는 것이 가능해집니다.
|
||||
|
||||
{{#ref}}
|
||||
laps.md
|
||||
@ -369,9 +369,9 @@ ad-certificates/domain-escalation.md
|
||||
|
||||
**도메인 관리자** 또는 더 나아가 **엔터프라이즈 관리자** 권한을 얻으면, **도메인 데이터베이스**를 **덤프**할 수 있습니다: _ntds.dit_.
|
||||
|
||||
[**DCSync 공격에 대한 더 많은 정보는 여기에서 찾을 수 있습니다**](dcsync.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)
|
||||
|
||||
### 권한 상승을 위한 지속성
|
||||
|
||||
@ -440,7 +440,7 @@ ad-certificates/domain-persistence.md
|
||||
|
||||
### AdminSDHolder 그룹
|
||||
|
||||
Active Directory의 **AdminSDHolder** 객체는 **특권 그룹**(예: 도메인 관리자 및 엔터프라이즈 관리자)의 보안을 보장하기 위해 이러한 그룹에 표준 **액세스 제어 목록(ACL)**을 적용하여 무단 변경을 방지합니다. 그러나 이 기능은 악용될 수 있습니다. 공격자가 AdminSDHolder의 ACL을 수정하여 일반 사용자에게 전체 접근 권한을 부여하면, 해당 사용자는 모든 특권 그룹에 대한 광범위한 제어를 얻게 됩니다. 이 보안 조치는 보호를 위해 설계되었지만, 면밀히 모니터링되지 않으면 불필요한 접근을 허용할 수 있습니다.
|
||||
Active Directory의 **AdminSDHolder** 객체는 **특권 그룹**(예: 도메인 관리자 및 엔터프라이즈 관리자)의 보안을 보장하기 위해 이러한 그룹에 표준 **액세스 제어 목록(ACL)**을 적용하여 무단 변경을 방지합니다. 그러나 이 기능은 악용될 수 있습니다. 공격자가 AdminSDHolder의 ACL을 수정하여 일반 사용자에게 전체 액세스를 부여하면, 해당 사용자는 모든 특권 그룹에 대한 광범위한 제어를 얻게 됩니다. 이 보안 조치는 보호를 위해 설계되었지만, 면밀히 모니터링되지 않으면 불필요한 접근을 허용할 수 있습니다.
|
||||
|
||||
[**AdminDSHolder 그룹에 대한 더 많은 정보는 여기에서 확인할 수 있습니다.**](privileged-groups-and-token-privileges.md#adminsdholder-group)
|
||||
|
||||
@ -454,7 +454,7 @@ dsrm-credentials.md
|
||||
|
||||
### ACL 지속성
|
||||
|
||||
특정 도메인 객체에 대해 **사용자에게** **특별 권한**을 부여하여 사용자가 **향후 권한을 상승시킬 수 있도록** 할 수 있습니다.
|
||||
특정 도메인 객체에 대해 **사용자에게** **특별 권한**을 부여하여 사용자가 **미래에 권한을 상승시킬 수 있도록** 할 수 있습니다.
|
||||
|
||||
{{#ref}}
|
||||
acl-persistence-abuse/
|
||||
@ -462,7 +462,7 @@ acl-persistence-abuse/
|
||||
|
||||
### 보안 설명자
|
||||
|
||||
**보안 설명자**는 **객체**가 **다른 객체**에 대해 가진 **권한**을 **저장**하는 데 사용됩니다. 객체의 **보안 설명자**에 **조금만 변경**을 가하면, 특권 그룹의 구성원이 되지 않고도 해당 객체에 대한 매우 흥미로운 권한을 얻을 수 있습니다.
|
||||
**보안 설명자**는 **객체**가 **객체**에 대해 가진 **권한**을 **저장**하는 데 사용됩니다. 객체의 **보안 설명자**에 **조금만 변경**을 가하면, 특권 그룹의 구성원이 되지 않고도 해당 객체에 대한 매우 흥미로운 권한을 얻을 수 있습니다.
|
||||
|
||||
{{#ref}}
|
||||
security-descriptors.md
|
||||
@ -476,10 +476,10 @@ security-descriptors.md
|
||||
skeleton-key.md
|
||||
{{#endref}}
|
||||
|
||||
### 사용자 정의 SSP
|
||||
### 사용자 지정 SSP
|
||||
|
||||
[SSP(보안 지원 제공자)가 무엇인지 여기에서 알아보세요.](../authentication-credentials-uac-and-efs/index.html#security-support-provider-interface-sspi)\
|
||||
자신의 **SSP**를 생성하여 머신에 접근하는 데 사용되는 **자격 증명**을 **명확한 텍스트**로 **캡처**할 수 있습니다.
|
||||
자신의 **SSP**를 생성하여 **명확한 텍스트**로 머신에 접근하는 데 사용되는 **자격 증명**을 **캡처**할 수 있습니다.
|
||||
|
||||
{{#ref}}
|
||||
custom-ssp.md
|
||||
@ -487,7 +487,7 @@ custom-ssp.md
|
||||
|
||||
### DCShadow
|
||||
|
||||
AD에 **새 도메인 컨트롤러**를 등록하고 이를 사용하여 지정된 객체에 **속성**(SIDHistory, SPNs...)을 **푸시**합니다 **수정 사항에 대한** **로그**를 남기지 않고. **DA** 권한이 필요하며 **루트 도메인** 내에 있어야 합니다.\
|
||||
AD에 **새 도메인 컨트롤러**를 등록하고 이를 사용하여 지정된 객체에 **속성**(SIDHistory, SPNs...)을 **푸시**합니다 **수정**에 대한 **로그**를 남기지 않고. **DA** 권한이 필요하며 **루트 도메인** 내에 있어야 합니다.\
|
||||
잘못된 데이터를 사용하면, 매우 불쾌한 로그가 나타날 수 있습니다.
|
||||
|
||||
{{#ref}}
|
||||
@ -509,39 +509,39 @@ 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**의 **클라이언트 컴퓨터**가 **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. **도메인 1**의 **클라이언트 컴퓨터**가 **NTLM 해시**를 사용하여 **도메인 컨트롤러(DC1)**에서 **티켓 부여 티켓(TGT)**을 요청하는 것으로 프로세스가 시작됩니다.
|
||||
2. 클라이언트가 성공적으로 인증되면 DC1은 새로운 TGT를 발급합니다.
|
||||
3. 클라이언트는 **도메인 2**의 리소스에 접근하기 위해 DC1에서 **인터-리얼름 TGT**를 요청합니다.
|
||||
4. 인터-리얼름 TGT는 DC1과 DC2 간의 양방향 도메인 신뢰의 일환으로 공유된 **신뢰 키**로 암호화됩니다.
|
||||
5. 클라이언트는 인터-리얼름 TGT를 **도메인 2의 도메인 컨트롤러(DC2)**로 가져갑니다.
|
||||
6. DC2는 공유된 신뢰 키를 사용하여 인터-리얼름 TGT를 검증하고, 유효한 경우 클라이언트가 접근하고자 하는 도메인 2의 서버에 대한 **티켓 부여 서비스(TGS)**를 발급합니다.
|
||||
7. 마지막으로 클라이언트는 이 TGS를 서버에 제시하여, 서버의 계정 해시로 암호화된 서비스에 접근합니다.
|
||||
|
||||
### 다양한 신뢰
|
||||
|
||||
**신뢰는 1방향 또는 2방향**일 수 있다는 점에 유의하는 것이 중요합니다. 2방향 옵션에서는 두 도메인이 서로를 신뢰하지만, **1방향** 신뢰 관계에서는 한 도메인이 **신뢰받는** 도메인이고 다른 도메인이 **신뢰하는** 도메인이 됩니다. 마지막 경우, **신뢰받는 도메인에서 신뢰하는 도메인 내의 리소스에만 접근할 수 있습니다**.
|
||||
**신뢰는 1방향 또는 2방향**일 수 있다는 점에 유의해야 합니다. 2방향 옵션에서는 두 도메인이 서로를 신뢰하지만, **1방향** 신뢰 관계에서는 한 도메인이 **신뢰받는** 도메인이고 다른 도메인이 **신뢰하는** 도메인입니다. 마지막 경우, **신뢰받는 도메인에서 신뢰하는 도메인 내부의 리소스에만 접근할 수 있습니다**.
|
||||
|
||||
도메인 A가 도메인 B를 신뢰하면, A는 신뢰하는 도메인이고 B는 신뢰받는 도메인입니다. 또한, **도메인 A**에서는 이것이 **아웃바운드 신뢰**가 되고, **도메인 B**에서는 이것이 **인바운드 신뢰**가 됩니다.
|
||||
도메인 A가 도메인 B를 신뢰하면, A는 신뢰하는 도메인이고 B는 신뢰받는 도메인입니다. 또한, **도메인 A**에서는 이것이 **아웃바운드 신뢰**가 되고, **도메인 B**에서는 **인바운드 신뢰**가 됩니다.
|
||||
|
||||
**다양한 신뢰 관계**
|
||||
|
||||
- **부모-자식 신뢰**: 이는 동일한 포리스트 내에서 일반적인 설정으로, 자식 도메인은 자동으로 부모 도메인과 양방향 전이 신뢰를 가집니다. 본질적으로, 이는 인증 요청이 부모와 자식 간에 원활하게 흐를 수 있음을 의미합니다.
|
||||
- **크로스 링크 신뢰**: "단축 신뢰"라고도 하며, 자식 도메인 간에 설정되어 참조 프로세스를 가속화합니다. 복잡한 포리스트에서는 인증 참조가 일반적으로 포리스트 루트로 올라갔다가 대상 도메인으로 내려가야 합니다. 크로스 링크를 생성함으로써 여정을 단축할 수 있으며, 이는 지리적으로 분산된 환경에서 특히 유용합니다.
|
||||
- **외부 신뢰**: 이는 서로 다른, 관련 없는 도메인 간에 설정되며 본질적으로 비전이적입니다. [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 필터링을 통해 보안이 강화됩니다.
|
||||
- **트리 루트 신뢰**: 이러한 신뢰는 포리스트 루트 도메인과 새로 추가된 트리 루트 간에 자동으로 설정됩니다. 일반적으로 자주 발생하지 않지만, 트리 루트 신뢰는 포리스트에 새로운 도메인 트리를 추가하는 데 중요하며, 이를 통해 고유한 도메인 이름을 유지하고 양방향 전이성을 보장합니다. [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를 신뢰함) 또는 **비전이적**일 수 있습니다.
|
||||
- 신뢰 관계는 **양방향 신뢰**(서로를 신뢰함) 또는 **일방향 신뢰**(오직 한 쪽만 다른 쪽을 신뢰함)로 설정될 수 있습니다.
|
||||
- 신뢰 관계는 **양방향 신뢰**(서로를 신뢰함) 또는 **일방향 신뢰**(한 쪽만 다른 쪽을 신뢰함)로 설정될 수 있습니다.
|
||||
|
||||
### 공격 경로
|
||||
|
||||
@ -553,14 +553,14 @@ Microsoft는 **포리스트**를 보안 경계로 간주합니다. 이는 **단
|
||||
공격자는 다음 세 가지 주요 메커니즘을 통해 다른 도메인의 리소스에 접근할 수 있습니다:
|
||||
|
||||
- **로컬 그룹 구성원 자격**: 주체는 서버의 "관리자" 그룹과 같은 머신의 로컬 그룹에 추가될 수 있으며, 이를 통해 해당 머신에 대한 상당한 제어를 부여받습니다.
|
||||
- **외부 도메인 그룹 구성원 자격**: 주체는 외부 도메인 내의 그룹의 구성원이 될 수도 있습니다. 그러나 이 방법의 효과는 신뢰의 성격과 그룹의 범위에 따라 달라집니다.
|
||||
- **액세스 제어 목록(ACL)**: 주체는 **ACL**에 지정될 수 있으며, 특히 **DACL** 내의 **ACE**로서 특정 리소스에 대한 접근을 제공합니다. ACL, DACL 및 ACE의 메커니즘에 대해 더 깊이 파고들고자 하는 분들을 위해, "[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)"라는 백서가 귀중한 자료입니다.
|
||||
- **외부 도메인 그룹 구성원 자격**: 주체는 외부 도메인 내의 그룹의 구성원일 수도 있습니다. 그러나 이 방법의 효과는 신뢰의 성격과 그룹의 범위에 따라 달라집니다.
|
||||
- **액세스 제어 목록(ACL)**: 주체는 **ACL**에 지정될 수 있으며, 특히 **DACL** 내의 **ACE**의 엔티티로서 특정 리소스에 대한 접근을 제공합니다. ACL, DACL 및 ACE의 메커니즘에 대해 더 깊이 파고들고자 하는 분들을 위해, "[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)"라는 백서가 귀중한 자료입니다.
|
||||
|
||||
### 외부 사용자/그룹 권한 찾기
|
||||
|
||||
**`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,17 +612,17 @@ 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에 대한 비밀번호를 계산할 수 있습니다.
|
||||
|
||||
자세한 분석 및 단계별 안내는 다음에서 확인할 수 있습니다:
|
||||
|
||||
@ -636,13 +636,13 @@ golden-dmsa-gmsa.md
|
||||
|
||||
이 방법은 새로운 특권 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 공격을 실행할 수 있습니다.
|
||||
ADCS ESC5 취약점은 공인 키 인프라(PKI) 객체에 대한 제어를 목표로 하여 포리스트 내의 모든 사용자로 인증할 수 있는 인증서 템플릿을 생성합니다. PKI 객체는 Configuration NC에 위치하므로, 쓰기 가능한 자식 DC를 타협하면 ESC5 공격을 실행할 수 있습니다.
|
||||
|
||||
자세한 내용은 [DA에서 EA로 ESC5](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c)에서 확인할 수 있습니다. ADCS가 없는 시나리오에서는 공격자가 필요한 구성 요소를 설정할 수 있으며, 이는 [자식 도메인 관리자에서 엔터프라이즈 관리자까지 상승](https://www.pkisolutions.com/escalating-from-child-domains-admins-to-enterprise-admins-in-5-minutes-by-abusing-ad-cs-a-follow-up/)에서 논의됩니다.
|
||||
자세한 내용은 [DA에서 EA로 ESC5](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c)에서 읽을 수 있습니다. ADCS가 없는 시나리오에서는 공격자가 필요한 구성 요소를 설정할 수 있는 능력이 있으며, 이는 [자식 도메인 관리자에서 엔터프라이즈 관리자까지 상승](https://www.pkisolutions.com/escalating-from-child-domains-admins-to-enterprise-admins-in-5-minutes-by-abusing-ad-cs-a-follow-up/)에서 논의됩니다.
|
||||
|
||||
### 외부 포리스트 도메인 - 단방향(수신) 또는 양방향
|
||||
```bash
|
||||
@ -655,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
|
||||
@ -675,7 +675,7 @@ WhenChanged : 2/19/2021 10:15:24 PM
|
||||
```
|
||||
이 시나리오에서 **귀하의 도메인**은 **다른 도메인**의 주체에게 **특권**을 **신뢰**하고 있습니다.
|
||||
|
||||
그러나 **도메인이 신뢰**될 때, 신뢰하는 도메인은 **예측 가능한 이름**을 가진 **사용자**를 생성하고 **신뢰된 비밀번호**를 **비밀번호**로 사용합니다. 이는 **신뢰하는 도메인의 사용자에 접근하여 신뢰된 도메인에 들어가** 이를 열거하고 더 많은 특권을 상승시키려는 것이 가능하다는 것을 의미합니다:
|
||||
그러나 **도메인이 신뢰**될 때, 신뢰하는 도메인은 **예측 가능한 이름**을 가진 **사용자**를 **생성**하며, 이 사용자는 **신뢰된 비밀번호**를 **비밀번호**로 사용합니다. 이는 **신뢰하는 도메인에서 사용자를 접근하여 신뢰된 도메인에 들어가** 이를 열거하고 더 많은 특권을 상승시키려는 것이 가능하다는 것을 의미합니다:
|
||||
|
||||
{{#ref}}
|
||||
external-forest-domain-one-way-outbound.md
|
||||
@ -684,7 +684,7 @@ external-forest-domain-one-way-outbound.md
|
||||
신뢰된 도메인을 타협하는 또 다른 방법은 도메인 신뢰의 **반대 방향**에 생성된 [**SQL 신뢰 링크**](abusing-ad-mssql.md#mssql-trusted-links)를 찾는 것입니다(이는 그리 흔하지 않습니다).
|
||||
|
||||
신뢰된 도메인을 타협하는 또 다른 방법은 **신뢰된 도메인에서 접근할 수 있는** 머신에서 대기하여 **RDP**를 통해 로그인하는 것입니다. 그런 다음 공격자는 RDP 세션 프로세스에 코드를 주입하고 **피해자의 원래 도메인에 접근**할 수 있습니다.\
|
||||
게다가, 만약 **피해자가 그의 하드 드라이브를 마운트했다면**, 공격자는 **RDP 세션** 프로세스에서 **하드 드라이브의 시작 폴더**에 **백도어**를 저장할 수 있습니다. 이 기술은 **RDPInception**이라고 불립니다.
|
||||
게다가, 만약 **피해자가 하드 드라이브를 마운트했다면**, 공격자는 **RDP 세션** 프로세스에서 **하드 드라이브의 시작 폴더**에 **백도어**를 저장할 수 있습니다. 이 기술은 **RDPInception**이라고 불립니다.
|
||||
|
||||
{{#ref}}
|
||||
rdp-sessions-abuse.md
|
||||
@ -717,26 +717,26 @@ https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-move
|
||||
### **자격 증명 보호를 위한 방어 조치**
|
||||
|
||||
- **도메인 관리자 제한**: 도메인 관리자는 도메인 컨트롤러에만 로그인할 수 있도록 권장하며, 다른 호스트에서의 사용은 피해야 합니다.
|
||||
- **서비스 계정 권한**: 보안을 유지하기 위해 서비스는 도메인 관리자(DA) 권한으로 실행되어서는 안 됩니다.
|
||||
- **임시 권한 제한**: DA 권한이 필요한 작업의 경우, 그 기간을 제한해야 합니다. 이는 다음과 같이 수행할 수 있습니다: `Add-ADGroupMember -Identity ‘Domain Admins’ -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)`
|
||||
- **서비스 계정 특권**: 보안을 유지하기 위해 서비스는 도메인 관리자(DA) 특권으로 실행되어서는 안 됩니다.
|
||||
- **임시 특권 제한**: DA 특권이 필요한 작업의 경우, 그 기간을 제한해야 합니다. 이는 다음과 같이 수행할 수 있습니다: `Add-ADGroupMember -Identity ‘Domain Admins’ -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)`
|
||||
|
||||
### **기만 기술 구현**
|
||||
|
||||
- 기만을 구현하는 것은 비밀번호가 만료되지 않거나 위임을 위해 신뢰된 것으로 표시된 유사 사용자 또는 컴퓨터와 같은 함정을 설정하는 것을 포함합니다. 구체적인 접근 방식은 특정 권한을 가진 사용자를 생성하거나 높은 권한 그룹에 추가하는 것입니다.
|
||||
- 기만을 구현하는 것은 함정 설정을 포함하며, 만료되지 않거나 위임을 위해 신뢰된 것으로 표시된 비밀번호와 같은 기능을 가진 유령 사용자 또는 컴퓨터를 설정하는 것입니다. 구체적인 접근 방식은 특정 권한을 가진 사용자를 생성하거나 높은 특권 그룹에 추가하는 것을 포함합니다.
|
||||
- 실용적인 예로는 다음과 같은 도구를 사용하는 것입니다: `Create-DecoyUser -UserFirstName user -UserLastName manager-uncommon -Password Pass@123 | DeployUserDeception -UserFlag PasswordNeverExpires -GUID d07da11f-8a3d-42b6-b0aa-76c962be719a -Verbose`
|
||||
- 기만 기술 배포에 대한 더 많은 정보는 [Deploy-Deception on GitHub](https://github.com/samratashok/Deploy-Deception)에서 확인할 수 있습니다.
|
||||
|
||||
### **기만 식별**
|
||||
|
||||
- **사용자 객체의 경우**: 의심스러운 지표에는 비정상적인 ObjectSID, 드문 로그인, 생성 날짜 및 낮은 잘못된 비밀번호 수가 포함됩니다.
|
||||
- **일반 지표**: 잠재적인 유인 객체의 속성을 진짜 객체의 속성과 비교하면 불일치가 드러날 수 있습니다. [HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster)와 같은 도구가 이러한 기만을 식별하는 데 도움을 줄 수 있습니다.
|
||||
- **일반 지표**: 잠재적인 유령 객체의 속성을 진짜 객체의 속성과 비교하면 불일치가 드러날 수 있습니다. [HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster)와 같은 도구는 이러한 기만을 식별하는 데 도움을 줄 수 있습니다.
|
||||
|
||||
### **탐지 시스템 우회**
|
||||
|
||||
- **Microsoft ATA 탐지 우회**:
|
||||
- **사용자 열거**: ATA 탐지를 방지하기 위해 도메인 컨트롤러에서 세션 열거를 피합니다.
|
||||
- **티켓 가장하기**: 티켓 생성을 위해 **aes** 키를 사용하면 NTLM으로 다운그레이드하지 않음으로써 탐지를 피할 수 있습니다.
|
||||
- **DCSync 공격**: ATA 탐지를 피하기 위해 비도메인 컨트롤러에서 실행하는 것이 권장되며, 도메인 컨트롤러에서 직접 실행하면 경고가 발생합니다.
|
||||
- **티켓 가장**: 티켓 생성을 위해 **aes** 키를 사용하면 NTLM으로 다운그레이드하지 않음으로써 탐지를 피할 수 있습니다.
|
||||
- **DCSync 공격**: ATA 탐지를 피하기 위해 도메인 컨트롤러가 아닌 곳에서 실행하는 것이 권장되며, 도메인 컨트롤러에서 직접 실행하면 경고가 발생합니다.
|
||||
|
||||
## 참고 문헌
|
||||
|
||||
|
@ -17,7 +17,7 @@ Windows Managed Service Accounts (MSA)는 비밀번호를 수동으로 관리할
|
||||
* `msDS-ManagedPasswordId` 속성에서 찾을 수 있는 계정별 **ManagedPasswordID** (GUID).
|
||||
|
||||
파생 과정은: `AES256_HMAC( KDSRootKey , SID || ManagedPasswordID )` → 240 바이트 블롭이 최종적으로 **base64 인코딩**되어 `msDS-ManagedPassword` 속성에 저장됩니다.
|
||||
정상적인 비밀번호 사용 중에는 Kerberos 트래픽이나 도메인 상호작용이 필요하지 않으며, 멤버 호스트는 세 가지 입력값을 알고 있는 한 로컬에서 비밀번호를 파생합니다.
|
||||
정상적인 비밀번호 사용 중에는 Kerberos 트래픽이나 도메인 상호작용이 필요하지 않으며, 멤버 호스트는 세 가지 입력값을 알고 있는 한 로컬에서 비밀번호를 파생할 수 있습니다.
|
||||
|
||||
## Golden gMSA / Golden dMSA 공격
|
||||
|
||||
@ -64,7 +64,7 @@ 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 추측 / 발견 (누락된 경우)
|
||||
### Phase 3 – ManagedPasswordID 추측 / 발견 (누락 시)
|
||||
|
||||
일부 배포에서는 `msDS-ManagedPasswordId`를 ACL 보호 읽기에서 *제거*합니다.
|
||||
GUID가 128비트이기 때문에 단순한 무차별 대입은 불가능하지만:
|
||||
@ -76,7 +76,7 @@ GUID가 128비트이기 때문에 단순한 무차별 대입은 불가능하지
|
||||
```powershell
|
||||
GoldendMSA.exe wordlist -s <SID> -d example.local -f example.local -k <KDSKeyGUID>
|
||||
```
|
||||
도구는 후보 비밀번호를 계산하고 그들의 base64 blob을 실제 `msDS-ManagedPassword` 속성과 비교합니다. 일치하면 올바른 GUID가 드러납니다.
|
||||
도구는 후보 비밀번호를 계산하고 그들의 base64 blob을 실제 `msDS-ManagedPassword` 속성과 비교합니다 – 일치하면 올바른 GUID가 드러납니다.
|
||||
|
||||
### Phase 4 – 오프라인 비밀번호 계산 및 변환
|
||||
|
||||
@ -96,7 +96,7 @@ GoldendMSA.exe convert -d example.local -u svc_web$ -p <Base64Pwd>
|
||||
* DC에서 **디렉터리 서비스 복원 모드(DSRM)** 또는 **볼륨 섀도 복사** 생성을 모니터링합니다.
|
||||
* 서비스 계정의 `CN=Master Root Keys,…` 및 `userAccountControl` 플래그에 대한 읽기/변경을 감사합니다.
|
||||
* 비정상적인 **base64 비밀번호 쓰기** 또는 호스트 간의 갑작스러운 서비스 비밀번호 재사용을 감지합니다.
|
||||
* Tier-0 격리가 불가능한 경우, 고급 gMSA를 정기적인 무작위 회전이 있는 **클래식 서비스 계정**으로 변환하는 것을 고려합니다.
|
||||
* Tier-0 격리가 불가능한 경우, 높은 권한의 gMSA를 **클래식 서비스 계정**으로 변환하고 정기적으로 무작위 회전을 고려합니다.
|
||||
|
||||
## 도구
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user