hacktricks/linux-hardening/freeipa-pentesting.md

216 lines
13 KiB
Markdown
Raw Normal View History

# FreeIPA Pentesting
2022-10-22 14:44:59 +00:00
{% hint style="success" %}
Aprenda e pratique Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprenda e pratique Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-10-22 14:44:59 +00:00
<details>
2022-10-22 14:44:59 +00:00
<summary>Support HackTricks</summary>
* Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
2022-10-22 14:44:59 +00:00
</details>
{% endhint %}
2022-10-22 14:44:59 +00:00
## Informações Básicas
2022-10-22 14:44:59 +00:00
FreeIPA é uma **alternativa** de código aberto ao **Active Directory** da Microsoft, principalmente para ambientes **Unix**. Ele combina um **diretório LDAP** completo com um Centro de Distribuição de Chaves **Kerberos** da MIT para gerenciamento semelhante ao Active Directory. Utilizando o **Sistema de Certificados** Dogtag para gerenciamento de certificados CA e RA, suporta autenticação **multifatorial**, incluindo cartões inteligentes. O SSSD está integrado para processos de autenticação Unix.
2022-10-22 14:44:59 +00:00
## Impressões Digitais
2022-10-22 14:44:59 +00:00
### Arquivos e Variáveis de Ambiente
* O arquivo em `/etc/krb5.conf` é onde as informações do cliente Kerberos, necessárias para o registro no domínio, são armazenadas. Isso inclui locais de KDCs e servidores administrativos, configurações padrão e mapeamentos.
* As configurações padrão para clientes e servidores IPA são definidas no arquivo localizado em `/etc/ipa/default.conf`.
* Hosts dentro do domínio devem ter um arquivo `krb5.keytab` em `/etc/krb5.keytab` para processos de autenticação.
* Várias variáveis de ambiente (`KRB5CCNAME`, `KRB5_KTNAME`, `KRB5_CONFIG`, `KRB5_KDC_PROFILE`, `KRB5RCACHETYPE`, `KRB5RCACHEDIR`, `KRB5_TRACE`, `KRB5_CLIENT_KTNAME`, `KPROP_PORT`) são usadas para apontar para arquivos e configurações específicas relevantes para a autenticação Kerberos.
2022-10-22 14:44:59 +00:00
2023-06-06 18:56:34 +00:00
### Binários
2022-10-22 14:44:59 +00:00
Ferramentas como `ipa`, `kdestroy`, `kinit`, `klist`, `kpasswd`, `ksu`, `kswitch` e `kvno` são centrais para gerenciar domínios FreeIPA, lidando com tickets Kerberos, alterando senhas e adquirindo tickets de serviço, entre outras funcionalidades.
2022-10-22 14:44:59 +00:00
2023-06-06 18:56:34 +00:00
### Rede
2022-10-22 15:26:54 +00:00
Uma ilustração é fornecida para representar uma configuração típica de servidor FreeIPA.
2022-10-22 15:26:54 +00:00
2023-06-06 18:56:34 +00:00
## Autenticação
2022-10-22 14:44:59 +00:00
A autenticação no FreeIPA, aproveitando o **Kerberos**, espelha a do **Active Directory**. O acesso aos recursos do domínio requer um ticket Kerberos válido, que pode ser armazenado em vários locais dependendo da configuração do domínio FreeIPA.
2022-10-22 14:44:59 +00:00
### **Arquivos de Ticket CCACHE**
2022-10-22 14:44:59 +00:00
Os arquivos CCACHE, armazenados tipicamente em **`/tmp`** com permissões **600**, são formatos binários para armazenar credenciais Kerberos, importantes para autenticação sem a senha em texto claro do usuário devido à sua portabilidade. A análise de um ticket CCACHE pode ser feita usando o comando `klist`, e reutilizar um Ticket CCACHE válido envolve exportar `KRB5CCNAME` para o caminho do arquivo do ticket.
2022-10-22 14:44:59 +00:00
### **Keyring Unix**
2022-10-22 14:44:59 +00:00
Alternativamente, os Tickets CCACHE podem ser armazenados no keyring do Linux, oferecendo mais controle sobre o gerenciamento de tickets. O escopo do armazenamento de tickets varia (`KEYRING:name`, `KEYRING:process:name`, `KEYRING:thread:name`, `KEYRING:session:name`, `KEYRING:persistent:uidnumber`), com `klist` capaz de analisar essas informações para o usuário. No entanto, reutilizar um Ticket CCACHE do keyring Unix pode apresentar desafios, com ferramentas como **Tickey** disponíveis para extrair tickets Kerberos.
2022-10-22 14:44:59 +00:00
### Keytab
2022-10-22 14:44:59 +00:00
Os arquivos keytab, contendo princípios Kerberos e chaves criptografadas, são críticos para obter tickets de concessão de tickets válidos (TGT) sem precisar da senha do princípio. A análise e reutilização de credenciais de arquivos keytab podem ser facilmente realizadas com utilitários como `klist` e scripts como **KeytabParser**.
2022-10-22 14:44:59 +00:00
### Cheatsheet
2022-10-22 14:44:59 +00:00
Você pode encontrar mais informações sobre como usar tickets no linux no seguinte link:
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 %}
2023-06-06 18:56:34 +00:00
## Enumeração
2022-10-22 14:44:59 +00:00
2022-10-22 15:26:54 +00:00
{% hint style="warning" %}
Você pode realizar a **enumeração** via **ldap** e outras ferramentas **binárias**, ou **conectando-se à página da web na porta 443 do servidor FreeIPA**.
2022-10-22 15:26:54 +00:00
{% endhint %}
### Hosts, Usuários e Grupos <a href="#id-4b3b" id="id-4b3b"></a>
2022-10-22 14:44:59 +00:00
É possível criar **hosts**, **usuários** e **grupos**. Hosts e usuários são organizados em contêineres chamados “**Grupos de Hosts**” e “**Grupos de Usuários**”, respectivamente. Estes são semelhantes às **Unidades Organizacionais** (OU).
2022-10-22 14:44:59 +00:00
Por padrão no FreeIPA, o servidor LDAP permite **vínculos anônimos**, e uma grande quantidade de dados é enumerável **não autenticada**. Isso pode enumerar todos os dados disponíveis não autenticados:
2022-10-22 14:44:59 +00:00
```
ldapsearch -x
2022-10-22 14:44:59 +00:00
```
Para obter **mais informações**, você precisa usar uma sessão **autenticada** (verifique a seção de Autenticação para aprender como preparar uma sessão autenticada).
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
ldapsearch -Y gssapi -b "cn=hostgroups,cn=accounts,dc=domain_name,dc=local"
2022-10-22 14:44:59 +00:00
```
De uma máquina unida ao domínio, você poderá usar **binaries instalados** para enumerar o domínio:
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" %}
O usuário **admin** do **FreeIPA** é o equivalente aos **administradores de domínio** do **AD**.
2022-10-22 15:26:54 +00:00
{% endhint %}
### Hashes <a href="#id-482b" id="id-482b"></a>
2022-10-22 15:26:54 +00:00
O usuário **root** do servidor **IPA** tem acesso aos **hashes** de senha.
2022-10-22 15:26:54 +00:00
* O hash de senha de um usuário é armazenado como **base64** no atributo “**userPassword**”. Esse hash pode ser **SSHA512** (versões antigas do FreeIPA) ou **PBKDF2\_SHA256**.
* O **Nthash** da senha é armazenado como **base64** em “**ipaNTHash**” se o sistema tiver **integração** com **AD**.
2022-10-22 15:26:54 +00:00
Para quebrar esses hashes:
2022-10-22 15:26:54 +00:00
• Se o FreeIPA estiver integrado com o AD, o **ipaNTHash** é fácil de quebrar: Você deve **decodificar** **base64** -> re-encodificá-lo como **ASCII** hex -> John The Ripper ou **hashcat** podem ajudá-lo a quebrá-lo rapidamente.
2022-10-22 15:26:54 +00:00
• Se uma versão antiga do FreeIPA for usada, então **SSHA512** é utilizado: Você deve decodificar **base64** -> encontrar o **hash** SSHA512 -> John The Ripper ou **hashcat** podem ajudá-lo a quebrá-lo.
2022-10-22 15:26:54 +00:00
• Se uma nova versão do FreeIPA for usada, então **PBKDF2\_SHA256** é utilizado: Você deve decodificar **base64** -> encontrar PBKDF2\_SHA256 -> seu **tamanho** é 256 bytes. John pode trabalhar com 256 bits (32 bytes) -> SHA-265 é usado como a função pseudo-aleatória, o tamanho do bloco é 32 bytes -> você pode usar apenas os primeiros 256 bits do nosso hash PBKDF2\_SHA256 -> John The Ripper ou hashcat podem ajudá-lo a quebrá-lo.
2022-10-22 15:26:54 +00:00
<figure><img src="../.gitbook/assets/image (655).png" alt=""><figcaption></figcaption></figure>
2022-10-22 15:26:54 +00:00
Para extrair os hashes, você precisa ser **root no servidor FreeIPA**, onde você pode usar a ferramenta **`dbscan`** para extraí-los:
2022-10-22 15:26:54 +00:00
<figure><img src="../.gitbook/assets/image (293).png" alt=""><figcaption></figcaption></figure>
2022-10-22 15:26:54 +00:00
### HBAC-Rules <a href="#id-482b" id="id-482b"></a>
2022-10-22 14:44:59 +00:00
Existem regras que concedem permissões específicas a usuários ou hosts sobre recursos (hosts, serviços, grupos de serviços...)
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
2022-10-22 14:44:59 +00:00
FreeIPA permite o controle centralizado sobre **sudo permissions** através de sudo-rules. Essas regras permitem ou limitam a execução de comandos com sudo em hosts dentro do domínio. Um atacante poderia potencialmente identificar os hosts aplicáveis, usuários e comandos permitidos examinando esses conjuntos de regras.
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
```
### Controle de Acesso Baseado em Funções
2022-10-22 14:44:59 +00:00
Uma **função** é composta por vários **privilégios**, cada um dos quais abrange uma coleção de **permissões**. Essas funções podem ser atribuídas a Usuários, Grupos de Usuários, **Hosts**, Grupos de Hosts e Serviços. Por exemplo, considere a função padrão “Administrador de Usuários” no FreeIPA para exemplificar essa estrutura.
2022-10-22 14:44:59 +00:00
A função `Administrador de Usuários` tem esses privilégios:
2022-10-22 14:44:59 +00:00
* **Administradores de Usuários**
* **Administradores de Grupos**
* **Administradores de Usuários de Estágio**
2022-10-22 14:44:59 +00:00
Com os seguintes comandos, é possível enumerar as funções, privilégios e permissões:
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
ipa privilege-find
2022-10-22 14:44:59 +00:00
ipa privilege-show <privilege> --all
ipa permission-find
ipa permission-show <permission> --all
```
2023-06-06 18:56:34 +00:00
### Exemplo de Cenário de Ataque
2022-10-22 14:44:59 +00:00
2023-06-06 18:56:34 +00:00
Em [https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e](https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e) você pode encontrar um exemplo simples de como abusar de algumas permissões para comprometer o domínio.
2022-10-22 14:44:59 +00:00
### Linikatz/LinikatzV2
* [https://github.com/Orange-Cyberdefense/LinikatzV2](https://github.com/Orange-Cyberdefense/LinikatzV2)
* [https://github.com/CiscoCXSecurity/linikatz](https://github.com/CiscoCXSecurity/linikatz)
2022-10-22 14:44:59 +00:00
## Privesc
### ~~criação de usuário root~~
2022-10-22 14:44:59 +00:00
{% hint style="warning" %}
Se você pode **criar um novo usuário com o nome `root`**, você pode se passar por ele e será capaz de **SSH em qualquer máquina como root.**
2022-10-22 14:44:59 +00:00
2023-06-06 18:56:34 +00:00
**ISSO FOI CORRIGIDO.**
2022-10-22 14:44:59 +00:00
{% endhint %}
Você pode verificar uma explicação detalhada em [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
## Referências
* [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
{% hint style="success" %}
Aprenda e pratique Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprenda e pratique Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-10-22 14:44:59 +00:00
<details>
2022-10-22 14:44:59 +00:00
<summary>Suporte ao HackTricks</summary>
* Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe truques de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
2022-10-22 14:44:59 +00:00
</details>
{% endhint %}