尝试连接到错误的服务器时,是否显示SSH密码?


192

当您不小心尝试使用密码凭据连接到错误的服务器时,管理员是否可以读取和记录您使用的密码?



41
在ssh客户端中,您首先对服务器进行身份验证,然后说“我相信我可以告诉我该服务器的密码”。下次,请密切注意您首先看到的消息:“无法确定X的真实性。RSA密钥指纹是Y您确定Z?(是/否)”是否会询问此烦人的问题每次自动回答
kubanczyk

6
可以PasswordAuthentication no默认在OpenSSH中进行设置,并且仅在受信任的服务器上启用(如果需要)。以严格的主机密钥检查相结合,这应该主要是保护你暴露你的密码,在过程中的便利性为代价。
hobbs

6
@kubanczyk,如果您想通过SSH连接到“ internal-www.my-company.com”,但无意中输入“ ssh www.my-company.com”,则该提示将无法保护您-可能两台服务器都是在您信任的清单上,只是其中一个是由您管理,另一个是由第三方管理。
标记

@hobbs,ChallengeResponseAuthentication no太,我认为
ilkkachu

Answers:


215

简单地说:是的

更多详情...

如果您连接到我的机器,则您不知道我是在运行普通ssh服务器,还是已经修改以写出所通过密码的服务器。

此外,我不一定需要进行修改sshd,但可以编写一个PAM模块(例如使用pam_script),该模块将通过您的密码。

所以,是的。 永远不要将您的密码发送到不受信任的服务器。机器的所有者可以轻松地将其配置为记录所有尝试输入的密码。

(实际上,这在信息安全世界中并不罕见;设置一个蜜罐服务器来记录尝试输入的密码)


13
正确。默认情况下,该标准sshd没有密码登录。(如果您输入密码作为登录名,则将其记录下来,但这是另一个问题)。该标准sshd是一种安全工具,因此不会记录这样的凭据:-)
Stephen Harris

116
使用公钥/私钥对的另一个原因...
Gerrit

3
我一直在想我的密码使用了一段时间,最近我才发现,尝试登录到错误的服务器将是向恶意服务器管理员透露我的密码的好方法。
vfclists

10
@vfclists登录到错误的服务器也正是您的sshd客户端为每个服务器存储指纹的原因。首次连接时,您会接受该指纹,然后如果指纹不匹配,则会收到一个巨大的警告,应予以注意。
hometoast

44
更好的建议:永远不要对ssh 使用密码验证。该协议具有pubkey auth的理由非常充分。用它!
R.,

52

是。

建立加密连接后发送密码,但远程服务器以纯文本格式获取密码。

如果您担心的话,最好,最简单的解决方案是使用SSH密钥。

如果您的机器无法接受密钥,那么一种解决方案是创建一个安全存储密码的工具,然后sshpass根据所连接的服务器始终发送正确的密码。


现在,密码以明文形式发送的原因是,它会将处理和存储密码的所有决定留给了远端,并且客户端可以完全傻了。在过去十年左右的时间里,Linux和BSD系统中使用了两种不同的密码哈希(存储)格式(crypt(3)),它们都不需要客户端的支持。

尽管那也部分是由于历史原因(即一直都是这样)。有更好的质询响应身份验证协议,即使密码也可以使用。例如SRP,它在身份验证期间为双方提供了共享的机密。它已为某些SSH服务器实现,但是OpenSSH的修补程序适用于(非常旧的)旧版本。


1
用于密码认证的质询-响应协议的问题在于其中一些要求服务器以纯文本格式存储密码。如果质询响应协议确实允许服务器存储哈希密码,则很可能需要非常特定的哈希算法。
kasperd's

8
密码通常以“明文”发送(即实际上不是明文发送的,而是仅具有底层SSH | TLS |所提供的保护)。如果系统要求在客户端对密码进行哈希加密并发送哈希值,则服务器将无法获得实际密码,而是将访问权限授予任何可以提供密码哈希值的人,从而使哈希值与密码等效。
Blacklight Shining

1
@BlacklightShining确实存在零知识密码证明,但在SSH中未使用,因为没有办法为它们使用标准密码数据库,也没有使用基于密钥的身份验证的真正意义。
Random832 '16

在哪里可以看到用于身份验证的密码?它们不在/var/log/auth.log中,那么在哪里?
アレックス

OpenSSH不会记录密码,否则会失败。(我对其他SSH服务器不是很熟悉。)在几乎所有合法的安装中,故意提供密码所固有的风险将抵消其可能提供的任何价值-其中某些可能是由输入错字的合法用户提供的。或尝试使用其他明文形式的错误但正确的密码。但是,如果您有充分的理由这样做,则修补OpenSSH很容易。
musicinmybrain

10

为了建立斯蒂芬·哈里斯(Stephen Harris)的答案,这是我构建的实时视图,该视图显示了通过ssh(某种蜜罐)连接到盒子时,修改后的PAM身份验证脚本将能够捕获的内容。我使用了PAM库lib-storepw的修改版本。

https://livesshattack.net

https://livesshattack.net/about


4
万一链接不可用,则主要是链接的答案会被皱眉(听起来您个人维护了此站点,但仍然如此)。您应该描述一下如何使用针对读者的身份验证脚本来管理它。
Centimane

它不再工作了,我发送了一个很大的字符串作为密码,我想这可能已经破解了,对不起:-/
scottydelta

@scottydelta尽管我没有研究过,但是对PAM模块或SSH守护程序本身可以接受的身份验证密码大小可能存在缓冲区限制。该站点仍在按我的预期工作,尽管确实可以处理sshd或PAM模块接受的缓冲区限制。
威利·S。

出于兴趣,修改后的lib-storepw的源可供其他人使用吗?
蒂姆·弗莱彻

2

SSH是一种需要相互信任的协议。因此,OpenSSH客户端维护一个known_hosts文件,以实现其对首次使用方案的信任。

当您尝试登录SSH服务器时,无论是谁提供了该软件或该软件配置了要记录的数据,都在参与某些身份验证过程。使用密码验证时,您正在将密码传输到该服务器。这就是为什么建议使用非对称加密(公共密钥,证书)的原因之一-公共密钥加密极大地降低了泄露凭据的风险。(尽管如果使用ssh-agent转发或类似方案,这可能无法保护您免受MitM攻击。)


SSH不需要相互信任,或者至少不需要对称信任。重要的是要精确:known_hosts是关于真实性,而不是信任。如您所指出的,将公钥放置在不受信任的主机上是安全的。的确,假设您不重复使用该密码,那么使用密码登录也是“安全的”。(当然,它仅与信任服务器的程度一样安全。)即使基于主机的ssh登录也依赖于非对称信任。
markhahn's
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.