
作為負責任的管理員,我們知道常見的弱點,例如
- CWE-260:設定檔中的密碼http://cwe.mitre.org/data/definitions/260.html
- CWE-522:憑證保護不足http://cwe.mitre.org/data/definitions/522.html
- CWE-257:以可恢復的格式儲存密碼http://cwe.mitre.org/data/definitions/557.html
但在實踐中我們該如何處理呢?
當然,借助 SSH 無密碼身份驗證等技術和 sudo 等工具,可以擺脫重要位置儲存的登入憑證,這在 Linux 伺服器的自動化部署過程中確實很有幫助。
但是,一旦您離開作業系統並安裝應用程序,您很可能會遇到安全儲存密碼的問題。
例如,如果您安裝資料庫伺服器,很可能需要將明文密碼儲存到 Web 應用程式的設定檔中。
然後,您應該保護設定文件,以便只有管理員才能查看憑證,並且您應該限制資料庫使用者的存取權限,以限制可能的安全性影響。
但是如何處理例如主管理資料庫帳戶?至少你的資料庫管理員應該知道它(所以你需要在某個地方有明文),並且作為作業系統管理員你應該知道不是知道憑據。或者部署是由 DevOps 完成的,他們不應該知道任何生產伺服器上的憑證。
可能的解決方案
經過長時間的思考,我提出了三種可能的解決方案,但它們都有自己的弱點:
在部署期間產生隨機憑證並將其以一次寫入的方式儲存在資料庫中。例如,dbas 有另一個只能讀取資料庫憑證的使用者。但是要如何處理 webapps 設定檔中的明文密碼呢? root 使用者可以讀取它們。密碼資料庫的 root 使用者也可能讀取全部密碼憑證。
在部署期間接受明文密碼和預設憑證,並新增可變更的後記任何和所有密碼。甚至可能是互動的,授權人員必須在腳本運行時輸入憑證。
使用受信任第三方的金鑰對密碼進行非對稱加密。當請求密碼時,它必須是後來改變了。
你怎麼認為?您在這裡看到任何最佳實踐嗎?
答案1
- 您應該擁有一個安全、加密的資料庫,其中包含您的所有憑證
- 在部署期間,伺服器應該透過防火牆完全無法從外部存取
- 可以讓腳本產生隨機通行證並將其透過電子郵件發送給您
- 在配置伺服器之後、在允許公開存取之前更改該密碼也是可以的
- 透過電子郵件向自己發送密碼是可以的,只要它使用您的內部郵件伺服器並且不是透過 SMTP 透過公共路由(SMTPS 是一個不同的故事)
您可以用電子郵件代替幾乎任何協議。您可以將密碼發送到某處,使用 onetimesecret api 建立一次性訊息,使用 https 將其上傳到私人要點,或您能想到的任何其他方式。
我認為這涵蓋了它。