时间会告诉你:探索SSH公钥认证中的信息泄露
摘要
SSH客户端公钥认证方法是最常用的公钥客户端认证方法之一。尽管该方法广受欢迎,但其具体协议并不为人熟知,甚至高级用户也可能对其功能存在误解。我们描述了SSH公钥认证协议,并识别出可能影响客户端隐私的薄弱环节。进一步地,我们审查了OpenSSH对该协议的部分实现,发现了潜在的时序攻击信息泄露问题。为了评估这些信息泄露的严重性,我们构建了一个修改版的SSH库,可用于以任意公钥数据块查询该认证方法并测量响应时间。随后,我们利用所获得的查询时序差异来枚举有效用户及其密钥类型。此外,为了推进对远程时序攻击的认识,我们研究了在Tor隐藏服务(HS)连接中时序信号的可利用性,并提出了过滤方法,使该攻击在HS环境下的效率提高了一倍。
1 引言
SSH协议版本 2[1]用于数百万台面向互联网的机器上的远程shell连接。它被用于管理等重要任务,并被视为执行此任务的已知且安全的解决方案。尽管SSH是一个古老且广为人知的协议,但其客户端公钥(授权密钥)认证方法及相关实现细节的研究相对较少。
针对SSH最常见的攻击是针对密码认证方法的。无论是中间人攻击者窃取凭据的服务器端攻击,还是主要针对密码的客户端密码暴力破解攻击。公钥认证方法则较不易受到攻击。例如,中间人攻击者无法通过重放签名来获得访问权限。主要适用于对弱密钥[2]的攻击。事实上,在线SSH暴力破解攻击主要涉及具有弱密码或弱密钥以及已知用户名的系统。如果攻击者能够枚举有效用户名,则凭据暴力破解攻击将变得更加有效。攻击者可以放弃没有已知账户的主机,并针对有效账户使用更多可能的凭据进行攻击。
本文中,我们重点研究SSH公钥认证方法及其在OpenSSH中的实现,将其作为在目标服务器上枚举用户账户的工具。我们还讨论了公钥隐私问题,该问题允许跨目标系统关联用户,而在已知存在弱密钥或短密钥(768位)的情况下,还可能危及目标系统安全。此外,用户枚举本身在高敏感环境中也可能带来问题。例如,Tor位置隐藏服务(HS)可能包含泄露敏感信息的用户名。
通过研究在Tor隐藏服务上运行的服务对计时攻击的易受攻击性,我们为计时攻击领域做出了贡献,而不仅仅是在新目标上重复已知方法[3,4]。针对Tor隐藏服务的攻击设置以及所采用的过滤方法是本文的主要贡献之一。此外,据我们所知,此前尚无关于在Tor隐藏服务架构之上运行的服务遭受计时攻击可行性的研究。
本文概述了SSH授权密钥协议及其在OpenSSH服务器守护进程中的实现。根据这些实现细节,我们构建了一种针对服务器的时序攻击工具[5]。我们使用该工具通过公钥认证方法的查询时序来确认目标服务器上的有效用户名。我们在本地主机(回环接口)、局域网、广域网以及Tor隐藏服务网络上测量了计时攻击的有效性。在展示实验结果后,我们讨论了可能的修复措施及其潜在的缺点。
2 相关工作
时序攻击利用操作之间的相对时序,而这种相对时间依赖于某个秘密值。针对密码系统最重大的现代远程时序攻击之一是由布鲁姆利和博内[6]完成的。他们开发了从局域网时序信道获取可靠测量的基本方法。这些方法随后被克罗斯比等人[7]以及劳森和尼尔森[8]进一步改进和量化。此外,基于这些研究成果,后来还开发出了通用时序工具[9]以及用于Web应用攻击的专用时序工具[10]。
利用不同密码系统的远程时序攻击并未消失[11]。然而,随着系统不断改进,现代攻击转而试图利用在共享基础设施(例如公共云)上运行攻击者代码时,由共享缓存命中与未命中所产生的相对较明显的计时信号[12–14]。
针对SSH的时序攻击也有着悠久的历史。例如,当用户在键盘上输入时,字母之间的时序可以用来推断最可能的字母序列。最早的SSH时序攻击[15]利用了键盘输入中的时序差异来恢复密码和其他敏感信息。目前这些时序攻击的可行性尚不明确[16]。然而,这种时序攻击要求观察者能够以良好的时间分辨率捕获线路上的加密数据包。
密码认证方法中,有效用户与无效用户在认证时的时序差异被利用来枚举用户在OpenSSH服务器上[17]。服务器在比较长密码时会花费明显的时间,具体取决于用户名是否存在。修复方法是将不存在的用户一视同仁,将密码与伪密码哈希进行匹配。后来,又发现伪密码哈希存在另一个计时问题,因为在某些配置下,它没有使用与有效账户相同的哈希函数[18]。这些攻击已被修复,本研究类似,但针对的是公钥认证方法。
弱密钥也可能受到攻击。例如,Debian项目在其伪随机函数中存在漏洞,导致生成了弱私钥[19]。这些弱密钥的公钥随后从公共守护进程中被挖掘出来[20]。最近针对主机上SSH授权密钥的研究工作[2]允许管理员在其系统上搜索这些密钥。对抗性攻击使用暴力破解工具[21]从远程系统查询已知的弱密钥。
从公开可用的GitHub[22]密钥数据库中挖掘出了弱SSH密钥。该GitHub密钥数据库还被用于识别连接用户的GitHub身份[23]。使用默认设置的OpenSSH客户端会查询所有放置在默认位置的密钥,这使得服务器能够向客户端查询这些密钥。
类似的技术已被应用于Kippo SSH蜜罐中,以通过攻击者发送给服务器的密钥来识别连接的攻击者[24]。
针对Tor的时序攻击研究主要集中在去匿名化攻击上,这类攻击试图利用观察到的流量模式中的时序差异[25]。例如,时序分析已被用于通过电路路径选择中的弱点来定位Tor隐藏服务[26]。这项工作与我们的研究有很大不同,因为我们针对的是Tor隐藏服务系统之上的应用,而不是Tor网络本身。与此相反,与我们类似的是针对同时具有公网IP地址的Tor隐藏服务SSH服务器的公钥关联攻击[27]。
3 SSH公钥认证方法描述
在启动客户端认证过程之前,服务器和客户端首先执行密钥交换[1]。该密钥交换用于保障通信安全,并将信道与握手双方绑定。在密钥交换过程中,客户端和服务器还共同生成一个会话ID,该会话ID通过伪随机函数从握手数据中导出,握手数据包括密钥、随机数以及密钥交换结果。握手完成后,服务器对会话ID进行签名,以明确验证握手的有效性。客户端使用服务器的公钥验证此签名。
通常情况下,客户端会在首次连接时保存该公钥,并在后续连接同一主机时使用该密钥验证握手。服务器的公钥也可以通过其他方式传递给客户端,例如基于DNSSEC的SSHFP[28]。如果不存在其他方法,客户端应通过带外方式验证密钥(这在实践中很少实现[29])。
在服务器经过认证后,客户端认证开始。服务器以逗号分隔的字符串形式发送可接受的认证方法发送给客户端。可能的认证方法包括,例如,无认证、密码认证和公钥认证。
本文重点研究公钥认证方法。
客户端的公钥认证通常分为两个阶段。第一个阶段是密钥查询阶段,该阶段可能省略签名;如果查询阶段成功,则进入第二个签名阶段。SSH公钥协议设计用于支持加密的私钥,由于解密私钥需要密码,因此在向用户提示输入密码之前,先检查服务器是否接受该密钥是有意义的。此外,也存在一些性能方面的考虑[1]。然而,可以认为如果使用EdDSA等快速签名方法,签名生成时间对现代计算机而言并不是问题。
事实上,在选择公钥认证方法后,客户端会发送ssh msg userauth request,其内容为[1]:
字节 SSH_MSG_USERAUTH_REQUEST
字符串 用户名(UTF‐8编码)
字符串 服务名(US‐ASCII编码)
字符串 "publickey"
布尔值 FALSE
字符串 公钥算法名称
字符串 公钥数据块
公钥数据块是一个Base64编码的字节数组,其中包含以SSH公钥格式表示的密钥。SSH公钥格式是针对每种密钥类型特有的长度‐值(LV)编码的字节数组的集合。例如,RSA密钥包含字符串“ssh‐rsa”、公钥指数和密钥模数,均以长度‐值编码的字节数组形式表示。相比之下,EdDSA密钥则包含“ssh‐ed25519”以及公钥x坐标,两者均采用长度‐值编码。
当SSH服务器收到公钥时,它会访问用户的“authorized keys”文件,或执行其他查找操作。这些其他查找操作可能包括LDAP查询、数据库查找,或通过AuthorizedKeyCommand定义的任何操作。
如果密钥对身份验证有效,服务器将回复一个 ssh msg-userauth pk ok消息。此消息会回显被服务器接受的密钥。如果密钥对身份验证无效,则返回一个ssh msg userauth-failure消息,该消息不包含任何负载。[1]
如果密钥被接受,客户端会发送一个 ssh msg userauth request,其中布尔值设置为true,并附加一个对会话ID和其余 ssh msg userauth request消息内容的签名。由于会话ID保证了贡献性和新鲜性,因此在没有nonce重用的情况下,无法进行重放或中继攻击,且认证与密钥交换绑定。如果第二阶段发送的密钥是可接受的,并且签名验证成功,则客户端登录成功。
4 SSH公钥隐私与可关联性
从协议描述及相关工作来看,我们注意到该协议可能会引发一些隐私问题。例如:
- 服务器获取客户端的公钥,尽管之前并不知晓这些公钥[23,24]
- 主机可将连接的客户端与已知的公钥进行匹配[23]
- 攻击者无需拥有对应的私钥即可通过主机确认公钥与用户名的配对关系
- 恶意主机可通过接受任意公钥的方式对客户端发起攻击
事实上,在查询阶段,服务器会获得客户端的原始公钥。其他服务器和数据库可以针对该特定密钥进行查询。当然,服务器在最后阶段需要公钥来验证签名,但在查询阶段并非必须提供完整的密钥。这些公钥还以一种允许管理员从其他服务器查询它们的格式保存。另一种方法是使用服务器特定盐值将密钥保存为摘要。
为了防止这种情况,查询阶段可以对公钥进行相互确认。简单的修改方法是使用以会话ID为密钥的消息认证码(MAC)将密钥作为摘要进行传输。例如,
客户端发送 MAC(H(sessionID), H(PKc||PKs)),服务器则回复 MAC(H2(sessionID), H(PKc||PKs))。
客户端能够查询公钥,而无需拥有对应的私钥。这使得例如可以使用密钥目录中的公钥扫描目标服务器[22]。例如,使用SSH在同一Tor隐藏服务地址中管理网站的Tor隐藏服务网站所有者可能被关联到其Github账户。此外,攻击者在攻破一个系统后,可扫描其他系统中存在的密钥以获取信息。
确实,由于私钥可以在磁盘上加密,客户端在查询受支持的公钥时无需提供私钥的持有证明。如果需要持有证明功能,客户端可以拥有一个独立的持有证明公钥,该公钥此前已使用主密钥离线签名。然后服务器将验证该持有证明公钥及其生成的签名。由于验证签名需要原始公钥,这将与公钥的相互确认产生冲突。
当前较为宽松的行为的好处在于,SSH公钥查询可以被中继到登录目标所信任的主机。例如,本文使用的工具[5]只需对OpenSSH配置文件进行简单修改,即可实现联合SSH授权密钥登录。
AuthorizedKeysCommand /usr/bin/askkey \ -h federation - host -hk 主机_密钥 -u %u -t %t -k %k
如果目标主机接受该密钥,则允许用户使用该密钥登录。这使得可以通过在网络中设置单一的密钥服务器,或跨组织边界,来简化SSH密钥管理。
如上所述,这种方法的缺点是,类似的修改也允许恶意服务器进行侵犯隐私的密钥检查,或接受任何密钥(例如,使用echo作为 AuthorizedKeysCommand)。然后,攻击者可以利用代理转发,钓鱼获取用户的密码,或监控用户操作。最后一种威胁在机器对机器场景中尤为值得关注。对于人类用户,同样效果也可以通过none认证实现。
5 OpenSSH实现中的侧信道
5.1 用户账户枚举
对于无效用户的公钥查询,应以恒定时间完成,以避免泄露用户名是否存在。我们注意到,在OpenSSH的授权密钥匹配函数中,针对无效用户存在提前返回的情况。通过在本地主机上的试验运行(图1),并结合[8]中提供的估算方法,我们明确发现该分支行为在广域网上是可被利用的。此外,我们注意到,与没有任何密钥的用户相比,拥有多个密钥的用户在时间差异上更为显著。
为了评估时间泄漏的严重性,我们在几种不同条件下对其进行了研究。对于用户枚举,研究问题是:在不同网络中,针对OpenSSH服务器,需要多少次 SSH握手才能以低于5%的错误率区分有效用户和无效用户。
- 本地主机 。攻击者通过回环接口连接。
- 局域网 。攻击者和目标通过交换机连接
- 广域网 。攻击者和受害者位于不同的网络中
- Tor网络 。目标是Tor网络上的隐藏服务[30]
测试是在 Ubuntu 15.10 上的 OpenSSH 6.9p1 上进行的,但随后也在 OpenSSH 7.3 上进行了验证。我们将攻击代码构建为通用 Golang SSH 库的一个分支。该应用连接到 SSH 服务器,发起公钥认证,并查询一组给定的公钥。
计时器在发送查询包之前启动,在收到回复后停止。每次与 OpenSSH 的握手只能查询一个用户名。尽管协议允许更改用户名,但服务器在用户名更改时会返回错误。此外,默认设置下每次最多只能同时查询五个密钥。为了减轻信道条件变化的影响,我们在每次连接时交替使用不同的类别。
从数据中我们注意到,连接中的第一次密钥查询所花费的时间几乎总是明显长于其他查询。为了解决这个问题,我们将所有样本集划分为每五个测量值为一组。由于我们仅使用其中最快测量值的子集,因此首次查询较慢的问题不会产生影响。然而,由于对比的配对需要保持同步,我们的工具要么记录完整的五次密钥查询数据集,要么返回错误。
我们使用的分类函数来自[7]中的盒子测试。我们将测量集划分为单独的样本集,并对其进行排序以过滤网络噪声(图1)。盒子测试从排序后的样本集中取一个区间,例如从最小值样本(q0)到第六个样本(q5),并将此区间与另一个集合中相同排序区间的范围进行比较。如果区间不重叠,则进行分类。
我们比较各个样本集对,得到一个总体的错误率,因此没有区分假阴性和假阳性。这种区分对于实际攻击而言非常重要。在信道条件稳定的情况下,攻击者可以使用一个固定值作为阈值。这可以使攻击速度提高一倍,但需要针对特定的网络条件和场景调整阈值。例如,如果攻击是针对性攻击,从攻击者的角度来看,假阴性问题远比假阳性严重得多。
5.2 授权密钥的机密性
授权密钥文件的内容也应保密。这些密钥可能是已知的弱密钥,或者长度不足。然而,OpenSSH 的公钥匹配过程似乎并非完全时间安全。代码在发现不等性时会立即返回。如果攻击者能够检测到各个字节的正确性,则可以逐字节对密钥发起猜测攻击。
来自现有用户授权密钥文件的密钥会被解析,并全部与客户端提供的密钥进行比较。首先比较的是密钥类型。然后根据密钥类型进入不同的分支。例如,对于RSA密钥,比较代码会构建两个密钥的大数表示,并逐字节进行比较。而 EdDSA密钥则使用“memcmp”进行比较。
[8]中的分支和比较操作的时序差异预测单个字节或字的比较耗时仅为纳秒的一小部分,即使在本地主机上也无法测量,但涉及指令缓存的较大分支操作应可被检测到。
代码会根据是否存在与查询密钥相同类型的密钥进行分支操作。因此,我们预测能够通过本地主机信道检测出已知用户 authorized‐keys 文件中存在的密钥类型。然而,由于比较操作相对快速,我们不应能够区分正确的公钥字节。
6 洋葱路由隐藏服务SSH服务器时序攻击设置
洋葱路由是一种通过将通信实体的流量经由多个(通常为三个)中继组成的电路进行转发,从而隐藏其IP地址的技术。每个中继仅能看到电路中的前一跳和下一跳,这意味着没有任何一个中继能够知晓真实的源地址和目的地址。
Tor隐藏服务,也称为位置隐藏服务,通过Tor电路连接到若干个引入点(通常为三个),从而使隐藏服务能够接收传入连接而不必公开其IP地址。隐藏服务会发布其引入点列表,并使用私钥对该列表进行签名。隐藏服务地址是对应该公钥的截断哈希值,既作为用户友好的名称,也作为HSDir哈希表查找键。该公钥允许客户端通过引入点向隐藏服务发送连接初始化消息,以加密其中的对称密钥。
事实上,客户端通过向隐藏服务的某个引入点发送一个加密数据包来建立连接,该数据包中包含一个会合点(一种特殊类型的中继)地址和一个对称密钥。为了响应,服务器构建一条通向该会合点的电路,并使用该对称密钥对数据进行加密和认证。客户端和服务器随后通过各自对应的Tor电路经由该会合点继续通信。
Tor隐藏服务系统的设计导致了一些可变延迟。洋葱路由网络中的路由器(即中继)是遍布全球的互联网连接主机。因此,Tor网络中的转发路径建立在多个TCP/IP协议栈之上。所有这些协议栈都有各自的流量控制机制。因此,数据包时序的变化应比典型的广域网连接大得多。
隐藏服务独立选择通往会合点的路径,且该路径可能会发生变化。人们可能认为每个TCP连接的路径都不同。然而,实际上隐藏服务会重用其通往会合点的Tor电路。这提高了它们的效率,而在我们的情况下,相对时序也得到了改善。此外,客户端能够在不使用Tor电路的情况下进行连接。事实上,官方Tor守护进程可以以 Tor2Web模式[31],构建,该模式跳过客户端侧的电路,直接连接到会合点。
我们使用启用了Tor2Web补丁的攻击主机Tor守护进程搭建了系统。目标隐藏服务运行的是常规的Tor守护进程,并且该隐藏服务暴露了SSH守护进程端口。攻击客户端通过Delegate代理连接,该代理将来自本地主机某个端口的流量转发至目标隐藏服务。由于我们的客户端不包含SOCKS连接性,且Tor项目提供的工具(如 torify)无法与我们的客户端配合使用,因此需要此代理服务器。
7 结果
7.1 用户枚举
用户枚举实验的结果如表1所示。该表格列出了盒子测试所使用的握手次数、采用的分位数、实现对样本对之间结果且错误率低于5%所需的样本对数量,以及观察到的错误率。 n表示单个样本中的样本大小(每次握手5个样本)。
| 网络 | 握手次数 箱线 | 图界限 正确 | 样本数 错误率 | n |
|---|---|---|---|---|
| 本地主机 | 1 | q0 5.0 | 0.7% | 50,000 |
| 本地主机 | 2 | q0 10.0 | 0.1% | 50,000 |
| LAN | 1 | [q0, q2] 6.1 | 2.7% | 50,000 |
| LAN | 1 | [q0, q3] 6.7 | 1.5% | 50,000 |
| WAN | 1 | [q0, q1] 5.8 | 3.2% | 125,000 |
| WAN | 1 | [q0, q2] 6.9 | 1.6% | 125,000 |
| 高速(未过滤) 155 | [q0, q4] 1017 | 4.6% | 249,165 | |
| HS (filtered) | 60 | [q0, q4] 526 | 3.3% | 249,165 |
广域网的时序分辨率比预期更好,因此有可能仅通过一次握手的数据进行精确比较。事实上,广域网的结果几乎与局域网情况下的结果相同。该测试在大学网络与一家主要云服务提供商之间进行,这可能是一个影响因素。此外,局域网情况中使用的目标主机与其他测量中的主机不同(参见表2中的考虑事项)。
Tor隐藏服务被证明是一个难以进行计时攻击的目标。最初的分类测试是在未对信号进行过滤的情况下进行的。在握手次数最少的情况下取得最佳结果的盒子测试参数,来自第二个样本到第五个样本的分位数。所使用的样本集大小为31次握手,共计155个样本(表1)。样本与正确识别的比率显示,平均需要1017对样本(每组约203个连接)才能完成一次分类,这意味着平均每六次分类中仅有一次成功。然而,我们注意到,增加样本数量并不会提高准确率(除非样本集过大)。
错误率并未因增加样本数量而改善,且从轨迹图(图2)中可以看出信道随时间变化。因此,我们进行了过滤处理,并在滤波频带内执行了盒子测试。我们使用了包含50个样本的滑动最小值滤波器(图2),然后采用Sobel边缘检测来确定频带。尽管在过滤过程中不得不丢弃部分样本,但分类结果仍提升了两倍。
令人好奇的是,对于某些目标主机,第一个样本是最优预测器。从表2中我们注意到,对于我们的局域网目标主机,使用第一个样本的分类准确率明显更高。该主机使用了机械硬盘,这可能解释了这一结果。然而,第一个样本的行为在不同系统中并不一致,例如,在表2中用于本地主机测量的云实例,其检测标准完全相反。
| 网络 | 样本/集合 分类 | 错误率 总样本 | |
|---|---|---|---|
| 本地主机 1 | 100% | 95.2% | 2,000 |
| LAN | 1 | 100% | 0.2% |
7.2 授权密钥的机密性
还进行了额外的测试,以确定是否可能发现密钥类型。在本地主机上,密钥类型发现需要 150 次握手才能将错误率降至 5% 以下。使用的样本分位数与洋葱路由相同。
| 网络 | 握手次数 箱线 | 图界限 正确 | 样本数 错误率 总 | 样本数 | |
|---|---|---|---|---|---|
| 本地主机 30 | [q1 , q5] | 217 | 4.2% | 40,000 |
此外,还对 EdDSA 和 RSA 密钥在部分字节正确的情况下进行了计时测试,但未产生有意义的结果。对于 EdDSA,误报率为 50%,表明没有信号。对于 RSA 密钥,可以获得略好的结果,主要归因于更大的密钥尺寸。
盒子测试针对两个部分正确的密钥的握手结果进行,其中第一个密钥的 RSA模数字节表示中差异出现在比第二个密钥更靠前的字节位置。第一种情况的差异位于第10个字节,第二种情况位于第274个字节。样本集包含250万个样本对。然而,最佳实现的错误率仍保持在30%至40%之间,未能达到目标的5%,且检测率也很低(一次识别需要超过2万个样本对,且错误率较高)。
然而,任何信号对于实际攻击来说都是无用的。在现代计算机上,大数比较是使用64位值进行的。要真正恢复密钥,攻击者需要达到一个字节的分辨率,密钥恢复攻击才具有可行性。以64位为单位恢复密钥将要求攻击者每个块平均尝试 2^63个候选值,这显然是不可能的。
8 时序攻击修复方案
通常,针对枚举攻击的修复方法是对所有用户进行相同的处理。但对于SSH密钥而言,这存在问题,因为用户可能拥有不同数量的密钥,检查所需的时间也会有所不同。我们提出了四种方案:
- 将不存在的用户视为不拥有任何密钥的用户。
- 以一种确定但不可区分的方式将不存在的账户映射到真实用户。
- 在预定义的最短时间后返回[33]
- 在依赖于攻击者输入的伪随机延迟后返回[33]
第一种选项在实现上存在问题,因为 Linux 上底层的“getpwnam”系统调用很可能是导致时间变化的原因。要改变其行为需要在操作系统级别进行修改。另一个时间信号的来源似乎是权限分离的磁盘读取,该操作对无效用户会被省略。然而,当用户不存在时,此函数完成所需的时间更长。此外,仅当大多数用户账户未配置授权密钥时,修改这些函数才有帮助。
第二种选项不应泄露有关已知存在用户的密钥数量和密钥类型以外的信息。首先,构建一个包含所有有效用户的键控哈希表。使用相同的密钥对提供的用户名进行哈希,并在哈希表中查找最接近的匹配项。使用最接近的匹配项执行实际的密钥查找,如果匹配不完全,则使用修改后的密钥。这种方法在无法高效枚举有效用户的环境中存在问题。
第三种选项,即仅在预定义的最短时间过后才返回响应,乍一看似乎是时间安全的。本质上,当收到请求时,会启动一个计时器启动后,在发送回复之前停止计时器,并休眠缺少的最短时间。然而,安全时间范围因系统而异,难以准确估计。此外,sleep 系统调用的行为可能因负载产生波动,以及非线性特性,尤其是对于非常短的休眠时间。完全安全的上限估计会导致用户长时间延迟,影响用户体验。延迟的好处是用户可能会因此改善密钥管理习惯,停止向所有主机发送其所有默认密钥。额外的延迟也会减慢攻击者获取样本的速度。
第四种方法是添加一个依赖于攻击者输入的密钥化摘要的睡眠延迟。这消除了攻击者直接比较两个值的时间的能力,除非他们能够找到该密钥化摘要的碰撞1。然而,由于可用性的限制,这种延迟也必须被限制在合理的范围内。因此,如果时间泄漏相对于上限较大,则该延迟可以被过滤掉。不应将这种缓解机制与完全随机的延迟混淆,后者可以毫无困难地被过滤[33]。
9 未来工作
除了 OpenSSH 之外的其他 SSH 服务器的行为也可以进行研究。然而,嵌入式设备中使用的 SSH 服务器被排除在本研究之外,因为典型的嵌入式设备通常只具有根账户。
应评估基于延迟的计时攻击修复措施,如果将其纳入 OpenSSH 代码库。
密钥保密性攻击可以在字长较小的主机以及其他非 OpenSSH 的 SSH 服务器上进行评估。
10 结论
我们对SSH公钥客户端认证协议的分析揭示了密钥查询协议在隐私性方面的缺点。我们提出了对该协议的改进建议,但同时也承认当前协议具有通用性和简洁性。
我们对 OpenSSH 实现细节的调查发现了一种时间泄漏,可用于以较高的准确度枚举 OpenSSH 用户。我们通过仅一次 SSH 握手即可可靠地测量该计时通道。此外,密钥类型的信息也可被发现。然而,无法可靠地探测到单个公钥字节,也无法检测到更大的差异。
为了推进对时序攻击限制的认识,我们成功实现了据我们所知首个针对 Tor HS应用的时序攻击。该攻击在Tor网络上速度较慢,但产生了与直觉相反的结果。我们还表明,可以应用简单的过滤来提高Tor时序攻击的准确性。这一结果意味着HS应用开发者在基于敏感输入进行分支判断时应格外谨慎。
670

被折叠的 条评论
为什么被折叠?



