O desafio envolve analisar o arquivo .pcap com vários protocolos.
Neste desafio específico, precisamos analisar o protocolo SMB e encontrar o sinalizador que falta.
Pré-requisitos:
- Conhecimento de uma ferramenta de análise de captura de rede.
- Conhecimento da política de grupo.
- Conhecimento de Python
Você pode encontrar o desafio no link abaixo:
https://www.root-me.org/en/Challenges/Forensic/Active-Directory-GPO
Declaração
Durante uma auditoria de segurança, foi registrado o tráfego de rede durante a sequência de inicialização de uma estação de trabalho conectada a um Active Directory. Analise esta captura e encontre a senha do administrador.
Primeiro vamos baixar o arquivo ch12.pcap do desafio e abri-lo no Wireshark.
Agora, antes de nos aprofundarmos na captura de pacotes, vamos dar uma visão de alto nível dos diferentes protocolos. Para fazer isso, navegue até Estatísticas → Hierarquia de protocolo.
E você verá a janela abaixo, mostrando diferentes protocolos.
Vamos dar uma olhada nos diferentes protocolos e imediatamente o SMB2 chamou minha atenção na lista.
O que é PME
A Wikipédia afirma:
Em redes de computadores , Server Message Block ( SMB ), cuja versão também era conhecida como Common Internet File System ( CIFS /sɪfs/ ), [1] [2] é um protocolo de comunicação [3] para fornecer acesso compartilhado a arquivos , impressoras e portas seriais entre nós em uma rede. Ele também fornece um mecanismo autenticado de comunicação entre processos .
Vamos filtrar os dados com o protocolo SMB2. Para fazer isso, basta digitar smb2 na barra de filtros e veremos apenas o tráfego usando o protocolo SMB2.
Depois de filtrarmos pelo protocolo SMB2, vamos dar uma olhada mais de perto.
- Existem 2 índices de fluxo numerados 14 e 24.
- O índice de fluxo 14 está tentando configurar a sessão e depois termina
- O índice de fluxo 24 contém mais dados em comparação com 14
Vamos seguir o índice de fluxo 24, para isso clique com o botão direito — -> Seguir fluxo TCP.
E podemos ver todas as solicitações e respostas em vermelho e azul, respectivamente.
Percorrendo o fluxo, encontramos um arquivo xml em texto não criptografado:
<?xml versão=”1.0" codificação=”utf-8"?>
<Grupos clsid=”{3125E937-EB16–4b4c-9934–544FC6D24D26}”><Usuário clsid=”{DF5F1855–51E5–4d24–8B1A-D9BDE98BA1D1}” nome=”Helpdesk” imagem=”2" alterado=”2015– 05–06 05:50:08 "UID =" {43F9FF29-C120–48B6–8333–9402C927BE09} ”> <Propriedades Action =” u ”newName =” ”FullName =” ”Descrição” ”" CPassword = ”PSMSCOUXQUME =” +w” changeLogon=”1" noChange=”0" neverExpires=”0" acctDisabled=”0" userName=”Helpdesk”/></User><User clsid=”{DF5F1855–51E5–4d24–8B1A-D9BDE98BA1D1} ”nome=”Administrador” imagem=”2" alterado=”2015–05–05 14:19:53" uid=”{5E34317F-8726–4F7C-BF8B-91B2E52FB3F7}” userContext=”0" removePolicy=”0" ><Properties action=”U” newName=”” fullName=”Admin Local” description=”” cpassword=”LjFWQMzS3GWDeav7+0Q0oSoOM43VwD30YZDVaItj8e0" changeLogon=”0" noChange=”0" neverExpires=”1" acctDisabled=”0" subAuthority =”” nome_do_usuário=”Administrador”/></Usuário>
</Grupos>
Se olharmos os dados acima, podemos ver:
nome=”Administrador”
cpassword=”LjFWQMzS3GWDeav7+0Q0oSoOM43VwD30YZDVaItj8e0″
Como você pode ver, temos a senha do Administrador, mas ela está criptografada. Agora, para completar o desafio, temos que quebrar a senha.
Descriptografando senha
Encontre a chave AES
Para descriptografar a senha criptografada AES, precisamos da chave que foi usada para criptografar a senha.
Para encontrar a chave que a MS está usando para criptografar senhas, vamos começar pesquisando a chave no Google. Depois de pesquisar por alguns minutos, encontrei a chave em:
Todas as senhas são criptografadas usando uma chave derivada do Advanced Encryption Standard (AES).
A chave AES de 32 bytes é a seguinte:
4e 99 06 e8 fc b6 6c c9 fa f4 93 10 62 0f fe e8 f4 96 e8 06 cc 05 79 90 20 9b 09 a4 33 b6 6c 1b
Agora temos a chave que foi usada para criptografar a senha e o próximo passo é encontrar uma maneira de descriptografar a senha AES.
Descriptografando a senha AES
Como não estou muito familiarizado com criptografia, decidi usar o código python fornecido em https://github.com/MartinIngesen/gpocrack/blob/master/gpocrack.py
Infelizmente, o código fornecido não funcionou para mim e depois de olhar mais de perto e fazer algumas alterações, finalmente funcionou.
!pip install pycrypto
from Crypto.Cipher import AES
import base64
cpassword="LjFWQMzS3GWDeav7+0Q0oSoOM43VwD30YZDVaItj8e0="
decoded_password = base64.b64decode(cpassword)
key = b'\x4e\x99\x06\xe8\xfc\xb6\x6c\xc9\xfa\xf4\x93\x10\x62\x0f\xfe\xe8\xf4\x96\xe8\x06\xcc\x05\x79\x90\x20\x9b\x09\xa4\x33\xb6\x6c\x1b'
decryption_suite = AES.new(key, AES.MODE_CBC, '\x00'*16)
plain_text = decryption_suite.decrypt(decoded_password)
print("Password is: {}".format(plain_text.strip()))
password_list = (plain_text.decode().split('\x00')) # removing null bytes
password = ''.join(str(i) for i in password) # list to string
print(password)
Gostou? Se tiverem algumas sugestões, dica ou se ficou com alguma dúvida sobre este tutorial, não tem problema! Basta comentar no post que iremos responder suas dúvidas assim que for possível.
Referências
- https://github.com/MartinIngesen/gpocrack/blob/master/gpocrack.py
- https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-gppref/2c15cbf0-f086-4c74-8b70-1f2fa45dd4be
- Wikipedia > Tagged CryptographyGpoGroup PolicyRoot Me
Fonte: digitalitskills