1. 程式人生 > >從12306帳號洩漏談使用者密碼安全

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

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

參考文獻: