密碼設置需避開(kāi)哪些(xiē)雷區(qū)?. 2019-06-05
當今互聯網給人(rén)們的生(shēng)活帶來(lái)便利的同時(shí),也讓網絡安全、信息安全成為(wèi)當下熱議的話(huà)題。比如,數(shù)據洩露問題或者密碼洩露問題都給大(dà)衆帶來(lái)了極大(dà)的擔憂。就密碼管理(lǐ)而言,如今許多(duō)公司都會(huì)制(zhì)定密碼管理(lǐ)策略,但(dàn)是在制(zhì)定密碼管理(lǐ)策略時(shí),會(huì)有(yǒu)哪些(xiē)常見的問題也需要引起高(gāo)度關注。
雖然現在身份驗證技(jì)術(shù)已經更加成熟,但(dàn)是密碼仍然是保護我們最敏感信息的主要途徑。密碼是防禦潛在入侵者試圖模仿另一個(gè)用戶的第一道(dào)防線,但(dàn)這樣的防護往往比較弱。用戶通(tōng)常想創建易于記憶的密碼,使用出生(shēng)日期或紀念日,甚至寫下來(lái)。開(kāi)發人(rén)員則想盡可(kě)能少(shǎo)地投入密碼管理(lǐ)策略中。畢竟,研發新功能比密碼管理(lǐ)和(hé)存儲更令人(rén)興奮、更有(yǒu)趣。
許多(duō)密碼本身安全性非常弱,很(hěn)容易猜得(de)到,攻擊者就會(huì)有(yǒu)機可(kě)乘。最糟糕的是,我們信任的密碼存儲系統和(hé)其它關鍵信息的系統也面臨着許多(duō)安全挑戰。黑(hēi)客會(huì)反複嘗試密碼數(shù)據庫進行(xíng)盜竊,攻擊者同夥經常會(huì)破壞那(nà)些(xiē)保護數(shù)據的模式。
我們探討(tǎo)一下公司在密碼管理(lǐ)策略方面做(zuò)出的一些(xiē)常見錯誤。讓在下面的討(tǎo)論中,我們将提到“在線攻擊”和(hé)“離線攻擊”。在線攻擊是對應用程序登錄頁面的攻擊,攻擊者試圖猜測用戶的密碼;離線攻擊是攻擊者獲取密碼數(shù)據庫副本,并嘗試計(jì)算(suàn)存儲在其中的用戶密碼的攻擊。
您已限制(zhì)用戶可(kě)以使用的字符數(shù)量或種類
- 推理(lǐ):安全人(rén)員反複告訴開(kāi)發人(rén)員驗證所有(yǒu)輸入以防止各種攻擊(例如,注入攻擊)。因此,根據某些(xiē)規則來(lái)制(zhì)定驗證密碼的規則必然是一個(gè)好主意,對吧(ba)?
- 攻擊:限制(zhì)密碼中字符數(shù)量或種類的問題是減少(shǎo)了可(kě)能的密碼總數(shù)。這使得(de)在線和(hé)離線攻擊更容易。如果我知道(dào)隻允許在密碼中使用特殊字符!和(hé)@,那(nà)也就是我知道(dào)用戶密碼都沒有(yǒu)包含#,$,%,<和(hé)>等字符。此外,如果我知道(dào)隻允許長度為(wèi)8到12個(gè)字符的密碼,我也就知道(dào)所有(yǒu)用戶都沒有(yǒu)使用13個(gè)字符或更長的密碼。如果我想猜測用戶的密碼,這些(xiē)規則可(kě)以讓我的工作(zuò)變得(de)更輕松。
但(dàn)是SQL注入、跨站(zhàn)點腳本,命令注入和(hé)其它形式的注入攻擊呢?如果遵循密碼存儲最佳做(zuò)法,您将在收到密碼後立即計(jì)算(suàn)密碼的哈希值。然後,您将隻處理(lǐ)哈希密碼,不必擔心注入攻擊。
- 防禦:允許用戶選擇包含任意字符的密碼。指定最小(xiǎo)密碼長度為(wèi)8個(gè)字符,但(dàn)在可(kě)行(xíng)的情況下允許任意長度的密碼(例如,将它們限制(zhì)為(wèi)256個(gè)字符)。
您在使用密碼組合規則
- 推理(lǐ):大(dà)多(duō)數(shù)用戶選擇容易猜到的密碼。我們可(kě)以通(tōng)過讓用戶選擇包含幾種不同類型字符的密碼,以強制(zhì)用戶選擇難以猜測的密碼。
- 攻擊:安全專業人(rén)員曾經認為(wèi),讓用戶選擇包含各種字符類型的密碼會(huì)增強密碼的安全性。不幸的是,研究表明(míng)這通(tōng)常沒有(yǒu)幫助。 “Password1!”和(hé)“P @ ssw0rd”可(kě)能遵循了許多(duō)密碼組合規則,但(dàn)這些(xiē)密碼并不比“password”更強。密碼組合規則隻會(huì)讓用戶難以記住密碼;它們不會(huì)讓攻擊者的工作(zuò)變得(de)更加困難。
- 防禦:擺脫密碼組成規則。在應用程序中添加密碼複雜性檢查功能,告訴用戶他們的密碼選擇是否明(míng)顯強度偏弱。但(dàn)是,不要強制(zhì)用戶在其密碼中添加數(shù)字、特殊字符等。稍後,我們将討(tǎo)論如何使應用程序更安全,以防止安全性弱的用戶密碼。
您沒有(yǒu)安全地存儲密碼
- 推理(lǐ):加密哈希函數(shù)是單向函數(shù)。因此,存儲哈希密碼應該可(kě)以防止攻擊者計(jì)算(suàn)出它們。
- 攻擊:與前面討(tǎo)論過的兩個(gè)問題不同,這個(gè)問題通(tōng)常隻與離線攻擊有(yǒu)關。許多(duō)企業和(hé)組織的密碼數(shù)據庫都被盜了。當掌握了被盜密碼庫和(hé)強大(dà)的計(jì)算(suàn)能力,攻擊者通(tōng)常可(kě)以計(jì)算(suàn)出許多(duō)用戶的密碼。
存儲密碼的常用方法是使用加密哈希函數(shù),對密碼進行(xíng)哈希處理(lǐ)。如果最終用戶選擇完全随機的20+字符密碼,這種方法将是完美的。例如密碼設成:/K`x}x4%(_.C5S^7gMw)。不幸的是,人(rén)們很(hěn)難記住這些(xiē)密碼。如果簡單地對密碼進行(xíng)哈希處理(lǐ),則使用彩虹表攻擊就很(hěn)容易猜到用戶選擇的典型密碼。
阻止彩虹表攻擊通(tōng)常需要在對每個(gè)密碼進行(xíng)散列之前添加随機“鹽”。“鹽”可(kě)以與密碼一起存儲在清除中。不幸的是,加鹽的哈希并沒有(yǒu)多(duō)大(dà)幫助。 GPU非常擅長快速計(jì)算(suàn)加鹽哈希值。能夠訪問大(dà)量加鹽哈希和(hé)GPU的攻擊者将能夠使用暴力破解和(hé)字典攻擊等攻擊合理(lǐ)且快速地猜測到密碼。
有(yǒu)太多(duō)不安全的密碼存儲機制(zhì),值得(de)專門(mén)寫篇文章去探討(tǎo)。不過,我們先來(lái)看看您應該如何存儲密碼。
- 防禦:有(yǒu)兩種主要機制(zhì)可(kě)以防止攻擊者:一種是使哈希計(jì)算(suàn)更加昂貴,另一種是向哈希添加一些(xiē)不可(kě)估測的東西。
為(wèi)了使哈希計(jì)算(suàn)更加昂貴,請(qǐng)使用自适應哈希函數(shù)或單向密鑰派生(shēng)函數(shù),而不是密碼哈希函數(shù)來(lái)進行(xíng)密碼存儲。加密哈希函數(shù)的一個(gè)特性是它們可(kě)以被計(jì)算(suàn)出來(lái);這個(gè)屬性導緻它們不适合用于密碼存儲。攻擊者可(kě)以簡單地猜測密碼并快速散列以查看生(shēng)成的哈希值是否與密碼數(shù)據庫中的任何內(nèi)容匹配。
另一方面,自适應哈希函數(shù)和(hé)單向密鑰導出函數(shù)具有(yǒu)可(kě)配置的參數(shù),這些(xiē)參數(shù)可(kě)用于使哈希計(jì)算(suàn)更加資源密集。如果使用得(de)當,它們可(kě)以有(yǒu)助于充分減緩離線攻擊,以确保您有(yǒu)時(shí)間(jiān)對正在受到攻擊的密碼數(shù)據庫做(zuò)出反應。
這種方法的問題在于,每次要對用戶進行(xíng)身份驗證時(shí),都必須自己計(jì)算(suàn)這些(xiē)哈希值。這會(huì)給服務器(qì)帶來(lái)額外負擔,并可(kě)能使應用程序更容易受到DoS(拒絕服務)攻擊。
或者,您可(kě)以添加一些(xiē)不可(kě)猜測的密碼哈希值。例如,如果要生(shēng)成一個(gè)長随機密鑰,将其添加到密碼哈希值以及唯一的随機鹽,并且穩妥地保護密鑰,那(nà)麽被盜密碼數(shù)據庫對攻擊者來(lái)說将毫無用處。攻擊者需要竊取密碼數(shù)據庫以及能夠使用離線攻擊計(jì)算(suàn)出用戶密碼的密鑰。當然,這也産生(shēng)了一個(gè)需要解決的非常重要的密鑰管理(lǐ)問題。
您完全依賴密碼
- 推理(lǐ):密碼必須是驗證用戶身份的好方法。其他人(rén)都在使用它們!
- 攻擊:即使用戶執行(xíng)上(shàng)述所有(yǒu)操作(zuò),以使在線和(hé)離線攻擊更加困難,也無法阻止其它應用程序/網站(zhàn)執行(xíng)不恰當的操作(zuò)。用戶經常在許多(duō)站(zhàn)點上(shàng)重複使用相同的密碼。攻擊者經常會(huì)在某平台嘗試從其它平台盜取密碼。
此外,用戶成為(wèi)網絡釣魚攻擊的受害者,因為(wèi)一些(xiē)用戶無論密碼要求如何都會(huì)選擇安全性弱的密碼,等等。
- 防禦:要求用戶使用多(duō)因素身份驗證登錄。請(qǐng)記住多(duō)因素身份驗證的含義:使用至少(shǎo)兩種不同因素進行(xíng)身份驗證(典型因素是您知道(dào)的事情、擁有(yǒu)的物品、以及生(shēng)物識别等等)。使用兩種不同的密碼(例如,密碼+安全問題的答(dá)案)不是多(duō)因素身份驗證。同時(shí)使用密碼和(hé)動态口令屬于多(duō)因素驗證的一種。此外,請(qǐng)記住,某些(xiē)多(duō)因素身份驗證機制(zhì)比其它多(duō)因素身份驗證機制(zhì)更安全(例如,加密設備比基于SMS的一次性密碼更安全)。無論如何,使用某種形式的多(duō)因素身份驗證總是比僅依靠密碼更安全。
如果必須僅使用密碼進行(xíng)身份驗證,用戶則還(hái)必須采取某種類型的設備身份驗證。這可(kě)能涉及設備/浏覽器(qì)指紋識别,檢測用戶是否從不尋常的IP地址登錄,或類似的方式。
結論
如您所見,處理(lǐ)用戶密碼時(shí)需要考慮很(hěn)多(duō)事項。我們還(hái)沒有(yǒu)談到密碼輪換策略、帳戶鎖定、帳戶恢複、速率限制(zhì),防止反向暴力攻擊等等。
有(yǒu)一個(gè)很(hěn)重要的問題需要考慮:您是否可(kě)以将用戶身份驗證轉給其他人(rén)?如果你(nǐ)是一家(jiā)金融機構,答(dá)案可(kě)能是否定的;如果您要把最新的貓咪寵物視(shì)頻給别人(rén)看,在此之前需要驗證,那(nà)這種情況下答(dá)案應該是可(kě)以的;如果您正在開(kāi)發面向企業員工內(nèi)部使用的應用程序,請(qǐng)考慮基于SAML的身份驗證或LDAP集成;如果您正在開(kāi)發面向公衆的應用程序,請(qǐng)考慮使用社交登錄(即使用Google,Facebook等登錄)。許多(duō)社交網站(zhàn)已經投入大(dà)量精力來(lái)保護其身份驗證機制(zhì),并為(wèi)用戶提供各種身份驗證選項。您不需要全盤重來(lái)。
在不必要的情況下實施用戶身份驗證會(huì)給企業和(hé)用戶都帶來(lái)麻煩,甚至有(yǒu)潛在危險。創建安全的用戶驗證機制(zhì)困難且耗時(shí)。可(kě)您是真的想要處理(lǐ)被盜用的密碼數(shù)據庫,還(hái)是攻擊者在身份驗證機制(zhì)中發現漏洞?而且用戶有(yǒu)更重要的事情要做(zuò),而不是記住另一個(gè)密碼!