作者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/cn.aspx?n=bbs/NetSecurity/M.1490109027.A.F1E.html