Linux Active Directory

Support HackTricks

리눅스 머신은 Active Directory 환경 내에 존재할 수 있습니다.

AD 내의 리눅스 머신은 파일 내에 다양한 CCACHE 티켓을 저장하고 있을 수 있습니다. 이 티켓은 다른 kerberos 티켓처럼 사용되고 악용될 수 있습니다. 이 티켓을 읽으려면 티켓의 사용자 소유자이거나 root여야 합니다.

Enumeration

리눅스에서 AD 열거

리눅스(또는 Windows의 bash)에 AD에 대한 접근 권한이 있는 경우 https://github.com/lefayjey/linWinPwn를 사용하여 AD를 열거할 수 있습니다.

리눅스에서 AD를 열거하는 다른 방법을 배우려면 다음 페이지를 확인할 수 있습니다:

FreeIPA

FreeIPA는 Microsoft Windows Active Directory에 대한 오픈 소스 대안으로, 주로 Unix 환경을 위해 설계되었습니다. Active Directory와 유사한 관리 기능을 위해 MIT Kerberos 키 배포 센터와 완전한 LDAP 디렉토리를 결합합니다. CA 및 RA 인증서 관리를 위해 Dogtag Certificate System을 사용하며, 스마트카드를 포함한 다중 인증을 지원합니다. Unix 인증 프로세스를 위해 SSSD가 통합되어 있습니다. 자세한 내용은 다음에서 확인하세요:

티켓 다루기

Pass The Ticket

이 페이지에서는 리눅스 호스트 내에서 kerberos 티켓을 찾을 수 있는 다양한 장소를 찾을 수 있으며, 다음 페이지에서는 이 CCache 티켓 형식을 Kirbi(Windows에서 사용해야 하는 형식)로 변환하는 방법과 PTT 공격을 수행하는 방법을 배울 수 있습니다:

/tmp에서 CCACHE 티켓 재사용

CCACHE 파일은 Kerberos 자격 증명을 저장하기 위한 이진 형식으로, 일반적으로 /tmp에 600 권한으로 저장됩니다. 이 파일은 **이름 형식 krb5cc_%{uid}**로 식별할 수 있으며, 이는 사용자의 UID와 관련이 있습니다. 인증 티켓 검증을 위해 **환경 변수 KRB5CCNAME**을 원하는 티켓 파일의 경로로 설정하여 재사용할 수 있습니다.

env | grep KRB5CCNAME으로 인증에 사용되는 현재 티켓을 나열합니다. 형식은 이식 가능하며, export KRB5CCNAME=/tmp/ticket.ccache로 환경 변수를 설정하여 티켓을 재사용할 수 있습니다. Kerberos 티켓 이름 형식은 krb5cc_%{uid}이며, 여기서 uid는 사용자 UID입니다.

# Find tickets
ls /tmp/ | grep krb5cc
krb5cc_1000

# Prepare to use it
export KRB5CCNAME=/tmp/krb5cc_1000

CCACHE 티켓 재사용 from keyring

프로세스의 메모리에 저장된 Kerberos 티켓은 추출될 수 있습니다, 특히 머신의 ptrace 보호가 비활성화된 경우(/proc/sys/kernel/yama/ptrace_scope). 이 목적을 위한 유용한 도구는 https://github.com/TarlogicSecurity/tickey에서 찾을 수 있으며, 세션에 주입하고 /tmp에 티켓을 덤프하여 추출을 용이하게 합니다.

이 도구를 구성하고 사용하기 위해서는 아래 단계를 따릅니다:

git clone https://github.com/TarlogicSecurity/tickey
cd tickey/tickey
make CONF=Release
/tmp/tickey -i

이 절차는 다양한 세션에 주입을 시도하며, 성공을 /tmp__krb_UID.ccache라는 명명 규칙으로 추출된 티켓을 저장함으로써 나타냅니다.

SSSD KCM에서 CCACHE 티켓 재사용

SSSD는 /var/lib/sss/secrets/secrets.ldb 경로에 데이터베이스의 복사본을 유지합니다. 해당 키는 /var/lib/sss/secrets/.secrets.mkey 경로에 숨겨진 파일로 저장됩니다. 기본적으로, 키는 root 권한이 있는 경우에만 읽을 수 있습니다.

**SSSDKCMExtractor **를 --database 및 --key 매개변수와 함께 호출하면 데이터베이스를 구문 분석하고 비밀을 복호화합니다.

git clone https://github.com/fireeye/SSSDKCMExtractor
python3 SSSDKCMExtractor.py --database secrets.ldb --key secrets.mkey

The 자격 증명 캐시 Kerberos blob은 Mimikatz/Rubeus에 전달할 수 있는 사용 가능한 Kerberos CCache 파일로 변환될 수 있습니다.

CCACHE 티켓 재사용 from keytab

git clone https://github.com/its-a-feature/KeytabParser
python KeytabParser.py /etc/krb5.keytab
klist -k /etc/krb5.keytab

/etc/krb5.keytab에서 계정 추출

루트 권한으로 운영되는 서비스에 필수적인 서비스 계정 키는 /etc/krb5.keytab 파일에 안전하게 저장됩니다. 이러한 키는 서비스의 비밀번호와 유사하며, 엄격한 기밀성을 요구합니다.

keytab 파일의 내용을 검사하기 위해 **klist**를 사용할 수 있습니다. 이 도구는 사용자 인증을 위한 NT Hash를 포함한 키 세부 정보를 표시하도록 설계되었습니다. 특히 키 유형이 23으로 식별될 때 그렇습니다.

klist.exe -t -K -e -k FILE:C:/Path/to/your/krb5.keytab
# Output includes service principal details and the NT Hash

Linux 사용자에게 **KeyTabExtract**는 NTLM 해시 재사용을 위해 활용할 수 있는 RC4 HMAC 해시를 추출하는 기능을 제공합니다.

python3 keytabextract.py krb5.keytab
# Expected output varies based on hash availability

macOS에서 **bifrost**는 keytab 파일 분석을 위한 도구로 사용됩니다.

./bifrost -action dump -source keytab -path /path/to/your/file

추출된 계정 및 해시 정보를 활용하여 **crackmapexec**와 같은 도구를 사용하여 서버에 연결할 수 있습니다.

crackmapexec 10.XXX.XXX.XXX -u 'ServiceAccount$' -H "HashPlaceholder" -d "YourDOMAIN"

References

HackTricks 지원하기

Last updated