Loading... [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 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏