Comments on the use of plugins - useof pkinit_kdc_hostname

Sam Hartman hartmans at MIT.EDU
Mon Jun 18 11:01:15 EDT 2007


>>>>> "Douglas" == Douglas E Engert <deengert at anl.gov> writes:

    Douglas> Sam Hartman wrote:
    >>>>>>> "Douglas" == Douglas E Engert <deengert at anl.gov> writes:
    >>
    Douglas> The pkinit_kdc_hostname, in effect duplicates, the
    Douglas> hostnames as used in kdc = or in the DNS SRV records.  We
    Douglas> really like to use the dns_lookup_kdc=1 option so we
    Douglas> don't have to have the names of the KDCs in the
    Douglas> krb5.conf. Having to add the hostnames for
    Douglas> pkinit_kdc_hostnames defeats this goal!
    >>
    Douglas> If the concern is that the cert may be valid but not be
    Douglas> from a KDC, I would hope that some more Windows friendly
    Douglas> code could be added. It looks like Windows adds the
    Douglas> extension 1.3.6.1.311.20.2 with a value of
    Douglas> DomainController (utf8?) to the cert as well as a SAN for
    Douglas> DNS. (But windows being windows the host part of the DNS
    Douglas> name XXXXXX below is in uppercase!)
    >>  No, the issue is that without trusting DNS, you don't know
    >> that the SRV record returned the right cert.

    Douglas> This DNS trust issue is the same problem you have without
    Douglas> PKINIT, and is related to IP spoofing, i.e. how does the
    Douglas> client know it is talking to the real KDC?

No.  I can trust the KDC because only it knows my password.  (That's
different from the system i'm logging into trusting me, which requires
that it have a host key.)  But normal Kerberos does not depend on the
security of the DNS.  If your DNS is returning the wrong information
you can get denial of service, but you cannot make a trusted local
user believe they are talking to a KDC that does not know their
password.

host to realm of course is entirely different.
    Douglas> other realm in the AD-forest.

    Douglas> But without PKINIT one should be using the
    Douglas> krb5_verify_init_creds to make sure the client got
    Douglas> tickets from the real KDC. I would assume that
    Douglas> krb5_verify_init_creds is still recommended with PKINIT,
    Douglas> and it would catch any DNS or spoofing attack including a
    Douglas> cert from the wrong realm.

Possibly.  I honestly haven't worked through this in sufficient detail
to convince myself one way or another.

    Douglas> What I am saying is having to add pkinit_kdc_hostnames is
    Douglas> too much configuration management in an environment that
    Douglas> has lived without it. I would like to see something
    Douglas> else. I would expect eventually the Microsoft KDCs will
    Douglas> have certs with the extensions defined in the PKINIT RFC.

I'd like to see something else too.  I'm quite certain it is insecure
to do something else with kinit from the command line or with anything
that does not include a keytab.  The current code structure also
doesn't allow you to know when verifying the cert whether you are
going to end up checking against a keytab.


However if we convince ourselves that relying on a keytab is safe,
then we could look at ways to get that information to the right place
in the code.

--Sam




More information about the krbdev mailing list