Forjando Tickets
Golden Ticket
Um Golden Ticket
é um TGT forjado, assinado pela conta krbtgt do Domínio. Onde um Silver Ticket pode ser usado para se passar por qualquer usuário, ele é limitado a esse único serviço ou a qualquer serviço, mas em uma única máquina. Já um Golden Ticket pode ser usado para se passar por qualquer usuário, para qualquer serviço, em qualquer máquina do domínio; e para piorar a situação - as credenciais subjacentes nunca são alteradas automaticamente. Por esse motivo, o hash krbtgt NTLM/AES é provavelmente o segredo mais poderoso que você pode obter. Por esse motivo, você o vê usado sendo utilizado em exemplos de dcsync com tanta frequência. Abaixo, realizando um dcsync:
A saída deve algo semelhante ao trecho abaixo, então atente-se ao valor do primeiro aes256_hmac
Pegue o SID do Domínio:
Agora na máquina Windows (fora do CS), execute:
Com o acesso ao Beacon de alguma máquina (acesso privilegiado), execute o comando abaixo, utilizando o ticket em base64 gerado com o comando acima:
Com o resultado acima, utilize o valor do campo ProcessID
para executar o comando abaixo:
Silver Ticket
Um Silver Ticket
é um TGS forjado, assinado usando o material secreto (chaves RC4/AES) de uma conta de computador. Você pode forjar um TGS para qualquer usuário para qualquer serviço naquela máquina, o que é útil para persistência de curto/médio prazo. Por padrão, as senhas dos computadores mudam a cada 30 dias, momento em que você deve obter novamente os novos segredos para continuar criando Silver Ticket. Tanto o Silver Ticket quanto o Golden Ticket são falsificados, portanto podem ser gerados em sua própria máquina e importados para sua sessão Beacon para uso.
Supondo que já que já temos em mãos (dump realizado via Mimikatz) as chaves Kerberos de uma determinada máquina, sendo isso feito através do usuário SYSTEM. Teremos então, uma saída semelhante a:
Agora na máquina Windows (fora do Cobalt Strike), utilizando o Rubeus, podemos forjar um TGS para um determinado usuários, em um determinado serviço (iremos utilizar o cifs
como exemplo). Utilize o valor do campo des_cbc_md4
na saída do comando acima, para executar o comando abaixo:
Com o acesso ao Beacon de alguma máquina com acesso privilegiado (desde que não seja a <maquina-1>
), execute o comando abaixo, utilizando o ticket em base64 gerado com o comando acima:
Com o resultado acima, utilize o valor do campo ProcessID
para executar o comando abaixo:
Diamond Ticket
Tal como um Golden Ticket
, um Diamond Ticket
é um TGT que pode ser utilizado para aceder a qualquer serviço como qualquer utilizador. Um Golden Ticket
é forjado completamente offline, criptografado com o hash krbtgt desse Domínio e depois passado para uma sessão de logon para uso. Como os Domain Controllers não rastreiam TGTs que eles (ou eles) emitiram legitimamente, eles aceitarão alegremente TGTs criptografados com seu próprio hash krbtgt. Portanto, uma possível tática para detectar o uso de Golden Ticket é procurar por TGS-REQs que não possuam AS-REQ correspondente. Um Diamond Ticket é feito modificando os campos de um TGT legítimo emitido por um DC. Isto é conseguido solicitando um TGT, descriptografando-o com o hash krbtgt do Domínio, modificando os campos desejados do ticket e, em seguida, criptografando-o novamente. Isto supera a deficiência mencionada de um Golden Ticket porque qualquer TGS-REQ terá um AS-REQ anterior. Gerando Diamond Ticket. O parâmentro tgtdeleg
usa a API Kerberos GSS para obter um TGT utilizável para o usuário atual sem precisar saber sua senha, hash NTLM/AES ou elevação no host, enquanto ticketuserid
informa o RID do domínio do usuário (número de 4 dígitos em média), groups
são os RID's do grupo desejado (512 representa Domain Admins) e /krbkey
será o hash AES256 do krbtgt (utilize o dcsync e veja o valor em Primary:Kerberos-Newer-Keys
> Credentials
> aes256_hmac
).
Na máquina Windows (fora do CS), podemos usar o desribe
do Rubeus para verificar o TGT gerado para o usuário alvo
Forged Certificates
Ao obter acesso de Administrador local a uma CA, permite que um invasor extraia a chave privada da CA, que pode ser usada para assinar um certificado forjado (pense nisso como se o hash krbtgt pudesse assinar um TGT forjado). O período de validade padrão para uma chave privada de CA é de 5 anos, mas pode ser definido para qualquer valor durante a configuração, às vezes até mais de 10 anos. Execute o comando abaixo (a partir de uma conta com altos privilégios, de preferência um SYSTEM conectado em algum DC) e procure pelo campo Description
, onde o seu valor seja equivalente a Private Key
. Verifique também se os valores de Issuer
e Subject
estão de acordo com o Domínio em questão.
Salve a chave privada e o certificado (os dois "hashes") em um arquivo .pem
e converta-o em .pfx
utilizando o openssl
(faça isso em um Linux)
Agora construa o certificado forjado com ForgeCert.exe
. Faça isso na máquina Windows, fora do CS.
No Linux, pegue o valor do Certificado, pois iremos utilizá-lo no outro comando
Mesmo que você possa especificar qualquer SubjectAltName
, o usuário precisa estar presente no AD. Agora podemos usar o Rubeus para solicitar um TGT legítimo com este certificado forjado.
Não estamos limitados a falsificar certificados de usuário; podemos fazer o mesmo com as máquinas. Combine isso com o S4U2self
para obter acesso a qualquer máquina ou serviço no Domínio.
Sites
Last updated