Re: [OAUTH-WG] Native clients & 'confidentiality'

Paul Madsen <paul.madsen@gmail.com> Mon, 19 December 2011 20:11 UTC

Return-Path: <paul.madsen@gmail.com>
X-Original-To: oauth@ietfa.amsl.com
Delivered-To: oauth@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 7509F11E80B9 for <oauth@ietfa.amsl.com>; Mon, 19 Dec 2011 12:11:33 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -3.598
X-Spam-Level:
X-Spam-Status: No, score=-3.598 tagged_above=-999 required=5 tests=[BAYES_00=-2.599, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-1]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 2vOW0wF6grpn for <oauth@ietfa.amsl.com>; Mon, 19 Dec 2011 12:11:29 -0800 (PST)
Received: from mail-ww0-f44.google.com (mail-ww0-f44.google.com [74.125.82.44]) by ietfa.amsl.com (Postfix) with ESMTP id BE5CA11E809D for <oauth@ietf.org>; Mon, 19 Dec 2011 12:11:28 -0800 (PST)
Received: by wgbdr13 with SMTP id dr13so8628690wgb.13 for <oauth@ietf.org>; Mon, 19 Dec 2011 12:11:28 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=message-id:date:from:user-agent:mime-version:to:cc:subject :references:in-reply-to:content-type; bh=szBMxwpUHE2BeILLE32jR2N4U5zVoxH9CWTVR0q371I=; b=Mo0sD/UVA2NzKIM0fsSGTZanvgfkQQsakvOc7nSQZ98kw6wIRwN5dexg5QNldRL5Am biwIp6yUO2dNX4v+9jdokNrRqjoSewpMr/pjVckybjhMMRQFRu/Jmf5a3XG/5DwczxQt y4k2Azluv+kGO1EWMr3ZAPd8j2D7YK1nP8ido=
Received: by 10.227.207.205 with SMTP id fz13mr13460488wbb.0.1324325487852; Mon, 19 Dec 2011 12:11:27 -0800 (PST)
Received: from pmadsen-mbp.local (CPE0022b0cb82b4-CM0012256eb4b4.cpe.net.cable.rogers.com. [72.136.168.159]) by mx.google.com with ESMTPS id ep13sm26994887wbb.8.2011.12.19.12.11.24 (version=SSLv3 cipher=OTHER); Mon, 19 Dec 2011 12:11:26 -0800 (PST)
Message-ID: <4EEF9A6B.7070307@gmail.com>
Date: Mon, 19 Dec 2011 15:11:23 -0500
From: Paul Madsen <paul.madsen@gmail.com>
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:8.0) Gecko/20111105 Thunderbird/8.0
MIME-Version: 1.0
To: George Fletcher <gffletch@aol.com>
References: <4EEF2BC4.7020409@gmail.com> <4EEF77E7.6030808@mitre.org> <4EEF7DEF.6090009@gmail.com> <4EEF8C2A.8030205@aol.com>
In-Reply-To: <4EEF8C2A.8030205@aol.com>
Content-Type: multipart/alternative; boundary="------------050300080706050308080001"
Cc: oauth@ietf.org
Subject: Re: [OAUTH-WG] Native clients & 'confidentiality'
X-BeenThere: oauth@ietf.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: OAUTH WG <oauth.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/oauth>, <mailto:oauth-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/oauth>
List-Post: <mailto:oauth@ietf.org>
List-Help: <mailto:oauth-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/oauth>, <mailto:oauth-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 19 Dec 2011 20:11:33 -0000

Hi George, inline

thanks

paul

On 12/19/11 2:10 PM, George Fletcher wrote:
> Hi Paul,
>
> Is the need to authenticate the client a need to ensure that the 
> content is only displayed on certain devices/clients? Or prevent 
> phishing/stealing of authz bearer tokens?
I'm not best qualified to answer but I believe it's the latter, ie not 
DRM motivated
>
> As you point out, it's possible to protect the bearer tokens and 
> associated refresh tokens "via other mitigating mechanisms". I'm not 
> sure it's possible to authenticate the device/client with out the 
> device/client having some special "hardware" that can be leveraged in 
> the authentication step.
are you referring to a 'bootstrap' problem?
>
> Even dynamic registration doesn't solve the security issues (the 
> device/client can still be disassembled and associated values 
> discovered) of the device/client, just mitigates the exposure risk. 
> However, this does cause increased work for the AS as it will now be 
> tracking each and every device as a unique client. It's also likely 
> for the device registration steps to be discovered, in which case 
> restricting to a particular device again fails.
yes, but as you imply an attacker will only access those credentials 
specific to that particular copy of the native client. Hopefully too 
much work to be able to see Glee Season 2.

Can you clarify what you mean about the device registration steps being 
'discovered'?
>
> It seems like trying to bind the bearer token to a device/client 
> instance might be a better approach. That way you know that the 
> customer correctly authorized that device/client instance and it is 
> "allowed" to present the bearer token. Of course enforcing/proving the 
> "allowed" part sort of breaks the "bearer" part:)
yeah, how do we bind a bearer token to anything? :-) Doesnt that by 
definition take us towards MAC?


>
> Thanks,
> George
>
> On 12/19/11 1:09 PM, Paul Madsen wrote:
>> Thanks Justin, FWIW, I agree with your analysis
>>
>> Seems to me we have the following breakdown of clients
>>
>> - confidential server clients
>>
>> - confidential native clients (somewhat theoretical at the moment, 
>> assumes either 1) a client registration mechanism to deliver 
>> credentials post installation, such as OpenID Connects Client 
>> Registration spec, or 2) a distribution channel in which uniquely 
>> credentials can be packaged into the binary before delivery)
>>
>> - public clients (no option of client authn, but still possible to 
>> have some protection against token leakage via other mitigating 
>> mechanisms)
>>
>> thanks again
>>
>> paul
>>
>> On 12/19/11 12:44 PM, Justin Richer wrote:
>>> Native mobile clients can't really be confidential clients.
>>>
>>> The distinction between "public" and "confidential" clients is 
>>> whether or not they can keep deployment-time secrets; which is to 
>>> say, a client_secret. This is not to say that they can't keep *any* 
>>> secrets. In particular those generated at runtime, like an access 
>>> token or refresh token, could be held perfectly safe. But at the 
>>> time the app is deployed to its running environment, you have to ask 
>>> "who has access to its code and configuration?"
>>>
>>> Think of it this way. In the standard world, a native app gets 
>>> copied to every device with the client_id and client_secret baked 
>>> in. This makes the client_secret not very secret, and not at all 
>>> unique. Anybody with access to the binary -- which is to say, every 
>>> user -- could decompile the client_secret out of it and bake it into 
>>> their *own* client, pretending to be your app and causing all kinds 
>>> of havoc. This is a very different problem from somebody breaking 
>>> into the token store and stealing an access token, which lets them 
>>> only get to their own account.
>>>
>>> Compare this to a server-based app where the only ones with access 
>>> to the binary and configuration are the administrators of the 
>>> server, not the end users. It's a much more limited list of folks 
>>> that can potentially see it, and therefore the client_secret can 
>>> actually mean something and add a small extra layer of security.
>>>
>>> There are a few ways to mitigate this difference for public clients, 
>>> such as using some kind of dynamic registration for all clients 
>>> (which doesn't buy you much in terms of overall security) or putting 
>>> up scary messages about native clients to try and educate your 
>>> users. You can also use a trusted callback URL for your app on a 
>>> hosted website that works in conjunction with your native app. This 
>>> is actually the suggested use for the Implicit Flow, which was made 
>>> for public clients in the browser.
>>>
>>> Native apps also have the concern of embedded browsers vs. external 
>>> native browsers, and what trust the user puts into them. For all 
>>> OAuth flows, you have to trust the browser provider on the platform 
>>> of choice, since the user's going to be logging in directly through 
>>> that browser. It's very much outside the scope of OAuth to make that 
>>> world any better though, and there have been long and detailed 
>>> discussions on this list about that very topic, leading to some 
>>> concrete recommendations in the draft as it stands today.
>>>
>>> To answer your original query: I don't think that mandating one kind 
>>> of client vs. the other will really help. OAuth 1.0 only had 
>>> "confidential" clients, and that led to inane workarounds like 
>>> Google's "anonymous/anonymous" client id/secret.
>>>
>>> Hope this helps.
>>>
>>>  -- Justin
>>>
>>> On 12/19/2011 07:19 AM, Paul Madsen wrote:
>>>> Hi, the Online Media Authorization Protocol (OMAP) is a (as yet 
>>>> unreleased) profile of OAuth 2.0 for online delivery of video 
>>>> content based on a user's subscriptions (the TV Everywhere use case)
>>>>
>>>> We want to support both server & native mobile clients. It is for 
>>>> the second class of clients that I'd appreciate some clarification 
>>>> of 'confidentiality' as defined in OAuth 2.
>>>>
>>>> OAuth 2 distinguishes confidential & public clients based on their 
>>>> ability to secure the credentials they'd use to authenticate to an 
>>>> AS - confidential clients can protect those credentials, public 
>>>> clients can't.
>>>>
>>>> Notwithstanding the above definition, the spec gives a degree of 
>>>> discretion to the AS
>>>>
>>>>     The client type designation is based on the authorization server's
>>>>     definition of secure authentication and its acceptable exposure
>>>>     levels of client credentials.
>>>>
>>>>
>>>> Give this discretion, is itpractical for the OMAP spec to stipulate 
>>>> that 'All Clients (both server & native mobile), MUST be 
>>>> confidential', ie let each individual OMAP AS specify its own 
>>>> requirements of clients and their ability to securely authenticate?
>>>>
>>>> Is this consistent with the OAuth definition of confidentiality?
>>>>
>>>> Thanks
>>>>
>>>> Paul
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> OAuth mailing list
>>>> OAuth@ietf.org
>>>> https://www.ietf.org/mailman/listinfo/oauth
>>>
>>
>>
>> _______________________________________________
>> OAuth mailing list
>> OAuth@ietf.org
>> https://www.ietf.org/mailman/listinfo/oauth
>