x
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@12768 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
809
doc/standardisation/draft-ietf-cat-iakerb-09.txt
Normal file
809
doc/standardisation/draft-ietf-cat-iakerb-09.txt
Normal file
@@ -0,0 +1,809 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
INTERNET-DRAFT Jonathan Trostle
|
||||||
|
draft-ietf-cat-iakerb-09.txt Cisco Systems
|
||||||
|
Updates: RFC 1510, 1964 Michael Swift
|
||||||
|
October 2002 University of WA
|
||||||
|
Bernard Aboba
|
||||||
|
Microsoft
|
||||||
|
Glen Zorn
|
||||||
|
Cisco Systems
|
||||||
|
|
||||||
|
|
||||||
|
Initial and Pass Through Authentication Using Kerberos V5 and the GSS-API
|
||||||
|
(IAKERB)
|
||||||
|
<draft-ietf-cat-iakerb-09.txt>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Status of this Memo
|
||||||
|
|
||||||
|
This document is an Internet-Draft and is in full conformance with
|
||||||
|
all provisions of Section 10 of RFC2026 [5].
|
||||||
|
|
||||||
|
Internet-Drafts are working documents of the Internet Engineering
|
||||||
|
Task Force (IETF), its areas, and its working groups. Note that
|
||||||
|
other groups may also distribute working documents as Internet-
|
||||||
|
Drafts.
|
||||||
|
|
||||||
|
Internet-Drafts are draft documents valid for a maximum of six months
|
||||||
|
and may be updated, replaced, or obsoleted by other documents at any
|
||||||
|
time. It is inappropriate to use Internet-Drafts as reference
|
||||||
|
material or to cite them other than as "work in progress."
|
||||||
|
|
||||||
|
The list of current Internet-Drafts can be accessed at
|
||||||
|
http://www.ietf.org/ietf/1id-abstracts.txt
|
||||||
|
|
||||||
|
The list of Internet-Draft Shadow Directories can be accessed at
|
||||||
|
http://www.ietf.org/shadow.html.
|
||||||
|
|
||||||
|
This draft expires in March 2003. Please send comments to the
|
||||||
|
authors.
|
||||||
|
|
||||||
|
1. Abstract
|
||||||
|
|
||||||
|
This document defines extensions to the Kerberos protocol
|
||||||
|
specification (RFC 1510 [1]) and GSSAPI Kerberos protocol mechanism
|
||||||
|
(RFC 1964 [2]) that enables a client to obtain Kerberos tickets for
|
||||||
|
services where the KDC is not accessible to the client, but is
|
||||||
|
accessible to the application server. Some common scenarios where
|
||||||
|
lack of accessibility would occur are when the client does not have
|
||||||
|
an IP address prior to authenticating to an access point, the client
|
||||||
|
is unable to locate a KDC, or a KDC is behind a firewall. The
|
||||||
|
document specifies two protocols to allow a client to exchange KDC
|
||||||
|
messages (which are GSS encapsulated) with an IAKERB proxy instead of
|
||||||
|
a KDC.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Trostle, Swift, Aboba, Zorn [Page 1]
|
||||||
|
|
||||||
|
INTERNET DRAFT October 2002 Expires March 2003
|
||||||
|
|
||||||
|
|
||||||
|
2. Conventions used in this document
|
||||||
|
|
||||||
|
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
|
||||||
|
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
|
||||||
|
document are to be interpreted as described in RFC2119 [6].
|
||||||
|
|
||||||
|
3. Motivation
|
||||||
|
|
||||||
|
When authenticating using Kerberos V5, clients obtain tickets from a
|
||||||
|
KDC and present them to services. This method of operation works well
|
||||||
|
in many situations, but is not always applicable. The following is a
|
||||||
|
list of some of the scenarios that this proposal addresses:
|
||||||
|
|
||||||
|
(1) The client must initially authenticate to an access point in
|
||||||
|
order to gain full access to the network. Here the client may be
|
||||||
|
unable to directly contact the KDC either because it does not have an
|
||||||
|
IP address, or the access point packet filter does not allow the
|
||||||
|
client to send packets to the Internet before it authenticates to the
|
||||||
|
access point [8].
|
||||||
|
|
||||||
|
(2) A KDC is behind a firewall so the client will send Kerberos
|
||||||
|
messages to the IAKERB proxy which will transmit the KDC request and
|
||||||
|
reply messages between the client and the KDC. (The IAKERB proxy is a
|
||||||
|
special type of Kerberos application server that also relays KDC
|
||||||
|
request and reply messages between a client and the KDC).
|
||||||
|
|
||||||
|
4. Overview
|
||||||
|
|
||||||
|
This proposal specifies two protocols that address the above
|
||||||
|
scenarios: the IAKERB proxy option and the IAKERB minimal messages
|
||||||
|
option. In the IAKERB proxy option (see Figure 1) an application
|
||||||
|
server called the IAKERB proxy acts as a protocol gateway and proxies
|
||||||
|
Kerberos messages back and forth between the client and the KDC. The
|
||||||
|
IAKERB proxy is also responsible for locating the KDC and may
|
||||||
|
additionally perform other application proxy level functions such as
|
||||||
|
auditing. A compliant IAKERB proxy MUST implement the IAKERB proxy
|
||||||
|
protocol.
|
||||||
|
|
||||||
|
|
||||||
|
Client <---------> IAKERB proxy <----------> KDC
|
||||||
|
|
||||||
|
|
||||||
|
Figure 1: IAKERB proxying
|
||||||
|
|
||||||
|
The second protocol is the minimal messages protocol which is based
|
||||||
|
on user-user authentication [4]; this protocol is targetted at
|
||||||
|
environments where the number of messages, prior to key
|
||||||
|
establishment, needs to be minimized. In the normal minimal messages
|
||||||
|
protocol, the client sends its ticket granting ticket (TGT) to the
|
||||||
|
IAKERB proxy (in a KRB_TKT_PUSH message) for the TGS case. The IAKERB
|
||||||
|
proxy then sends a TGS_REQ to the KDC with the client's TGT in the
|
||||||
|
additional tickets field of the TGS_REQ message. The returned ticket
|
||||||
|
will list the client as the ticket's server principal, and will be
|
||||||
|
encrypted with the session key from the client's TGT. The IAKERB
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Trostle, Swift, Aboba, Zorn [Page 2]
|
||||||
|
|
||||||
|
INTERNET DRAFT October 2002 Expires March 2003
|
||||||
|
|
||||||
|
|
||||||
|
proxy then uses this ticket to generate an AP request that is sent to
|
||||||
|
the client (see Figure 2). Thus mutual authentication is accomplished
|
||||||
|
with three messages between the client and the IAKERB proxy versus
|
||||||
|
four or more (the difference is larger if crossrealm operations are
|
||||||
|
involved).
|
||||||
|
|
||||||
|
Subsequent to mutual authentication and key establishment, the IAKERB
|
||||||
|
proxy sends a ticket to the client (in a KRB_TKT_PUSH message). This
|
||||||
|
ticket is created by the IAKERB proxy and contains the same fields as
|
||||||
|
the original service ticket that the proxy sent in the AP_REQ
|
||||||
|
message, except the client and server names are reversed and it is
|
||||||
|
encrypted in a long term key known to the IAKERB proxy. Its purpose
|
||||||
|
is to enable fast subsequent re-authentication by the client to the
|
||||||
|
application server (using the conventional AP request AP reply
|
||||||
|
exchange) for subsequent sessions. In addition to minimizing the
|
||||||
|
number of messages, a secondary goal is to minimize the number of
|
||||||
|
bytes transferred between the client and the IAKERB proxy prior to
|
||||||
|
mutual authentication and key establishment. Therefore, the final
|
||||||
|
service ticket (the reverse ticket) is sent after mutual
|
||||||
|
authentication and key establishment is complete, rather than as part
|
||||||
|
of the initial AP_REQ from the IAKERB proxy to the client. Thus
|
||||||
|
protected application data (e.g., GSS signed and wrapped messages)
|
||||||
|
can flow before this final message is sent.
|
||||||
|
|
||||||
|
The AS_REQ case for the minimal messages option is similar, where the
|
||||||
|
client sends up the AS_REQ message and the IAKERB proxy forwards it
|
||||||
|
to the KDC. The IAKERB proxy pulls the client TGT out of the AS_REP
|
||||||
|
message; the protocol now proceeds as in the TGS_REQ case described
|
||||||
|
above with the IAKERB proxy including the client's TGT in the
|
||||||
|
additional tickets field of the TGS_REQ message.
|
||||||
|
|
||||||
|
A compliant IAKERB proxy MUST implement the IAKERB proxy protocol,
|
||||||
|
and MAY implement the IAKERB minimal message protocol. In general,
|
||||||
|
the existing Kerberos paradigm where clients contact the KDC to
|
||||||
|
obtain service tickets should be preserved where possible.
|
||||||
|
|
||||||
|
For most IAKERB scenarios, such as when the client does not have an
|
||||||
|
IP address, or cannot directly contact a KDC, the IAKERB proxy
|
||||||
|
protocol should be adequate. If the client needs to obtain a
|
||||||
|
crossrealm TGT (and the conventional Kerberos protocol cannot be
|
||||||
|
used), then the IAKERB proxy protocol must be used. In a scenario
|
||||||
|
where the client does not have a service ticket for the target
|
||||||
|
server, it is crucial that the number of messages between the client
|
||||||
|
and the target server be minimized (especially if the client and
|
||||||
|
target server are in different realms), and/or it is crucial that the
|
||||||
|
number of bytes transferred between the client and the target server
|
||||||
|
be minimized, then the client should consider using the minimal
|
||||||
|
messages protocol. The reader should see the security considerations
|
||||||
|
section regarding the minimal messages protocol.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Trostle, Swift, Aboba, Zorn [Page 3]
|
||||||
|
|
||||||
|
INTERNET DRAFT October 2002 Expires March 2003
|
||||||
|
|
||||||
|
|
||||||
|
Client --------> IAKERB proxy
|
||||||
|
TKT_PUSH (w/ TGT)
|
||||||
|
|
||||||
|
Client IAKERB proxy --------------------> KDC
|
||||||
|
TGS_REQ with client
|
||||||
|
TGT as additional TGT
|
||||||
|
|
||||||
|
Client IAKERB proxy <-------------------- KDC
|
||||||
|
TGS_REP with service
|
||||||
|
ticket
|
||||||
|
|
||||||
|
Client <-------- IAKERB proxy KDC
|
||||||
|
AP_REQ
|
||||||
|
|
||||||
|
Client --------> IAKERB proxy KDC
|
||||||
|
AP_REP
|
||||||
|
|
||||||
|
-------------------------------------------------------------
|
||||||
|
post-key establishment and application data flow phase:
|
||||||
|
|
||||||
|
Client <-------- IAKERB proxy KDC
|
||||||
|
TKT_PUSH (w/ticket targetted at IAKERB proxy
|
||||||
|
to enable fast subsequent authentication)
|
||||||
|
|
||||||
|
|
||||||
|
Figure 2: IAKERB Minimal Messages Option: TGS case
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
5. GSSAPI Encapsulation
|
||||||
|
|
||||||
|
The mechanism ID for IAKERB proxy GSS-API Kerberos, in accordance
|
||||||
|
with the mechanism proposed by SPNEGO [7] for negotiating protocol
|
||||||
|
variations, is: {iso(1) org(3) dod(6) internet(1) security(5)
|
||||||
|
mechanisms(5) iakerb(10) iakerbProxyProtocol(1)}. The proposed
|
||||||
|
mechanism ID for IAKERB minimum messages GSS-API Kerberos, in
|
||||||
|
accordance with the mechanism proposed by SPNEGO for negotiating
|
||||||
|
protocol variations, is: {iso(1) org(3) dod(6) internet(1)
|
||||||
|
security(5) mechanisms(5) iakerb(10)
|
||||||
|
iakerbMinimumMessagesProtocol(2)}.
|
||||||
|
|
||||||
|
NOTE: An IAKERB implementation does not require SPNEGO in order to
|
||||||
|
achieve interoperability with other IAKERB peers. Two IAKERB
|
||||||
|
implementations may interoperate in the same way that any two peers
|
||||||
|
can interoperate using a pre-established GSSAPI mechanism. The above
|
||||||
|
OID's allow two SPNEGO peers to securely negotiate IAKERB from among
|
||||||
|
a set of GSS mechanisms.
|
||||||
|
|
||||||
|
The AS request, AS reply, TGS request, and TGS reply messages are all
|
||||||
|
encapsulated using the format defined by RFC1964 [2]. This consists
|
||||||
|
of the GSS-API token framing defined in appendix B of [3]:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Trostle, Swift, Aboba, Zorn [Page 4]
|
||||||
|
|
||||||
|
INTERNET DRAFT October 2002 Expires March 2003
|
||||||
|
|
||||||
|
|
||||||
|
InitialContextToken ::= [APPLICATION 0] IMPLICIT SEQUENCE {
|
||||||
|
thisMech MechType
|
||||||
|
-- MechType is OBJECT IDENTIFIER
|
||||||
|
-- representing iakerb proxy or iakerb min messages
|
||||||
|
innerContextToken ANY DEFINED BY thisMech
|
||||||
|
-- contents mechanism-specific;
|
||||||
|
-- ASN.1 usage within innerContextToken
|
||||||
|
-- is not required
|
||||||
|
}
|
||||||
|
|
||||||
|
The innerContextToken consists of a 2-byte TOK_ID field (defined
|
||||||
|
below), followed by the Kerberos V5 KRB_AS_REQ, KRB_AS_REP,
|
||||||
|
KRB_TGS_REQ, or KRB_TGS_REP messages, as appropriate. The TOK_ID
|
||||||
|
field shall be one of the following values, to denote that the
|
||||||
|
message is either a request to the KDC or a response from the KDC.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Message TOK_ID
|
||||||
|
|
||||||
|
KRB_KDC_REQ 00 03
|
||||||
|
|
||||||
|
KRB_KDC_REP 01 03
|
||||||
|
|
||||||
|
We also define the token ID for the KRB_TKT_PUSH token (defined below
|
||||||
|
and used in the minimal messages variation):
|
||||||
|
|
||||||
|
Message TOK_ID
|
||||||
|
|
||||||
|
KRB_TKT_PUSH 02 03
|
||||||
|
|
||||||
|
For completeness, we list the other RFC 1964 defined token ID's here:
|
||||||
|
|
||||||
|
Message TOK_ID
|
||||||
|
|
||||||
|
AP_REQ 01 00
|
||||||
|
|
||||||
|
AP_REP 02 00
|
||||||
|
|
||||||
|
KRB_ERROR 03 00
|
||||||
|
|
||||||
|
6. The IAKERB proxy protocol
|
||||||
|
|
||||||
|
The IAKERB proxy will proxy Kerberos KDC request, KDC reply, and
|
||||||
|
KRB_ERROR messages back and forth between the client and the KDC as
|
||||||
|
illustrated in Figure 1. Messages received from the client must first
|
||||||
|
have the Kerberos GSS header (RFC1964 [2]) stripped off. The
|
||||||
|
unencapsulated message will then be forwarded to a KDC. The IAKERB
|
||||||
|
proxy is responsible for locating an appropriate KDC using the realm
|
||||||
|
information in the KDC request message it received from the client.
|
||||||
|
In addition, the IAKERB proxy SHOULD implement a retry algorithm for
|
||||||
|
KDC requests over UDP (including selection of alternate KDC's if the
|
||||||
|
initial KDC does not respond to its requests). For messages sent by
|
||||||
|
the KDC, the IAKERB proxy encapsulates them with a Kerberos GSS
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Trostle, Swift, Aboba, Zorn [Page 5]
|
||||||
|
|
||||||
|
INTERNET DRAFT October 2002 Expires March 2003
|
||||||
|
|
||||||
|
|
||||||
|
header before sending them to the client.
|
||||||
|
|
||||||
|
We define two new Kerberos error codes that allow the proxy to
|
||||||
|
indicate the following error conditions to the client:
|
||||||
|
|
||||||
|
(a) when the proxy is unable to obtain an IP address for a KDC in the
|
||||||
|
client's realm, it sends the KRB_IAKERB_ERR_KDC_NOT_FOUND KRB_ERROR
|
||||||
|
(80) message to the client.
|
||||||
|
|
||||||
|
(b) when the proxy has an IP address for a KDC in the client realm,
|
||||||
|
but does not receive a response from any KDC in the realm (including
|
||||||
|
in response to retries), it sends the KRB_IAKERB_ERR_KDC_NO_RESPONSE
|
||||||
|
KRB_ERROR (81) message to the client.
|
||||||
|
|
||||||
|
To summarize, the sequence of steps for processing is as follows:
|
||||||
|
|
||||||
|
Servers:
|
||||||
|
|
||||||
|
1. For received KDC_REQ messages (with token ID 00 03)
|
||||||
|
- process GSS framing (check OID)
|
||||||
|
if the OID is not one of the two OID's specified in the GSSAPI
|
||||||
|
Encapsulation section above, then process according to mechanism
|
||||||
|
defined by that OID (if the OID is recognized). The processing
|
||||||
|
is outside the scope of this specification. Otherwise, strip
|
||||||
|
off GSS framing.
|
||||||
|
- find KDC for specified realm (if KDC IP address cannot be
|
||||||
|
obtained, send a KRB_ERROR message with error code
|
||||||
|
KRB_IAKERB_ERR_KDC_NOT_FOUND to the client).
|
||||||
|
- send to KDC (storing client IP address, port, and indication
|
||||||
|
whether IAKERB proxy option or minimal messages option is
|
||||||
|
being used)
|
||||||
|
- retry with same or another KDC if no response is received. If
|
||||||
|
the retries also fail, send an error message with error code
|
||||||
|
KRB_IAKERB_ERR_KDC_NO_RESPONSE to the client.
|
||||||
|
|
||||||
|
2. For received KDC_REP messages
|
||||||
|
- encapsulate with GSS framing, using token ID 01 03 and the OID
|
||||||
|
that corresponds to the stored protocol option
|
||||||
|
- send to client (using the stored client IP address and port)
|
||||||
|
|
||||||
|
3. For KRB_ERROR messages received from the KDC
|
||||||
|
- encapsulate with GSS framing, using token ID 03 00 and the OID
|
||||||
|
that corresponds to the stored protocol option
|
||||||
|
- send to client (using the stored client IP address and port)
|
||||||
|
(one possible exception is the KRB_ERR_RESPONSE_TOO_BIG error
|
||||||
|
which can lead to a retry of the KDC_REQ message over the TCP
|
||||||
|
transport by the server, instead of simply proxying the error
|
||||||
|
to the client).
|
||||||
|
|
||||||
|
4. For sending/receiving AP_REQ and AP_REP messages
|
||||||
|
- process per RFC 1510 and RFC 1964; the created AP_REP message
|
||||||
|
SHOULD include the subkey (with same etype as the session key)
|
||||||
|
to facilitate use with other key derivation algorithms outside
|
||||||
|
of [2]. The subkey SHOULD be created using locally generated
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Trostle, Swift, Aboba, Zorn [Page 6]
|
||||||
|
|
||||||
|
INTERNET DRAFT October 2002 Expires March 2003
|
||||||
|
|
||||||
|
|
||||||
|
entropy as one of the inputs (in addition to other inputs
|
||||||
|
such as the session key).
|
||||||
|
|
||||||
|
Clients:
|
||||||
|
|
||||||
|
1. For sending KDC_REQ messages
|
||||||
|
- create AS_REQ or TGS_REQ message
|
||||||
|
- encapsulate with GSS framing (token ID 00 03 and OID
|
||||||
|
corresponding to the protocol option).
|
||||||
|
- send to server
|
||||||
|
|
||||||
|
2. For received KDC_REP messages
|
||||||
|
- decapsulate by removing GSS framing (token ID 01 03)
|
||||||
|
- process inner Kerberos message according to RFC 1510
|
||||||
|
|
||||||
|
3. For received KRB_ERROR messages
|
||||||
|
- decapsulate by removing GSS framing (token ID 03 00)
|
||||||
|
- process inner Kerberos message according to RFC 1510
|
||||||
|
and possibly retry the request (time skew errors lead
|
||||||
|
to retries in most existing Kerberos implementations)
|
||||||
|
|
||||||
|
4. For sending/receiving AP_REQ and AP_REP messages
|
||||||
|
- process per RFC 1510 and RFC 1964; the created AP_REQ
|
||||||
|
message SHOULD include the subsession key in the
|
||||||
|
authenticator field.
|
||||||
|
|
||||||
|
7. The IAKERB minimal messages protocol
|
||||||
|
|
||||||
|
The client MAY initiate the IAKERB minimal messages variation when
|
||||||
|
the number of messages must be minimized (the most significant
|
||||||
|
reduction in the number of messages can occur when the client and the
|
||||||
|
IAKERB proxy are in different realms). SPNEGO [7] MAY be used to
|
||||||
|
securely negotiate between the protocols (and amongst other GSS
|
||||||
|
mechanism protocols). A compliant IAKERB server MAY support the
|
||||||
|
IAKERB minimal messages protocol.
|
||||||
|
|
||||||
|
(a) AS_REQ case: (used when the client does not have a TGT)
|
||||||
|
|
||||||
|
We apply the Kerberos user-user authentication protocol [4] in this
|
||||||
|
scenario (other work in this area includes the IETF work in progress
|
||||||
|
effort to apply Kerberos user user authentication to DHCP
|
||||||
|
authentication).
|
||||||
|
|
||||||
|
The client indicates that the minimal message sub-protocol will be
|
||||||
|
used by using the appropriate OID as described above. The client
|
||||||
|
sends the GSS encapsulated AS_REQ message to the IAKERB proxy, and
|
||||||
|
the IAKERB proxy processes the GSS framing (as described above for
|
||||||
|
the IAKERB proxy option) and forwards the AS_REQ message to the KDC.
|
||||||
|
|
||||||
|
The IAKERB proxy will either send a KRB_ERROR message back to the
|
||||||
|
client, or it will send an initial context token consisting of the
|
||||||
|
GSS header (minimal messages OID with a two byte token header 01 03),
|
||||||
|
followed by an AS_REP message. The AS_REP message will contain the
|
||||||
|
AP_REQ message in a padata field; the ticket in the AP_REQ is a
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Trostle, Swift, Aboba, Zorn [Page 7]
|
||||||
|
|
||||||
|
INTERNET DRAFT October 2002 Expires March 2003
|
||||||
|
|
||||||
|
|
||||||
|
user-user ticket encrypted in the session key from the client's
|
||||||
|
original TGT. We define the padata type PA-AP-REQ with type number
|
||||||
|
25. The corresponding padata value is the AP_REQ message without any
|
||||||
|
GSS framing. For the IAKERB minimal messages AS option, the AP_REQ
|
||||||
|
message authenticator MUST include the RFC 1964 [2] checksum. The
|
||||||
|
mutual-required and use-session-key flags are set in the ap-options
|
||||||
|
field of the AP_REQ message.
|
||||||
|
|
||||||
|
The protocol is complete in the KRB_ERROR case (from the server
|
||||||
|
perspective, but the client should retry depending on the error
|
||||||
|
type). If the IAKERB proxy receives an AS_REP message from the KDC,
|
||||||
|
the IAKERB proxy will then obtain the client's TGT from the AS_REP
|
||||||
|
message. The IAKERB proxy then sends a TGS_REQ message with the
|
||||||
|
client's TGT in the additional tickets field to the client's KDC
|
||||||
|
(ENC-TKT-IN-SKEY option).
|
||||||
|
|
||||||
|
The IAKERB proxy MAY handle returned KRB_ERROR messages and retry the
|
||||||
|
TGS request message (e.g. on a KRB_ERR_RESPONSE_TOO_BIG error,
|
||||||
|
switching to TCP from UDP). Ultimately, the IAKERB proxy either
|
||||||
|
proxies a KRB_ERROR message to the client (after adding the GSS
|
||||||
|
framing), sends one of the new GSS framed KRB_ERROR messages defined
|
||||||
|
above, or it receives the TGS_REP message from the KDC and then
|
||||||
|
creates the AP_REQ message according to RFC 1964 [2]. The IAKERB
|
||||||
|
proxy then sends a GSS token containing the AS_REP message with the
|
||||||
|
AP_REQ message in the padata field as described above. (Note:
|
||||||
|
although the server sends the context token with the AP_REQ, the
|
||||||
|
client is the initiator.) The IAKERB proxy MUST set both the mutual-
|
||||||
|
required and use-session-key flags in the AP_REQ message in order to
|
||||||
|
cause the client to authenticate as well. The authenticator SHOULD
|
||||||
|
include the subsession key (containing locally added entropy). The
|
||||||
|
client will reply with the GSSAPI enscapsulated AP_REP message, if
|
||||||
|
the IAKERB proxy's authentication succeeds (which SHOULD include the
|
||||||
|
subkey field to facilitate use with other key derivation algorithms
|
||||||
|
outside of [2]). If all goes well, then, in order to enable
|
||||||
|
subsequent efficient client authentications, the IAKERB proxy will
|
||||||
|
then send a final message of type KRB_TKT_PUSH containing a Kerberos
|
||||||
|
ticket (the reverse ticket) that has the IAKERB client principal
|
||||||
|
identifier in the client identifier field of the ticket and its own
|
||||||
|
principal identity in the server identifier field of the ticket (see
|
||||||
|
Figure 3):
|
||||||
|
|
||||||
|
KRB_TKT_PUSH :: = [APPLICATION 17] SEQUENCE {
|
||||||
|
pvno[0] INTEGER, -- 5 (protocol version)
|
||||||
|
msg-type[1] INTEGER, -- 17 (message type)
|
||||||
|
ticket[2] Ticket
|
||||||
|
}
|
||||||
|
|
||||||
|
NOTE: The KRB_TKT_PUSH message must be encoded using ASN.1 DER. The
|
||||||
|
key used to encrypt the reverse ticket is a long term secret key
|
||||||
|
chosen by the IAKERB proxy. The fields are identical to the AP_REQ
|
||||||
|
ticket, except the client name will be switched with the server name,
|
||||||
|
and the server realm will be switched with the client realm. (The one
|
||||||
|
other exception is that addresses should not be copied from the
|
||||||
|
AP_REQ ticket to the reverse ticket). Sending the reverse ticket
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Trostle, Swift, Aboba, Zorn [Page 8]
|
||||||
|
|
||||||
|
INTERNET DRAFT October 2002 Expires March 2003
|
||||||
|
|
||||||
|
|
||||||
|
allows the client to efficiently initiate subsequent reauthentication
|
||||||
|
attempts with a RFC1964 AP_REQ message. Note that the TKT_PUSH
|
||||||
|
message is sent after mutual authentication and key establishment are
|
||||||
|
complete.
|
||||||
|
|
||||||
|
|
||||||
|
Client --------> IAKERB proxy --------------------> KDC
|
||||||
|
AS_REQ AS_REQ
|
||||||
|
|
||||||
|
Client IAKERB proxy <-------------------- KDC
|
||||||
|
AS_REP w/ client TGT
|
||||||
|
|
||||||
|
Client IAKERB proxy --------------------> KDC
|
||||||
|
TGS_REQ with client
|
||||||
|
TGT as additional TGT
|
||||||
|
|
||||||
|
Client IAKERB proxy <-------------------- KDC
|
||||||
|
TGS_REP with service
|
||||||
|
ticket
|
||||||
|
|
||||||
|
Client <-------- IAKERB proxy KDC
|
||||||
|
AS_REP w/ AP_REQ in padata field
|
||||||
|
|
||||||
|
Client --------> IAKERB proxy KDC
|
||||||
|
AP_REP
|
||||||
|
|
||||||
|
-------------------------------------------------------------
|
||||||
|
post-key establishment and application data flow phase:
|
||||||
|
|
||||||
|
Client <-------- IAKERB proxy KDC
|
||||||
|
TKT_PUSH (w/ticket targetted at IAKERB proxy
|
||||||
|
to enable fast subsequent authentication)
|
||||||
|
|
||||||
|
|
||||||
|
Figure 3: IAKERB Minimal Messages Option: AS case
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(b) TGS_REQ case: (used when the client has a TGT)
|
||||||
|
|
||||||
|
The client indicates that the minimal messages sub-protocol will be
|
||||||
|
used by using the appropriate OID as described above. The client
|
||||||
|
initially sends a KRB_TKT_PUSH message (with the GSS header) to the
|
||||||
|
IAKERB proxy in order to send it a TGT. The IAKERB proxy will obtain
|
||||||
|
the client's TGT from the KRB_TKT_PUSH message and then proceed to
|
||||||
|
send a TGS_REQ message to a KDC where the realm of the KDC is equal
|
||||||
|
to the realm from the server realm field in the TGT sent by the
|
||||||
|
client in the KRB_TKT_PUSH message. NOTE: this realm could be the
|
||||||
|
client's home realm, the proxy's realm, or an intermediate realm. The
|
||||||
|
protocol then continues as in the minimal messages AS_REQ case
|
||||||
|
described above (see Figure 2); the IAKERB proxy's TGS_REQ message
|
||||||
|
contains the client's TGT in the additional tickets field (ENC-TKT-
|
||||||
|
IN-SKEY option). The IAKERB proxy then receives the TGS_REP message
|
||||||
|
from the KDC and then sends a RFC 1964 AP_REQ message to the client
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Trostle, Swift, Aboba, Zorn [Page 9]
|
||||||
|
|
||||||
|
INTERNET DRAFT October 2002 Expires March 2003
|
||||||
|
|
||||||
|
|
||||||
|
(with the MUTUAL AUTH flag set - see AS_REQ case).
|
||||||
|
|
||||||
|
To summarize, here are the steps for the minimal messages TGS
|
||||||
|
protocol:
|
||||||
|
|
||||||
|
Client:
|
||||||
|
(has TGT already for, or targetted at, realm X.ORG)
|
||||||
|
sends TKT_PUSH message to server containing client's ticket
|
||||||
|
for X.ORG (which could be a crossrealm TGT)
|
||||||
|
|
||||||
|
Server:
|
||||||
|
(has TGT already targetted at realm X.ORG)
|
||||||
|
sends to KDC (where KDC has principal id = server name,
|
||||||
|
server realm from client ticket) a TGS_REQ:
|
||||||
|
TGT in TGS_REQ is server's TGT
|
||||||
|
Additional ticket in TGS_REQ is client's TGT from TKT_PUSH
|
||||||
|
message
|
||||||
|
Server name in TGS_REQ (optional by rfc1510) is not present
|
||||||
|
Server realm in TGS_REQ is realm in server's TGT - X.ORG
|
||||||
|
|
||||||
|
KDC:
|
||||||
|
Builds a ticket:
|
||||||
|
Server name = client's name
|
||||||
|
Client name = server's name, Client realm = server's realm
|
||||||
|
Server realm = client's realm
|
||||||
|
Encrypted with: session key from client's TGT (passed in
|
||||||
|
additional tickets field)
|
||||||
|
Build a TGS_REP
|
||||||
|
Encrypted with session key from server's TGT
|
||||||
|
Sends TGS_REP and ticket to server
|
||||||
|
|
||||||
|
Server:
|
||||||
|
Decrypts TGS_REP from KDC using session key from its TGT
|
||||||
|
Constructs AP_REQ
|
||||||
|
Ticket = ticket from KDC (which was encrypted with
|
||||||
|
client's TGT session key)
|
||||||
|
authenticator clientname = server's name (matches
|
||||||
|
clientname in AP-REQ ticket)
|
||||||
|
authenticator clientrealm = server's realm
|
||||||
|
subsession key in authenticator is present (same
|
||||||
|
etype as the etype of the session key in the ticket)
|
||||||
|
checksum in authenticator is the RFC 1964 checksum
|
||||||
|
sequence number in authenticator is present (RFC 1964)
|
||||||
|
ap-options has both use-session-key and mutual-required
|
||||||
|
flags set
|
||||||
|
Sends AP_REQ (with GSS-API framing) to client
|
||||||
|
|
||||||
|
Client:
|
||||||
|
Receives AP_REQ
|
||||||
|
Decrypts ticket using session key from its TGT
|
||||||
|
Verifies AP_REQ
|
||||||
|
Builds AP_REP and sends to server (AP_REP SHOULD include
|
||||||
|
subkey field to facilitate use with other key derivation
|
||||||
|
algorithms outside of [2] e.g., [8] and its successors.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Trostle, Swift, Aboba, Zorn [Page 10]
|
||||||
|
|
||||||
|
INTERNET DRAFT October 2002 Expires March 2003
|
||||||
|
|
||||||
|
|
||||||
|
Some apps may have their own message protection key
|
||||||
|
derivation algorithm and protected message format.
|
||||||
|
AP_REP includes the sequence number per RFC 1964.)
|
||||||
|
|
||||||
|
Server:
|
||||||
|
Verifies AP-REP. Builds reverse ticket as described above
|
||||||
|
and sends reverse ticket to client using the KRB_TKT_PUSH
|
||||||
|
message. The reverse ticket is the same as the AP_REQ
|
||||||
|
ticket except the client name, realm are switched with the
|
||||||
|
server name, realm fields and it is encrypted in a secret
|
||||||
|
key known to the IAKERB proxy.
|
||||||
|
|
||||||
|
8. Addresses in Tickets
|
||||||
|
|
||||||
|
In IAKERB, the machine sending requests to the KDC is the server and
|
||||||
|
not the client. As a result, the client should not include its
|
||||||
|
addresses in any KDC requests for two reasons. First, the KDC may
|
||||||
|
reject the forwarded request as being from the wrong client. Second,
|
||||||
|
in the case of initial authentication for a dial-up client, the
|
||||||
|
client machine may not yet possess a network address. Hence, as
|
||||||
|
allowed by RFC1510 [1], the addresses field of the AS and TGS
|
||||||
|
requests SHOULD be blank and the caddr field of the ticket SHOULD
|
||||||
|
similarly be left blank.
|
||||||
|
|
||||||
|
9. Security Considerations
|
||||||
|
|
||||||
|
Similar to other network access protocols, IAKERB allows an
|
||||||
|
unauthenticated client (possibly outside the security perimeter of an
|
||||||
|
organization) to send messages that are proxied to interior servers.
|
||||||
|
When combined with DNS SRV RR's for KDC lookup, there is the
|
||||||
|
possibility that an attacker can send an arbitrary message to an
|
||||||
|
interior server. There are several aspects to note here:
|
||||||
|
|
||||||
|
(1) in many scenarios, compromise of the DNS lookup will require the
|
||||||
|
attacker to already have access to the internal network. Thus the
|
||||||
|
attacker would already be able to send arbitrary messages to interior
|
||||||
|
servers. No new vulnerabilities are added in these scenarios.
|
||||||
|
|
||||||
|
(2) in a scenario where DNS SRV RR's are being used to locate the
|
||||||
|
KDC, IAKERB is being used, and an external attacker can modify DNS
|
||||||
|
responses to the IAKERB proxy, there are several countermeasures to
|
||||||
|
prevent arbitrary messages from being sent to internal servers:
|
||||||
|
|
||||||
|
(a) KDC port numbers can be statically configured on the IAKERB
|
||||||
|
proxy. In this case, the messages will always be sent to KDC's. For
|
||||||
|
an organization that runs KDC's on a static port (usually port 88)
|
||||||
|
and does not run any other servers on the same port, this
|
||||||
|
countermeasure would be easy to administer and should be effective.
|
||||||
|
|
||||||
|
(b) the proxy can do application level sanity checking and filtering.
|
||||||
|
This countermeasure should eliminate many of the above attacks.
|
||||||
|
|
||||||
|
(c) DNS security can be deployed. This countermeasure is probably
|
||||||
|
overkill for this particular problem, but if an organization has
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Trostle, Swift, Aboba, Zorn [Page 11]
|
||||||
|
|
||||||
|
INTERNET DRAFT October 2002 Expires March 2003
|
||||||
|
|
||||||
|
|
||||||
|
already deployed DNS security for other reasons, then it might make
|
||||||
|
sense to leverage it here. Note that Kerberos could be used to
|
||||||
|
protect the DNS exchanges. The initial DNS SRV KDC lookup by the
|
||||||
|
proxy will be unprotected, but an attack here is at most a denial of
|
||||||
|
service (the initial lookup will be for the proxy's KDC to facilitate
|
||||||
|
Kerberos protection of subsequent DNS exchanges between itself and
|
||||||
|
the DNS server).
|
||||||
|
|
||||||
|
In the minimal messages protocol option, the application server sends
|
||||||
|
an AP_REQ message to the client. The ticket in the AP_REQ message
|
||||||
|
SHOULD NOT contain authorization data since some operating systems
|
||||||
|
may allow the client to impersonate the server and increase its own
|
||||||
|
privileges. If the ticket from the server connotes any authorization,
|
||||||
|
then the minimal messages protocol should not be used. Also, the
|
||||||
|
minimal messages protocol may facilitate denial of service attacks in
|
||||||
|
some environments; to prevent these attacks, it may make sense for
|
||||||
|
the minimal messages protocol server to only accept a KRB_TGT_PUSH
|
||||||
|
message on a local network interface (to ensure that the message was
|
||||||
|
not sent from a remote malicious host).
|
||||||
|
|
||||||
|
10. Acknowledgements
|
||||||
|
|
||||||
|
We thank the Kerberos Working Group chair, Doug Engert, for his
|
||||||
|
efforts in helping to progress this specification. We also thank Ken
|
||||||
|
Raeburn for his comments and the other working group participants for
|
||||||
|
their input.
|
||||||
|
|
||||||
|
11. References
|
||||||
|
|
||||||
|
[1] J. Kohl, C. Neuman, "The Kerberos Network Authentication
|
||||||
|
Service (V5)", RFC 1510.
|
||||||
|
|
||||||
|
[2] J. Linn, "The Kerberos Version 5 GSS-API Mechanism", RFC 1964.
|
||||||
|
|
||||||
|
[3] J. Linn, "Generic Security Service Application Program
|
||||||
|
Interface Version 2, Update 1", RFC 2743.
|
||||||
|
|
||||||
|
[4] D. Davis, R. Swick, "Workstation Services and Kerberos
|
||||||
|
Authentication at Project Athena", Technical Memorandum TM-424,
|
||||||
|
MIT Laboratory for Computer Science, February 1990.
|
||||||
|
|
||||||
|
[5] S. Bradner, "The Internet Standards Process -- Revision 3", BCP
|
||||||
|
9, RFC 2026, October 1996.
|
||||||
|
|
||||||
|
[6] S. Bradner, "Key words for use in RFCs to Indicate Requirement
|
||||||
|
Levels", BCP 14, RFC 2119, March 1997.
|
||||||
|
|
||||||
|
[7] E. Baize, D. Pinkas, "The Simple and Protected GSS-API Negotiation
|
||||||
|
Mechanism," RFC 2478, December 1998.
|
||||||
|
|
||||||
|
[8] Part 11: Wireless LAN Medium Access Control (MAC) and Physical
|
||||||
|
Layer (PHY) Specifications, ANSI/IEEE Std. 802.11, 1999 Edition.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Trostle, Swift, Aboba, Zorn [Page 12]
|
||||||
|
|
||||||
|
INTERNET DRAFT October 2002 Expires March 2003
|
||||||
|
|
||||||
|
|
||||||
|
12. Author's Addresses
|
||||||
|
|
||||||
|
Jonathan Trostle
|
||||||
|
Cisco Systems
|
||||||
|
170 W. Tasman Dr.
|
||||||
|
San Jose, CA 95134, U.S.A.
|
||||||
|
Email: jtrostle@cisco.com
|
||||||
|
Phone: (408) 527-6201
|
||||||
|
|
||||||
|
Michael Swift
|
||||||
|
University of Washington
|
||||||
|
Seattle, WA
|
||||||
|
Email: mikesw@cs.washington.edu
|
||||||
|
|
||||||
|
Bernard Aboba
|
||||||
|
Microsoft
|
||||||
|
One Microsoft Way
|
||||||
|
Redmond, Washington, 98052, U.S.A.
|
||||||
|
Email: bernarda@microsoft.com
|
||||||
|
Phone: (425) 706-6605
|
||||||
|
|
||||||
|
Glen Zorn
|
||||||
|
Cisco Systems
|
||||||
|
Bellevue, WA U.S.A.
|
||||||
|
Email: gwz@cisco.com
|
||||||
|
Phone: (425) 468-0955
|
||||||
|
|
||||||
|
This draft expires on March 31st, 2003.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Trostle, Swift, Aboba, Zorn [Page 13]
|
||||||
|
|
Reference in New Issue
Block a user