13 KiB
Teste de Penetração no FreeIPA
Aprenda hacking na AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras maneiras de apoiar o HackTricks:
- Se você deseja ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF Confira os PLANOS DE ASSINATURA!
- Adquira o swag oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe seus truques de hacking enviando PRs para HackTricks e HackTricks Cloud github repos.
Informações Básicas
O 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 MIT Kerberos para gerenciamento semelhante ao Active Directory. Utilizando o Sistema de Certificados Dogtag para gerenciamento de certificados CA & RA, ele suporta autenticação multi-fator, incluindo cartões inteligentes. O SSSD é integrado para processos de autenticação Unix.
Impressões Digitais
Arquivos e Variáveis de Ambiente
- O arquivo em
/etc/krb5.conf
é onde as informações do cliente Kerberos, necessárias para a inscrição no domínio, são armazenadas. Isso inclui as localizações dos KDCs e servidores de administração, configurações padrão e mapeamentos. - As configurações padrão do sistema para clientes e servidores IPA são definidas no arquivo localizado em
/etc/ipa/default.conf
. - Os 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 específicos e configurações relevantes para autenticação Kerberos.
Binários
Ferramentas como ipa
, kdestroy
, kinit
, klist
, kpasswd
, ksu
, kswitch
e kvno
são essenciais para gerenciar domínios FreeIPA, lidar com tickets Kerberos, alterar senhas e adquirir tickets de serviço, entre outras funcionalidades.
Rede
Uma ilustração é fornecida para representar uma configuração típica de servidor FreeIPA.
Autenticação
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.
Arquivos de Ticket CCACHE
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 simples 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 de ticket.
Chaveiro Unix
Alternativamente, os Tickets CCACHE podem ser armazenados no chaveiro do Linux, oferecendo mais controle sobre o gerenciamento de tickets. O escopo de armazenamento de tickets varia (KEYRING:nome
, KEYRING:processo:nome
, KEYRING:thread:nome
, KEYRING:sessão:nome
, KEYRING:persistente:uidnúmero
), com o klist
capaz de analisar essas informações para o usuário. No entanto, reutilizar um Ticket CCACHE do chaveiro Unix pode apresentar desafios, com ferramentas como Tickey disponíveis para extrair tickets Kerberos.
Keytab
Arquivos Keytab, contendo princípios Kerberos e chaves criptografadas, são críticos para obter tickets de concessão de ticket (TGT) válidos sem precisar da senha do princípio. Analisar e reutilizar credenciais de arquivos Keytab pode ser facilmente realizado com utilitários como klist
e scripts como KeytabParser.
Cheatsheet
Você pode encontrar mais informações sobre como usar tickets no Linux no seguinte link:
{% content-ref url="privilege-escalation/linux-active-directory.md" %} linux-active-directory.md {% endcontent-ref %}
Enumeração
{% 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. {% endhint %}
Hosts, Usuários e Grupos
É possível criar hosts, usuários e grupos. Hosts e usuários são classificados em contêineres chamados "Grupos de Hosts" e "Grupos de Usuários" respectivamente. Esses são semelhantes às Unidades Organizacionais (OU).
Por padrão no FreeIPA, o servidor LDAP permite ligações anônimas, e uma grande quantidade de dados é enumerável não autenticada. Isso pode enumerar todos os dados disponíveis não autenticados:
ldapsearch -x
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).
# 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"
A partir de uma máquina integrada ao domínio, você poderá usar binários instalados para enumerar o domínio:
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
{% hint style="info" %} O usuário admin do FreeIPA é equivalente aos administradores de domínio do AD. {% endhint %}
Hashes
O usuário root do servidor IPA tem acesso aos hashes de senha.
- O hash da 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 estiver integrado com o AD.
Para quebrar esses hashes:
-
Se o FreeIPA estiver integrado com o AD, o ipaNTHash é fácil de quebrar: Você deve decodificar o base64 -> re-codificá-lo como hexadecimal ASCII -> John The Ripper ou hashcat podem ajudar a quebrá-lo rapidamente.
-
Se uma versão antiga do FreeIPA for usada, então o SSHA512 é usado: Você deve decodificar o base64 -> encontrar o hash SSHA512 -> John The Ripper ou hashcat podem ajudar a quebrá-lo.
-
Se uma nova versão do FreeIPA for usada, então o PBKDF2_SHA256 é usado: Você deve decodificar o base64 -> encontrar o PBKDF2_SHA256 -> seu comprimento é de 256 bytes. O John pode trabalhar com 256 bits (32 bytes) -> SHA-265 é usado como a função pseudo-aleatória, o tamanho do bloco é de 32 bytes -> você pode usar apenas os primeiros 256 bits do nosso hash PBKDF2_SHA256 -> John The Ripper ou hashcat podem ajudar a quebrá-lo.
Para extrair os hashes, você precisa ser root no servidor FreeIPA, lá você pode usar a ferramenta dbscan
para extraí-los:
Regras HBAC
São regras que concedem permissões específicas a usuários ou hosts sobre recursos (hosts, serviços, grupos de serviços...).
# 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
Regras do Sudo
O FreeIPA permite o controle centralizado sobre as permissões do sudo por meio de regras do sudo. 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.
# 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
Um papel é composto por vários privilégios, cada um dos quais engloba uma coleção de permissões. Esses papéis podem ser atribuídos a Usuários, Grupos de Usuários, Hosts, Grupos de Hosts e Serviços. Por exemplo, considere o papel padrão de "Administrador de Usuário" no FreeIPA para exemplificar essa estrutura.
O papel Administrador de Usuário
possui esses privilégios:
- Administradores de Usuários
- Administradores de Grupos
- Administradores de Usuários de Estágio
Com os seguintes comandos é possível enumerar os papéis, privilégios e permissões:
# 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
Exemplo de Cenário de Ataque
Em 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.
Linikatz/LinikatzV2
Privesc
Criação de usuário root
{% hint style="warning" %}
Se você puder criar um novo usuário com o nome root
, você pode se passar por ele e será capaz de fazer SSH em qualquer máquina como root.
ISSO FOI CORRIGIDO. {% endhint %}
Você pode conferir uma explicação detalhada em https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b
Referências
- 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
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras formas de apoiar o HackTricks:
- Se você quiser ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF Confira os PLANOS DE ASSINATURA!
- Adquira o swag oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe seus truques de hacking enviando PRs para os repositórios HackTricks e HackTricks Cloud.