[TOC]

背景

密码是现在最常用的验证手段,一般服务器会将用户名和其密码的hash值存储起来以便验证用户身份。

$$ (u_i, H(P_i)) $$

对于密码而言,有着以下几种攻击场景:

  1. 密码文件被盗:丢失上述存储的“用户名-密码hash”文件
  2. 易猜密码:密码强度弱
  3. 监视密码:攻击者监视用户输入密码并获得了明文密码
  4. 不同系统使用相同密码:
  5. 偷窃密码:攻击者通过钓鱼攻击获取用户输入的密码
  6. 密码修改攻击:密码修改机制有缺陷或受到攻击

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$,认证服务器开始验证密码

  1. 找的到$v_{i,j}=H(g)$,转3,否则转2
  2. Honeychecker询问$Check(i, 0)$,转4
  3. Honeychecker询问$Check(i,j)$,转4
  4. Honeychecker检查$j$是否与存储值相同,若相同,转5,若不同转6
  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

通过生成与用户密码相似的假密码达到混淆。

  1. Chaffing by tweaking
    通过修改用户密码中的某些字符达到混淆,chaffing-by-tweaking-digits即替换密码中的数字为其他数字,chaffing-by-tail-tweaking即替换密码的末尾几个字符。
  2. Chaffing-with-a-password-model
    类似PCFG方法生成相似的密码达到混淆。
  3. 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列表中的密码发动的攻击。

最后修改:2020 年 10 月 11 日
如果觉得我的文章对你有用,请随意赞赏