Thursday, May 10, 2012

Over simplified graphical representation of OpenID Connect

The OAuth 2.0 authz code grant type defines how to use the browser to get an access token (blue) from the AS to the Client. The OAuth bearer spec defines how to then use that token on API calls to arbitrary endpoints.


OpenID Connect layers new pieces on top - the new ID_token and the UserInfo endpoint (both in orange). As before, the client (normally) leverages the browser as the means to obtain tokens. 

The Client consumes the ID_token and creates a session based on it. The Client uses the access token to call both the UserInfo and other API endpoints.


Wednesday, May 02, 2012

Paul Madsen continues with Ping Identity’s Office of the CTO


Identity Management Expert Paul Madsen continues with Ping Identity’s Office of the CTO
Respected Identity Advocate to Help Develop and Evangelize Next Generation of Standards Including OpenID Connect and OAuth
Ping Identity®, The Cloud Identity Security Leader™, today announced that Paul Madsen will remain in the company’s Office of the CTO as senior technical architect. In this role, he will continue to develop and evangelize the next generation of identity standards include OpenID Connect and OAuth.
“An active and well-respected member of the Identity community, Paul brings an in-depth understanding of interoperability and open standards to our team,” said Patrick Harding, CTO of Ping Identity. “This expertise directly aligns with Ping Identity’s standards-based approach to solving complex identity management challenges and makes him a natural fit for our expanding team.”

Thursday, April 26, 2012

A taxonomy of confusion

Axel Nennker pointed out on Twitter an OpenID implementation between Amazon & MyHabit.com.

A screenshot of the login page

My first reaction was that this was an example of the password anti-pattern, ie the user is being asked by MyHabit.com to present their Amazon credentials. 

Axel pointed out to me that this was actually an Amazon page and not a MyHabit page, but branded to look like a MyHabit page - in Axel's words

So it's not password anti-pattern, because MyHabit never sees the user's credentials.

But it is, to my mind, misleading, because the MyHabit branded login page may make it feel to a user like they are presenting their Amazon password to MyHabit. 

It's not password anti-pattern, its the 'anti password anti-pattern'.

A taxonomy is called for








Wednesday, March 21, 2012

Holy sh&t, this stuff is real

Logged into my Ping WebEx on Android without presenting my Ping credential to anybody but Ping.

Screenshots follow

Instead of authenticating directly to the client, I select 'Sign in through your corporate website'


I knew this from URLs


I even got my first password attempt wrong - this is no cardboard demo!!


I'm in. Now I can avoid meetings with @weeunquietmind even when mobile!!



Wednesday, March 07, 2012

Authentication options for mobile native email apps


Update: Travis Spencer pointed out that the model I describe below as 'horrible', where the email app collects the enterprise password and uses it on each IMAP call, has advantages - key of which are that it creates no new password and can work with existing email clients. I defend my disgust due to the undesirability of storing the enterprise password on the device
----------------------------------------------

Inspired by a customer conversation, and mindful that (most but sadly not all of) my Ping colleagues take great enjoyment from my taxonomizing, I describe here the different permutations by which an enterprise employee can be authenticated when using a native mobile application client of a SaaS email provider (instead of a browser interface).

Note: although presented in the context of email, the various permutations are relevant to any native SaaS application.

The different options can be characterized by

  1. Which entity issued (and will subsequently validate) the password used for authenticating the employee –the enterprise or the email provider 
  2. How that password is used, ie where does the employee type it in – an enterprise login page, an email provider login page, or the native email application

The resulting combinations have very different security characteristics, discussed below.

Enterprise password presented to enterprise login page

This is the ideal from a security PoV – the employee continues to use only their existing enterprise password, and presents that password only to the enterprise itself. Additionally, if the authentication happens at the enterprise, then stronger authentication than password is possible.

But if the actual authentication happens at the enterprise, then necessarily the fact of that needs to be communicated to the email provider – this requirement satisfied by SAML SSO.

The scenario is show below



The interaction between the email application on the phone and the email provider is shown as happening via OAuth. Strictly speaking (and especially if the email provider builds their own native app) this is not necessary.

The above presumes that the IMAP exchange between the email app and the email provider is authenticated by OAuth tokens, rather than passwords (the current reality). Google led some work in 2010 defining just such a binding but it’s not clear if that has progressed.

This scenario is attractive because

1.     The employee has no new email-specific password to remember
2.     The employee presents their enterprise password only to the enterprise

Note that the SAML SSO step need happen only infrequently (based on enterprise policy) because the token(s) issued down to the native email client can have a long lifetime. One consequence of long-lived tokens is that, should the enterprise wish to cut off acccess to the employee’s email, they must actively reach out and delete the corresponding account at the email provider – using SCIM or equivalent.

Enterprise password presented to SaaS login page

Instead of relying on SAML SSO as the means of authenticating the employee to the email provider, the email provider could collect the employee’s enterprise credential itself, and then validate that password with the enterprise.

This is shown below



While the employee need not remember a new password specific to email, the email provider will know the employee’s enterprise password, and could misuse it if so inclined.


Enterprise password presented to email app


The above scenario had the employee present their enterprise password to the email provider in a web page (with attendant security issues). Even worse is to have the employee present their enterprise password directly to the email application – this then validated back at the enterprise.

This scenario is shown below



While this scenario leverages the existing enterprise password, it does so at the cost of having the employee share it with the email application – setting a possible precedent in the employee’s mind that could be leveraged in a phish.

A variant of the above would have the email app store the enterprise password, and use that on the IMAP calls, rather than a token issued off the password. As for above, the email provider would validate that password at the enterprise. This scenario is to horrible to even contemplate and I’ll not mention it again.

Email password presented to enterprise login page

Any taxonomy inevitably has some nonsensical corners and this scenario is one such – as it implies the employee be issued an email provider specific password, but present it to their enterprise for subsequent validation at the email provider. Which is crazy.

Let’s move on.

SaaS password presented to SaaS login page


This scenario is shown below



The above  of course implies that the employee be issued (and must remember) a new password specific to the email provider.

SCIM supports the provisioning call by which the enterprise would manage the password at the email provider.

As before, the above presumes that IMAP has been tokenized, ie OAuth tokens (or equivalent) can be used in pace of the email password itself.

Revocation would require the enterprise actively delete the email provider account (or equivalent, change the password) with a SCIM delete user call (or proprietary equivalent).

Email password presented to email app

If, instead of presenting the email specific password to the email provider in a login page, the employee presented the password directly to the email app, we end up to the scenario shown below



As for the previous scenario, the enterprise pushes a password over to the email provider in an a priori provisioning step.

Although the employee will have a new password, it’s likely that they would initially provide it to the email app and never see it again. Once exchanged for a token(s), the email application would not store the password (or hopefully wouldn’t).

A variant of the above would have the email application present the password on each and every call to the email provider to retrieve mail, rather than an equivalent token.

While far from ideal, this scenario is the current reality. This is, for instance, how Ping employees access Gmail using 3rd party email apps (like Thunderbird on Android). Google’s own GMail app supports a model more like the first.

Summary

The above is summarized graphically as



where the colour-coding represents (my) assessment of how optimal the authentication model is – green being good, red bad, and orange in the middle.

 

 

 

Tuesday, March 06, 2012

In BYOD We Trust?

Brian Katz argues that, if you are focused on protecting enterprise data rather than the devices that that that data might be sitting on, then BYOD isn't such a big deal - because the device itself fades into the background and so whether the employee bought it or the enterprise did doesn't matter.

Feels similar to the enterprise not stipulating that employees MUST install a home security alarm system if they are bringing corporate data home on weekends.

Things are alot simpler with a shift in focus to the data rather than the device. Here's my list of security requirements
  1. Ensure that mobile apps can access only enterprise data appropriate to the employee using it
  2. Protect data in transit
  3. Protect data at rest
  4. Delete data when necessary
Things are even simpler if you don't allow the apps to store data on the device - #3 and #4 go away (and the MDMish implications). Trade-off is not allowing your CEO to adjust fonts on PPTs while in the air.

(Of course, 'not allowing apps to store data on the device' probably means tinkering with the binary.....)

#2 is easy.

#1 implies that the app, in requesting data from enterprise or cloud servers, can somehow indicate to the server the employee in question. More and more, OAuth 2 is the default choice for achieving this. The native application gets an OAuth token that reflects the employee's identity & roles, and presents that token on a RESTful API call to get data.

Consequently, #1 is really about ensuring that
  1. the application can securely obtain a token that reflects the employee's identity 
  2. the API can make the right authorization decision when it sees that token included on API calls
Consequently, as much as I love the BYOD acronym, I agree with Brian that it likely has a short lifetime.








Monday, December 12, 2011

Callback security in mobile OAuth 2.0

OAuth 2.0 defines how mobile native applications can obtain an access token from an Authorization Server – this token used on calls to the API behind which sits the application data (e.g. their calendar, their TripIt data , etc) that the native application seeks.

Obtaining the first access token typically happens via the browser – the sequence

1)    The user indicates they wish to ‘authorize the app’ or equivalent
2)    the native application pops an external browser window and loads the AS login page
3)    the User logs into the AS (and may be asked for their consent for that native application to be able to access particular resources)
4)    if successful, the AS redirects the browser to a specified callback URL, including in the redirect URL an ‘authorization code’
5)    The browserpasses the authorization code to the native application
6)    The native application sends the authorization code back to the AS, and is returned the desired access token (as well as optionally a refresh token, which the native application can use going forward to get new access tokens)

Step 5 in the above might have caused you to wonder just how exactly does the browser, after grabbing the code from the callback URL, pass it to the native application?

Good question.

One emerging best practice is to leverage the mobile OSes (Android & iOS at least) support for custom schemes as a means of inter-application messaging. When the native application is installed, it registers itself as the handler for URLs of a particular scheme (just like the browser handles HTTP URLs, and the markets have their corresponding schemes).

Below is the Android manifest for an app registering itself as the handler for the 'coolmobileapp' scheme.

<activity android:name=".AppActivity" android:label="@string/app_name">
            <intent-filter>
                <data android:scheme="coolmobileapp" android:host="cma.ex.com" /> 
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.BROWSABLE" />
                <category android:name="android.intent.category.DEFAULT" />  
            </intent-filter>
</activity>


Once registered as a handler for a given scheme, whenever the OS sees a URL in that scheme, it will pass that URL to the application.

If then, the callback URL that the AS redirects the browser to belongs to a scheme that the relevant native application ‘owns’, then the browser, upon seeing that URL, will pass it onto the OS for appropriate forwarding to the app.

Once the native application is passed the URL, it can grab the authorization code, and use it to obtain the desired tokens.

The hitch in the above mechanism is that nothing prevents multiple native applications from registering themselves as the handler for a given URL scheme. If you have multiple browsers installed on your phone you will have seen how Android deals with multiple such handlers – it asks the user which to use for a given URL (unless a default is set). Nothing in the OS prevents such collisions, nor mediate conflicts other than this user query mechanism.

Consequently, it is theoretically possible for a rogue application to lay claim to the very same custom scheme handler as a valid native app with the hope that it would obtain the authorization code as part of the OAuth authorization process rather than the valid & appropriate app.

In the next installment, I will present ideas as to how to mitigate the above callback attack - based on discussions with my Ping colleagues Scott Tomilson, Travis Spencer, and Brian Campbell (to be fair, Brian has contributed very little).