
Kit de ferramentas PowerShell para auditoria de AD CS baseado no toolkit PSPKI.
Ferramenta PowerShell para auditoria dos Serviços de Certificados do Active Directory (AD CS).
Ela é construída sobre o toolkit PSPKI (licença Microsoft Public License) do PKISolution. Este repositório contém uma versão mais recente do PSPKI do que a disponível na PSGallery (veja o diretório PSPKI). Vadims Podans (o criador do PSPKI) gentilmente forneceu esta versão, pois ela contém correções para vários bugs.
Este README é apenas um ponto de partida — para detalhes completos e orientações defensivas, consulte o whitepaper "Certified Pre-Owned".
O módulo contém as seguintes funções principais:
AVISO: Este código está em beta! Estamos confiantes de que Invoke-PKIAudit não impactará o ambiente, pois a quantidade de dados que ele consulta é bastante limitada. Não realizamos testes rigorosos com Get-CertRequest contra cargas de trabalho típicas de servidores CA. Get-CertRequest consulta diretamente o banco de dados da CA e pode precisar processar milhares de resultados, o que pode impactar o desempenho.
SE NÃO HOUVER RESULTADOS, ISSO NÃO É GARANTIA DE QUE SEU AMBIENTE ESTÁ SEGURO!!
TAMBÉM NÃO PODEMOS GARANTIR QUE NOSSAS RECOMENDAÇÕES DE MITIGAÇÃO TORNARÃO SEU AMBIENTE SEGURO OU NÃO CAUSARÃO INTERRUPÇÕES NAS OPERAÇÕES!
É sua responsabilidade conversar com sua(s) equipe(s) de Active Directory/PKI/Arquitetura para determinar as melhores mitigações para seu ambiente.
Se o código quebrar ou perdermos algo, por favor abra uma issue ou pull request para correção!
Instale o seguinte em uma máquina Windows usando um prompt do PowerShell elevado (PowerShell versão 5.1 ou superior):
* O [módulo PowerShell PSPKI](https://github.com/PKISolutions/PSPKI). Instale com o seguinte comando:```
Install-Module -Name PSPKI
Baixe o módulo e extraia-o para uma pasta. Em seguida, importe o módulo usando os seguintes comandos:``` cd PSPKIAudit Get-ChildItem -Recurse | Unblock-File
Import-Module .\PSPKIAudit.psd1
# Auditoria de Configurações Incorretas do AD CS
Executar `Invoke-PKIAudit` executará todas as verificações de auditoria contra o AD CS no domínio atual, incluindo a enumeração de várias configurações de Autoridade de Certificação e Modelo de Certificado. Para auditar uma CA específica, você pode executar `Invoke-PKIAudit -CAComputerName CA.DOMAIN.COM` ou `Invoke-PKIAudit -CAName X-Y-Z`.
Quaisquer configurações incorretas (ESC1-8) aparecerão como propriedades nos resultados da CA/modelo exibidos para identificar a configuração incorreta específica encontrada.
Se você quiser alterar os grupos/usuários usados para testar a inscrição/controle de acesso, modifique a regex `$CommonLowprivPrincipals` no topo do arquivo `Invoke-PKIAudit.ps1`
Se você quiser exportar todas as informações da CA para um csv, execute: `Get-AuditCertificateAuthority [-CAComputerName CA.DOMAIN.COM | -CAName X-Y-Z] | Export-Csv -NoTypeInformation CAs.csv`
Se você quiser exportar TODAS as informações de modelos publicados para um csv (não apenas modelos vulneráveis), execute: `Get-AuditCertificateTemplate [-CAComputerName CA.DOMAIN.COM | -CAName X-Y-Z] | Export-Csv -NoTypeInformation templates.csv`
## Explicação da Saída
Existem duas seções principais de saída, detalhes sobre CAs descobertas e detalhes sobre modelos potencialmente vulneráveis.
Para resultados de autoridade de certificação:
| Propriedade da Autoridade de Certificação | Descrição |
| ----------------------------------------- | ---------------------------------------------------------------- |
| ComputerName | O sistema no qual a CA está sendo executada. |
| CAName | O nome da CA. |
| ConfigString | A string de configuração completa COMPUTER\CA_NAME. |
| IsRoot | Se a CA é uma CA raiz. |
| AllowsUserSuppliedSans | Se a CA tem o flag `EDITF_ATTRIBUTESUBJECTALTNAME2` definido. |
| VulnerableACL | Se a CA tem uma configuração de ACL vulnerável. |
| EnrollmentPrincipals | Principais que têm o privilégio `Enroll` no nível da CA. |
| EnrollmentEndpoints | Os endpoints de inscrição dos serviços web da CA. |
| NTLMEnrollmentEndpoints | Os endpoints de inscrição dos serviços web da CA que têm NTLM habilitado. |
| DACL | As informações completas de controle de acesso. |
| Misconfigurations | ESCX indicando a configuração incorreta específica presente (se houver). |
Para resultados de modelo de certificado:
| Propriedade | Descrição |
| ------------------------ | ------------------------------------------------------------------------------------------------------ |
| CA | A ConfigString completa da CA na qual o modelo está publicado (nulo para não publicado). |
| Name | O nome do modelo. |
| SchemaVersion | A versão do esquema (1/2/3) do modelo. |
| OID | O identificador de objeto único para o modelo. |
| VulnerableTemplateACL | Verdadeiro se o modelo tem uma configuração de ACL vulnerável. |
| LowPrivCanEnroll | Verdadeiro se usuários com baixos privilégios podem se inscrever no modelo. |
| EnrolleeSuppliesSubject | Verdadeiro se o flag `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` está presente (ou seja, os usuários podem fornecer SANs arbitrárias). |
| EnhancedKeyUsage | Os EKUs de uso habilitados no modelo. |
| HasAuthenticationEku | Verdadeiro se o modelo tem um EKU que permite autenticação. |
| HasDangerousEku | Verdadeiro se o modelo tem um EKU "perigoso" (Any Purpose ou nulo). |
| EnrollmentAgentTemplate | Verdadeiro se o modelo tem o EKU "Certificate Request Agent". |
| CAManagerApproval | Verdadeiro se aprovações de gerente são necessárias para inscrição. |
| IssuanceRequirements | Informações de assinatura autorizada. |
| ValidityPeriod | Por quanto tempo o certificado é válido. |
| RenewalPeriod | O período de renovação do certificado. |
| Owner | O principal que possui o certificado. |
| DACL | As informações completas de controle de acesso. |
| Misconfigurations | ESCX indicando a configuração incorreta específica presente (se houver). |
## ESC1 - Modelos de Certificado Mal Configurados
### Details <!-- omit in toc -->
Este cenário de escalada de privilégios ocorre quando as seguintes condições são atendidas:
1. **A CA Corporativa concede direitos de inscrição a usuários com baixos privilégios.** A configuração da CA Corporativa deve permitir que usuários com baixos privilégios possam solicitar certificados. Consulte a seção "Background - Enrollment" no início do whitepaper para mais detalhes.
2. **A aprovação do gerente está desabilitada.** Essa configuração exige que um usuário com permissões de "gerente" de certificado revise e aprove o certificado solicitado antes que o certificado seja emitido. Consulte a seção "Background - Issuance Requirements" no início do whitepaper para mais detalhes.
3. **Nenhuma assinatura autorizada é necessária.** Essa configuração exige que qualquer CSR seja assinado por um certificado autorizado existente. Consulte a seção "Background - Issuance Requirements" no início do whitepaper para mais detalhes.
4. **Um descritor de segurança do modelo de certificado excessivamente permissivo concede direitos de inscrição de certificado a usuários com baixos privilégios.** Ter direitos de inscrição de certificado permite que um atacante com baixos privilégios solicite e obtenha um certificado baseado no modelo. Os Direitos de Inscrição são concedidos através do descritor de segurança do objeto de modelo de certificado do AD.
5. **O modelo de certificado define EKUs que habilitam a autenticação.** EKUs aplicáveis incluem Client Authentication (OID 1.3.6.1.5.5.7.3.2), PKINIT Client Authentication (OID 1.3.6.1.5.2.3.4) ou Smart Card Logon (OID 1.3.6.1.4.1.311.20.2.2).
6. **O modelo de certificado permite que os solicitantes especifiquem um subjectAltName (SAN) no CSR.** Se um solicitante puder especificar o SAN em um CSR, o solicitante pode solicitar um certificado como qualquer um (por exemplo, um usuário administrador de domínio). O objeto do 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 o flag CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT estiver presente, um solicitante pode especificar o SAN.
**TL;DR** Esta situação significa que usuários sem privilégios podem solicitar um certificado que pode ser usado para autenticação de domínio, onde eles podem especificar um nome alternativo arbitrário (como um administrador de domínio). Isso pode resultar em um certificado funcional para um usuário elevado como um administrador de domínio!
### Exemplo <!-- omit in toc -->```
[!] Potentially vulnerable Certificate Templates:
CA : dc.theshire.local\theshire-DC-CA
Name : ESC1Template
SchemaVersion : 2
OID : ESC1 Template (1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.10657968.9897558)
VulnerableTemplateACL : False
LowPrivCanEnroll : True
EnrolleeSuppliesSubject : True
EnhancedKeyUsage : Client Authentication (1.3.6.1.5.5.7.3.2)|Secure Email (1.3.6.1.5.5.7.3.4)|Encrypting File System (1.3.6.1.4.1.311.10.3.4)
HasAuthenticationEku : True
HasDangerousEku : False
EnrollmentAgentTemplate : False
CAManagerApproval : False
IssuanceRequirements : [Issuance Requirements]
Authorized signature count: 0
Reenrollment requires: same criteria as for enrollment.
ValidityPeriod : 1 years
RenewalPeriod : 6 weeks
Owner : THESHIRE\localadmin
DACL : NT AUTHORITY\Authenticated Users (Allow) - Read
THESHIRE\Domain Admins (Allow) - Read, Write, Enroll
THESHIRE\Domain Users (Allow) - Enroll
THESHIRE\Enterprise Admins (Allow) - Read, Write, Enroll
THESHIRE\localadmin (Allow) - Read, Write
Misconfigurations : ESC1
Existem algumas opções. Primeiro, clique com o botão direito no modelo de certificado afetado no Console de Modelos de Certificado (certtmpl.msc) e clique em "Propriedades"
Este cenário de escalada de privilégios ocorre quando as seguintes condições são atendidas:
A CA Empresarial concede direitos de registro a usuários com poucos privilégios. Os detalhes são os mesmos que no ESC1.
A aprovação do gerente está desabilitada. Os detalhes são os mesmos que no ESC1.
Nenhuma assinatura autorizada é necessária. Os detalhes são os mesmos que no ESC1.
Um descritor de segurança de modelo de certificado excessivamente permissivo concede direitos de registro de certificado a usuários com poucos privilégios. Os detalhes são os mesmos que no ESC1.
O modelo de certificado define EKUs de Qualquer Finalidade ou nenhum EKU. O EKU de Qualquer Finalidade (OID 2.5.29.37.0) pode ser usado para (surpresa!) qualquer finalidade, incluindo autenticação de cliente. Se nenhum EKU for especificado - ou seja, o pkiextendedkeyusage está vazio ou o atributo não existe - então o certificado é o equivalente a um certificado de CA subordinada e pode ser usado para qualquer coisa.
Resumo: Isso é muito semelhante ao ESC1, no entanto, com Qualquer Finalidade ou sem EKU, o sinalizador CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT não precisa estar presente.
[!] Potentially vulnerable Certificate Templates:
CA : dc.theshire.local\theshire-DC-CA Name : ESC2Template SchemaVersion : 2 OID : ESC2 Template (1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.7730030.4389735) VulnerableTemplateACL : False LowPrivCanEnroll : True EnrolleeSuppliesSubject : False EnhancedKeyUsage : HasAuthenticationEku : True HasDangerousEku : True EnrollmentAgentTemplate : False CAManagerApproval : False IssuanceRequirements : [Issuance Requirements] Authorized signature count: 0 Reenrollment requires: same criteria as for enrollment. ValidityPeriod : 1 years RenewalPeriod : 6 weeks Owner : THESHIRE\localadmin DACL : NT AUTHORITY\Authenticated Users (Allow) - Read THESHIRE\Domain Admins (Allow) - Read, Write, Enroll THESHIRE\Domain Users (Allow) - Enroll THESHIRE\Enterprise Admins (Allow) - Read, Write, Enroll THESHIRE\localadmin (Allow) - Read, Write Misconfigurations : ESC2
### Mitigações <!-- omit in toc -->
Existem algumas opções. Primeiro, clique com o botão direito no modelo de certificado afetado no Console de Modelos de Certificado (certtmpl.msc) e clique em "Properties"
1. Remova a capacidade de usuários com privilégios baixos se inscreverem neste modelo através da guia "Segurança" e removendo o privilégio **Inscrever** apropriado.
* Esta é provavelmente a melhor correção, pois estas EKUs sensíveis não devem estar disponíveis para usuários com privilégios baixos!
2. Ative a opção **"Aprovação do Gerente de Certificados da CA"** em "Requisitos de Emissão".
* Isso coloca as solicitações deste modelo na fila "Solicitações Pendentes" que devem ser aprovadas manualmente por um gerente de certificados.
3. Ative **"Assinaturas Autorizadas"** em "Requisitos de Emissão" (se você souber o que está fazendo).
* Isso força que as CSRs sejam co-assinadas por um certificado de Agente de Inscrição.
## ESC3 - Modelos de Agente de Inscrição Malconfigurados
### Detalhes <!-- omit in toc -->
Este cenário de escalonamento de privilégios ocorre quando as seguintes condições são atendidas:
1. **A CA Empresarial concede direitos de inscrição a usuários com privilégios baixos.** Os detalhes são os mesmos do ESC1.
2. **A aprovação do gerente está desabilitada.** Os detalhes são os mesmos do ESC1.
3. **Nenhuma assinatura autorizada é necessária.** Os detalhes são os mesmos do ESC1.
4. **Um descritor de segurança de modelo de certificado excessivamente permissivo concede direitos de inscrição de certificado a usuários com privilégios baixos.** Os detalhes são os mesmos do ESC1.
5. **O modelo de certificado define a EKU Certificate Request Agent.** A EKU Certificate Request Agent (OID 1.3.6.1.4.1.311.20.2.1) permite que uma entidade se inscreva para _outro_ modelo de certificado em nome de outro usuário.
6. **As restrições de agentes de inscrição não estão implementadas na CA.**
**TL;DR** Alguém com um certificado de Agente de Solicitação de Certificado (também conhecido como Inscrição) pode se inscrever em outros certificados em nome de qualquer usuário no domínio, para qualquer modelo de Versão de Esquema 1 ou qualquer modelo de Versão de Esquema 2+ que exija o Requisito de Emissão "Assinaturas Autorizadas/Política de Aplicativo" adequado, a menos que "Restrições de Agente de Inscrição" estejam implementadas no nível da CA.
### Exemplo <!-- omit in toc -->```
[!] Potentially vulnerable Certificate Templates:
CA : dc.theshire.local\theshire-DC-CA
Name : ESC3Template
SchemaVersion : 2
OID : ESC3 Template (1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.4300342.10028552)
VulnerableTemplateACL : False
LowPrivCanEnroll : True
EnrolleeSuppliesSubject : False
EnhancedKeyUsage : Certificate Request Agent (1.3.6.1.4.1.311.20.2.1)
HasAuthenticationEku : False
HasDangerousEku : False
EnrollmentAgentTemplate : True
CAManagerApproval : False
IssuanceRequirements : [Issuance Requirements]
Authorized signature count: 0
Reenrollment requires: same criteria as for enrollment.
ValidityPeriod : 1 years
RenewalPeriod : 6 weeks
Owner : THESHIRE\localadmin
DACL : NT AUTHORITY\Authenticated Users (Allow) - Read
THESHIRE\Domain Admins (Allow) - Read, Write, Enroll
THESHIRE\Domain Users (Allow) - Enroll
THESHIRE\Enterprise Admins (Allow) - Read, Write, Enroll
THESHIRE\localadmin (Allow) - Read, Write
Misconfigurations : ESC3
Existem algumas opções. Primeiro, clique com o botão direito no modelo de certificado afetado no Certificate Templates Console (certtmpl.msc) e clique em "Propriedades"
Também pode implementar "Restrições de Agente de Inscrição" através do Certification Authority console (certsrv.msc). Na CA afetada, clique com o botão direito no nome da CA e clique em "Propriedades" -> "Agentes de Inscrição". Existem mais informações sobre esta abordagem aqui.
Os modelos de certificados são objetos seguráveis no Active Directory, o que significa que possuem um descritor de segurança que especifica quais os principais do Active Directory têm permissões específicas sobre o modelo. Modelos que possuem controlo de acesso vulnerável concedem a principais não intencionados a capacidade de modificar definições no modelo. Com direitos de modificação, um atacante pode definir EKUs vulneráveis (ESC1-ESC3), alterar definições como CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT (ESC1) e/ou remover "Requisitos de Emissão" como aprovação do gestor ou assinaturas autorizadas.
[!] Potentially vulnerable Certificate Templates:
CA : dc.theshire.local\theshire-DC-CA Name : ESC4Template SchemaVersion : 2 OID : ESC4 Template (1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.1768738.6205646) VulnerableTemplateACL : True LowPrivCanEnroll : True EnrolleeSuppliesSubject : False EnhancedKeyUsage : Client Authentication (1.3.6.1.5.5.7.3.2)|Secure Email (1.3.6.1.5.5.7.3.4)|Encrypting File System (1.3.6.1.4.1.311.10.3.4) HasAuthenticationEku : True HasDangerousEku : False EnrollmentAgentTemplate : False CAManagerApproval : False IssuanceRequirements : [Issuance Requirements] Authorized signature count: 0 Reenrollment requires: same criteria as for enrollment. ValidityPeriod : 1 years RenewalPeriod : 6 weeks Owner : THESHIRE\localadmin DACL : NT AUTHORITY\Authenticated Users (Allow) - Read, Write THESHIRE\Domain Admins (Allow) - Read, Write, Enroll THESHIRE\Domain Users (Allow) - Read, Enroll THESHIRE\Enterprise Admins (Allow) - Read, Write, Enroll THESHIRE\localadmin (Allow) - Read, Write Misconfigurations : ESC4
### Mitigações <!-- omit in toc -->
Clique com o botão direito no modelo de certificado afetado no Console de Modelos de Certificado (certtmpl.msc) e clique em "Propriedades".
Vá para "Segurança" e remova a entrada de controle de acesso vulnerável.
## ESC5 - Controle de Acesso Vulnerável a Objetos PKI do AD
### Detalhes <!-- omit in toc -->
Vários objetos fora dos modelos de certificado e da própria autoridade de certificação podem ter um impacto de segurança em todo o sistema AD CS.
Essas possibilidades incluem (mas não se limitam a):
- Objeto de computador AD do servidor CA (ou seja, comprometimento via RBCD)
- O servidor RPC/DCOM do servidor CA
- Objetos AD relacionados a PKI. Qualquer objeto AD descendente ou contêiner no contêiner CN=Public Key Services,CN=Services,CN=Configuration,DC=<COMPANY>,DC=<COM> (por exemplo, o contêiner Certificate Templates, contêiner Certification Authorities, o objeto NTAuthCertificates, etc.)
*Devido ao amplo escopo dessa configuração incorreta específica, atualmente não verificamos ESC5 por padrão neste toolkit.*
Caminhos de acesso ao próprio servidor CA podem ser encontrados na coleção atual do BloodHound.
A segurança do servidor RPC/DCOM do servidor CA requer análise manual.
Os comandos a seguir exibem uma lista de usuários e o direito de controle/edição que o usuário tem sobre um objeto AD relacionado a PKI.```
$Controllers = Get-AuditPKIADObjectControllers
Format-PKIAdObjectControllers $Controllers
Certifique-se de que todos os principais nos resultados exigem absolutamente os direitos listados. Muitas vezes, contas não tier 0 (sejam usuários/grupos com privilégios baixos ou administradores de servidores não AD com privilégios inferiores) têm controle sobre objetos do AD relacionados a PKI.
THESHIRE\Cert Publishers (S-1-5-21-3022474190-4230777124-3051344698-517) GenericAll CN=THESHIRE-DC-CA,CN=Certification Authorities,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=AIA,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=DC,CN=CDP,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=THESHIRE-DC-CA,CN=DC,CN=CDP,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL
THESHIRE\DC$ (S-1-5-21-3022474190-4230777124-3051344698-1000) WriteOwner CN=THESHIRE-DC-CA,CN=Enrollment Services,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=THESHIRE-DC-CA,CN=AIA,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=THESHIRE-DC-CA,CN=DC,CN=CDP,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=THESHIRE-DC-CA,CN=KRA,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL
THESHIRE\Domain Computers (S-1-5-21-3022474190-4230777124-3051344698-515) WriteDacl CN=MisconfiguredTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL
THESHIRE\Domain Users (S-1-5-21-3022474190-4230777124-3051344698-513) WriteAllProperties CN=MisconfiguredTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL
THESHIRE\john-sa (S-1-5-21-3022474190-4230777124-3051344698-1602) GenericAll CN=MisconfiguredTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL
NT AUTHORITY\Authenticated Users (S-1-5-11) Owner CN=MisconfiguredTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL WriteOwner CN=MisconfiguredTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL
### Mitigações <!-- omit in toc -->
Remova quaisquer entradas de controle de acesso vulneráveis através do Active Directory Users and Computers (*dsa.msc*) ou ADSIEdit (*adsiedit.msc*) para objetos de configuração.
## ESC6 - EDITF_ATTRIBUTESUBJECTALTNAME2
### Detalhes <!-- omit in toc -->
Se a flag **EDITF_ATTRIBUTESUBJECTALTNAME2** estiver ativada na configuração de uma Autoridade de Certificação, *QUALQUER* solicitação de certificado pode especificar Nomes Alternativos do Sujeito (SANs) arbitrários. Isso significa que QUALQUER modelo configurado para autenticação de domínio que também permita que usuários não privilegiados se inscrevam (por exemplo, o modelo **User** padrão) pode ser abusado para obter um certificado que nos permita autenticar como um administrador de domínio (ou qualquer outro usuário/máquina ativo).
**ESTA CONFIGURAÇÃO NÃO DEVE, DE FORMA ALGUMA, ESTAR DEFINIDA EM SEU AMBIENTE.**
### Exemplo <!-- omit in toc -->```
=== Certificate Authority ===
ComputerName : dc.theshire.local
CAName : theshire-DC-CA
ConfigString : dc.theshire.local\theshire-DC-CA
IsRoot : True
AllowsUserSuppliedSans : True
VulnerableACL : False
EnrollmentPrincipals : THESHIRE\Domain Users
THESHIRE\Domain Computers
THESHIRE\certmanager
THESHIRE\certadmin
THESHIRE\Nested3
EnrollmentEndpoints :
NTLMEnrollmentEndpoints :
DACL : BUILTIN\Administrators (Allow) - ManageCA, ManageCertificates
THESHIRE\Domain Admins (Allow) - ManageCA, ManageCertificates
THESHIRE\Domain Users (Allow) - Read, Enroll
THESHIRE\Domain Computers (Allow) - Enroll
THESHIRE\Enterprise Admins (Allow) - ManageCA, ManageCertificates
THESHIRE\certmanager (Allow) - ManageCertificates, Enroll
THESHIRE\certadmin (Allow) - ManageCA, Enroll
THESHIRE\Nested3 (Allow) - ManageCertificates, Enroll
Misconfigurations : ESC6
[!] The above CA is misconfigured!
...(snip)...
[!] EDITF_ATTRIBUTESUBJECTALTNAME2 set on this CA, the following templates may be vulnerable:
CA : dc.theshire.local\theshire-DC-CA
Name : User
SchemaVersion : 1
OID : 1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.1.1
VulnerableTemplateACL : False
LowPrivCanEnroll : True
EnrolleeSuppliesSubject : False
EnhancedKeyUsage : Encrypting File System (1.3.6.1.4.1.311.10.3.4)|Secure Email (1.3.6.1.5.5.7.3.4)|Client Authentication (1.3.6.1.5.5.7.3.2)
HasAuthenticationEku : True
HasDangerousEku : False
EnrollmentAgentTemplate : False
CAManagerApproval : False
IssuanceRequirements : [Issuance Requirements]
Authorized signature count: 0
Reenrollment requires: same criteria as for enrollment.
ValidityPeriod : 1 years
RenewalPeriod : 6 weeks
Owner : THESHIRE\Enterprise Admins
DACL : NT AUTHORITY\Authenticated Users (Allow) - Read
THESHIRE\Domain Admins (Allow) - Read, Write, Enroll
THESHIRE\Domain Users (Allow) - Read, Enroll
THESHIRE\Enterprise Admins (Allow) - Read, Write, Enroll
Misconfigurations :
Remova imediatamente esta flag e reinicie a autoridade de certificação afetada a partir de um prompt do PowerShell com direitos elevados no servidor da AC:``` PS C:> certutil -config "CA_HOST\CA_NAME" -setreg policy\EditFlags -EDITF_ATTRIBUTESUBJECTALTNAME2
PS C:> Get-Service -ComputerName CA_HOST certsvc | Restart-Service -Force
## ESC7 - Controle de Acesso Vulnerável da Autoridade de Certificação
### Details <!-- omit in toc -->
Fora dos modelos de certificado, 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 a partir do certsrv.msc, clicando com o botão direito em uma AC, selecionando propriedades e alternando para a guia Segurança.
Existem dois direitos que são sensíveis à segurança e perigosos se entidades não intencionais os possuírem:
* **ManageCA** (também conhecido como "Administrador da AC") - permite ações administrativas da AC, incluindo (remotamente) ativar o bit EDITF_ATTRIBUTESUBJECTALTNAME2, resultando no ESC6.
* **ManageCertificates** (também conhecido como "Gerenciador/Oficial de Certificados") - permite que a entidade aprove pedidos de certificado pendentes, anulando o requisito/proteção de Emissão "Manager Approval"
### Example <!-- omit in toc -->```
=== Certificate Authority ===
ComputerName : dc.theshire.local
CAName : theshire-DC-CA
ConfigString : dc.theshire.local\theshire-DC-CA
IsRoot : True
AllowsUserSuppliedSans : False
VulnerableACL : True
EnrollmentPrincipals : THESHIRE\Domain Users
THESHIRE\Domain Computers
THESHIRE\certmanager
THESHIRE\certadmin
THESHIRE\Nested3
EnrollmentEndpoints :
NTLMEnrollmentEndpoints :
DACL : BUILTIN\Administrators (Allow) - ManageCA, ManageCertificates
THESHIRE\Domain Admins (Allow) - ManageCA, ManageCertificates
THESHIRE\Domain Users (Allow) - ManageCA, Read, Enroll
THESHIRE\Domain Computers (Allow) - Enroll
THESHIRE\Enterprise Admins (Allow) - ManageCA, ManageCertificates
THESHIRE\certmanager (Allow) - ManageCertificates, Enroll
THESHIRE\certadmin (Allow) - ManageCA, Enroll
THESHIRE\Nested3 (Allow) - ManageCertificates, Enroll
Misconfigurations : ESC7
[!] The above CA is misconfigured!
Abra o console da Autoridade de Certificação (certsrv.msc) na CA afetada, clique com o botão direito no nome da CA e selecione "Propriedades".
Vá para "Segurança" e remova a entrada de controle de acesso vulnerável.
NOTA: esta verificação específica no PSPKIAudit apenas confere se o NTLM está presente para quaisquer endpoints de inscrição publicados. Ela NÃO verifica se a Proteção Estendida para Autenticação está presente para esses endpoints habilitados para NTLM, portanto, podem ocorrer falsos positivos!
[!IMPORTANT]
A autenticação NTLM está desabilitada para contas no grupo Protected Users. Esta verificação pode falhar se o PSPKIAudit estiver sendo executado enquanto você estiver logado como um Usuário Protegido.
O AD CS suporta vários métodos de inscrição baseados em HTTP por meio de funções de servidor AD CS adicionais que os administradores podem instalar. Essas interfaces de inscrição de certificados baseadas em HTTP são todas vulneráveis a ataques de relé NTLM.
Usando o relé NTLM, um invasor em uma máquina comprometida pode se passar por qualquer conta AD que autentica via NTLM recebida. Ao se passar pela conta da vítima, um invasor poderia acessar essas interfaces web e solicitar um certificado de autenticação de cliente baseado nos modelos de certificado de Usuário ou Máquina.
=== Certificate Authority ===
ComputerName : dc.theshire.local CAName : theshire-DC-CA ConfigString : dc.theshire.local\theshire-DC-CA IsRoot : True AllowsUserSuppliedSans : False VulnerableACL : False EnrollmentPrincipals : THESHIRE\Domain Users THESHIRE\Domain Computers THESHIRE\certmanager THESHIRE\certadmin THESHIRE\Nested3 EnrollmentEndpoints : http://dc.theshire.local/certsrv/ NTLMEnrollmentEndpoints : http://dc.theshire.local/certsrv/ DACL : BUILTIN\Administrators (Allow) - ManageCA, ManageCertificates THESHIRE\Domain Admins (Allow) - ManageCA, ManageCertificates THESHIRE\Domain Users (Allow) - Read, Enroll THESHIRE\Domain Computers (Allow) - Enroll THESHIRE\Enterprise Admins (Allow) - ManageCA, ManageCertificates THESHIRE\certmanager (Allow) - ManageCertificates, Enroll THESHIRE\certadmin (Allow) - ManageCA, Enroll THESHIRE\Nested3 (Allow) - ManageCertificates, Enroll Misconfigurations : ESC8
[!] The above CA is misconfigured!
### Mitigações <!-- omit in toc -->
Remova os endpoints de inscrição HTTP(S), desabilite o NTLM para os endpoints ou ative a Proteção Estendida para Autenticação. Veja **Harden AD CS HTTP Endpoints – PREVENT8** no whitepaper para mais detalhes.
## Diversos - Mapeamentos Explícitos
Outra possível mitigação para algumas situações é impor mapeamentos explícitos para certificados. Isso desabilita o uso de SANs alternativos em certificados ao autenticar no Active Directory.
Para Kerberos, definir a chave **HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kdc ! UseSubjectAltName** para 00000000 força um mapeamento explícito. Mais detalhes em [KB4043463](https://mskb.pkisolutions.com/kb/4043463).
Desabilitar mapeamentos explícitos para SChannel não é realmente documentado, mas com base em nossa pesquisa, definir 0x1 ou 0x2 na chave **HKEY_LOCAL_MACHINE\CurrentControlSet\Control\SecurityProviders\SCHANNEL ! CertificateMappingMethods** parece bloquear SANs, mas mais testes são necessários.
# Triagem de Solicitações de Certificados Emitidos Existentes
**AVISO:** esta funcionalidade foi minimamente testada em ambientes grandes!
**Nota:** veja "Monitor User/Machine Certificate Enrollments - DETECT1" no whitepaper para informações adicionais e como realizar essas pesquisas com certutil.
Se você deseja examinar solicitações de certificados emitidos existentes, por exemplo, para ver se alguma solicitação especificou SANs arbitrários, ou foi solicitada para modelos específicos/por entidades específicas, a função `Get-CertRequest [-CAComputerName COMPUTER.DOMAIN.COM | -CAName X-Y-Z]` se baseia em várias funções PSPKI para fornecer mais informações contextuais.
Especificamente, a Solicitação de Assinatura de Certificado (CSR) bruta é extraída para cada certificado atualmente emitido no domínio, e informações específicas (ou seja, se um SAN foi especificado, o nome/máquina/processo do solicitante, etc.) são construídas a partir da solicitação para enriquecer o objeto CSR.
As seguintes flags podem ser úteis:
| Flag | Description |
| --------------------------- | --------------------------------------------------------------------------------------------- |
| **-HasSAN** | Apenas retornar certificados emitidos que tenham um Subject Alternative Name especificado na solicitação. |
| **-Requester DOMAIN\USER** | Apenas retornar solicitações de certificados emitidos para o usuário solicitante específico. |
| **-Template TEMPLATE_NAME** | Apenas retornar solicitações de certificados emitidos para o nome do modelo especificado. |
<br/>
Para exportar TODAS as solicitações de certificados emitidos para csv, use `Get-CertRequest | Export-CSV -NoTypeInformation requests.csv`.
Aqui está um exemplo de entrada de resultado que mostra uma situação onde um Subject Alternative Name (SAN) foi especificado com Certify:```
CA : dc.theshire.local\theshire-DC-CA
RequestID : 4602
RequesterName : THESHIRE\cody
RequesterMachineName : dev.theshire.local
RequesterProcessName : Certify.exe
SubjectAltNamesExtension :
SubjectAltNamesAttrib : Administrator
SerialNumber : 55000011faef0fab5ffd7f75b30000000011fa
CertificateTemplate : ESC1 Template
(1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.10657968.9897558)
RequestDate : 6/3/2021 5:54:51 PM
StartDate : 6/3/2021 5:44:51 PM
EndDate : 6/3/2022 5:44:51 PM
CA : dc.theshire.local\theshire-DC-CA
RequestID : 4603
RequesterName : THESHIRE\cody
RequesterMachineName : dev.theshire.local
RequesterProcessName : Certify.exe
SubjectAltNamesExtension : Administrator
SubjectAltNamesAttrib :
SerialNumber : 55000011fb021b79cf7276c2de0000000011fb
CertificateTemplate : ESC1 Template
(1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.10657968.9897558)
RequestDate : 6/3/2021 5:55:10 PM
StartDate : 6/3/2021 5:45:10 PM
EndDate : 6/3/2022 5:45:10 PM
A propriedade SubjectAltNamesExtension significa que a extensão x509 SubjectAlternativeNames foi usada para especificar o SAN, o que acontece para modelos com a flag CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT. A propriedade SubjectAltNamesAttrib significa que pares nome/valor x509 foram usados, o que acontece ao especificar um SAN quando a flag de CA EDITF_ATTRIBUTESUBJECTALTNAME2 está definida.
Certificados emitidos existentes podem ser revogados usando a função Revoke-Certificate do PSPKI:
PS C:\> Get-CertificationAuthority <CAName> | Get-IssuedRequest -RequestID <X> | Revoke-Certificate -Reason "KeyCompromise"
Os valores aplicáveis para -Reason são "KeyCompromise", "CACompromise" e "Unspecified".