# 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을 제출하여 **해킹 요령을 공유**하세요.