13 KiB
FreeIPA Pentesting
htARTE (HackTricks AWS Red Team 전문가)로부터 제로에서 영웅까지 AWS 해킹 배우기
HackTricks를 지원하는 다른 방법:
- 회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하길 원한다면 구독 요금제를 확인하세요!
- 공식 PEASS & HackTricks 스왜그를 구매하세요
- The PEASS Family를 발견하세요, 당사의 독점 NFTs 컬렉션
- 💬 Discord 그룹 또는 텔레그램 그룹에 가입하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud github 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
기본 정보
FreeIPA는 Unix 환경을 위한 Microsoft Windows Active Directory 대체 오픈 소스입니다. Active Directory와 유사한 관리를 위해 MIT Kerberos 키 분배 센터와 완전한 LDAP 디렉터리를 결합합니다. CA 및 RA 인증서 관리를 위해 Dogtag Certificate System을 활용하며, 스마트카드를 포함한 다중 인증을 지원합니다. Unix 인증 프로세스에는 SSSD가 통합되어 있습니다.
지문
파일 및 환경 변수
/etc/krb5.conf
에있는 파일은 도메인에 등록하는 데 필요한 Kerberos 클라이언트 정보를 저장합니다. 이에는 KDC 및 관리 서버의 위치, 기본 설정 및 매핑이 포함됩니다.- IPA 클라이언트 및 서버의 시스템 전역 기본값은
/etc/ipa/default.conf
에 위치한 파일에 설정됩니다. - 도메인 내 호스트는 인증 프로세스를 위해
/etc/krb5.keytab
에krb5.keytab
파일을 가져야 합니다. - 다양한 환경 변수 (
KRB5CCNAME
,KRB5_KTNAME
,KRB5_CONFIG
,KRB5_KDC_PROFILE
,KRB5RCACHETYPE
,KRB5RCACHEDIR
,KRB5_TRACE
,KRB5_CLIENT_KTNAME
,KPROP_PORT
)는 Kerberos 인증과 관련된 특정 파일 및 설정을 가리키는 데 사용됩니다.
이진 파일
ipa
, kdestroy
, kinit
, klist
, kpasswd
, ksu
, kswitch
, kvno
와 같은 도구는 FreeIPA 도메인을 관리하고 Kerberos 티켓을 처리하며 비밀번호를 변경하고 서비스 티켓을 획들하는 데 중요합니다.
네트워크
전형적인 FreeIPA 서버 설정을 나타내는 그림이 제공됩니다.
인증
Kerberos를 활용한 FreeIPA의 인증은 Active Directory와 유사합니다. 도메인 리소스에 액세스하려면 유효한 Kerberos 티켓이 필요하며, FreeIPA 도메인 구성에 따라 다양한 위치에 저장될 수 있습니다.
CCACHE 티켓 파일
일반적으로 **/tmp
**에 600 권한으로 저장되는 CCACHE 파일은 이동성으로 인해 사용자의 평문 암호없이 인증에 중요한 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 티켓을 재사용하는 것은 도전적일 수 있으며, Tickey와 같은 도구를 사용하여 Kerberos 티켓을 추출할 수 있습니다.
Keytab
Kerberos 주체와 암호화된 키를 포함하는 Keytab 파일은 주체의 암호를 필요로하지 않고 유효한 티켓 발급 티켓(TGT)을 얻는 데 중요합니다. Keytab 파일에서 자격 증명을 구문 분석하고 재사용하는 것은 klist
와 KeytabParser와 같은 스크립트를 사용하여 쉽게 수행할 수 있습니다.
치트 시트
리눅스에서 티켓을 사용하는 방법에 대한 자세한 정보는 다음 링크에서 찾을 수 있습니다:
{% content-ref url="privilege-escalation/linux-active-directory.md" %} linux-active-directory.md {% endcontent-ref %}
열거
{% hint style="warning" %} ldap 및 기타 이진 도구를 통해 열거를 수행하거나 FreeIPA 서버의 포트 443에 웹 페이지에 연결할 수 있습니다. {% endhint %}
호스트, 사용자 및 그룹
호스트, 사용자 및 그룹을 생성할 수 있습니다. 호스트 및 사용자는 각각 "호스트 그룹" 및 "사용자 그룹"이라는 컨테이너로 분류됩니다. 이는 조직 단위(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
{% hint style="info" %} FreeIPA의 관리자 사용자는 AD의 도메인 관리자와 동등합니다. {% endhint %}
해시
IPA 서버의 루트 사용자는 암호 해시에 액세스할 수 있습니다.
- 사용자의 암호 해시는 “userPassword” 속성에 base64로 저장됩니다. 이 해시는 SSHA512 (이전 버전의 FreeIPA) 또는 PBKDF2_SHA256일 수 있습니다.
- 시스템이 AD와 통합되어 있다면 암호의 Nthash는 “ipaNTHash”에 base64로 저장됩니다.
이러한 해시를 해독하려면:
-
FreeIPA가 AD와 통합되어 있다면, ipaNTHash를 쉽게 해독할 수 있습니다: base64를 디코딩 -> ASCII 16진수로 다시 인코딩 -> John The Ripper 또는 hashcat을 사용하여 빠르게 해독할 수 있습니다.
-
이전 버전의 FreeIPA를 사용하고 있다면, SSHA512를 사용하고 있을 것입니다: base64를 디코딩 -> SSHA512 해시를 찾아야 합니다 -> John The Ripper 또는 hashcat을 사용하여 해독할 수 있습니다.
-
새 버전의 FreeIPA를 사용하고 있다면, PBKDF2_SHA256를 사용하고 있을 것입니다: base64를 디코딩 -> PBKDF2_SHA256을 찾아야 합니다 -> 길이는 256바이트입니다. John은 256비트(32바이트)와 함께 작동할 수 있습니다 -> SHA-265가 의사 난수 함수로 사용되며 블록 크기는 32바이트입니다 -> PBKDF2_SHA256 해시의 처음 256비트만 사용할 수 있습니다 -> John The Ripper 또는 hashcat을 사용하여 해독할 수 있습니다.
해시를 추출하려면 FreeIPA 서버의 루트여야 하며, 여기서 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 권한을 중앙에서 제어할 수 있도록 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
역할 기반 액세스 제어
역할은 여러 권한으로 구성되어 있으며, 각 권한은 허가의 모음을 포함합니다. 이러한 역할은 사용자, 사용자 그룹, 호스트, 호스트 그룹 및 서비스에 할당할 수 있습니다. 예를 들어, 이 구조를 보여주기 위해 FreeIPA의 기본 "사용자 관리자" 역할을 고려해 보겠습니다.
사용자 관리자
역할에는 다음과 같은 권한이 있습니다:
- 사용자 관리자
- 그룹 관리자
- 단계 사용자 관리자
다음 명령을 사용하여 역할, 권한 및 허가를 나열할 수 있습니다:
# 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에서 도메인을 compromise하기 위해 일부 권한을 악용하는 간단한 예제를 찾을 수 있습니다.
Linikatz/LinikatzV2
Privesc
루트 사용자 생성
{% hint style="warning" %}
만약 **root
**라는 이름의 새로운 사용자를 생성할 수 있다면, 그를 흉내내어 어떤 머신에서든 root로 SSH할 수 있습니다.
이는 패치되었습니다. {% endhint %}
자세한 설명은 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
htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 AWS 해킹을 전문가로 배우세요
HackTricks를 지원하는 다른 방법:
- 회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드하려면 구독 요금제를 확인하세요!
- 공식 PEASS & HackTricks 스왜그를 구매하세요
- The PEASS Family를 발견하세요, 당사의 독점 NFTs 컬렉션
- 💬 디스코드 그룹 또는 텔레그램 그룹에 가입하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud github 저장소에 PR을 제출하여 해킹 요령을 공유하세요.