2022年1月24日 星期一

如何管理個人機密資訊? 談Chrome自動填入密碼與Bitwarden密碼管理器

大部分現代人應該都碰過類似的情境,就是手上的帳號跟密碼越來越多,根本記不起來! 其中有非常重要的例如銀行或社群軟體的帳號密碼,也混雜著各式網路電商的帳號密碼。而要用大腦與記憶力管理所有的密碼,還要確保它們既唯一又安全幾乎是不可能的任務。過往我使用Evernote跟Google Chrome的自動填入來管理我的密碼,在那之前甚至就只有幾組常用的密碼在輪流使用。這陣子清理Evernote時決定痛定思痛、正視這個安全漏洞,重新設計我的密碼使用與管理系統並開始使用Bitwarden,將過程分享在此希望能幫助有相關需求的人。

目錄

  • 為何你不該依賴數位筆記軟體去記錄帳號密碼?
  • 用Chrome的自動填入是個好方法嗎?
  • 為什麼要用密碼管理軟體?
  • 如何打造個人密碼管理系統?
  • 你可以馬上做的幾個步驟

密碼就像牙刷,選個好的、不要跟別人共用、記得常換新!


為何你不該依賴數位筆記軟體去記錄帳號密碼?

最一開始會想要使用數位筆記軟體去記錄帳號密碼是因為其跨平台方便性,因為我可以同時在電腦、手機、網頁端使用Evernote,那當我要登入某些服務時只要去Evernote裡面查一下就可以找到對應的帳號密碼。但隨著我存入的帳號密碼越來越多,我就越擔心Evernote的資料外洩會造成的後果。Evernote為了對應的需求,在2014/15年推出了兩階段驗證(Two-factor authorization, 2FA)以及文本加密(encryption)。這些功能都很實用,我也很推薦大家可以盡量利用,但並不是所有跨平台的數位筆記軟體都支援2FA與文本加密,而我就是在說這幾年最紅的Notion。

請不要把你的重要帳號密碼存在Notion裡!

Notion各方面都是很優秀的筆記與共享協作軟體,在整理與呈現資訊上非常強大。但最讓人詬病的部分可能就是其資訊的安全性。首先是Notion沒有2FA登入的功能,任何人「若」拿到你的帳號密碼都可以直接登入(註1)。再者是Notion沒辦法加密你的文本,若直接將敏感的帳號密碼存在裡面,那有心人士只要登入就可以直接查看。另一種情形是若你在查看時剛好有人經過你背後,你以明文儲存在Notion裡的密碼就這樣被看到了! 最後是Notion本身作為強調共享協作的Web app,有不少人表達其安全性相對較低。我沒有足夠的資安知識去做更細的評論,但網路上有不少使用者提出相關疑慮。

註1: 若是改用Google帳號登入Notion,至少Google會提醒你有人試圖登入你的Google帳號,相對安全一些。

Evernote的Encryption功能

用Chrome的自動填入是個好方法嗎?

使用瀏覽器內的密碼管理與自動填入幾乎是最常見的選項,但這工具雖好用,卻也要看你如何使用。我以市占率最高的Google Chrome為例,在創建帳號密碼時Chrome會問你要不要使用「建議密碼」的功能,Chrome會自動產生一組15碼的英數混合的密碼例如「AKNDH2MnuuqrSJm」,並且在你創建完帳號後自動存入Google帳號自帶的「密碼管理員」內。因此當你換裝置時,只要有登入Google就能自動偵測並填入。你不需要記住這組亂碼! 這就是密碼管理的兩個主要功能,(1) 產生足夠強的密碼 (2) 幫你記住並且填入。然而Chrome產生的這組亂碼,其實以現今密碼學的角度而言並不算是足夠強的密碼,而且它不能控制產生的密碼長度或內容組成,現在很多網站都要求至少要有一個特殊符號如!@#$%&。

xkcd: Password Strength

上圖是xkcd的一篇關於密碼強度的漫畫,大意是說以往我們認為很複雜的「Tr0ub4dor」其實只是對人腦很複雜,以現在的電腦要暴力解其實也就是幾天的事情。然而看起來很蠢的「correct horse battery staple」,明明只是四個常見的單字拼在一起,卻幾乎不可能被暴力解。這強調了現今對密碼設計的一個共識是:

密碼的長度才是重點,不要再用複雜混合折騰自己了!

如果你有善用Chrome產生密碼、自動填入的功能,那麼你至少免除了「所有帳號密碼都是同一組」被一鍋端的風險。但Chrome的另外一個安全疑慮是任何人只要接近你登入了Chrome的電腦,都可以直接存取你有設定自動填入的服務,例如網路銀行。甚至可以藉由輸入你的電腦PIN碼來查看你儲存在Chrome的密碼。這個情境聽起來很稀有,但事實上工作場合電腦、圖書館討論報告、借用筆電等等都很常見,也都有上述的風險。即使不考慮你主動將PIN碼告訴別人的情況,PIN碼設成生日導致被輕易猜到的可能性也很高。現代人在電腦上很難不依靠瀏覽器而工作,此時關鍵點反而變成保護你的裝置不要被人接近,以及停止使用安全性較低的PIN碼,即使它們很方便。

為什麼要用密碼管理軟體?

雖然只要能避免在公共場合登入Chrome或是讓登入了Chrome的電腦被有心人士接近,大部分人都可以使用Chrome的密碼管理員好好管理自己的帳號與密碼。即使不考慮Google帳號密碼外洩導致整個密碼管理員被整組端走,Chrome的密碼管理員還是有一些功能不足之處,而這一塊能夠很好地被密碼管理軟體填上,也產生大量類似軟體企圖吃下這個帳號密碼的資安大餅。

Chrome作為密碼管理器的不足之處

  1. Chrome產生的建議密碼沒辦法設定格式(長度、特殊字元)
  2. 自動填入只能在瀏覽器裡用,如果要登入本地端軟體非常不方便
  3. 跨平台支援有限,Android手機可以藉由Google帳號存取,但iPhone呢?
  4. 沒辦法自由新增Entry,例如ATM、WIFI、裝置密碼等等
因此大部分密碼管理軟體都有相似的幾個核心功能,密碼產生器、瀏覽器自動填入擴充功能、跨平台同步、自由新增Entry。使用上也很方便,使用者只要輸入一組打開密碼管理軟體的主密碼,就可以登入這個儲存帳號密碼的「保險庫」。而這些密碼資訊會先被加密後才通過雲端傳送,因此即使被攔截了,如果不知道你的主密碼也沒辦法打開這個保險庫。常見的密碼管理軟體有1Password, LastPass, Dashlane, KeePass, Bitwarden等等,每一款的功能、收費都有些許差異,網路上可以看到非常多的軟體比較文章。我考量以下幾點後決定選用Bitwarden。
  • 有個人免費版而且是開源軟體 (程式碼完全公開,可以被公眾檢視是否有效、有無惡意片段)
    • LastPass的免費版只能選「電腦」或「行動mobile」,付費版$3/mon
    • 1Password沒有免費版,$2.99/mon
    • KeePass本身完全免費開源,但只有桌機版,其他平台要找第三方
  • 可以跨裝置跨平台支援
  • 有瀏覽器擴充功能
  • (支援自架伺服器)
    • 對於資安專業用戶比較有用,一般使用者應該是不會考慮自架伺服器
Bitwarden使用畫面。黑框處只是我的帳號,即使我人離開電腦,有心人是要查看內容/使用儲存的密碼也必須再次輸入主密碼。

密碼管理就交給專業的軟體吧! 先選一款適合你自己的密碼管理器!

如何打造個人密碼管理系統?

常常被忽略的一個事實是,決定你的資料「安全」與否的並不只是密碼或密碼管理器,還有許許多多的因素互相影響著。要以「系統」層級去思考才能最有效地管理並最小化風險與損失。首先我列出這個系統的要素: 

個人密碼管理系統

  • 重要性分級
  • 密碼設計與產生器
  • 密碼儲存與使用手段
  • 兩階段驗證與備援碼(Recovery code, back up code)
  • 裝置與裝置密碼
第一個要件是「重要性分級」,要先分辨哪些密碼是攸關個人身分、財產,而哪些只是不重要的網站會員。像是銀行、券商、Google帳號這種最重要的密碼「絕對不能」跟其他較不重要的網站共用密碼,不然若是被順藤摸瓜就會損失慘重。建議直接將密碼分成兩類,「重要」與「不重要」並且優先處理被標為「重要」的這一類。

「密碼設計與產生器」則是最常見的一環,你的密碼要設多長、要用混合英數符號、還是用密碼短語Pass phrase? 延續先前提到的「密碼的長度才是重點」,你應該盡可能使用16位或以上的密碼,並且「絕對不要多帳戶共用密碼」。因此擁有一個方便的密碼產生器可以很大程度解決這問題。其他老生常談像是「不要用生日、身分證字號當作密碼」等網路上很多我就不贅述。

當你產生了很多強密碼,就不可能僅靠大腦記住,必須要有有效的「密碼儲存與使用手段」。密碼儲存如本文討論,請不要使用數位筆記軟體,並且將重要的密碼轉移出Chrome瀏覽器,挑一款密碼管理軟體並且開始使用它。另外使用時也該盡量用複製貼上,而不是敲擊鍵盤以避免被側錄的風險。過往絕大多數人喜歡用紙筆紀錄、夾個小紙條、或是在電腦裡直接存一個文件檔,這些都應該極力避免,既不安全又不方便使用,在你被駭客入侵之前就可能不小心把自己鎖在外面、或是直接被附近的人給利用。

「兩階段驗證與備援碼」則是現在最主流的帳戶保護手段,本意是除了輸入密碼以外,你還要再藉由第二種方式去驗證本次登入,例如SMS簡訊、Email、Authenticator的OTP驗證碼等等以加強安全性。由於2FA被證實可以有效提升帳號安全,這幾年主流網路服務都有提供或甚至強迫啟用2FA。但並不是所有2FA都一樣安全,事實上SMS簡訊就可能被攔截、而且負責SMS服務的電信商也可能被中間人攻擊,更何況你跨國後可能就收不到了。Email的認證碼則是當你Email也能被存取時完全沒有意義,也一樣可能被攔截。因此使用Authenticator程式的TOTP驗證碼是稍微比較可靠的選項。再往上甚至還有實體鎖的選項如Yubikey

啟用2FA後通常會提供幾組備援碼當作緊急登入手段,免得你無法2FA時就沒辦法登入。但千萬要記住這幾組備援碼必須要妥善保存,且最好是離線妥善保存(列印出來、存在隨身硬碟)。不然就好比你大費周章設計了超複雜的密碼跟鎖,結果歹徒直接找到你藏在花盆或腳踏墊底下的備用鑰匙一樣輕鬆登入你的帳號。

最後或許是最基本、但也最容易被忽略的是「裝置與裝置密碼」。資安界有句話說「在別人直接接觸到你的電腦時,它就已經不安全了」。現代人手機跟筆電很少離身,保護你的裝置跟保護你裝置內的資訊同等重要。以上一段討論的2FA為例,裝置失竊後就只剩下薄薄的一層裝置密碼保護著你的資訊,而且通常是4-6位數的PIN碼。有心人只要成功進入你的手機,就幾乎可以直接用你的手機通過任何2FA、存取任何服務。因此思考如何應對裝置失竊的流程是非常重要的。信用卡失竊時大部分人都知道要報掛失。假設手機失竊了,你知道如何遠端抹除資訊、登出、修改密碼嗎? 這個問題最好先想一遍,真的發生了才知道怎麼辦。


你可以馬上做的幾個步驟

由於現代人動輒數百個帳號密碼,真的要完整執行、重新建立系統可能會因為工程浩大而遲遲不肯動作。然而這等於是讓機密資訊繼續暴露在風險之中,因此我整理出一個比較簡易的流程,讓人可以直接按照重要性盡快行動。

  1. 依重要性替帳號密碼做分級
    • 重要的: 銀行、券商、Google、Microsoft、Apple、學校、社群軟體、數位筆記、雲端硬碟
    • 不重要: 購物網站、論壇、其餘數位服務
  2. 從最重要的帳號密碼開始,先開啟2FA與離線儲存recovery code
    (如果你懶得挑密碼管理軟體或是改密碼,至少先做到這裡!)
    • 可以的話盡量避免Email或SMS簡訊的2FA方式,Authenticator比較安全
    • 安裝2FA所需要的Authenticator程式(我用Google authenticator與DUO mobile)
  3. 根據重要性決定密碼管理方式
    • 重要的: 使用密碼管理軟體,並且全部都重新產生,不要共用
    • 不重要: 直接存在Google裡,暫時不做處理,有機會登入時再做修改
  4. 挑選第三方密碼管理軟體,我使用Bitwarden。
    • 設立主密碼,建議使用4個單字的密碼短語,並且用大腦記住,不要用任何其他方式明文記下來。
    • Bitwarden本身也有2FA,可以一併設置
  5. 登入重要的帳號,將現有密碼修改成利用密碼管理軟體產生的新密碼
  6. 修改完成後將此新密碼存入密碼管理軟體,並且設置讓瀏覽器不再自動存入(手機端則是不要信任此裝置)
  7. 將原本寫著密碼的檔案、筆記清除,一切交給密碼管理軟體
  8. 重複5-7,將所有重要帳號的密碼都更新,並且存入密碼管理軟體
  9. (Optional)將瀏覽器內存入的不重要密碼個別更新,但可以繼續存在Chrome內無所謂,只要密碼本身不共用就行了

總結

這一次重建整套密碼管理系統花了一周多一點的時間,也趁機多研究一下一直很有興趣的資安領域。從密碼設計、2FA與TOTP、密碼管理器等等都有學到不少東西,但最大的收穫其實不在於具體的系統該如何建立、或是特定環節的可能弱點與風險在哪裡,而是該如何培養起「安全意識」,並且與風險共存。畢竟任何人造的系統都有弱點,而人往往就是最大的安全漏洞,社交工程至今發展了數十年依然是巨大的威脅。帳號、密碼這個機制本來就不保證絕對安全,駭客真的要侵入也往往不是猜密碼,而是偷密碼、騙密碼。即使用看似最安全的Double blind password也沒辦法完全免除風險,永遠會有人致力於發展新的技術來奪取機密,沒有任何一勞永逸的措施。到頭來又是老話兩句,「雞蛋不要放在同一個籃子裡」、「保持警覺,不要完全信賴任何事物」!

    1 則留言: