[AFS3-std] Re: rxgk token expiry

Benjamin Kaduk kaduk@MIT.EDU
Wed, 31 Oct 2012 23:42:52 -0400 (EDT)


I will try to keep comments brief, this risks becoming a very long thread.

On Wed, 31 Oct 2012, Jeffrey Altman wrote:

> On Wednesday, October 31, 2012 8:52:00 PM, Russ Allbery wrote:
>> Jeffrey Altman <jaltman@secure-endpoints.com> writes:
>>
>>> I disagree.  The valid lifetime of an rxgk token does not need to be the
>>> same as the Kerberos ticket lifetime or the X.509 client certificate
>>> lifetime or whatever is applicable for OATH.  For rxkad the token is
>>> Kerberos ticket and I'm willing to accept that as a result the rxkad
>>> lifetime matches the Kerberos ticket lifetime.  However, an rxgk token
>>> is not a Kerberos ticket.  It is explicitly and intentionally
>>> independent.
>>
>> However, it derives its authentication identity from a Kerberos ticket,
>> and it is *inherent* in the Kerberos mechanism that the identity that you
>> derive from a Kerberos ticket is only valid for the expiration period of
>> that ticket.  Beyond the expiration point of a ticket, that ticket says
>> nothing about the authenticated identity of the user.
>>
>> The authentication data therefore needs to be discarded by any downstream
>> consumer of Kerberos tickets.  Not doing this significantly undermines the
>> Kerberos security model.  The lack of revocation support in Kerberos is
>> made possible by limited-lifespan tickets, and ignoring that expiration
>> means introducing new security vulnerabilities.
>>
>> It's particularly important in security systems to not discard bounds and
>> restrictions when translating their results into another protocol.  By
>> doing so, you discard invariants that you may be relying on for other
>> security guarantees, some of which can be quite subtle and tricky.
>
> The battle was lost a long time ago.   Heimdal, MIT and Microsoft all
> disregard Kerberos ticket lifetimes for GSS security contexts derived
> from
> Kerberos authentications.   The rxgk token is a derived form of GSS
> security context.  Forcing termination of application specific
> connections
> because the authentication context has expired is impractical and has
> been
> demonstrated to result in data loss.
>

The question of existing versus new connection, and of authentication 
versus authorization, are good things to think about in this class of 
situations.  A single token may be used for both creating new connections 
and supporting encryption of existing ones ... but RX connections do not 
necessarily map to exactly what a user may want to think of as a 
connection.  At the level of an rxgk document, I do not think that we 
should try very hard to specify all application behavior.

> From a usability perspective, on Microsoft Windows, it is practically
> impossible
> to force renewal of Kerberos tickets in order to obtain reasonable
> lifetimes.
> Windows completely ignores renewable ticket lifetimes.  The Kerberos
> SSPI
> pays no attention to Kerberos ticket lifetimes for any subsequent
> Security Context
> usage.  Once the Security Context is created for a service it is valid
> until the client
> chooses to obtain a new one.   As a result, Windows allows Kerberos
> ticket
> lifetimes to drop to under five minutes and there is no reasonable way
> to force the
> acquisition of a new Kerberos ticket with a longer lifetime.  Besides,
> what
> difference does it make when the password or other credentials have been
> cached by the operating system and the entity being authenticated is
> never
> going to be asked to re-authenticate.
>

OS X renews kerberos tickets automatically.  MIT Kerberos for Windows will 
renew kerberos tickets automatically.  Red Hat's SSSD will renew kerberos 
tickets automatically.  I echo Russ; Microsoft Windows' behavior is 
unfortunate, but nor is it the only behavior around.

> As I said previously, it is completely reasonable for an rxgk service
> administrator
> to decide that a given rxgk service should enforce a policy of Kerberos
> ticket lifetime
> equals rxgk token lifetime.  However, it should be equally possible for
> a
> rxgk service administrator to say that s/he wants the lifetime to be
> Kerberos ticket
> lifetime plus one hour to ensure that Microsoft's poor implementation
> choices
> do not result in file system access failures.   It should also be
> possible to say
> that the lifetime is a fixed period of time independent of the
> authentication
> lifetime.
>
> rxgk is not a Kerberos specific security class.  When rxgk is used with
> a
> X.509 client certificate that has a one year lifetime, or is used with
> OATH
> or OpenID or SRP all of which have no lifetimes, it must be possible for
> the rxgk service administrator to specify what the lifetime policy is
> going to be.
>

Per Russ' follow-up to this, we cannot realistically make any strong 
statement at the level of the rxgk specification document.  If we want to 
get into a more detailed discussion of these issues, it should probably 
belong on an application-specific list, e.g., openafs-devel.

> The way I view the distinction is between authentication and
> authorization.
> The authentication occurs at the point when the authentication
> credential
> is presented to the rxgk service.  At that point the rxgk service can
> refuse
> to issue the token or not.  Once the token has been issued, the entity
> has
> been authenticated to the cell.  From that point forward what are made
> are authorization decisions not authentication decisions.  The validity
> of
> the authorization information is application specific.
>
> For example, the valid lifetime of an SSH connection is not determined
> by the lifetime of the Kerberos ticket when GSS authentication is used.
> The lifetime of the connection is determined by the policy enforced by
> the SSH service.

Indeed.  But that original kerberos ticket cannot create a new SSH 
connection once it is expired, even as the existing SSH connection 
remains.

I think we can only make a weak statement in this document, and proposed 
as such in my commit:
        <t hangText="expiration">The time, expressed as an rxgkTime, at which
-       this token expires.</t>
+       this token expires. The expiration time MAY be set administratively
+       by the server, and SHOULD reflect the expiration time of the
+       underlying GSSAPI credential.</t>

The server application has freedom to lower, or increase, the expiry time 
of the underlying credential, but should take that underlying credential 
into account as appropriate for the application.

-Ben