前一陣子歐巴馬與希拉蕊兩人的較勁,媒體熱烈報導的程度,似乎讓人有台灣已經成為美國一州的錯覺。隨著歐巴馬的暫時獲勝,話題也開始轉移到另一對的候選人。其中美女副總統候選人-斐琳(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."
相關連結:
搜尋此網誌
2008年9月22日 星期一
2008年9月11日 星期四
令人又愛又恨的密碼
在前幾篇的文章中,我談到有關密碼的議題。不管你認為密碼是不是一個好的安全機制,現實是每個人每天都會用到許多不同的密碼。其中當然有許多是在網站上使用,另外像是提款卡等等,也都需要用到密碼。有不少文章談到如何選取一個"好的"密碼,但是卻很少人提到如何選取數個甚至數十個良好的密碼。所謂良好的密碼在實務上有一個最重要的考量,那就是很難被猜到但是同時你卻必須能夠加以記憶。有人提到可以採用圖像記憶法,將密碼轉換為圖像,這樣就可以方便記憶。但是此法或許對於純數字的密碼還可行(只有10種圖形),但是如果包含英文字母(大小寫),再加上特殊符號,我想這麼複雜的圖形對應關係,光聽到就嚇死一堆人了。
所以,我們可以採用瀏覽器的記憶功能、使用密碼管理的軟體、或是使用像是PwdHash這類瀏覽器的外掛,來減輕你必須記憶這麼多密碼的困境。但是不管理用甚麼方法,幾乎都有一個很大的問題,那就是不能隨時、隨地都有效地加以應用。瀏覽器的記憶功能,不同的瀏覽器、不同的電腦之間不互通。密碼管理的軟體,不是隨時帶著跑,也不是隨時都有電腦可以使用。PwdHash,雖然我自己蠻喜歡使用的,可惜只能在Firefox內加以使用,IE沒轍,Safari也沒轍。就算你用線上的密碼管理軟體,同樣不是隨時隨地都能連線(至少現在還不是),而且每次打密碼都要開啟服務,你不累嗎?真正能夠隨時隨地幫助你的工具,只有你的腦袋。好吧,至少在大部分正常的情況下,你的腦袋應該是最值得信賴的工具。
其實我們也別太偷懶,想要真的擺脫記憶密碼的困擾。因為研究報告顯示,當人們因為依賴科技而減少腦部的使用,只會越來越笨。所以記憶適當的密碼,不但是必要的,而且對腦部的健康也是有幫助的。所以,密碼不僅是資訊安全的好朋友,更是預防記憶力衰退的良方之一。當然,更別偷懶得想要用自己的個人資料(如生日)當作密碼,否則當你哪天想要競選美國的副總統時,可能就是下一個引起駭客好奇心的受害者了。
相關連結:
所以,我們可以採用瀏覽器的記憶功能、使用密碼管理的軟體、或是使用像是PwdHash這類瀏覽器的外掛,來減輕你必須記憶這麼多密碼的困境。但是不管理用甚麼方法,幾乎都有一個很大的問題,那就是不能隨時、隨地都有效地加以應用。瀏覽器的記憶功能,不同的瀏覽器、不同的電腦之間不互通。密碼管理的軟體,不是隨時帶著跑,也不是隨時都有電腦可以使用。PwdHash,雖然我自己蠻喜歡使用的,可惜只能在Firefox內加以使用,IE沒轍,Safari也沒轍。就算你用線上的密碼管理軟體,同樣不是隨時隨地都能連線(至少現在還不是),而且每次打密碼都要開啟服務,你不累嗎?真正能夠隨時隨地幫助你的工具,只有你的腦袋。好吧,至少在大部分正常的情況下,你的腦袋應該是最值得信賴的工具。
其實我們也別太偷懶,想要真的擺脫記憶密碼的困擾。因為研究報告顯示,當人們因為依賴科技而減少腦部的使用,只會越來越笨。所以記憶適當的密碼,不但是必要的,而且對腦部的健康也是有幫助的。所以,密碼不僅是資訊安全的好朋友,更是預防記憶力衰退的良方之一。當然,更別偷懶得想要用自己的個人資料(如生日)當作密碼,否則當你哪天想要競選美國的副總統時,可能就是下一個引起駭客好奇心的受害者了。
相關連結:
2008年8月19日 星期二
沒有用的老朋友 - 談密碼的安全性
密碼,在安全機制上扮演一個極為重要角色的老朋友,也是大家幾乎天天都會用到的技術。密碼雖然很方便,但是同時也有很多問題存在。其中一個最常被談到的議題就是密碼本身過於簡單,以導致輕易地被惡意人士猜出。另外一個就是如何安全地存放密碼的議題。存放的議題主要發生在兩個地方,一個是使用密碼的人,另一個用來檢查密碼的系統。如果其中一方沒有保管好密碼,那麼選擇再好的密碼都沒有用。有關這些議題,已經有太多相關的資料加以討論,在此我不多贅述。倒是前幾天the New York Times發表了一篇文章,認為密碼應該被全面淘汰,改用Information Card這類較安全的驗證機制。理由很簡單,因為即使你選了再好的密碼,因為目前大多認證機制與流程的不良,所以還是一樣不安全。
基本上,大部分的說法我都能理解與接受。密碼使用上確實存在很多問題,但是其中包含技術性與非技術性的原因。用文章中舉例的Information Card機制,甚至是更安全的雙重因素驗證(Two-Factor Identification),也僅能解決技術性的問題(通常還不是完全解決),對於非技術性的問題可就沒多大的效用了。而且採用了新的機制,通常也會伴隨衍生新的問題,這個就是所謂的二次風險。至於文章中提到的另外一項SSO(Single Sign-On)技術-OpenID,那就更不用說了。因為SSO的Sign-On本身要怎麼做才不會有弱點,還有不同系統之間怎麼安全地傳遞身分,同樣是挑戰之所在。
所以,首先的重點是儘管密碼安全性不高,卻是目前最方便且簡單的機制。所以如果你的系統並沒有很高的安全性需求,用密碼絕對是首選。當然,這時候要搭配的是良好密碼的選擇與使用,以及安全的認證機制設計與實作。後者正是目前大家在談的Application Security的一環。但是如果你的系統有很高的安全性需求,除了採用更安全的技術外,更重要的還是整體的設計與實作。如果沒有正確的設計與實作,再好的技術也將漏洞百出。
不管是甚麼安全機制都應該遵守這些原則,那就是依據需求找出適用的方法(技術),並正確的加以規劃(設計)與佈署(實做)。當然,事後的評估與改進也是必要的。不過,那已經不在今天我討論的範圍了。
如果我們再將問題往前看,我們要解決的是使用者驗證的問題還是如何讓使用者安全地使用網路的問題。或者說,使用者真正關心的是前者還是後者的問題?我相信大多數使用者真正關心的是後者的問題。所以如果要提出一個真正的解決方案,應該是盡量針對後者才是。而後者就需要很不一樣的解決方法。正所謂問的問題不一樣,想到的解答也不一樣。當然,這個論述跟原始的文章並沒有很直接的關連,而是跟我們平常在面對客戶的需求有關。客戶的問題是甚麼,有時候不是大家說了算,問題背後真正的問題,是不是已經被發現了,還是用了正確的技術解決了錯誤的問題而導致徒勞無功。更甚者,我們是在解決技術的問題還是需求的問題,兩者之間的分別可千萬別搞混了。
原文出處:
基本上,大部分的說法我都能理解與接受。密碼使用上確實存在很多問題,但是其中包含技術性與非技術性的原因。用文章中舉例的Information Card機制,甚至是更安全的雙重因素驗證(Two-Factor Identification),也僅能解決技術性的問題(通常還不是完全解決),對於非技術性的問題可就沒多大的效用了。而且採用了新的機制,通常也會伴隨衍生新的問題,這個就是所謂的二次風險。至於文章中提到的另外一項SSO(Single Sign-On)技術-OpenID,那就更不用說了。因為SSO的Sign-On本身要怎麼做才不會有弱點,還有不同系統之間怎麼安全地傳遞身分,同樣是挑戰之所在。
所以,首先的重點是儘管密碼安全性不高,卻是目前最方便且簡單的機制。所以如果你的系統並沒有很高的安全性需求,用密碼絕對是首選。當然,這時候要搭配的是良好密碼的選擇與使用,以及安全的認證機制設計與實作。後者正是目前大家在談的Application Security的一環。但是如果你的系統有很高的安全性需求,除了採用更安全的技術外,更重要的還是整體的設計與實作。如果沒有正確的設計與實作,再好的技術也將漏洞百出。
不管是甚麼安全機制都應該遵守這些原則,那就是依據需求找出適用的方法(技術),並正確的加以規劃(設計)與佈署(實做)。當然,事後的評估與改進也是必要的。不過,那已經不在今天我討論的範圍了。
如果我們再將問題往前看,我們要解決的是使用者驗證的問題還是如何讓使用者安全地使用網路的問題。或者說,使用者真正關心的是前者還是後者的問題?我相信大多數使用者真正關心的是後者的問題。所以如果要提出一個真正的解決方案,應該是盡量針對後者才是。而後者就需要很不一樣的解決方法。正所謂問的問題不一樣,想到的解答也不一樣。當然,這個論述跟原始的文章並沒有很直接的關連,而是跟我們平常在面對客戶的需求有關。客戶的問題是甚麼,有時候不是大家說了算,問題背後真正的問題,是不是已經被發現了,還是用了正確的技術解決了錯誤的問題而導致徒勞無功。更甚者,我們是在解決技術的問題還是需求的問題,兩者之間的分別可千萬別搞混了。
原文出處:
訂閱:
文章 (Atom)