在mobile app上較OAuth/OIDC安全的authentication protocol design

前言

在上篇 OAuth/OIDC在mobile app生態上是防不勝防的security漏洞 提及到,OAuth/OIDC那種做法的flow是近乎不可能保障mobile app usage的生態安全。
其實關鍵問題在於,整個authentication過程中,是需要使用login username/password,從而無可避免被惡意agent capture credential。

Redesign?

那要根本地解決,就可能需要重新設計一個針對mobile app的authentication flow,而當中避免在login過程中需要到login credentail。其中一個可行做法,就是web-pre-authentication。

Web-pre-authentication + mobile app device one time registration

我所謂的web-pre-authentication的意思是,把authentication先在web application上安全地做好。
繼而在mobile app install的時候,就只需要做一次one time device registration就可以讓mobile app以後能自動登入。
這樣的design就能避免mobile app在runtime時login的危險流程。
而另一個關鍵位就是如何把identiy/token之類從安全的web side轉移到相對不安全的mobile app環境之上。

web-to-mobile的implementations

這web-to-mobile的流程,我至少設想到三個implementation flow,而三種flow各有長短,分別能support不同use case。

1) scan QR code
2) Manually input code
3) Server push code

實際上這些flow都有些特別針對security的tricky design考量過,但也許遲些我有時間劃一些flow diagram/sequence diagram,才能比較好的去說明整個design。

OAuth/OIDC在mobile app生態上是防不勝防的security漏洞

前言

我平時都有留意開做Single Sign On既方法,而之前有看過OAuth2同OpenID Connect(OIDC),我亦都寫過幾個post去討論。
web application上應用OAuth2/OIDC是基本上沒太大安全問題的,但在mobile app上的應用其實就可能對生態構成security漏洞。
 
昨天突然想通了一些東西。
mobie app與web application的分別其實在於agent。

mobie app與web application分別在於agent

web application的use case,agent就是browser(e.g: firefox/chrome)。
而mobile app的use case,agent就是mobile app本身,相對地是不可靠的。
 
打個比喻,如果是web application的use case,而現在你使用一個極可疑的malicious browser去進行OAuth/OIDC flow。
那肯定會有安全問題,因為malicious browser是可以capture你的login password。
(一般情況下user是用正常firefox/chrome就不會有問題,因為它們內置了很多安全機制去保護end user。這就是為什麼web application usage是基本上安全。)
換句話說,只要agent是compromised/malicious,其實就很難做到security protect。因為單單是只要在過程中用到過password,都可能被惡意agent capture,從而出現安全問題。
 

惡意mobile app的可行設計

例如,mobile app就可以這樣做一個惡意app:
mobile app表面上假扮進行OAuth (假設是使用Facebook login),實際上其實是一個模仿facebook login page的假的browser UI。
在login過程中,這mobile app就偷偷的capture user login name/password,並使用proxy方法進行login。
結果就是end user在不知情的情況下login而login password被偷取了。

結論

明白到關鍵位是agent,而mobile agent就是mobile app本身,所以我結論就是,基於desgin問題,OAuth/OIDC那種做法的flow是近乎不可能保障mobile app usage的生態安全。

對mobile app開發的想法:Mobile App as Web App in App Container

坊間有一些 HTML5+JS 的 hybrid app framework,例如 nativescript[1]﹑PhoneGap[2]。
市面流行這些 thirdparty library 說明了他們的存在價值——不同 mobile os+web app 的三重開發環境,增加了很多開發成本(X3)和知識碎片問題。

我對 mobile app 開發有個想法,就是 mobile app 開發不應再以 native code 為重心,而應轉移成 web app 開發模式。我認為 Google/Apple 可以在 framework to developer 層面拋棄 native code,而改用 HTML5+Javascript 為主,而把一些 native function 打包成 JS library API。將 mobile app 的概念由 “mobile app in app container” 轉變成 “mobile app as web app in app container” 的模式。

具體一點的去說,就是 OS framework 做一個 browser container;container 會像 browser 一樣 render 那個 mobile app,一切 app 的流程就像在 browser 下運行網頁一樣。這種 web app in app container 概念,實際上能令開發得益的,是其 architecture﹑logic flow 的一致。當 mobile app 變成 web app,而主要不同的只是 container 的話,那麼在應用開發上,就只需做一個 web application,然後調教少許就能應用在 mobile app 之上了。

(但其實,hybrid app framework 與我提出那種 “web app in app container” 概念上又有些差別。)

就算不往我提出的這種極端方向發展,G/A也應該好好想想,去製訂一套共同標準出來。 mobile app 興起至今也有好幾年了,生態上的發展﹑feedback 是否已有足夠資料讓G/A廠去想想未來下一步的開發生態要怎樣走?

Reference:
[1] https://www.nativescript.org/
[2] http://phonegap.com/