從12306帳號泄漏談用戶密碼安全

新聞回顧

12月25日聖誕節,據漏洞反饋平臺烏雲網顯示,大量12306用戶數據在互聯網瘋傳。本次泄露的用戶數據包括用戶帳號、明文密碼、身份證、郵箱等。

隨後,12306官方發表公告,稱經過認真核查,此泄露信息全部含有用戶的明文密碼。12306網站數據庫所有用戶密碼均爲非明文轉換碼,網上泄露的用戶信息系經其他網站或渠道流出。

12月26日,中國鐵路官方微博發消息,鐵路公安機關將涉嫌竊取並泄露12306網站電子信息的兩名犯罪嫌疑人抓獲,並指出此次用戶信息泄漏事件是犯罪嫌疑人“撞庫”來完成信息的竊取。

好了,這個事件到此估計就沒什麼下文了,因爲在中國用戶隱私數據泄漏彷彿不是一天兩天的了,從你每天能接到幾個詐騙、銷售電話就能感受到。那麼,作爲普通用戶,怎樣最大限度地保護我們的隱私呢?接下來你可以看下面的文字,我試圖以簡單明瞭的語言(注:不一定非常專業)解釋一下網站如何存儲用戶密碼,以及給大家在今後如何保護自己信息安全方面上一些建議。

網站如何存儲我們的信息

當你在一個網站註冊成爲其用戶時,大多網站需要你提供賬戶名、郵箱、密碼等,甚至有些網站還會讓你填手機號、身份證號等更爲敏感的信息。而如何保存這些信息將成爲一個重大的問題,因爲任何網站都存在被攻擊的風險,一旦數據庫被盜將會造成不可彌補的損失。我們下面只討論網站一般如何來保存密碼數據的,這是我們最爲關心的。

目前最普遍的做法是——將用戶密碼加密存儲。所謂的加密就是採用一種算法將明文映射爲密文,我們稱爲 hash(哈希),而加密算法有很多種,這裏就不詳細介紹,只要明白一點,這種加密算法是不可逆的,即不存在一種解密算法將密文又一一轉化爲明文。

在用戶註冊時,網站對用戶填寫的密碼進行加密,網站數據庫中只保存加密之後的密碼,而在任何地方都不會保存密碼的明文。當用戶登錄該網站是,填寫用戶名和密碼,網站會將該密碼通過同樣的加密算法進行轉換,與數據庫中保存的該用戶名對應的加密的密碼進行比較,如果相等,表示密碼正確。

這裏要指出兩點:

  1. 密碼在經過加密時,不再在任何地方保存明文密碼,因爲一旦保存了明文密碼,就會存在被盜的風險。幾年前報道的 CSDN 網站服務器被入侵,600萬用戶帳號及明文密碼泄露,當時被廣爲吐槽的是 CSDN 竟然保存明文密碼。這就是我們在上面新聞中看到12306官方的公告中特別指出的,“我網站數據庫所有用戶密碼均爲多次加密的非明文轉換碼”。當然目前這是一種普遍的做法了,這也是爲什麼我們登錄某個網站忘記密碼時,該網站給你發一個重置密碼的鏈接,而不是告訴你原來的密碼(因爲他們也不知道),當然不排除有些小網站仍然採取明文保存密碼的做法。
  2. 正因爲加密是不可逆的,即使因爲安全原因數據庫被盜,黑客有了加密之後的密碼,它也不能通過一種解密算法將密文轉化爲明文。這就加大了我們的密碼信息的安全。但是不是拿到這些密文就沒有辦法破解了呢?非也!

網站對密碼鹽化後加密

如果黑客入侵網站的數據庫,拿到加密之後的密碼,如何找到明文呢?由於目前加密算法比較經典的就那幾種,md5、sha1 等等,而用戶在選用自己的密碼時,很多使用的是一種“弱密碼”,即簡單的數字和字母的組合,例如 "iloveyou123"、"123456" 等等, SplashData 公佈2013 年最常用的 25 個密碼,你就可以看出排名靠前的都是積弱的密碼。那麼黑客只需要枚舉出所有的單詞和各種數字等的組合,例如使用 md5 算法進行加密,構造出一張大表(我們稱爲“彩虹表”),將這張表的加密之後的密文與盜取的數據庫中密文進行比較,如果有匹配的,那麼就找到了明文,即可用來登錄的密碼。

解決方法之一就是網站在保存密碼時,對密碼進行鹽化(salted),即在用戶的密碼之上加上一串特殊字母之後再進行加密,例如加上f#@V)Hu^%Hgfds這樣的字符串,那麼即使你密碼是 "123456",加上之後就成爲了 "f#@V)Hu^%Hgfds123456",這無疑就是一個“強密碼”了。

解決方法之二就是有些網站在你註冊時對你輸入的密碼進行各種限制,例如至少有數字、字母、特殊字母的組合,甚至有要求至少一個大寫字母,就是爲了減少能枚舉出來的概率,也其實也是一種鹽化策略,只不過讓用戶來做。

但是不是網站對密碼進行鹽化之後就安全了呢?更多關於 hash 對網站加密可以參看我的一篇文章:Hash 函數及其重要性,更偏向於技術的介紹。

什麼是“撞庫”

而此次12306網站用戶信息泄露並不是網站被入侵導入數據庫被盜,我們注意到開頭的新聞回顧中中國鐵路官微中提到一個詞“撞庫”,這又是什麼意思呢?

在黑客術語裏面,“拖庫”是指黑客入侵有價值的網絡站點,把註冊用戶的資料數據庫全部盜走的行爲,因爲諧音,也經常被稱作“脫褲”,360的庫帶計劃,獎勵提交漏洞的白帽子,也是因此而得名。在取得大量的用戶數據之後,黑客會通過一系列的技術手段和黑色產業鏈將有價值的用戶數據變現,這通常也被稱作“洗庫”。最後黑客將得到的數據在其它網站上進行嘗試登陸,叫做“撞庫”,因爲很多用戶喜歡使用統一的用戶名密碼。

以上解釋來源於文章:<撞庫攻擊:一場需要用戶參與的持久戰>

想想你自己,你有自己的 QQ、微博、淘寶、各種BBS、郵箱、網銀等等賬號,而賬號和密碼是否都不一樣呢?而如果都一樣,那麼你就有很大風險了!你註冊的網站其中的有一個被入侵導致信息泄露,那麼用着同樣的賬號和密碼來試圖登陸你註冊的其它網站,很大可能就登陸成功了,從而盜取你在上面的信息。這次12306事件目前來看就是這樣來做的,犯罪嫌疑人利用已經泄漏的用戶信息來登錄12306,登錄成功之後就可以獲取用戶的手機號、郵箱、身份證號等有價值的隱私數據了。

我個人覺得這是目前危害用戶信息安全的最重要的途徑之一,往往我們不經意之間註冊了一個釣魚網站或者註冊的某個網站數據庫被盜,這就危害到我們註冊的所有網站的信息安全。

我的建議

好了,說了這麼多,其實就談了兩點:一是通過解釋網站密碼加密算法來告訴你設置複雜的密碼,而是通過解釋“撞庫”這種盜取用戶信息的技術手段來告訴你密碼不要設置爲同一個。其實,我們可以完全在設置密碼的時候可以將兩者統一了——爲每個網站密碼設置不同的複雜的密碼。也許有些人就會站出來反駁我,你真是站着說話不腰疼,我註冊的網站幾十個,每個網站設置不同的密碼,而且還是那種複雜的密碼,我怎麼記得住!這也是我之前非常頭疼的事,但好在有比較好的解決方法:

  • 利用各種密碼管理工具,例如1Password、Lastpass、Keepass 等等,都提供了移動客戶端以及瀏覽器插件,支持動態生成複雜密碼以及同步功能,有了這些工具的幫助,媽媽再也不用擔心我記不住密碼了。
  • 但有些人總覺得工具還是太麻煩,尤其是換個電腦登錄就更顯得吃力,我可以告訴你一種簡單有效的生成不同複雜密碼的方法——你想一個基本密碼,例如As@520_,再將註冊的網站的域名插入到該簡單密碼中間,可以是任何地方,你記住就可以了,例如我們統一插到最後吧,那麼簡書的密碼就是As@520_jianshu,微博的密碼就是As@520_weibo 等等,如果你顯得域名太簡單了,你可以把域名變得複雜一些,倒置、加1等等,但一定要與該網站對應起來。如此一來,你就有對每個網站有了不同的超複雜的密碼了。

這是關於管理設置密碼的建議,更多其它建議我想大家都知道,只是執行力的問題了,例如儘量不要用自己的主郵箱、常用密碼來註冊不健康網站(哪些是不健康你懂的:-))等等。互聯網、大數據時代下,用戶隱私越來越暴露在大庭廣衆之下,我想這不僅僅是用戶個人注意就能解決的事,更多的是需要從事的企業對用戶隱私數據的保護意識、國家相關法律法規的健全,才能讓用戶少接一次詐騙電話、少泄露一些隱私。

參考文獻:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章