[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
kink-09
Sorry this is so late, I've had some non-work disruptions going on
lately.
Name canonicalization:
Section 4.2.1 says that the principal name that SHOULD be used for
the service is kink/fqdn@REALM, with fqdn "obtained from some name
services". (It also says, "but see the Security Considerations
section"; that section does touch on the binding between principal
names and SA selectors, but it's not at all clear that that's what
this is referring to.)
An insecure name service must not be consulted in determining the
FQDN; otherwise, a spoofed DNS (or whatever) reply could tell the
client, "that's an alias for server-1.black-hats.con", and the client
would happily authenticate to that server.
In the Kerberos working group, there's a draft in the works to
address this problem, draft-ietf-krb-wg-kerberos-referrals-06.txt.
However, there may be some less than wonderful interactions. For
example, you make a request for a service name which may be an alias,
and (if it's an alias in the realm of the KDC you're talking to, and
if you requested canonicalization) you get back a ticket either for
the correct service principal name, or (if the canonical name is not
in the same realm as the alias) for a remote-realm TGS. But the
current draft is a bit fuzzy in the user-to-user case.
The AP-REQ MUST request mutual authentication. The principal name
that the KINK service SHOULD use is "kink/fqdn@REALM", where "kink"
is for the KINK IPsec service, "fqdn" is the fully qualified domain
name of the service host, and "REALM" is the Kerberos realm of the
service. A principal name is case sensitive, and "fqdn" part
MUST be
lower case as described in [KERBEROS]. This document does not
specify how to generate the principal name; complete principal names
are stored in local policy, hostnames are obtained from some name
services, etc; but see the Security Considerations section.
We've been considering some cases where aliases are entered in one
realm, pointing to a principal in another realm, when there is no
overlap between the administration of the two realms. The type of
example I keep bringing up is a DNS CNAME record added for
convenience at one site, e.g., "gftp" in the local domain points to
ftp.gnu.org, but requires less typing. If you want to make Kerberos-
authenticated connections to that host, either you need to
canonicalize the hostname through secure DNS, which we can't just
assume will happen, or the KDC needs to be able to tell the client
the real realm and principal name to authenticate to. A key point in
this example is that the software on ftp.gnu.org has *no knowledge*
of the other name assigned by some random site.
So there may be cases where kink/fqdn is not the real principal name
used by the service. What if kink/foo.dom.ain@REALM is an alias for
host/FOO$@REALM, or a little trickier, host/FOO$@REALM2?
Non-PKINIT cases:
Can we describe a use case or two that doesn't involve PKINIT but
does do user-to-user authentication? They don't need to go into the
document, but if we want to support them, we should make sure they
don't have some ramifications we haven't allowed for.
I've come up with some possibilities:
1) User walks up to a public workstation (hardware reasonably
protected, software completely hackable) and boots it off a CD
(bypassing the workstation's possibly-hacked software) which contains
a NetBSD Live! (or Knoppix or whatever) image, including Kerberos and
IPsec software. No secret key data here, but CA info and server
names for the {company, university, secret government organization}
are included in this customized version. The user types in
"nikita@xxxxxxxxxxxx" and a password, Kerberos tickets are acquired,
and an IPsec session is established to the user's file/mail/ldap/
whatever server.
2) Some kind of multiuser variant of case #1, with different SAs for
different users on the same client host, simultaneously. Gets into
some of the channel binding stuff Nico Williams has been working on.
Probably not something we need to dig into much, as long as KINK
allows for multiple SAs.
3) Imagine two instances of case #2 (or #1), where users on the two
systems want to communicate peer-to-peer, not via some central
server. Now neither one has a kink/foo principal available. In this
case, I think it's okay to assume that at least one of the users will
have to type in the name of the other, or at least be prompted to
select "accept". (Section 4.2.4 supports this.) Probably on both
sides.
4) Case #3, but to make it worse, put name canonicalization in the
picture, and the two users have exchanged NT-ENTERPRISE principal
names alice@xxxxxx and bob@xxxxxx, rather than
Alice_Jones@xxxxxxxxxxxx and Robert_Smith@WORLD-DOMINATION-STRATEGIC-
PLANNING.MS.COM, because the short names are what they log in with,
use for email, etc. Can they establish an IPsec session between
them, securely? Actually, this probably belongs on the krb-wg list;
I'll bring it up there.
I *think* the upshot of these is:
- SHOULD for using "kink/fqdn" may be too strong. It's the name
that should be started with (but canonicalization may change it) in
the normal host-to-host case. When users are involved (or maybe
services acting as users or clients), the users' principals would be
the logical choice.
- While canonicalization hasn't been published yet, the KINK draft
should allow for it. In particular, when asking for a TGT for a
particular principal, after we've tried non-u2u authentication and
gotten referral data back and then been told that we have to do u2u,
the canonical name is the one we should be asking for. I haven't
figured out good wording yet that allows for canonicalization without
mentioning it explicitly, but I don't think we want to wait for
referrals to get published first.
Relatively minor stuff:
- Introduction:
Therefore, public key
operations (if any) are limited and are amortized over the lifetime
of the initial authentication operation to the KDC. For example, a
client may use a single public key exchange with the KDC to
efficiently establish multiple SAs with many other servers in the
realm of the KDC.
I would argue that the "initial authentication operation to the
KDC" is the AS exchange which typically lasts less than a second.
The public key ops are amortized over the life of the acquired
credentials.
The reason is that since
the keys are stored in the KDC, the number of principal keys is O(n)
rather than O(n*m), where "n" is the number of clients and "m" is
the
number of servers.
It would be O(n+m) instead of O(n); I'm not an expert on the IPsec
world, but I wouldn't be so quick to assert that n always dwarfs m.
Kerberos, like any internet protocol, does have
its own security considerations. You can find them discussed in
[KERBEROS].
That's security-considerations material, not introductory
material. In fact, I think the security considerations section
already talks about it.
- Section 2: "KINK directly reuses Quick Mode payloads defined in
the section 5.5 of [IKE], with some minor changes and omissions."
Drop "the".
- Section 3.6: One case that might be worth mentioning is when the
user's tickets are going to expire at the end of the "hard lifetime
by time" of the SA. In that case, unless there's some other reason
(lifetime by byte count?), there's no purpose in attempting to rekey,
because the new SA will have the same expiration time. (This sort of
applies also in renewable-TGT or PKINIT or keytab cases when the KDC
isn't available to issue a new TGT, but that could be seen as
starting the rekey process and then failing.) In some environments,
it may make sense to prompt the user to re-enter their password, but
until the new tickets are actually acquired (or the byte count gets
high enough), it makes no sense to continue.
- Sections 4.2.1, 4.2.2: The descriptions of EPOCH use the phrase
"across different restarts". Different from what? I think "across
restarts" is better.
- Section 11: "The KINK's use of Kerberos presents a couple of
considerations." Drop "the".
- Pages should end with a formfeed (control-L), not a caret and an
"L". RFC Editor can fix that up, but if there's need for a -10 and
it's not too hard (perhaps with post-processing), it'd be nice to fix
it.