FreeIPA Pentesting
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
Basic Information
FreeIPA๋ Microsoft Windows Active Directory์ ๋ํ ์คํ ์์ค ๋์์ผ๋ก, ์ฃผ๋ก Unix ํ๊ฒฝ์ ์ํด ์ค๊ณ๋์์ต๋๋ค. ์ด๋ Active Directory์ ์ ์ฌํ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ MIT Kerberos ํค ๋ฐฐํฌ ์ผํฐ์ ์์ ํ LDAP ๋๋ ํ ๋ฆฌ๋ฅผ ๊ฒฐํฉํฉ๋๋ค. CA ๋ฐ RA ์ธ์ฆ์ ๊ด๋ฆฌ๋ฅผ ์ํด Dogtag Certificate System์ ํ์ฉํ๋ฉฐ, ์ค๋งํธ์นด๋๋ฅผ ํฌํจํ ๋ค์ค ์ธ์ฆ์ ์ง์ํฉ๋๋ค. Unix ์ธ์ฆ ํ๋ก์ธ์ค๋ฅผ ์ํด SSSD๊ฐ ํตํฉ๋์ด ์์ต๋๋ค.
Fingerprints
Files & Environment Variables
- Kerberos ํด๋ผ์ด์ธํธ ์ ๋ณด๋ ๋๋ฉ์ธ ๋ฑ๋ก์ ํ์ํ๋ฉฐ
/etc/krb5.confํ์ผ์ ์ ์ฅ๋ฉ๋๋ค. ์ฌ๊ธฐ์๋ 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 ์ธ์ฆ๊ณผ ๊ด๋ จ๋ ํน์ ํ์ผ ๋ฐ ์ค์ ์ ๊ฐ๋ฆฌํค๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
Binaries
ipa, kdestroy, kinit, klist, kpasswd, ksu, kswitch, kvno์ ๊ฐ์ ๋๊ตฌ๋ FreeIPA ๋๋ฉ์ธ์ ๊ด๋ฆฌํ๊ณ Kerberos ํฐ์ผ์ ์ฒ๋ฆฌํ๋ฉฐ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ณ๊ฒฝํ๊ณ ์๋น์ค ํฐ์ผ์ ํ๋ํ๋ ๋ฑ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ํต์ฌ์ ์
๋๋ค.
Network
์ผ๋ฐ์ ์ธ FreeIPA ์๋ฒ ์ค์ ์ ๋ํ๋ด๋ ๊ทธ๋ฆผ์ด ์ ๊ณต๋ฉ๋๋ค.
Authentication
FreeIPA์์์ ์ธ์ฆ์ Kerberos๋ฅผ ํ์ฉํ์ฌ Active Directory์ ์ ์ฌํฉ๋๋ค. ๋๋ฉ์ธ ๋ฆฌ์์ค์ ์ ๊ทผํ๋ ค๋ฉด ์ ํจํ Kerberos ํฐ์ผ์ด ํ์ํ๋ฉฐ, ์ด๋ FreeIPA ๋๋ฉ์ธ ๊ตฌ์ฑ์ ๋ฐ๋ผ ๋ค์ํ ์์น์ ์ ์ฅ๋ ์ ์์ต๋๋ค.
CCACHE Ticket Files
CCACHE ํ์ผ์ ์ผ๋ฐ์ ์ผ๋ก **/tmp**์ 600 ๊ถํ์ผ๋ก ์ ์ฅ๋๋ฉฐ, Kerberos ์๊ฒฉ ์ฆ๋ช
์ ์ ์ฅํ๊ธฐ ์ํ ์ด์ง ํ์์ผ๋ก, ์ฌ์ฉ์์ ํ๋ฌธ ๋น๋ฐ๋ฒํธ ์์ด ์ธ์ฆ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. CCACHE ํฐ์ผ์ ํ์ฑํ๋ ค๋ฉด klist ๋ช
๋ น์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์ ํจํ CCACHE ํฐ์ผ์ ์ฌ์ฌ์ฉํ๋ ค๋ฉด KRB5CCNAME์ ํฐ์ผ ํ์ผ์ ๊ฒฝ๋ก๋ก ๋ด๋ณด๋ด์ผ ํฉ๋๋ค.
Unix Keyring
๋์์ผ๋ก, CCACHE ํฐ์ผ์ Linux ํค๋ง์ ์ ์ฅํ ์ ์์ด ํฐ์ผ ๊ด๋ฆฌ์ ๋ํ ๋ ๋ง์ ์ ์ด๋ฅผ ์ ๊ณตํฉ๋๋ค. ํฐ์ผ ์ ์ฅ ๋ฒ์๋ (KEYRING:name, KEYRING:process:name, KEYRING:thread:name, KEYRING:session:name, KEYRING:persistent:uidnumber)๋ก ๋ค์ํ๋ฉฐ, klist๋ ์ฌ์ฉ์๋ฅผ ์ํด ์ด ์ ๋ณด๋ฅผ ํ์ฑํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ Unix ํค๋ง์์ CCACHE ํฐ์ผ์ ์ฌ์ฌ์ฉํ๋ ๊ฒ์ ์ด๋ ค์ธ ์ ์์ผ๋ฉฐ, Kerberos ํฐ์ผ์ ์ถ์ถํ๊ธฐ ์ํด Tickey์ ๊ฐ์ ๋๊ตฌ๊ฐ ์ ๊ณต๋ฉ๋๋ค.
Keytab
Kerberos ์ฃผ์ฒด์ ์ํธํ๋ ํค๋ฅผ ํฌํจํ๋ Keytab ํ์ผ์ ์ ํจํ ํฐ์ผ ๋ถ์ฌ ํฐ์ผ(TGT)์ ์ป๋ ๋ฐ ์ค์ํ๋ฉฐ, ์ฃผ์ฒด์ ๋น๋ฐ๋ฒํธ ์์ด๋ ๊ฐ๋ฅํฉ๋๋ค. Keytab ํ์ผ์์ ์๊ฒฉ ์ฆ๋ช
์ ํ์ฑํ๊ณ ์ฌ์ฌ์ฉํ๋ ๊ฒ์ klist์ KeytabParser์ ๊ฐ์ ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๊ฒ ์ํํ ์ ์์ต๋๋ค.
Cheatsheet
Linux์์ ํฐ์ผ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ ๋ง์ ์ ๋ณด๋ ๋ค์ ๋งํฌ์์ ํ์ธํ ์ ์์ต๋๋ค:
Enumeration
Warning
ldap ๋ฐ ๊ธฐํ binary ๋๊ตฌ๋ฅผ ํตํด enumeration์ ์ํํ๊ฑฐ๋ FreeIPA ์๋ฒ์ ํฌํธ 443์ ์๋ ์น ํ์ด์ง์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
Hosts, Users, and Groups
ํธ์คํธ, ์ฌ์ฉ์ ๋ฐ ๊ทธ๋ฃน์ ์์ฑํ ์ ์์ต๋๋ค. ํธ์คํธ์ ์ฌ์ฉ์๋ ๊ฐ๊ฐ โ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
Tip
FreeIPA์ admin ์ฌ์ฉ์๋ AD์ domain admins์ ๋๋ฑํฉ๋๋ค.
Hashes
IPA ์๋ฒ์ root ์ฌ์ฉ์๋ ๋น๋ฐ๋ฒํธ hashes์ ์ ๊ทผํ ์ ์์ต๋๋ค.
- ์ฌ์ฉ์์ ๋น๋ฐ๋ฒํธ ํด์๋ โuserPasswordโ attribute์ base64๋ก ์ ์ฅ๋ฉ๋๋ค. ์ด ํด์๋ SSHA512 (๊ตฌ๋ฒ์ ์ FreeIPA) ๋๋ PBKDF2_SHA256์ผ ์ ์์ต๋๋ค.
- ์์คํ ์ด AD์ integration๋์ด ์๋ค๋ฉด ๋น๋ฐ๋ฒํธ์ Nthash๋ โipaNTHashโ์ base64๋ก ์ ์ฅ๋ฉ๋๋ค.
์ด ํด์๋ฅผ ํฌ๋ํ๋ ค๋ฉด:
โข FreeIPA๊ฐ AD์ ํตํฉ๋ ๊ฒฝ์ฐ, ipaNTHash๋ ์ฝ๊ฒ ํฌ๋ํ ์ ์์ต๋๋ค: base64๋ฅผ decodeํ ํ ASCII hex๋ก ๋ค์ ์ธ์ฝ๋ฉ -> John The Ripper ๋๋ hashcat์ ์ฌ์ฉํ์ฌ ๋น ๋ฅด๊ฒ ํฌ๋ํ ์ ์์ต๋๋ค.
โข ๊ตฌ๋ฒ์ ์ FreeIPA๊ฐ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ, SSHA512๊ฐ ์ฌ์ฉ๋ฉ๋๋ค: base64๋ฅผ decodeํ ํ SSHA512 hash๋ฅผ ์ฐพ์์ผ ํฉ๋๋ค -> John The Ripper ๋๋ hashcat์ด ํฌ๋ํ๋ ๋ฐ ๋์์ ์ค ์ ์์ต๋๋ค.
โข ์ต์ ๋ฒ์ ์ FreeIPA๊ฐ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ, PBKDF2_SHA256์ด ์ฌ์ฉ๋ฉ๋๋ค: base64๋ฅผ decodeํ ํ PBKDF2_SHA256์ ์ฐพ์์ผ ํฉ๋๋ค -> ๊ธธ์ด๋ 256 ๋ฐ์ดํธ์ ๋๋ค. John์ 256 ๋นํธ(32 ๋ฐ์ดํธ)๋ก ์์ ํ ์ ์์ต๋๋ค -> SHA-265๊ฐ ์์ฌ ๋์ ํจ์๋ก ์ฌ์ฉ๋๋ฉฐ, ๋ธ๋ก ํฌ๊ธฐ๋ 32 ๋ฐ์ดํธ์ ๋๋ค -> PBKDF2_SHA256 ํด์์ ์ฒ์ 256 ๋นํธ๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค -> John The Ripper ๋๋ hashcat์ด ํฌ๋ํ๋ ๋ฐ ๋์์ ์ค ์ ์์ต๋๋ค.
.png)
ํด์๋ฅผ ์ถ์ถํ๋ ค๋ฉด FreeIPA ์๋ฒ์ root๊ฐ ๋์ด์ผ ํ๋ฉฐ, ๊ทธ๊ณณ์์ dbscan ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ถ์ถํ ์ ์์ต๋๋ค:
.png)
HBAC-Rules
์ฌ์ฉ์ ๋๋ ํธ์คํธ์ ์์(ํธ์คํธ, ์๋น์ค, ์๋น์ค ๊ทธ๋ฃน ๋ฑ)์ ๋ํ ํน์ ๊ถํ์ ๋ถ์ฌํ๋ ๊ท์น์ด ์์ต๋๋ค.
# 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-rules๋ฅผ ํตํด 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
์ญํ ๊ธฐ๋ฐ ์ ๊ทผ ์ ์ด
A role๋ ๋ค์ํ privileges๋ก ๊ตฌ์ฑ๋๋ฉฐ, ๊ฐ privilege๋ permissions์ ๋ชจ์์ ํฌํจํฉ๋๋ค. ์ด๋ฌํ ์ญํ ์ ์ฌ์ฉ์, ์ฌ์ฉ์ ๊ทธ๋ฃน, ํธ์คํธ, ํธ์คํธ ๊ทธ๋ฃน ๋ฐ ์๋น์ค์ ํ ๋น๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ด ๊ตฌ์กฐ๋ฅผ ์ค๋ช ํ๊ธฐ ์ํด FreeIPA์ ๊ธฐ๋ณธ โUser Administratorโ ์ญํ ์ ๊ณ ๋ คํด ๋ณด์ญ์์ค.
์ญํ User Administrator๋ ๋ค์๊ณผ ๊ฐ์ privileges๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค:
- User Administrators
- Group Administrators
- Stage User Administrators
๋ค์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ญํ , privileges ๋ฐ permissions๋ฅผ ์ด๊ฑฐํ ์ ์์ต๋๋ค:
# 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 ์ฌ์ฉ์ ์์ฑ
Warning
๋ง์ฝ
root๋ผ๋ ์ด๋ฆ์ ์ ์ฌ์ฉ์๋ฅผ ์์ฑํ ์ ์๋ค๋ฉด, ๊ทธ๋ฅผ ๊ฐ์ฅํ ์ ์์ผ๋ฉฐ root๋ก ๋ชจ๋ ๋จธ์ ์ SSH๋ก ์ ์ํ ์ ์์ต๋๋ค.์ด๊ฒ์ ํจ์น๋์์ต๋๋ค.
์์ธํ ์ค๋ช ์ 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
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


