FreeIPA Pentesting
Reading time: 7 minutes
tip
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
기본 정보
FreeIPA는 주로 Unix 환경을 위한 Microsoft Windows Active Directory의 오픈 소스 대안입니다. Active Directory와 유사한 관리 기능을 위해 MIT Kerberos 키 배포 센터와 완전한 LDAP 디렉토리를 결합합니다. CA 및 RA 인증서 관리를 위해 Dogtag Certificate System을 활용하며, 스마트카드를 포함한 다중 인증을 지원합니다. Unix 인증 프로세스를 위해 SSSD가 통합되어 있습니다.
지문
파일 및 환경 변수
- Kerberos 클라이언트 정보가 저장되는 파일은
/etc/krb5.conf
입니다. 여기에는 KDC 및 관리 서버의 위치, 기본 설정 및 매핑이 포함됩니다. - IPA 클라이언트 및 서버에 대한 시스템 전체 기본값은
/etc/ipa/default.conf
에 설정됩니다. - 도메인 내의 호스트는 인증 프로세스를 위해
/etc/krb5.keytab
에krb5.keytab
파일을 가져야 합니다. - Kerberos 인증과 관련된 특정 파일 및 설정을 가리키기 위해 다양한 환경 변수(
KRB5CCNAME
,KRB5_KTNAME
,KRB5_CONFIG
,KRB5_KDC_PROFILE
,KRB5RCACHETYPE
,KRB5RCACHEDIR
,KRB5_TRACE
,KRB5_CLIENT_KTNAME
,KPROP_PORT
)가 사용됩니다.
바이너리
ipa
, kdestroy
, kinit
, klist
, kpasswd
, ksu
, kswitch
, kvno
와 같은 도구는 FreeIPA 도메인을 관리하고 Kerberos 티켓을 처리하며 비밀번호를 변경하고 서비스 티켓을 획득하는 등 여러 기능의 중심입니다.
네트워크
일반적인 FreeIPA 서버 설정을 나타내는 그림이 제공됩니다.
인증
FreeIPA에서의 인증은 Kerberos를 활용하여 Active Directory와 유사합니다. 도메인 리소스에 접근하려면 유효한 Kerberos 티켓이 필요하며, 이는 FreeIPA 도메인 구성에 따라 다양한 위치에 저장될 수 있습니다.
CCACHE 티켓 파일
CCACHE 파일은 일반적으로 **/tmp
**에 600 권한으로 저장되며, Kerberos 자격 증명을 저장하기 위한 이진 형식으로, 사용자의 평문 비밀번호 없이 인증에 중요합니다. CCACHE 티켓을 파싱하는 것은 klist
명령을 사용하여 수행할 수 있으며, 유효한 CCACHE 티켓을 재사용하려면 KRB5CCNAME
을 티켓 파일의 경로로 내보내야 합니다.
Unix 키링
대안으로, CCACHE 티켓은 Linux 키링에 저장할 수 있어 티켓 관리에 대한 더 많은 제어를 제공합니다. 티켓 저장 범위는 (KEYRING:name
, KEYRING:process:name
, KEYRING:thread:name
, KEYRING:session:name
, KEYRING:persistent:uidnumber
)로 다양하며, klist
는 사용자를 위해 이 정보를 파싱할 수 있습니다. 그러나 Unix 키링에서 CCACHE 티켓을 재사용하는 것은 어려울 수 있으며, Kerberos 티켓을 추출하기 위해 Tickey와 같은 도구가 제공됩니다.
키탭
Kerberos 주체와 암호화된 키를 포함하는 키탭 파일은 유효한 티켓 부여 티켓(TGT)을 얻기 위해 필수적이며, 주체의 비밀번호 없이도 가능합니다. 키탭 파일에서 자격 증명을 파싱하고 재사용하는 것은 klist
와 같은 유틸리티 및 KeytabParser와 같은 스크립트를 사용하여 쉽게 수행할 수 있습니다.
치트시트
Linux에서 티켓을 사용하는 방법에 대한 더 많은 정보는 다음 링크에서 확인할 수 있습니다:
열거
warning
ldap 및 기타 바이너리 도구를 통해 열거를 수행하거나 FreeIPA 서버의 포트 443에 연결하여 웹 페이지에 접근할 수 있습니다.
호스트, 사용자 및 그룹
호스트, 사용자 및 그룹을 생성할 수 있습니다. 호스트와 사용자는 각각 “Host Groups” 및 “User Groups”라는 컨테이너로 정렬됩니다. 이는 조직 단위(OU)와 유사합니다.
기본적으로 FreeIPA에서 LDAP 서버는 익명 바인딩을 허용하며, 많은 데이터가 인증되지 않은 상태로 열거될 수 있습니다. 이는 인증되지 않은 모든 데이터를 열거할 수 있습니다:
ldapsearch -x
더 많은 정보를 얻으려면 인증된 세션을 사용해야 합니다(인증된 세션을 준비하는 방법은 인증 섹션을 확인하세요).
# Get all users of domain
ldapsearch -Y gssapi -b "cn=users,cn=compat,dc=domain_name,dc=local"
# Get users groups
ldapsearch -Y gssapi -b "cn=groups,cn=accounts,dc=domain_name,dc=local"
# Get all the hosts
ldapsearch -Y gssapi -b "cn=computers,cn=accounts,dc=domain_name,dc=local"
# Get hosts groups
ldapsearch -Y gssapi -b "cn=hostgroups,cn=accounts,dc=domain_name,dc=local"
도메인에 가입된 머신에서 설치된 바이너리를 사용하여 도메인을 열거할 수 있습니다:
ipa user-find
ipa usergroup-find
ipa host-find
ipa host-group-find
-------------------
ipa user-show <username> --all
ipa usergroup-show <user group> --all
ipa host-find <host> --all
ipa hostgroup-show <host group> --all
note
FreeIPA의 admin 사용자는 AD의 domain admins와 동등합니다.
Hashes
IPA 서버의 root 사용자는 비밀번호 hashes에 접근할 수 있습니다.
- 사용자의 비밀번호 해시는 “userPassword” attribute에 base64로 저장됩니다. 이 해시는 SSHA512 (구버전 FreeIPA) 또는 PBKDF2_SHA256일 수 있습니다.
- 시스템이 AD와 integration되어 있으면 비밀번호의 Nthash는 “ipaNTHash”에 base64로 저장됩니다.
이 해시를 크랙하려면:
• FreeIPA가 AD와 통합된 경우, ipaNTHash는 쉽게 크랙할 수 있습니다: base64를 decode한 후 ASCII hex로 다시 인코딩 -> John The Ripper 또는 hashcat이 빠르게 크랙하는 데 도움을 줄 수 있습니다.
• 구버전 FreeIPA를 사용하는 경우, SSHA512가 사용됩니다: base64를 decode한 후 SSHA512 hash를 찾아야 합니다 -> John The Ripper 또는 hashcat이 크랙하는 데 도움을 줄 수 있습니다.
• 최신 버전의 FreeIPA를 사용하는 경우, PBKDF2_SHA256이 사용됩니다: base64를 decode한 후 PBKDF2_SHA256을 찾아야 합니다 -> 길이는 256 바이트입니다. John은 256 비트(32 바이트)로 작업할 수 있습니다 -> SHA-265가 의사 난수 함수로 사용되며, 블록 크기는 32 바이트입니다 -> PBKDF2_SHA256 해시의 처음 256 비트만 사용할 수 있습니다 -> John The Ripper 또는 hashcat이 크랙하는 데 도움을 줄 수 있습니다.
해시를 추출하려면 FreeIPA 서버의 root가 되어야 하며, 그곳에서 dbscan
도구를 사용하여 추출할 수 있습니다:
HBAC-Rules
사용자 또는 호스트에 자원(호스트, 서비스, 서비스 그룹 등)에 대한 특정 권한을 부여하는 규칙이 있습니다.
# Enumerate using ldap
ldapsearch -Y gssapi -b "cn=hbac,dc=domain_name,dc=local"
# Using ipa
ipa hbacrule-find
# Show info of rule
ipa hbacrule-show <hbacrule> --all
Sudo-Rules
FreeIPA는 sudo-rules를 통해 sudo 권한에 대한 중앙 집중식 제어를 가능하게 합니다. 이러한 규칙은 도메인 내 호스트에서 sudo로 명령을 실행할 수 있도록 허용하거나 제한합니다. 공격자는 이러한 규칙 세트를 검토하여 적용 가능한 호스트, 사용자 및 허용된 명령을 식별할 수 있습니다.
# Enumerate using ldap
ldapsearch -Y gssapi -b "cn=sudorules,cn=sudo,dc=domain_name,dc=local"
# Using ipa
ipa sudorule-find
# Show info of rule
ipa sudorule-show <sudorule> --all
역할 기반 접근 제어
A role는 다양한 privileges로 구성되며, 각 privilege는 permissions의 모음을 포함합니다. 이러한 역할은 사용자, 사용자 그룹, 호스트, 호스트 그룹 및 서비스에 할당될 수 있습니다. 예를 들어, 이 구조를 설명하기 위해 FreeIPA의 기본 “User Administrator” 역할을 고려해 보십시오.
역할 User Administrator
는 다음과 같은 privileges를 가지고 있습니다:
- User Administrators
- Group Administrators
- Stage User Administrators
다음 명령어를 사용하여 역할, privileges 및 permissions를 열거할 수 있습니다:
# Using ldap
ldapsearch -Y gssapi -b "cn=roles,cn=accounts,dc=westeros,dc=local"
# Using ipa binary
ipa role-find
ipa role-show <role> --all
ipa privilege-find
ipa privilege-show <privilege> --all
ipa permission-find
ipa permission-show <permission> --all
공격 시나리오 예시
https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e에서 도메인을 손상시키기 위해 일부 권한을 악용하는 간단한 예시를 찾을 수 있습니다.
Linikatz/LinikatzV2
권한 상승
root 사용자 생성
warning
만약 root
라는 이름의 새 사용자를 생성할 수 있다면, 당신은 그를 가장할 수 있으며 어떤 머신에도 root로 SSH 접속할 수 있습니다.
이것은 패치되었습니다.
자세한 설명은 https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b에서 확인할 수 있습니다.
참고자료
- https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b
- https://posts.specterops.io/attacking-freeipa-part-i-authentication-77e73d837d6a
- https://posts.specterops.io/attacking-freeipa-part-ii-enumeration-ad27224371e1
- https://www.youtube.com/watch?v=9dOu-7BTwPQ
tip
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.