Vários domínios e vários TGTs no MIT Kerberos para Windows

10

Meu computador local usa o Windows 7 Pro e pertence ao domínio LR, gerenciado por servidores AD. Eu entro no meu computador enquanto estiver conectado à rede desse domínio. Eu posso ver o TGT com o MIT Kerberos para Windows ver. 4.0.1

Quero acessar recursos em um domínio estrangeiro, FR. Não há confiança do Kerberos entre LR e FR, mas eles permitem o tráfego TCP entre si. Solicito um TGT para FR com seu KDC (Red Hat IdM / FreeIPA) e insiro minha senha com êxito quando desafiado. Mais uma vez, posso ver o TGT com o MIT Kerberos para Windows ver. 4.0.1 Agora posso acessar recursos no FR sobre SSH sem ser solicitada uma senha, apesar de ser originária da LR.

O problema é que quando eu recebo o TGT para FR, o TGT para meu principal LR desaparece. Somente o FR TGT é visível no MIT Kerberos. Se eu bloquear o computador e desbloquear com a minha senha, agora o FR TGT se foi, substituído por um novo LR TGT.

Parece que o MIT Kerberos para Windows pode armazenar apenas um TGT por vez. Cada TGT trabalha completamente para seu domínio para todos os efeitos. Como posso configurar o MIT Kerberos para me permitir ter dois TGTs ao mesmo tempo, um para cada região? É possível "compartimentar" com várias instâncias do cliente, cada uma apontando para um KRB5_CONFIG e um keytab local diferentes? Se não puder, existe uma implementação alternativa do Windows do Kerberos 5 do lado do cliente, mesmo quando não houver relações de confiança entre regiões?

PS - Não quero confiança. Não é possível obter uma confiança.

ATUALIZAÇÃO: deixei de fora alguns desses detalhes anteriormente porque achei que isso poderia confundir o problema. Mas, com base na resposta de Brad, isso pode ser justificado. Espero que a maioria dos softwares locais usem a implementação interna do Kerberos no Windows e sempre usem o keytab LR.

No entanto, usuários avançados como eu usam heimdal sob Cygwin para SSH em FR. Espero que qualquer coisa que passe pelas DLLs do Cygwin use o heimdal e nunca veja o LR TGT (o que não acontece, pelo menos não por padrão). Eu explicitamente pareço e sigo em frente.

A parte complicada vem para usuários não-avançados que eu tenho que apoiar, que não usam o Cygwin, mas usam o PuTTY. O PuTTY permite especificar o caminho da biblioteca e a DLL para a qual a implementação GSSAPI deve ser usada. Por exemplo, estou configurando sessões SSH para usar DLLs do MIT Kerberos em vez de DLLs internas do Windows. Eu esperava que houvesse uma DLL por aí que nunca tentasse encontrar o LR TGT (como heimdal) ou permitisse vários TGTs de vários reinos. Ele não precisa ter uma janela GUI como o MIT Kerberos, mas ajuda.

Toddius Zho
fonte
Pergunta interessante.
Mfinni 13/05

Respostas:

4

Bem, não direi que NÃO PODE ser feito com o Windows, mas direi que a limitação é baseada em sessões. O problema é que, para cada sessão, o Windows armazena em cache um ticket. Quando você bloqueia o computador e o desbloqueia, outra sessão é iniciada e uma nova chave é solicitada ao KDC. O mesmo acontece quando você efetua logoff no computador novamente. Na verdade, esse método é como as permissões de usuário também são determinadas para as sessões do servidor, o que significa que a chave / ticket pode ser armazenada em cache para que todos os recursos ou sessões do servidor que você inicia não precisem pedir sua senha, mas nunca ouvi falar / lido / pesquisado para poder armazenar em cache mais de um.

Agora, você provavelmente já sabe que, dado o seu conhecimento que exibiu na sua pergunta, então direi que, com base no fato de que o Windows armazena a chave que você obtém quando um TGT é emitido e é baseado em sessão, eu não acho que é possível com apenas o Windows. O MIT Kerberos para Windows pode ter uma maneira de iniciar duas sessões em um usuário, mas mesmo assim, não tenho certeza de como os recursos que você está acessando saberiam qual tíquete / par de chaves usar. Isso faz sentido?

Consulte isso para obter uma descrição de como o Windows armazena TGTs / pares de chaves.

Muito boa pergunta, a propósito.

Brad Bouchard
fonte
Atualizei minha pergunta original, que, esperançosamente, explica como os recursos sabem qual par de tíquetes / chaves usar.
Toddius Zho 14/05
Novamente, ótima pergunta, mas infelizmente só posso responder (como já o fiz) sobre o lado nativo do Windows, como você fez na sua pergunta original; além dos plugins / softwares de terceiros, não sei como fazê-lo de forma nativa, com ou sem uma GUI. Gostaria de poder ser de mais ajuda.
Brad Bouchard
4

OK, eu vim com uma solução funcional que precisa de um pouco mais de polimento e, portanto, pode não funcionar em todos os ambientes.

Isso funciona com:

  1. MIT Kerberos para Windows 4.0.1 com ferramentas de suporte do Windows (KSETUP.EXE, KTPASS.EXE)
  2. PuTTY 0,63
  3. Windows 7 SP1

Eu estava procurando na fonte do MIT Kerberos e me deparei com o README for Windows . De particular interesse foram os diferentes valores para o cache de credenciais . Ele defende um valor padrão de API: , mas eu surpreendentemente meu registro usando MSLSA: em vez.

Eu brinquei com diferentes valores de ccname abaixo HKEY_CURRENT_USER\Software\MIT\Kerberos5. Eu tentei MEMORY: no começo, o que levou a um comportamento interessante. Ao abrir uma sessão PuTTY, minha janela do MIT Kerberos Ticket Manager seria restaurada e viria para o primeiro plano, solicitando que eu insira credenciais. Uau! Isso nunca aconteceu antes, mas, infelizmente, o PuTTY a rejeitaria. O valor que fez o truque para mim foi FILE:C:\Some\Full\File\Path. Não sei exatamente como proteger o acesso ao arquivo especificado, portanto deixarei isso como um exercício para o leitor. Tive o mesmo comportamento de janela em primeiro plano, mas PuTTY gostou dessa vez. A janela do Gerenciador de tickets também finalmente exibiu os tickets LR e FR. Os tíquetes foram comprovadamente encaminhados e sobreviveriam a vários bloqueios / desbloqueios do Windows. NOTA:Certifique-se de sair completamente e reiniciar o Gerenciador de tickets entre as edições do registro. Eu não tentei uma ccname de API: ainda.

Não sei se isso faz diferença ou não, mas também brinquei com o KSETUP antes que isso começasse a funcionar. A princípio, um KSETUP sem parâmetros mostraria apenas informações sobre o LR. Eu adicionei algumas informações sobre o FR na minha estação de trabalho local.

ksetup /AddKdc FOREIGN.REALM KDC.FOREIGN.REALM
ksetup /AddRealmFlags FOREIGN.REALM TcpSupported Delegate NcSupported
Toddius Zho
fonte
2

Para mim, parece que há realmente um bug no Kerberos para Windows.

Encontrei o seguinte:

Se eu usar a opção "obter ticket" na janela do KfW 4.0.1, ele simplesmente funciona (TM); Posso clicar no botão "Obter ticket" e adquirir tickets adicionais aos tickets originais que recebi ao fazer logon.

Se eu clicar na opção "tornar padrão" na janela do KfW, a partir desse momento, sempre que clicar em "obter ticket", o novo ticket substituirá o ticket padrão, em vez de adicionar outra entrada à lista de tickets conhecidos . A verificação do registro nesse ponto mostrará que uma ccnameentrada (como na resposta de Toddius) foi adicionada. A remoção dessa entrada surpreendentemente restaurará o comportamento anterior de permitir vários tickets.

Wouter Verhelst
fonte
Eu posso confirmar esse comportamento. Será que você o levantou como um bug no MIT?
Paul Hedderly
2

Seguindo a resposta de Toddius, tenho um colega de trabalho em uma situação semelhante (Windows 7 Enterprise de 64 bits, ingressado em um domínio do AD, também executando o MIT Kerberos para Windows 4.0.1): Sua cópia do Kerberos Ticket Manager apenas permita que ele tenha um principal / um TGT. Sempre que ele usava o botão "Obter ticket" para obter um TGT para um principal diferente, o principal anterior desaparecia.

Examinei o README e a maioria das chaves do Registro foi definida como esperado, exceto a chave ccname no caminho HKEY_CURRENT_USER\Software\MIT\Kerberos5. Essa chave foi definido para o valor MSLSA:. Nossa solução foi mudar isso para API:. Mais especificamente, as etapas foram:

  1. Saia do Kerberos Ticket Manager, juntamente com todos os outros aplicativos (pois você reiniciará).
  2. No caminho do Registro HKEY_CURRENT_USER\Software\MIT\Kerberos5, altere a chave ccname para API:(API e dois pontos).
  3. Saia do regedit e reinicie.
  4. Depois de fazer login novamente, execute o Kerberos Ticket Manager e use o botão Obter ticket para obter o TGT do seu principal não AD.

Com as etapas acima, tudo funcionou, e meu colega de trabalho agora pode ver vários diretores / TGTs ao mesmo tempo.

A propósito, o MIT Kerberos para Windows traz seu próprio conjunto de programas de linha de comando (como o klist), e esses programas suportam vários caches de credenciais. No meu sistema de 64 bits, quando executo "C:\Program Files\MIT\Kerberos\bin\klist.exe" -A"após obter vários TGTs, vejo meu principal do Active Directory no cache do MSLSA e, em seguida, tenho um cache de API para cada principal adicional.

PS Esta é a minha primeira entrada neste site, então não pude adicioná-la como um comentário à resposta de Toddius. Desculpas!

Karl Kornel
fonte