以最常見的網(wǎng)絡(luò)安全問題弱密碼這個(gè)話題而展開一下。
相信到目前為止,大部分企業(yè)所采用的一個(gè)最佳IT實(shí)踐必定是采用復(fù)雜密碼,不管是哪篇文章,哪本書籍,不管是CISSP還是CISP,要求用戶使用強(qiáng)密碼是必然存在的一個(gè)準(zhǔn)則。而每次攻防演練中,用戶弱密碼或者缺省密碼往往成為了攻擊的最優(yōu)解。
由弱口令導(dǎo)致的攻擊事件實(shí)令人心驚膽戰(zhàn),弱密碼,空密碼,缺省密碼以及明文密碼等逐一被挖掘出來(lái),涉及不乏有企業(yè)重要業(yè)務(wù)系統(tǒng)和核心基礎(chǔ)設(shè)施的賬號(hào)安全問題。為了解決這種問題,有些企業(yè)重刀下要求,要求員工使用12位甚至16位以上的密碼,設(shè)定密碼策略,必須符合大小寫,數(shù)字,特殊符號(hào)齊全的強(qiáng)密碼策略。我們今天就該問題進(jìn)行一些討論。
美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究院(National Institute of Standards and Technology,NIST)發(fā)表了一篇文章,名為“Digital Identity Guidelines“挺有意思,大家有興趣的可以去看看原文,地址后面附上,這篇文章講了一些身份標(biāo)識(shí)的使用準(zhǔn)則,我這里簡(jiǎn)單給大家講講。
這些準(zhǔn)則為實(shí)施數(shù)字身份服務(wù)的聯(lián)邦機(jī)構(gòu)提供技術(shù)要求,并不打算在此目的之外限制標(biāo)準(zhǔn)的制定或使用。這些準(zhǔn)則的重點(diǎn)是對(duì)通過開放網(wǎng)絡(luò)與政府系統(tǒng)進(jìn)行互動(dòng)的主體進(jìn)行認(rèn)證,確定某位申請(qǐng)者是先前已被認(rèn)證的用戶。
認(rèn)證過程的結(jié)果可以由執(zhí)行認(rèn)證的系統(tǒng)在本地使用,也可以在聯(lián)合身份系統(tǒng)的其他地方宣稱。該文件定義了三個(gè)認(rèn)證器保證級(jí)別中每個(gè)級(jí)別的技術(shù)要求。(AAL1,AAL2,AAL3,詳情見文內(nèi)表格)該出版物取代了NIST特別出版物(SP)800-63-2的相應(yīng)部分。
這篇文章噼里啪啦地講了一大堆,我們主要看5.1.1.2 Memorized Secret Verifiers,中文不太好翻譯,但意思應(yīng)該容易理解,我直譯了一下,密碼驗(yàn)證器,文中指出幾點(diǎn):
密碼長(zhǎng)度需為8位以上,并允許最大長(zhǎng)度為64位的可見字符(參考RFC20標(biāo)準(zhǔn))
PIN碼必須是6位以上
密碼必須無(wú)任何“提示”信息,且不應(yīng)提示任何特殊類型的信息,比如“你家的第一只寵物貓的名字是什么?”
在處理新增或變更密碼請(qǐng)求時(shí),將根據(jù)如下列表且不限于如下列表進(jìn)行驗(yàn)證并排除該密碼的變更請(qǐng)求
被列名的已知弱密碼,比如qwerty
常見字典詞,比如password等
重復(fù)的或連續(xù)的字符,比如aaaaaa,1234,abcd等
特定背景的詞,比如服務(wù)的名稱,用戶名,以及其他衍生品
應(yīng)向用戶提供指導(dǎo),如密碼強(qiáng)度表,幫助用戶選擇一個(gè)容易記的強(qiáng)密碼
應(yīng)施行密碼錯(cuò)誤鎖定策略
應(yīng)允許使用粘貼選項(xiàng),這是為了方便使用密碼管理器進(jìn)行密碼粘貼,密碼管理器在許多情況下增加了用戶選擇更強(qiáng)密碼的可能性
應(yīng)允許用戶在輸入密碼的時(shí)候短暫顯示每個(gè)輸入的字符,以驗(yàn)證正確的輸入,尤其適用于移動(dòng)設(shè)備。一系列的點(diǎn)或星號(hào)輸入經(jīng)常導(dǎo)致密碼輸入錯(cuò)誤,而在最后使用View查看輸入的密碼卻又會(huì)帶來(lái)其他風(fēng)險(xiǎn)
不應(yīng)該對(duì)該密碼強(qiáng)加其他組合規(guī)則(例如,要求不同字符類型的混合或禁止連續(xù)重復(fù)字符)
服務(wù)存儲(chǔ)密碼必須保證能對(duì)抗高強(qiáng)度的離線破解,必須采用適當(dāng)?shù)膯蜗蛎荑€加密函數(shù)并采用加鹽散列提供,其中鹽值必須為至少32位長(zhǎng)度
請(qǐng)求密碼時(shí)必須使用經(jīng)過批準(zhǔn)的加密和認(rèn)證的受保護(hù)通道,以避免竊聽和中間人攻擊
使用多因素認(rèn)證,并規(guī)定了軟硬件單、多因素認(rèn)證的標(biāo)準(zhǔn)
盡管從可用性和安全性的角度來(lái)看,密碼的使用普遍令人沮喪,但它們?nèi)匀皇且环N廣泛使用的身份驗(yàn)證形式。然而,在日常生活中,我們需要記憶的密碼太多,線下的,線上的,社交的,企業(yè)的,各種各樣的都需要密碼,所以我們往往選擇容易被猜中的密碼,或者弱密碼。
為了解決由此產(chǎn)生的安全問題,各種在線服務(wù)均已經(jīng)出臺(tái)了一些規(guī)則,以增加這些密碼的復(fù)雜性。其中最值得注意的是密碼組合規(guī)則,它要求用戶選擇使用混合字符類型(例如至少一個(gè)數(shù)字、大寫字母和符號(hào))構(gòu)造的密碼。然而,對(duì)被破解的密碼數(shù)據(jù)庫(kù)的分析顯示,盡管對(duì)可用性和可記憶性的影響非常嚴(yán)重,但此類規(guī)則的好處并不像最初認(rèn)為的那么重大。
用戶選擇密碼的復(fù)雜性經(jīng)常使用信息論中的熵概念來(lái)表征。雖然對(duì)于具有確定性分布函數(shù)的數(shù)據(jù),熵值可以很容易地計(jì)算出來(lái),但是對(duì)用戶選擇的密碼的熵值進(jìn)行估計(jì)是困難的,而且過去的努力并不是特別準(zhǔn)確。出于這個(gè)原因,本文提出了一種不同的、稍微簡(jiǎn)單一些的方法,主要基于密碼長(zhǎng)度。
許多與使用密碼相關(guān)的攻擊不受密碼復(fù)雜度和長(zhǎng)度的影響。鍵盤記錄器、網(wǎng)絡(luò)釣魚和社會(huì)工程攻擊對(duì)冗長(zhǎng)、復(fù)雜的密碼和簡(jiǎn)單的密碼同樣有效。這些攻擊不在本文討論的范圍之內(nèi)。
長(zhǎng)度
口令長(zhǎng)度是描述口令強(qiáng)度的主要因素。太短的密碼會(huì)導(dǎo)致暴力攻擊以及使用單詞和常用密碼的字典攻擊。
所需的最小密碼長(zhǎng)度在很大程度上取決于所處理的威脅模型。通過限制允許的登錄嘗試的速率,可以減輕攻擊者試圖通過猜測(cè)密碼登錄的在線攻擊。為了防止攻擊者(或老打錯(cuò)字的)通過多次錯(cuò)誤的猜測(cè),輕易地對(duì)用戶實(shí)施拒絕服務(wù)攻擊,密碼需要足夠復(fù)雜,以便在多次錯(cuò)誤嘗試后不會(huì)出現(xiàn)速率限制,但確需要實(shí)施限制當(dāng)發(fā)現(xiàn)有成功猜測(cè)的情況。
當(dāng)攻擊者通過數(shù)據(jù)庫(kù)漏洞獲得一個(gè)或多個(gè)散列密碼時(shí),有時(shí)可能發(fā)生離線攻擊。攻擊者確定一個(gè)或多個(gè)用戶密碼的能力取決于密碼的存儲(chǔ)方式。通常,密碼是用一個(gè)隨機(jī)值和散列處理的,最好使用一種計(jì)算代價(jià)昂貴的算法。即使有了這些措施,目前攻擊者每秒計(jì)算數(shù)十億哈希的能力,而且沒有速率限制,這要求抵御此類離線攻擊的密碼比預(yù)計(jì)只能抵御在線攻擊的密碼要復(fù)雜幾個(gè)數(shù)量級(jí)。
應(yīng)該鼓勵(lì)用戶在合理范圍內(nèi)設(shè)置自己想要的密碼長(zhǎng)度。由于哈希密碼的大小與它的長(zhǎng)度無(wú)關(guān),如果用戶希望的話,沒有理由不允許使用冗長(zhǎng)的密碼(或短語(yǔ))。但過長(zhǎng)的密碼(長(zhǎng)度可能為兆字節(jié))可能需要過多的散列處理時(shí)間,因此有一些限制是合理的。
復(fù)雜度
如上所述,密碼的組合規(guī)則通常用于試圖增加猜測(cè)用戶選擇的密碼的難度。然而,研究表明,用戶以非??深A(yù)測(cè)的方式響應(yīng)組合規(guī)則強(qiáng)加的需求。例如,一個(gè)用戶可能選擇了“password”作為他們的密碼,如果要求包含大寫字母和數(shù)字,那么相對(duì)來(lái)說(shuō),他可能會(huì)選擇“Password1”,或者“Password1!”如果還需要一個(gè)符號(hào)的話,我想這點(diǎn)很多人都干過。
當(dāng)用戶創(chuàng)建的復(fù)雜密碼的嘗試被拒絕時(shí),用戶一般會(huì)說(shuō)“靠,這都不行,真煩“?許多應(yīng)用拒絕使用空格和各種特殊字符的密碼。在某些情況下,不接受特殊字符可能是為了避免依賴于這些字符的SQL注入之類的攻擊。但在任何情況下,正確散列的密碼都不會(huì)完好無(wú)損地發(fā)送到數(shù)據(jù)庫(kù),因此這種預(yù)防措施是不必要的。用戶還應(yīng)該能夠包括空格字符,以允許使用短語(yǔ)。然而,空格本身并沒有增加密碼的復(fù)雜性,而且可能引入可用性問題(例如,未被發(fā)現(xiàn)使用兩個(gè)空格而不是一個(gè)),所以在驗(yàn)證之前刪除輸入的密碼中重復(fù)的空格可能是有益的。
用戶的密碼選擇非常容易預(yù)測(cè),所以攻擊者很可能猜測(cè)過去成功使用過的密碼。這些密碼包括字典中的單詞和以前的密碼,比如“Password1!”。出于這個(gè)原因,建議將用戶選擇的密碼與不可接受的密碼的“黑名單”進(jìn)行比較。這個(gè)列表應(yīng)該包括來(lái)自以前的入侵泄露過的密碼、字典詞匯和用戶可能選擇的特定詞匯(如服務(wù)本身的名稱)。由于用戶對(duì)密碼的選擇也將受最小長(zhǎng)度要求的約束,因此該字典只需要包含滿足該要求的條目。
高度復(fù)雜的密碼引入了一個(gè)新的潛在的弱點(diǎn):太復(fù)雜,記不住。而且更有可能被以不安全的方式記錄下來(lái),比如寫到紙上,或者用Excel記錄。雖然這些做法不一定容易受到攻擊,但從統(tǒng)計(jì)學(xué)上講,一些記錄此類秘密的方法將會(huì)受到攻擊。反過來(lái)講,這也是一個(gè)不需要太長(zhǎng)或太復(fù)雜的密碼的另外一種考慮。
隨機(jī)PIN密碼
文中還提到6位數(shù)的隨機(jī)生成的PIN碼已經(jīng)足夠強(qiáng)壯,可以作為密碼使用的一個(gè)考慮。
總結(jié)
如果對(duì)密碼的長(zhǎng)度和復(fù)雜度要求超過了這里推薦的程度,將顯著增加密碼記憶的難度,并降低用戶的易用性。因此,用戶經(jīng)常以適得其反的方式繞過這些限制。此外,其他的密碼緩解措施,如黑名單、安全散列存儲(chǔ)和速率限制,在防止現(xiàn)代暴力攻擊方面更有效。因此,當(dāng)密碼驗(yàn)證框架完善,對(duì)該類密碼而言,其實(shí)并不需要附加復(fù)雜性要求。
參考:
NIST Special Publication 800-63B
Password policy recommendations-Microsoft 365 admin|Microsoft Docs