作者CMJ0121 (請多指教!!)
看板NetSecurity
標題[閒聊] 2017.W12 - Store your password
時間Tue Mar 21 23:10:23 2017
2017.W12 - Store your password
> 依然是工作上的抱怨...
## 前言 ##
依然分享一下工作上遇到的故事
這次分享如何在不得已的情況之下 儲存使用者的密碼 ...
## 內容 ##
實務上 資訊安全專家或者是相關人員
都會告誡開發者 千~~萬不要儲存明文密碼
相關的慘案可以參考 [0]
在技術上 認證一個使用者的密碼透過 Hash + Salt 來處理使用者的密碼
在伺服器端就可以不用儲存密碼
當因為不知名的資安事件 造成駭客可以任意存取伺服器上的資料時
也不至於造成使用者最敏感的密碼資料外洩
在某些不得已的情況之下 開發者需要儲存明文密碼
像是 browser[1] 就需要儲存使用者的明文密碼
下次需要的時候就可以自動填入 (auto-complete[2]) 密碼
但是這種情況下 駭客一定可以有辦法拿到儲存的密碼
因此如何有誠意的儲存密碼則是一門技巧
Level 0
最沒有誠意的方式 就是直接將密碼明文的儲存在某個檔案/設定檔中
其中這個儲存方式又顯著的標出來這個值是密碼
像是
loginPassword = XXXXXXXX
比這個方式好一點的方式 則是針對這個檔案額外賦予存取權限
只有系統管者才能夠存取
Level 1
相對有誠意的方式 則是儲存密碼的時候做一些混淆
在這種方式中會存在一種方式 (e.g. 函數 F)
密碼會透過這個函數 1-1 對應到另一個
不容易被發現是密碼 的格式
但因為還是需要逆轉成原本的密碼 如果駭客知道逆轉的方式與儲存的位址
則還是可以獲得原始的明文密碼
在實務上會使用對稱式加密[3]的方式來處理原始的密碼
在這個之外 還有降低使用者經驗/UX[4] 前提下的誠意做法
像是強迫使用者在程式執行初期 重新輸入一次密碼
在程式運作期間 利用作業系統提供的保護方式
將密碼儲存在一個程式-唯讀寫的記憶體空間
像是在 Linux 的環境中 可以透過 mprotect[5] 將資料寫入之後
沒有使用的期間中重新設定為 PROT_NONE 讓這塊記憶體空間無法被其他程式讀取
只有在需要的時候才重新設定為 PROT_READ
[0]:
https://www.facebook.com/PlainPass/
[1]:
http://raidersec.blogspot.tw/2013/06/how-browsers-store-your-passwords-and.html
[2]:
https://en.wikipedia.org/wiki/Autocomplete
[3]:
https://zh.wikipedia.org/wiki/%E5%B0%8D%E7%A8%B1%E5%AF%86%E9%91%B0%E5%8A%A0%E5%AF%86
[4]:
https://zh.wikipedia.org/zh-tw/%E4%BD%BF%E7%94%A8%E8%80%85%E7%B6%93%E9%A9%97
[5]:
http://man7.org/linux/man-pages/man2/mprotect.2.html
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.193.122.171
※ 文章網址: https://webptt.com/m.aspx?n=bbs/NetSecurity/M.1490109027.A.F1E.html