當前位置:
首頁 > 最新 > 網路論壇口令的安全分析

網路論壇口令的安全分析

摘要:分析了兩大熱門網路論壇的用戶口令在伺服器端加密和本地cookie中加密的安全性。首先,研究兩大網路論壇的用戶口令和安全問題的加密準則,包括加密的演算法、密鑰的產生以及加密後數據的存儲。另外,根據現有對口令的破解能力,從加密演算法的強度和口令破解的複雜度兩個方面評估和比較兩大論壇口令的安全級別。為增強論壇用戶口令的安全性,對加密演算法的具體實現和口令的選擇策略提出了一些建議,如選擇帶salt值的MD5加密演算法、優化口令的選擇策略等。

正文內容:

0 引言

網路論壇是互聯網上的一種電子信息服務系統,也就是BBS(電子公告牌)。它是一種交互性強、內容豐富、及時性強且非常受歡迎的電子信息服務平台。網路論壇可為其註冊用戶提供多種服務,如信息交換、聊天和信息共享等。伴隨著網路的蓬勃發展,論壇也有了迅猛發展。論壇可以分為綜合類論壇和專題類論壇。綜合類論壇信息豐富、廣泛,包含了很多方面的信息,主要由大規模的網站組成。專題類論壇主要聚焦在某種類型的信息或者資源上。專題類論壇對個人消費和科學研究起著重要作用,每個人都可以根據自己的興趣愛好找到對應的專題類論壇,如購物論壇、旅遊論壇和編程論壇等。

隨著網路論壇的廣泛使用,它的安全性也受到越來越多網路用戶的關心。目前,口令是註冊用戶登陸論壇的最常用途徑。因此,它最重要的安全就是用戶口令的安全,而時不時發生的口令泄露事件震驚了絕大多數論壇用戶。2011年11月,著名的計算機論壇CSDN泄露了大概600萬用戶的隱私,包括口令、郵件、生日和電話號碼等[1]。於此同時,天涯社區超過4 000萬用戶的用戶名和密碼也被公佈於眾[2]。這無疑大大影響了大眾對論壇安全的態度。2014年12月25日,官方鐵路售票網站12306超過13萬用戶的賬號、郵件和口令被泄露,甚至那些以密文方式存儲於資料庫中的口令也被泄露[3]。可見,口令的安全性面臨著現實的挑戰。

論壇是由論壇軟體開發的,其中Discuz!和PhpWind是2個大家廣泛熟悉的軟體。2個論壇前端均採用「PHP」網路編程語言,後端資料庫採用SQL或者MYSQL的設計架構。這樣的架構有許多優點:多國語言的支持,適配公開或者私有的論壇建設,集成強大的搜索工具等。之所以聚焦於這2類論壇,是因為目前這2類論壇佔有超過90%的市場份額。當前,網路論壇的安全性已經引起了很多學者的關注。Horseluke研究了Discunz[4]的加密函數,Bkd指出了PhpWind[5]的加密漏洞,Liu也分析了這個論壇所使用的cookie加密函數[6]。Zhang在2013年給出了phpBB3論壇的詳細的安全分析[7]。

不同的論壇開發軟體不同,口令的安全也不同。本文主要分析Discuz!和PhpWind論壇的口令安全,包括口令加密、口令破解的複雜性。通過安全性對比,針對加密演算法的具體實現和口令的選擇策略,提出了一些建議,用於增強論壇用戶口令的安全性。

1 口令加密的機制

論壇軟體的口令加密機制主要是指用戶口令的加密存儲。它可以分為兩個方面,伺服器埠令的加密存儲和本地瀏覽器埠令的加密存儲。在伺服器端,後端資料庫存儲用戶名和對應的加密後的口令。而本地瀏覽器端,這些信息也會被加密並保存在cookie里,以方便用戶之後直接登錄網站。下面將依次分析這2個論壇的口令加密方案。

1.1 Discuz!論壇的口令加密

1.1.1 伺服器埠令加密

用戶註冊論壇時,會按要求提供用戶名和口令。對於每一個用戶名,Discuz!論壇軟體會產生一個長度為6 Byte的隨機數,稱為salt值,用於口令加密。用戶提交口令後,口令會被MD5演算法加密2次。首先將用戶口令直接作為MD5演算法的輸入,其次MD5演算法的運算結果與salt值級聯後,再次作為MD5演算法的輸入。加密運算表達為:

PASS=MD5(MD5(password)||salt)(1)

其中PASS是password對應的密文。

伺服器將PASS作為最終的口令存儲於資料庫,同時將用戶名和對應的salt值存放在資料庫的「uc_member」表中。其中,「uc_member」表隸屬於一個專用系統管理軟體「UCenter」。當用戶登錄後,資料庫會根據用戶名檢索對應的salt值,計算MD5(MD5(logging password)||salt)得到登錄所用口令的密文結果。如果計算得到的結果與存儲在資料庫中的PASS數據匹配,用戶則可以成功登錄論壇。在註冊和登錄階段的口令處理過程如圖1所示。

需要注意的是,在Discuz!軟體中,本身也有一個所謂的「password」存放在「members」表中,計算方式為:

password=md5(random())(2)

即password是對一個隨機數的MD5的雜湊值,但這個password對論壇用戶毫無用處。它的存在只是為了保持與上一個Discuz!版本的兼容性。實際上,真正驗證用戶的口令依舊在「UCenter」界面實現。

1.1.2 安全提問的加密

除用戶口令外,用戶註冊Discuz!論壇時,也需要對指定的安全提問做出回答。用戶忘記口令時,可以根據當時註冊時所留安全提問的答案找回口令。若用戶的答案正確,可以重置用戶口令。通過研究Discuz!論壇的源代碼可以發現,這些安全提問的答案也是採用MD5演算法加密。

加密運算流程如下:

Answer=substr(MD5(answer||MD5(ID)),16,8)

(3)

其中ID是安全問題的ID,substr表示截取MD5雜湊值的第16~24位。

下面給出一個安全提問的答案加密過程的實例。

假設註冊時論壇給出3個安全提問,用戶選擇對第3個安全提問進行回答,且答案為「1v1.name」。

假設安全提問如下:

mother』s name;

father』s name

your born city;

根據加密函數,加密過程如下:首先計算第3個安全提問對應的ID=7的MD5的雜湊值,結果是8f14e45fceea167a5a36dedd4bea2543;其次,將對應的安全提問的答案與雜湊值拼接,為1v1.name8f14e45fceea167a5a36dedd4bea2543;再次,計算其MD5的雜湊值,為f5d8e00a4ebc9ead 4611c04706ae05fd;最後,截取其雜湊結果的第16~24位,結果為「4611c047」,即Answer的值。

1.1.3 本地cookie口令加密

通過瀏覽器首次登錄過論壇後,Discuz!論壇會藉助加密函數「authcode」加密用戶的個人信息(如用戶名、口令、單位等),並將其對應的密文存放於本地瀏覽器的cookie中。這大大方便了用戶的後續登錄,因為瀏覽器會直接讀取密文,解密用戶名、口令,驗證其正確性。如果解密後的信息正確,用戶不需要再次輸入用戶名和口令就可以直接登錄。現在給出本地cookie口令加密的原理。

本地cookie加密的過程分成3個階段:密鑰產生、類似RC4演算法的加密和解密以及時效性和數據完整性校驗,如圖2所示。

密鑰產生階段(詳見圖3)描述了加密(或解密)密鑰和完整性密鑰的產生。加密密鑰與RC4演算法一起用於加密(或解密)用戶的個人信息,而完整性密鑰用於解密過程中,對數據進行完整性校驗。首先,由全局變數「Discuz_auth_key」產生初始密鑰,然後初始密鑰再分解成3個子密鑰,即Key_a、Key_b和Key_c。從圖3可知,由這些子密鑰可以得到加密密鑰和完整性密鑰。

密鑰產生後,瀏覽器使用RC4演算法加密(或解密)用戶登錄信息。加密時,密文存儲於cookie中;解密時,對解密後的信息進行時效性檢查和數據完整性驗證。

這個驗證過程可以被描述為如下幾個情況:

(1)substr(result,0,10)==0;

(2)(substr(result,0,10)-time)0;

(3)substr(result,10,16)==substr(md5(substr(result,26)||Key_b),0,16);

只要滿足前兩個情況中的一個就足夠了。第一條表示數據的時效性是永久的,第二個條件表示cookie解密必須在cookie產生後,第三條則是通過檢驗「Key_b」的完整性來防止cookie被篡改。

1.2 PhpWind論壇的口令加密

1.2.1 伺服器埠令加密

PhpWind論壇的每一個口令都僅採用一個簡單的MD5演算法加密:PASS=MD5(password)。所有的口令經過MD5運算後會被存儲到資料庫中。注意,這裡沒有引入隨機數技術(即沒有像Discuz!論壇里使用的salt值),而且MD5加密也僅僅執行了一次而已。

1.2.2 本地cookie口令加密

PhpWind論壇的cookie口令加密方式與Discuz!論壇類似,包含兩個階段。首先,它採用一個名為「PwdCode」的函數計算用戶口令的MD5值。其次,通過一個名為「StrCode」的函數將此雜湊值編碼為base64放入cookie中。第一階段的明文包含瀏覽器的全局信息、用戶口令以及一個稱為安全認證參數的雜湊字元串。

整個加密過程可以由如下的偽代碼描述:

PwdCode(password){

return MD5(Global[sever]||password||Global[hash]);

}

StrCode (string){

Key=substr(md5(Global[server]||Global[hash]),8,18);

Keylen=strlen(key);

Strlen=strlen(string);

for(i=0;i

K=i% keylen;

Code=string[i]^key[k];

}

return base64(code);

}

其中Global[server]和Global[hash]是用戶瀏覽器的2個全局參數。

2 加密安全分析和對比

本節將從2個方面對口令加密的安全性進行分析:加密演算法的強度和口令破解的複雜度。

2.1 加密演算法的強度

這2個論壇採用的核心演算法都是MD5加密演算法,但是在具體實現上又有所不同。眾所周知,理論上廣泛應用的MD5雜湊演算法具有抗碰撞和不可逆性。即已知一個雜湊值,想要反向計算出原本的輸入消息(也就是用戶的口令)是困難的。另外,幾乎無法找到2個不同的消息經過同一個雜湊運算後能得到相等的雜湊值。然而,實際中如果用教科書版本的方式來實現MD5演算法,想要從MD5雜湊值反向計算出口令也是可能的。

2.2 口令破解的複雜度

下面將仔細分析Discuz!和PhpWind論壇中2種MD5加密方案的具體實現。

例1:直接使用MD5演算法來加密口令。

直接使用MD5演算法來加密口令,即PASS=MD5(password)。這個方案就是PhpWind論壇使用的方案。雖然理論上MD5演算法是一個安全的雜湊演算法,但實際中未必如此。如果資料庫泄露,用戶的口令也會隨之暴露,因為已知某個口令的MD5雜湊值可對其進行字典攻擊[8-9],即不需要花費太多的努力就能在可接受的時間內確定口令的明文。此外,現在已經存在了大量可以通過互聯網免費下載的壓縮字典,名為「彩虹表」[10]。如果一個黑客設法獲得了存儲於論壇資料庫存儲的口令雜湊值,再從互聯網下載彩虹表,通過查詢彩虹表已有的口令和口令的雜湊值就可以破解MD5雜湊值,從而恢復出對應的口令明文[11]。目前,基於GPU的高性能計算的發展也大大提升了破解口令的效率,幾乎可以瞬間破解一個長度小於8 Byte僅包含十進位數的口令[12]。

如今,可以利用GPU並行計算的優勢來提高口令恢復的速度。在NVIDIA GPU上的實際測試結果為,每秒鐘破解24億個明文。表1為按照這個速度估算破解一個普通長度且同時包含小寫字母和數字的口令的時間。

通過表1可以看出,破解一個長度為8 Byte的包含數字和小寫字母的口令,只需要不到20 min,即20 min內可以計算出口令明文的所有排列組合,從而破解口令。

例2:使用salt值的MD5演算法

Discuz!論壇採用MD5(MD5(logging password)||salt)方式加密用戶口令。這種MD5加密方式大大提高了安全度。目前,破解MD5雜湊值採用的最廣泛方法是彩虹表攻擊。它的主要思路是預先計算通用的口令的雜湊值。進行破解時,只需要將所獲取的論壇資料庫中的雜湊值與彩虹表中的雜湊值進行比較。如果匹配,則對應的口令被恢復。根據雜湊函數的特性,碰撞幾乎是不可能的。也就是說,對2個不同的口令進行同一個雜湊函數運算,幾乎不可能得到2個相同的雜湊值。因此,有salt的MD5演算法可以阻礙上述的字典攻擊。要破解不含salt的MD5演算法,彩虹表需要260 GB的容量。引入了salt後,salt取值的可能性有900 000種(salt=random(100000,999999)),因此彩虹表的容量會迅速增長到900 000×260 GB=234 PB(1 PB=106 GB),而這種級別容量遠高於當前的存儲容量。即便滿足了容量,搜索效率也非常低下,無法滿足破解的要求。

當然,現實中也不可能建立一個涵蓋所有口令雜湊值的彩虹表。黑客只有在容量與口令破解的成功率之間權衡。黑客往往從社會科學中選擇通用的口令來構造彩虹表。現在也有一些網站提供含有salt值的彩虹表,但破解的效率不盡如人意。例如,在一個真實的測試中,一個普遍的口令「admin888」並沒有被成功恢復。畢竟,這種攻擊方法並不能保證100%的成功率。需要注意的是,論壇中安全提問的加密過程,並沒有使用有salt的MD5加密演算法。因此,破解安全提問比破解例1更為簡單。雖然例1直接使用MD5運算得到了雜湊值,但安全提問一般都有一個具體的方向,答案的範圍也非常有限。因此,答案對應的雜湊值的可能性也不會很多,大大提高了破解的速度。

通過以上口令加密的分析,可以得出一個結論:Discuz!論壇的口令安全優於PhpWind論壇。但是,儘管Discuz!論壇引入salt值改善了口令安全,但是由於其salt的取值範圍有限,安全性也不能得到保證。

3 口令安全的增強

將從兩個方面提出兩點關於提高口令安全性的建議:改善加密演算法的實現方式和優化口令的選擇策略。

3.1 選擇帶salt值的MD5加密演算法

如前面指出的,salt值大大增加了從雜湊值恢復口令的複雜度。目前,Discuz!論壇的salt值長度為6 Byte,且僅包含十進位的數字。因此,將來可以將salt值的取值範圍擴大為支持任意可列印的字元。這樣將salt取值由900 000增加到了956=7.35×1 011,以讓廣泛流行的彩虹表完全失效。

3.2 優化口令的選擇策略

通過真實的口令破解經驗,可以提出至少2條策略來優化口令選擇。首先,應該將口令設置為強口令。強口令是指長度不小於10 Byte,避免使用普通的數字、英文字母以及這樣的組合,如「12345678」「666666」和「birthday」等。其次,對於不同的賬戶應該設置不同的密碼,有效避免某個論壇用戶名和密碼被泄露後,其他論壇的賬戶也被泄露。

4 工作展望

主要分析了2個論壇資料庫中口令的加密方法,發現瀏覽器本地cookie加密的核心加密演算法類似RC4演算法,而RC4演算法存在安全漏洞,如RC4的WEP(一個在無線網路中的加密協議)已經被攻破[13]。今後的研究中會進一步分析這2個演算法的異同,並研究破解RC4的方法是否也會破解這個演算法。

發現PhpWind論壇使用的cookie加密函數僅僅是一個異或函數,而這是一個安全性非常弱的加密方法。因為異或很容易遭受密鑰重用攻擊,即如果E(A)=A xor K,aE(B)=B xor K,那麼E(A) xor E(B)=A xor B。因為(A xor K) xor (B xor K)=A xor B xor K xor K=A xor B,因此K為重複使用的密鑰。因此,很可能解密cookie的密文時,甚至不需要知道加密密鑰。這是未來研究的領域。

5 結 語

本文研究了兩個常用網路論壇的口令安全性,仔細分析了伺服器埠令加密的方案,包括其使用的密碼演算法本身的安全強度和具體實現的方法。研究指出,PhpWind論壇的口令並不安全,其口令可以通過MD5雜湊值被瞬間破解;Discuz!論壇的口令安全優於PhpWind論壇。考慮到可實現的攻擊,提出了增強口令安全和優化口令選擇策略的意見。最後,指出2個論壇所使用的cookie加密的不足,可能導致其遭受到安全攻擊。

參考文獻:

[1] 騰訊新聞:國內最大程序員網站600餘萬用戶信息遭泄露[EB/OL].(2011-12-22)[2018-01-09].https://news.qq.com/a/20111222/000057.htm.

[2] 騰訊新聞.天涯承認部分用戶密碼泄露 據稱涉及4000萬人[EB/OL].(2011-12-26)[2018-01-09].https://news.qq.com/a/20111226/000061.htm.

[3] 新浪新聞.超十三萬條12306用戶數據泄露[EB/OL].(2014-12-26)[2018-01-09].http://news.sina.com.cn/o/2014-12-26/035931328946.shtml.

[4] Horseluke.The Analysis of RC4 Encription Algorithm in Discuz Forum[EB/OL].(2011-11-08)[2018-01-09].http://bbs.phpchina.com/forum.php?mod=redirect&goto=findpost&ptid=113075&pid=1452503.

[5] Bkd.The Encryption Hole of PhpWind Forum[EB/OL].(2011-11-01)[2018-01-09].http://atim.cn/index.php.

[6] LIU Qing-yan.The Password and Coookie Encryption in PhpWind Forum[EB/OL].(2010-10-01)[2018-01-09].http://qing.weibo.com/discovery.html.

[7] ZHANG Li-jun,JIA Fan.The Security Analysis of PhpBB Forum[C].Proceddings of 2013 Fifth International Conference on Multimedia Information Networking and Security,2013:50-53.

[10] Oechslin P.Making a Faster Cryptanalytic Time-memory Trade-off[C].CRYPTO 2003,2003:617-630.

[12]Tzeng S,Wei L Y.Parallel White Noise Generation on a GPU via Cryptographic Hash[C].Proceedings of the 2008 Symposium on Interactive 3D Graphics and Games,2008:79-88.

[13]Klein A.Attacks on the RC4 Stream Cipher[J].Designs,Codes,and Cryptography,2008,48(03):269-286.

作者:杜 薇1,張李軍2,張愛麗3

單位:1.中國電子科技集團公司第三十研究所,四川 成都 610041;

2.保密通信重點實驗室,四川 成都 610041;3.河南師範大學新聯學院,河南 鄭州 450000

作者簡介:杜 薇,女,碩士,工程師,主要研究方向為信息安全與保密通信;

張李軍,男,博士,高級工程師,主要研究方向為密碼學、信息安全;

張愛麗,女,碩士,講師,主要研究方向為應用數學。

本文刊登在《通信技術》2018年第5期(轉載請註明出處,否則禁止轉載)


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 通信技術編輯部 的精彩文章:

改進的兩跳中繼網路比例公平調度
基於隨機森林的低階數字調製識別演算法研究

TAG:通信技術編輯部 |