# FreeIPA Pentesting
htARTE (HackTricks AWS Red Team 전문가)로부터 제로에서 영웅까지 AWS 해킹 배우기 HackTricks를 지원하는 다른 방법: * **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요 * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션 * **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/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](privilege-escalation/linux-active-directory.md) {% endcontent-ref %} ## 열거 {% hint style="warning" %} **ldap** 및 기타 **이진** 도구를 통해 **열거**를 수행하거나 **FreeIPA 서버의 포트 443에 웹 페이지에 연결**할 수 있습니다. {% endhint %} ### 호스트, 사용자 및 그룹 **호스트**, **사용자** 및 **그룹**을 생성할 수 있습니다. 호스트 및 사용자는 각각 "호스트 그룹" 및 "사용자 그룹"이라는 컨테이너로 분류됩니다. 이는 **조직 단위**(OU)와 유사합니다. 기본적으로 FreeIPA에서 LDAP 서버는 **익명 바인드**를 허용하며, **인증되지 않은** 상태에서 많은 데이터가 열거 가능합니다. 이를 통해 모든 데이터를 인증되지 않은 상태로 열거할 수 있습니다: ``` ldapsearch -x ``` **더 많은 정보**를 얻으려면 **인증된** 세션을 사용해야 합니다 (인증된 세션을 준비하는 방법은 인증 섹션을 확인하세요). ```bash # 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" ``` 도메인에 가입된 컴퓨터에서는 **설치된 이진 파일**을 사용하여 도메인을 열람할 수 있습니다: ```bash ipa user-find ipa usergroup-find ipa host-find ipa host-group-find ------------------- ipa user-show --all ipa usergroup-show --all ipa host-find --all ipa hostgroup-show --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 이는 사용자 또는 호스트에게 특정 권한을 부여하는 규칙입니다(호스트, 서비스, 서비스 그룹 등). ```bash # 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 --all ``` #### Sudo-Rules FreeIPA는 sudo 권한을 중앙에서 제어할 수 있도록 sudo 규칙을 활성화합니다. 이러한 규칙은 도메인 내 호스트에서 sudo를 사용하여 명령을 실행하는 것을 허용하거나 제한합니다. 공격자는 이러한 규칙 집합을 조사함으로써 적용 가능한 호스트, 사용자 및 허용된 명령을 식별할 수 있습니다. ```bash # 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 --all ``` ### 역할 기반 액세스 제어 **역할**은 여러 **권한**으로 구성되어 있으며, 각 권한은 **허가**의 모음을 포함합니다. 이러한 역할은 사용자, 사용자 **그룹**, **호스트**, 호스트 그룹 및 서비스에 할당할 수 있습니다. 예를 들어, 이 구조를 보여주기 위해 FreeIPA의 기본 "사용자 관리자" 역할을 고려해 보겠습니다. `사용자 관리자` 역할에는 다음과 같은 권한이 있습니다: - **사용자 관리자** - **그룹 관리자** - **단계 사용자 관리자** 다음 명령을 사용하여 역할, 권한 및 허가를 나열할 수 있습니다: ```bash # Using ldap ldapsearch -Y gssapi -b "cn=roles,cn=accounts,dc=westeros,dc=local" # Using ipa binary ipa role-find ipa role-show --all ipa privilege-find ipa privilege-show --all ipa permission-find ipa permission-show --all ``` ### 공격 시나리오 예시 [https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e](https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e)에서 도메인을 compromise하기 위해 일부 권한을 악용하는 간단한 예제를 찾을 수 있습니다. ### Linikatz/LinikatzV2 * [https://github.com/Orange-Cyberdefense/LinikatzV2](https://github.com/Orange-Cyberdefense/LinikatzV2) * [https://github.com/CiscoCXSecurity/linikatz](https://github.com/CiscoCXSecurity/linikatz) ## 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-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-i-authentication-77e73d837d6a) * [https://posts.specterops.io/attacking-freeipa-part-ii-enumeration-ad27224371e1](https://posts.specterops.io/attacking-freeipa-part-ii-enumeration-ad27224371e1) * [https://www.youtube.com/watch?v=9dOu-7BTwPQ](https://www.youtube.com/watch?v=9dOu-7BTwPQ)
htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 AWS 해킹을 전문가로 배우세요 HackTricks를 지원하는 다른 방법: * **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요! * [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요 * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션 * 💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요. * **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 요령을 공유**하세요.