FreeIPA Pentesting
기본 정보
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와 같은 스크립트를 사용하여 쉽게 수행할 수 있습니다.
치트 시트
리눅스에서 티켓을 사용하는 방법에 대한 자세한 정보는 다음 링크에서 찾을 수 있습니다:
pageLinux Active Directory열거
ldap 및 기타 이진 도구를 통해 열거를 수행하거나 FreeIPA 서버의 포트 443에 웹 페이지에 연결할 수 있습니다.
호스트, 사용자 및 그룹
호스트, 사용자 및 그룹을 생성할 수 있습니다. 호스트 및 사용자는 각각 "호스트 그룹" 및 "사용자 그룹"이라는 컨테이너로 분류됩니다. 이는 조직 단위(OU)와 유사합니다.
기본적으로 FreeIPA에서 LDAP 서버는 익명 바인드를 허용하며, 인증되지 않은 상태에서 많은 데이터가 열거 가능합니다. 이를 통해 모든 데이터를 인증되지 않은 상태로 열거할 수 있습니다:
더 많은 정보를 얻으려면 인증된 세션을 사용해야 합니다 (인증된 세션을 준비하는 방법은 인증 섹션을 확인하세요).
도메인에 가입된 컴퓨터에서는 설치된 이진 파일을 사용하여 도메인을 열람할 수 있습니다:
FreeIPA의 관리자 사용자는 AD의 도메인 관리자와 동등합니다.
해시
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
이는 사용자 또는 호스트에게 특정 권한을 부여하는 규칙입니다(호스트, 서비스, 서비스 그룹 등).
Sudo-Rules
FreeIPA는 sudo 권한을 중앙에서 제어할 수 있도록 sudo 규칙을 활성화합니다. 이러한 규칙은 도메인 내 호스트에서 sudo를 사용하여 명령을 실행하는 것을 허용하거나 제한합니다. 공격자는 이러한 규칙 집합을 조사함으로써 적용 가능한 호스트, 사용자 및 허용된 명령을 식별할 수 있습니다.
역할 기반 액세스 제어
역할은 여러 권한으로 구성되어 있으며, 각 권한은 허가의 모음을 포함합니다. 이러한 역할은 사용자, 사용자 그룹, 호스트, 호스트 그룹 및 서비스에 할당할 수 있습니다. 예를 들어, 이 구조를 보여주기 위해 FreeIPA의 기본 "사용자 관리자" 역할을 고려해 보겠습니다.
사용자 관리자
역할에는 다음과 같은 권한이 있습니다:
사용자 관리자
그룹 관리자
단계 사용자 관리자
다음 명령을 사용하여 역할, 권한 및 허가를 나열할 수 있습니다:
공격 시나리오 예시
https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e에서 도메인을 compromise하기 위해 일부 권한을 악용하는 간단한 예제를 찾을 수 있습니다.
Linikatz/LinikatzV2
Privesc
루트 사용자 생성
만약 **root
**라는 이름의 새로운 사용자를 생성할 수 있다면, 그를 흉내내어 어떤 머신에서든 root로 SSH할 수 있습니다.
이는 패치되었습니다.
자세한 설명은 https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b에서 확인할 수 있습니다.
참고 자료
Last updated