自從前段時間(大概是去年)國內(nèi)外網(wǎng)站大面積的用戶信息密碼的泄漏,各個網(wǎng)絡(luò)服務(wù)的二步驗證的推出,某著名網(wǎng)站編輯的apple賬號被社會工程學攻擊清空設(shè)備所有數(shù)據(jù)事件的發(fā)生,我就開始用Keepass來管理自己重置后新建的隨機密碼,那個時候因為沒有考慮太多從1.x升級到2.x之后Keepass所變更的一些東西,依然通過1.x的使用習慣用的Keepass(當然也有當初工作平臺主要是以Linux OS為主的原因——不過現(xiàn)在跨平臺的KeepassX的alpha版本已經(jīng)支持2.x的數(shù)據(jù)庫了,時代真的是在變化?。V钡阶罱吹紸ndroid上出現(xiàn)的新興應(yīng)用Keepass2android,徹底改變了在Android上使用Keepass數(shù)據(jù)庫的使用體驗(下文再詳細介紹),于是又開始重新審視Keepass2.x這個密碼管理軟件——發(fā)現(xiàn)我之前用這個軟件只是只接觸了他強大功能的冰山一角而已。于是寫點東西稍微總結(jié)一下。
現(xiàn)在密碼管理的服務(wù)和軟件很多,大概大家用的最多的想必是Lastpass了,和瀏覽器的無縫集成,快速,方便,安全。我也有段時間用過這個服務(wù)。那么為什么我最后選擇的是Keepass呢,有以下幾點:
當然Keepass也有一些不足之處,比如用戶名無法自動輸入中文等。
Keepass除了可以靈活安全地保存自己的密碼數(shù)據(jù)庫之外,一個最吸引人的特點大概就是它的自動輸入功能了。除了在數(shù)據(jù)庫中選中指定項后執(zhí)行自動輸入就可以在上一個激活窗口聚焦的輸入框上執(zhí)行預(yù)設(shè)好的數(shù)據(jù)輸入(比如用戶名–tab–密碼–回車)之外,還可以通過全局快捷鍵,讓Keepass通過窗口標題自動識別并在數(shù)據(jù)庫中選擇相應(yīng)的密碼項后直接執(zhí)行自動輸入。在1.x的時代,這些窗口識別以及輸入序列的編輯是要通過在備注那一項寫代碼來實現(xiàn),而且通配符只能放在關(guān)鍵字始末,定制性非常差,但是在2.x之后,自動輸入被專門放到一個標簽中,并提供非常靈活的規(guī)則設(shè)置。
對于一個網(wǎng)站的用戶名和密碼,網(wǎng)站的標題可能多種多樣,比如”歡迎歸來“,比如”登陸“等等,這個時候你就可以設(shè)置多個窗口標題識別設(shè)置;如果想只針對固定的瀏覽器,你也可以在最后加上一般在瀏覽器標題上出現(xiàn)的瀏覽器標識。假如同一個網(wǎng)站有只需要輸入密碼的情況,也可以通過根據(jù)窗口標題識別來指定這樣的網(wǎng)頁的自動輸入只要輸入”密碼–回車“的序列。甚至還可以通過自定義項目來增加除了用戶名和密碼之外的項目并追加進自動輸入腳本序列中,也可以追加別的按鍵序列來自動化輸入操作。比如:
{DELAY 500}^+1{CLEARFIELD}{UserName}{TAB}{Password}
就可以在發(fā)送自動輸入指令之后等候500毫秒后按Ctrl+Shift+1(在Windows上設(shè)置為切換成英語輸入的快捷鍵)然后清空輸入框內(nèi)容,輸入用戶名,按tab切換到密碼輸入框,然后輸入密碼。然后手動按回車即可登陸這些程序/網(wǎng)站。
自動輸入并不通過剪貼板進行,而是讓Keepass模擬按鍵序列來完成,所以不支持中文。從安全的角度上這樣的自動輸入可以防止剪貼板監(jiān)控木馬獲取你的用戶名和密碼,但是實際上也沒有辦法防止KeyLogger木馬的監(jiān)控獲取。為此,Keepass還提供”雙通道自動輸入模式“。其原理其實非常簡單——讓一個密碼部分通過剪貼板粘貼部分通過模擬按鍵輸入然后再進行整合。至于這個過程又相當黑科技:先把用戶名或密碼等根據(jù)隨機生成的1-3個字府長度分割成有限個小節(jié),然后把奇數(shù)項合并成一段字符后復制到剪貼板;轉(zhuǎn)到輸入框之后先粘貼至輸入框,光標閃回最前然后慢慢地把剩下的偶數(shù)項通過模擬按鍵插進去。由于自動輸入前就Block掉了剪貼板的Event監(jiān)控,于是Keylogger實際上只能獲得一段信息的部分信息,而無法獲得完整的信息(只能看到Ctrl+V)。如果要獲得完整的信息的話只能通過以幾毫秒為單位定時監(jiān)控的剪貼板監(jiān)控程序和Keylogger的組合才能看到。
當多數(shù)網(wǎng)站的用戶名和密碼泄漏的時候,迅速抬頭的就是雙因素驗證(2-Factor Authentication,2FA),俗稱二步驗證。開啟二步驗證之后,登陸網(wǎng)站除了需要用戶名和密碼之外,還需要預(yù)先登錄在手機上的驗證器根據(jù)時刻生成的驗證碼才能登陸成功。但是每次登陸的時候需要掏出手機打開驗證器,是不是有點麻煩?Keepass的第三方插件里面有個神器KeeOTP,即可使用Keepass來保存及顯示二步驗證的驗證碼,并且執(zhí)行自動輸入。
KeeOTP支持目前Google驗證器所使用的Time-based OTP(TOTP),所以同時也可以用在大多數(shù)的網(wǎng)絡(luò)服務(wù)如Outlook,Evernote,Dropbox和堅果云等服務(wù)上。只要在編輯或開關(guān)二步驗證設(shè)置的時候選擇通過provided code而不是QR掃圖來追加驗證設(shè)備,然后通過手機的驗證器和Keepass上的驗證設(shè)置同時追加的話,就能同時通過Google驗證器或者Keepass的數(shù)據(jù)庫來調(diào)出需要的驗證碼,有keepass的時候甚至還可以通過自動輸入功能把驗證碼直接輸入出來。非常方便。
當然,因為二步驗證用設(shè)備的增加,所以在另一層意義上增加了被別人驗證的風險。所以在別的社會工程學攻擊上需要額外的注意。
Android的keepass客戶端中最老牌的應(yīng)該是KeepassDroid。提供初步的2.x支持,還有通過Android的系統(tǒng)復制剪貼板來調(diào)出其中的用戶名和密碼,總體功能上比較初步,當時也只能想到”能夠在Android上用到Keepass就已經(jīng)感謝老天了“的地步。不過現(xiàn)在有個應(yīng)用Keepass2Android,不僅完全支持了2.x的讀取和寫入,也有不少獨特的功能:
Lastpass什么的弱爆了。