[TOC]
背景
密码是现在最常用的验证手段,一般服务器会将用户名和其密码的hash值存储起来以便验证用户身份。
$$ (u_i, H(P_i)) $$
对于密码而言,有着以下几种攻击场景:
- 密码文件被盗:丢失上述存储的“用户名-密码hash”文件
- 易猜密码:密码强度弱
- 监视密码:攻击者监视用户输入密码并获得了明文密码
- 不同系统使用相同密码:
- 偷窃密码:攻击者通过钓鱼攻击获取用户输入的密码
- 密码修改攻击:密码修改机制有缺陷或受到攻击
honeyword
专注于解决第一种攻击情景,在这种攻击中,攻击者通过非法获取验证服务器上的数据来窃取用户密码,由于服务器上一般存储hash值,攻击者需要反向hash得到用户密码,另外偷盗服务器数据一般并不会被发现,这样安全性就受到了很大的破坏。honeyword
通过为同一个用户生成多个password
来抵抗这种攻击。
原理
相较于普通的密码认证管理,honeyword
要求从认证服务器中分离出一个名为Honeychecker
的服务器,用于鉴别密码的真实性,以及在检测到非法操作时采取措施。Honeychecker
对每一个用户记录一个值,并可在后续登陆认证时检查该值的合法性。
初始化
对于每一个用户$u_i$,生成一个密码的列表,$W_i=(w_{i,1}, w_{1,2}...,w_{i,k})$作为其sweetword
,其中包含该用户的真实密码$w_{i,c(i)}$,该密码称为sugarword
,其他$k-1$个密码称为honeyword
,然后利用Hash加盐算法对每一个sweetword
进行处理,并将$(u_i, (H(w_{i,1}), H(w_{i,2},...,H(w_{i,k}))))$存储。这一过程可用一个函数来表示
$$ (W_i, c(i)) = Gen(k, p_i) $$
然后将$(i, j)$记录到Honeychecker
服务器中。即对于用户$u_i$而言,第$j$个sweetword
是合法的。
登陆
用户输入用户名$u_i$和密码$g$,认证服务器开始验证密码
- 找的到$v_{i,j}=H(g)$,转3,否则转2
- 向
Honeychecker
询问$Check(i, 0)$,转4 - 向
Honeychecker
询问$Check(i,j)$,转4 Honeychecker
检查$j$是否与存储值相同,若相同,转5,若不同转6- 向认证服务器返回登陆合法确认,完成登陆过程
- 若$j$非0,应认为发生密码文件泄露,根据预先设置好的策略,完成相应操作并返回登陆非法。若$j=0$,则可能是因为typo-error,返回登陆失败,结束登陆过程。
修改密码
使用$Gen$重新生成并存储新的$W_i$,并通知Honeychecker
执行$Set(i,j)$操作以更新数据。
安全分析
我们认为Honeychecker
是安全的。
用Gen
表示,为用户创建sweetword
列表的过程。所以为了实现相应的目标——检测认证服务器文件盗窃,Gen
过程的flatness
就是很重要的一个参数。
需要巧妙的设计Gen
过程,以使得攻击者很难从sweetword
列表中准确的找出sugerword
。
Gen
过程设计
legacy-UI
(传统交互)
传统交互,即使用传统的设定密码界面,用户对于服务器是否采用honeyword
是无法感知的,网站在服务端操作即可。
Chaffing
通过生成与用户密码相似的假密码达到混淆。
Chaffing by tweaking
通过修改用户密码中的某些字符达到混淆,chaffing-by-tweaking-digits
即替换密码中的数字为其他数字,chaffing-by-tail-tweaking
即替换密码的末尾几个字符。Chaffing-with-a-password-model
类似PCFG
方法生成相似的密码达到混淆。Chaffing with “tough nuts”
生成一些很难被反哈希的密码用来迷惑攻击者。
modified-UI
(特别设计的交互)
例如,特别设计的交互可以给用户输入的密码增加一个数字后缀take-a-tail
,而honeyword
则可以通过修改这几个数字后缀来迷惑攻击者。
扩展
typo-safety
用户可能输错密码,导致服务器错误的采取措施。可以通过设置生成的honeyword
之间的最小distance
来规避。
旧密码
大多数系统都会记录用户的旧密码以避免使用旧密码,但这可能会泄漏用户在其他系统上的密码。存储旧密码时,除了常规的安全设置,也要使用honeyword
。
存储优化
混合Gen
方法
可以设计一种Gen
算法,使得它同时拥有上述不同Gen
方法的优点。
攻击
general
的密码猜测
legacy-UI
没有影响用户如何选择密码,所以攻击者仍可以发起在线猜测攻击
targeted
的密码猜测
用户的身份信息——即社会工程学,可以有效地帮助攻击者从honeyword
列表中分辨出用户的真实密码。
攻击Honeychecker
攻击者可以攻击Honeychecker
或者攻击其与计算机系统的通信
likelihood
攻击
攻击者可以通过计算判断出honeyword
列表中的密码是真密码的可能性,并挑选出具有最高概率的honeyword
。
DoS
攻击
如果服务器采取激进措施,当单个honeyword
击中时就重置全局密码,则可能遭受到攻击者的Dos
攻击。
可以通过从sweetword
列表中抽取一个子集作为honeyword
列表来减轻DoS
攻击的影响。
多系统
如果用户在多个系统上使用相同的密码,则攻击者只需窃取两个系统的honeyword
列表即可得到用户的真实密码。而当攻击者只窃取一个系统的honeyword
列表,则会发生sweetword
提交攻击,这是指由于不同系统的honeyword
集不同,攻击者通过在未被侵入的系统提交已有的honeyword
列表中的密码发动的攻击。