13 KiB
FreeIPA Pentesting
htARTE (HackTricks AWS Red Team Expert)에서 제로에서 영웅까지 AWS 해킹 배우기를 배워보세요!
HackTricks를 지원하는 다른 방법:
- 회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드하려면 SUBSCRIPTION PLANS를 확인하세요!
- 공식 PEASS & HackTricks 스웨그를 얻으세요.
- The PEASS Family를 발견하세요. 독점적인 NFTs 컬렉션입니다.
- 💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks와 HackTricks Cloud github 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
기본 정보
FreeIPA는 주로 Unix 환경을 위한 Microsoft Windows Active Directory의 오픈 소스 대체입니다. Active Directory와 유사한 관리를 위해 완전한 LDAP 디렉터리와 MIT Kerberos 키 배포 센터를 결합합니다. 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 서버 설정을 나타내는 그림이 제공됩니다.
인증
FreeIPA에서 Kerberos를 활용한 인증은 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 티켓을 추출할 수 있습니다.
키탭
Kerberos 주체와 암호화된 키를 포함하는 키탭 파일은 주체의 암호 없이 유효한 티켓 발급 티켓(TGT)을 얻는 데 중요합니다. 키탭 파일에서 자격 증명을 구문 분석하고 재사용하는 것은 klist
와 KeytabParser와 같은 스크립트를 사용하여 쉽게 수행할 수 있습니다.
치트 시트
Linux에서 티켓을 사용하는 방법에 대한 자세한 정보는 다음 링크에서 찾을 수 있습니다:
{% content-ref url="privilege-escalation/linux-active-directory.md" %} linux-active-directory.md {% endcontent-ref %}
열거
{% hint style="warning" %} ldap 및 기타 바이너리 도구를 사용하거나 FreeIPA 서버의 포트 443에서 웹 페이지에 연결하여 열거를 수행할 수 있습니다. {% endhint %}
호스트, 사용자 및 그룹
호스트, 사용자 및 그룹을 생성할 수 있습니다. 호스트와 사용자는 각각 "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
{% hint style="info" %} FreeIPA의 admin 사용자는 AD의 도메인 관리자와 동등합니다. {% endhint %}
해시
IPA 서버의 root 사용자는 암호 해시에 액세스할 수 있습니다.
- 사용자의 암호 해시는 "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 서버의 root 권한이 필요하며, 여기에서 dbscan
도구를 사용하여 추출할 수 있습니다:
HBAC 규칙
이는 사용자 또는 호스트에게 리소스 (호스트, 서비스, 서비스 그룹 등)에 대한 특정 권한을 부여하는 규칙입니다.
# 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에서 도메인을 침해하기 위해 일부 권한을 남용하는 간단한 예제를 찾을 수 있습니다.
Linikatz/LinikatzV2
권한 상승
root 사용자 생성
{% 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로 다운로드하려면 SUBSCRIPTION PLANS를 확인하세요!
- 공식 PEASS & HackTricks 상품을 구매하세요.
- The PEASS Family를 발견하세요. 독점적인 NFT 컬렉션입니다.
- 💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks와 HackTricks Cloud github 저장소에 PR을 제출하여 자신의 해킹 기법을 공유하세요.