2022-10-22 14:44:59 +00:00
# FreeIPA Pentesting
< details >
2024-02-10 21:30:13 +00:00
< summary > < strong > htARTE (HackTricks AWS Red Team Expert)< / strong > 에서 < strong > 제로에서 영웅까지 AWS 해킹 배우기< / strong > 를 배워보세요< strong > !< / strong > < / summary >
2022-10-22 14:44:59 +00:00
2024-02-10 21:30:13 +00:00
HackTricks를 지원하는 다른 방법:
2023-12-30 20:49:23 +00:00
2024-02-10 21:30:13 +00:00
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS** ](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 )에 **참여**하거나 **Twitter** 🐦 [**@hacktricks_live** ](https://twitter.com/hacktricks_live )를 **팔로우**하세요.
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
2022-10-22 14:44:59 +00:00
< / details >
2024-02-10 21:30:13 +00:00
## 기본 정보
2022-10-22 14:44:59 +00:00
2024-02-10 21:30:13 +00:00
FreeIPA는 주로 **Unix** 환경을 위한 Microsoft Windows **Active Directory**의 오픈 소스 **대체**입니다. Active Directory와 유사한 관리를 위해 완전한 **LDAP 디렉터리**와 MIT **Kerberos** 키 배포 센터를 결합합니다. CA 및 RA 인증서 관리를 위해 Dogtag **Certificate System**을 사용하며, 스마트 카드를 포함한 **다중 인증**을 지원합니다. Unix 인증 프로세스에는 SSSD가 통합되어 있습니다.
2022-10-22 14:44:59 +00:00
2024-02-10 21:30:13 +00:00
## 지문
2022-10-22 14:44:59 +00:00
2024-02-10 21:30:13 +00:00
### 파일 및 환경 변수
2024-02-05 02:28:59 +00:00
2024-02-10 21:30:13 +00:00
- `/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 인증과 관련된 특정 파일 및 설정을 가리키는 데 사용됩니다.
2022-10-22 14:44:59 +00:00
2024-02-10 21:30:13 +00:00
### 실행 파일
2022-10-22 14:44:59 +00:00
2024-02-10 21:30:13 +00:00
`ipa` , `kdestroy` , `kinit` , `klist` , `kpasswd` , `ksu` , `kswitch` , `kvno` 와 같은 도구는 FreeIPA 도메인을 관리하고 Kerberos 티켓을 처리하며 비밀번호를 변경하고 서비스 티켓을 획득하는 등의 중요한 기능을 수행합니다.
2022-10-22 14:44:59 +00:00
2024-02-10 21:30:13 +00:00
### 네트워크
2022-10-22 15:26:54 +00:00
2024-02-10 21:30:13 +00:00
전형적인 FreeIPA 서버 설정을 나타내는 그림이 제공됩니다.
2022-10-22 15:26:54 +00:00
2024-02-10 21:30:13 +00:00
## 인증
2022-10-22 14:44:59 +00:00
2024-02-10 21:30:13 +00:00
FreeIPA에서 **Kerberos**를 활용한 인증은 **Active Directory**와 유사합니다. 도메인 리소스에 대한 액세스는 유효한 Kerberos 티켓이 필요하며, FreeIPA 도메인 구성에 따라 다양한 위치에 저장될 수 있습니다.
2022-10-22 14:44:59 +00:00
2024-02-10 21:30:13 +00:00
### **CCACHE 티켓 파일**
2022-10-22 14:44:59 +00:00
2024-02-10 21:30:13 +00:00
일반적으로 ** `/tmp` **에 **600** 권한으로 저장되는 CCACHE 파일은 이동성을 위해 사용자의 평문 암호 없이 인증에 중요한 Kerberos 자격 증명을 저장하는 이진 형식입니다. CCACHE 티켓을 구문 분석하려면 `klist` 명령을 사용하고, 유효한 CCACHE 티켓을 재사용하려면 `KRB5CCNAME` 을 티켓 파일의 경로로 내보내야 합니다.
2022-10-22 14:44:59 +00:00
2024-02-10 21:30:13 +00:00
### **Unix 키링**
2022-10-22 14:44:59 +00:00
2024-02-10 21:30:13 +00:00
대안으로, CCACHE 티켓을 Linux 키링에 저장할 수 있으며, 티켓 관리에 대한 더 많은 제어를 제공합니다. 티켓 저장의 범위는 (`KEYRING:name`, `KEYRING:process:name` , `KEYRING:thread:name` , `KEYRING:session:name` , `KEYRING:persistent:uidnumber` )와 같이 다양하며, `klist` 는 이 정보를 사용자에게 제공하기 위해 이를 구문 분석할 수 있습니다. 그러나 Unix 키링에서 CCACHE 티켓을 재사용하는 것은 도전적일 수 있으며, **Tickey**와 같은 도구를 사용하여 Kerberos 티켓을 추출할 수 있습니다.
2022-10-22 14:44:59 +00:00
2024-02-10 21:30:13 +00:00
### 키탭
2022-10-22 14:44:59 +00:00
2024-02-10 21:30:13 +00:00
Kerberos 주체와 암호화된 키를 포함하는 키탭 파일은 주체의 암호 없이 유효한 티켓 발급 티켓(TGT)을 얻는 데 중요합니다. 키탭 파일에서 자격 증명을 구문 분석하고 재사용하는 것은 `klist` 와 **KeytabParser**와 같은 스크립트를 사용하여 쉽게 수행할 수 있습니다.
2022-10-22 14:44:59 +00:00
2024-02-10 21:30:13 +00:00
### 치트 시트
2022-10-22 14:44:59 +00:00
2024-02-10 21:30:13 +00:00
Linux에서 티켓을 사용하는 방법에 대한 자세한 정보는 다음 링크에서 찾을 수 있습니다:
2022-10-22 14:44:59 +00:00
{% content-ref url="privilege-escalation/linux-active-directory.md" %}
[linux-active-directory.md ](privilege-escalation/linux-active-directory.md )
{% endcontent-ref %}
2024-02-10 21:30:13 +00:00
## 열거
2022-10-22 14:44:59 +00:00
2022-10-22 15:26:54 +00:00
{% hint style="warning" %}
2024-02-10 21:30:13 +00:00
**ldap** 및 기타 **바이너리** 도구를 사용하거나 FreeIPA 서버의 **포트 443에서 웹 페이지에 연결**하여 **열거**를 수행할 수 있습니다.
2022-10-22 15:26:54 +00:00
{% endhint %}
2024-02-10 21:30:13 +00:00
### 호스트, 사용자 및 그룹 <a href="#4b3b" id="4b3b"></a>
2022-10-22 15:26:54 +00:00
2024-02-10 21:30:13 +00:00
**호스트**, **사용자** 및 **그룹**을 생성할 수 있습니다. 호스트와 사용자는 각각 "Host Groups" 및 "User Groups"라는 컨테이너에 정렬됩니다. 이는 **조직 단위** (OU)와 유사합니다.
2022-10-22 14:44:59 +00:00
2024-02-10 21:30:13 +00:00
기본적으로 FreeIPA에서 LDAP 서버는 **익명 바인드**를 허용하며, 대량의 데이터가 **인증되지 않은** 상태에서 열거될 수 있습니다. 이는 인증되지 않은 상태에서 사용 가능한 모든 데이터를 열거할 수 있습니다:
2022-10-22 14:44:59 +00:00
```
2024-02-10 21:30:13 +00:00
ldapsearch -x
2022-10-22 14:44:59 +00:00
```
2024-02-10 21:30:13 +00:00
**더 많은 정보**를 얻으려면 **인증된** 세션을 사용해야 합니다 (인증 섹션에서 인증된 세션을 준비하는 방법을 알아보세요).
2022-10-22 14:44:59 +00:00
```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
2024-02-10 21:30:13 +00:00
ldapsearch -Y gssapi -b "cn=hostgroups,cn=accounts,dc=domain_name,dc=local"
2022-10-22 14:44:59 +00:00
```
2024-02-10 21:30:13 +00:00
도메인에 가입된 컴퓨터에서는 **설치된 이진 파일**을 사용하여 도메인을 열거할 수 있습니다:
2022-10-22 14:44:59 +00:00
```bash
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
```
2022-10-22 15:26:54 +00:00
{% hint style="info" %}
2024-02-10 21:30:13 +00:00
**FreeIPA**의 **admin** 사용자는 **AD**의 **도메인 관리자**와 동등합니다.
2022-10-22 15:26:54 +00:00
{% endhint %}
2024-02-10 21:30:13 +00:00
### 해시 <a href="#482b" id="482b"></a>
2022-10-22 15:26:54 +00:00
2024-02-10 21:30:13 +00:00
**IPA 서버**의 **root** 사용자는 암호 **해시**에 액세스할 수 있습니다.
2022-10-22 15:26:54 +00:00
2024-02-10 21:30:13 +00:00
* 사용자의 암호 해시는 "userPassword" **속성**에 **base64**로 저장됩니다. 이 해시는 **SSHA512** (이전 버전의 FreeIPA) 또는 **PBKDF2\_SHA256**일 수 있습니다.
* 시스템이 **AD**와 **통합**되어 있다면 암호의 **Nthash**는 "ipaNTHash"에 **base64**로 저장됩니다.
2022-10-22 15:26:54 +00:00
2024-02-10 21:30:13 +00:00
이러한 해시를 크랙하기 위해:
2022-10-22 15:26:54 +00:00
2024-02-10 21:30:13 +00:00
• FreeIPA가 AD와 통합되어 있다면, **ipaNTHash**는 쉽게 크랙할 수 있습니다: **base64**를 **디코딩** -> ASCII 16진수로 다시 인코딩 -> John The Ripper 또는 **hashcat**을 사용하여 빠르게 크랙할 수 있습니다.
2022-10-22 15:26:54 +00:00
2024-02-10 21:30:13 +00:00
• 이전 버전의 FreeIPA를 사용한다면, **SSHA512**를 사용합니다: **base64**를 디코딩 -> SSHA512 **해시**를 찾습니다 -> John The Ripper 또는 **hashcat**을 사용하여 크랙할 수 있습니다.
2022-10-22 15:26:54 +00:00
2024-02-10 21:30:13 +00:00
• 새 버전의 FreeIPA를 사용한다면, **PBKDF2\_SHA256**을 사용합니다: **base64**를 디코딩 -> PBKDF2\_SHA256을 찾습니다 -> 길이는 256바이트입니다. John은 256비트 (32바이트)로 작동할 수 있습니다 -> 의사 난수 함수로 SHA-265를 사용하며 블록 크기는 32바이트입니다 -> PBKDF2\_SHA256 해시의 첫 번째 256비트만 사용할 수 있습니다 -> John The Ripper 또는 hashcat을 사용하여 크랙할 수 있습니다.
2022-10-22 15:26:54 +00:00
2022-10-24 09:15:22 +00:00
< figure > < img src = "../.gitbook/assets/image (33).png" alt = "" > < figcaption > < / figcaption > < / figure >
2022-10-22 15:26:54 +00:00
2024-02-10 21:30:13 +00:00
해시를 추출하려면 **FreeIPA 서버의 root** 권한이 필요하며, 여기에서 ** `dbscan` ** 도구를 사용하여 추출할 수 있습니다:
2022-10-22 15:26:54 +00:00
< figure > < img src = "../.gitbook/assets/image (196).png" alt = "" > < figcaption > < / figcaption > < / figure >
2024-02-10 21:30:13 +00:00
### HBAC 규칙 <a href="#482b" id="482b"></a>
2022-10-22 14:44:59 +00:00
2024-02-10 21:30:13 +00:00
이는 사용자 또는 호스트에게 리소스 (호스트, 서비스, 서비스 그룹 등)에 대한 특정 권한을 부여하는 규칙입니다.
2022-10-22 14:44:59 +00:00
```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 < hbacrule > --all
```
#### Sudo-Rules
2024-02-10 21:30:13 +00:00
FreeIPA는 sudo 권한을 중앙 집중식으로 제어할 수 있도록 sudo 규칙을 제공합니다. 이러한 규칙은 도메인 내의 호스트에서 sudo를 사용하여 명령을 실행하는 것을 허용하거나 제한합니다. 공격자는 이러한 규칙 집합을 조사함으로써 적용 가능한 호스트, 사용자 및 허용된 명령을 식별할 수 있습니다.
2022-10-22 14:44:59 +00:00
```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 < sudorule > --all
```
2024-02-10 21:30:13 +00:00
### 역할 기반 접근 제어
2022-10-22 14:44:59 +00:00
2024-02-10 21:30:13 +00:00
**역할**은 여러 **권한**으로 구성되며, 각 권한은 **허가**의 모음을 포함합니다. 이러한 역할은 사용자, 사용자 **그룹** , **호스트** , 호스트 그룹 및 서비스에 할당할 수 있습니다. 예를 들어, 이 구조를 설명하기 위해 FreeIPA의 기본 "사용자 관리자" 역할을 고려해 보겠습니다.
2022-10-22 14:44:59 +00:00
2024-02-10 21:30:13 +00:00
`사용자 관리자` 역할에는 다음과 같은 권한이 있습니다:
2022-10-22 14:44:59 +00:00
2024-02-10 21:30:13 +00:00
* **사용자 관리자**
* **그룹 관리자**
* **단계 사용자 관리자**
2022-10-22 14:44:59 +00:00
2024-02-10 21:30:13 +00:00
다음 명령을 사용하여 역할, 권한 및 허가를 열거할 수 있습니다:
2022-10-22 14:44:59 +00:00
```bash
# 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
2024-02-10 21:30:13 +00:00
ipa privilege-find
2022-10-22 14:44:59 +00:00
ipa privilege-show < privilege > --all
ipa permission-find
ipa permission-show < permission > --all
```
2024-02-10 21:30:13 +00:00
### 공격 시나리오 예제
2022-10-22 14:44:59 +00:00
2024-02-10 21:30:13 +00:00
[https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e ](https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e )에서 도메인을 침해하기 위해 일부 권한을 남용하는 간단한 예제를 찾을 수 있습니다.
2022-10-22 14:44:59 +00:00
2023-12-26 17:26:15 +00:00
### Linikatz/LinikatzV2
2023-05-12 09:08:05 +00:00
2023-12-26 17:26:15 +00:00
* [https://github.com/Orange-Cyberdefense/LinikatzV2 ](https://github.com/Orange-Cyberdefense/LinikatzV2 )
* [https://github.com/CiscoCXSecurity/linikatz ](https://github.com/CiscoCXSecurity/linikatz )
2023-05-12 09:08:05 +00:00
2024-02-10 21:30:13 +00:00
## 권한 상승
2022-10-22 14:44:59 +00:00
2024-02-10 21:30:13 +00:00
### ~~root 사용자 생성~~
2022-10-22 14:44:59 +00:00
{% hint style="warning" %}
2024-02-10 21:30:13 +00:00
`root` 라는 이름의 새 사용자를 **생성할 수 있다면** , 그를 가장할 수 있으며 **root로서 어떤 기계에든 SSH로 접속할 수 있습니다.**
2022-10-22 14:44:59 +00:00
2024-02-10 21:30:13 +00:00
**이는 패치되었습니다.**
2022-10-22 14:44:59 +00:00
{% endhint %}
2024-02-10 21:30:13 +00:00
자세한 설명은 [https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b ](https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b )에서 확인할 수 있습니다.
2022-10-22 14:44:59 +00:00
2024-02-10 21:30:13 +00:00
## 참고 자료
2024-02-05 02:28:59 +00:00
* [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 )
2022-10-22 14:44:59 +00:00
< details >
2024-02-10 21:30:13 +00:00
< summary > < strong > htARTE (HackTricks AWS Red Team Expert)< / strong > 를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요< strong > !< / strong > < / summary >
2022-10-22 14:44:59 +00:00
2024-02-10 21:30:13 +00:00
HackTricks를 지원하는 다른 방법:
2023-12-30 20:49:23 +00:00
2024-02-10 21:30:13 +00:00
* HackTricks에서 **회사 광고를 보거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS** ](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 상품** ](https://peass.creator-spring.com )을 구매하세요.
* [**The PEASS Family** ](https://opensea.io/collection/the-peass-family )를 발견하세요. 독점적인 [**NFT** ](https://opensea.io/collection/the-peass-family ) 컬렉션입니다.
* 💬 [**Discord 그룹** ](https://discord.gg/hRep4RUj7f ) 또는 [**텔레그램 그룹** ](https://t.me/peass )에 **참여**하거나 **Twitter** 🐦 [**@hacktricks_live** ](https://twitter.com/hacktricks_live )**를** 팔로우하세요.
* **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **자신의 해킹 기법을 공유**하세요.
2022-10-22 14:44:59 +00:00
< / details >