搜尋此網誌

2008年9月22日 星期一

方便不是犧牲安全的藉口 - 談網站密碼重置的功能

前一陣子歐巴馬與希拉蕊兩人的較勁,媒體熱烈報導的程度,似乎讓人有台灣已經成為美國一州的錯覺。隨著歐巴馬的暫時獲勝,話題也開始轉移到另一對的候選人。其中美女副總統候選人-斐琳(Palin),同樣有不少的爭議與話題。而她這幾天的話題之一,就是有人透過很簡單的手法,侵入了她在Yahoo的信箱,透過的方式就是密碼重置的功能。

密碼重置,不管在大大小小的網站,幾乎都會看到,原先的出發點是為了避免使用者忘記了當初設定的密碼。網站的提供者希望透過此一機制可以讓使用者在最方便的情形下取得密碼並繼續使用系統。當然,有些不是採用重置的機制,而是將原先設定的密碼傳給你。兩者誰比較安全,以正常的情形下,將原先的密碼寄給你是比較不安全的,因為這表示該系統將你的密碼儲存於系統中,也表示一旦系統出了問題,你的密碼外洩的機率就很高(不管密碼是不是經過加密)。當然,這個只是一個粗略的說法,因為密碼安不安全還有很多的因素需要考慮。而且在不取得密碼的情形下,駭客還是有辦法竊取你的資料,甚至是假冒成你。

這樣的想法其實是好的,但是有太多網站的密碼重置機制充滿了漏洞,因此反而提供了駭客絕佳的入侵管道。以常見的手法,就是詢問你一些私人的問題,只要正確回答就可以重置密碼。有些甚至可以指定要將新的密碼寄到哪個電子郵件信箱,或者是顯示於網頁上。而有些則可以由使用者自行決定新的密碼。也就是說,只要你猜到了這些私人問題的解答,你就可以為所欲為。有些網站讓使用者可以自訂私人的問題,而不是採用事先決定的問題。這樣作其實沒有太大的幫助,原因在於一般使用者對此功能的危害根本就沒有認知,甚至認為這麼方便的機制應該是採用簡單的問題才不會辜負網站提供者的好意。所以,一樣是充斥著簡單的問題。而在Google盛行的現在,很多私人問題早已不是秘密,尤其對越具備知名度的人來說越是如此。

從事安全相關產業的人常說,方便跟安全是衝突而必須有取捨的。是的,這樣說在大部分的情形並沒有錯。只是這句話我們應該解讀為在不影響方便的情形下,設計出"最"安全的系統。或者是盡量設計出安全但不影響方便性的系統。這裡所謂的"不影響"指的是使用者可以接受的範圍。兩者的差別只在於由哪一個因素當作出發點,不過如果確實落實,結果應該是一樣的。以數學的方式來說,就是如何找出兩個反比因素的交叉點。但是,這並不像一般反比的例子那麼簡單,因為安全與方便性是很難量化的,而且在不同的環境下有不一樣的比重與最小可接受值(也就是有時候交叉點並不是可以接受的設計)。當然,現在有所謂安全的設計開發流程。但是即使將安全的議題放大,也千萬別因為安全而犧牲了使用性。在大部分的情形下,沒有使用性的系統,是沒有任何價值的。而沒有價值的系統,其實也沒有安全的需求。所以兩者對一個可用的系統來說都是重要的,要怎麼取捨是需要同時兼具理性的作法與智慧的判斷。不過無論如何,這句話絕對不是系統設計/開發人員用來推卸安全責任的藉口,雖然這樣的例子實在太多了。

除了密碼重置的功能,有些網站還有密碼提示的功能,對密碼的安全同樣也是一大挑戰。事實上,很多系統將密碼/登入機制做了很嚴格的把關,但是卻讓一些不安全的方便機制嚴重破壞了系統的安全性。要在自己的家開一個或多個逃生的後門沒關係,但是千萬別讓後門成了小偷進入的方便門。道理大家都懂,就看怎麼落實到資訊系統上面了。

那麼我們應該怎麼設計一個安全的密碼重置機制,在"The Web Application Hacker's Handbook"一書有提到(我直接截錄原文,以免翻譯失了原味):

"The best automated solution for enabling users to regain control of account is to email the user a unique, time-limited, unguessable, single-use recovery URL. This email should be sent to the address that the user provided during registration. Visiting the URL will allow the user to set a new password. After this has been done, a second email should be sent, indicating that a password change was made. To prevent an attacker denying service to users by continually requesting password reactivation emails, the user's existing credentials should remain valid until such time as they are changed."


相關連結:

沒有留言:

張貼留言

About