当使用 Windows 7 mstsc 连接到 Windows Server 2008(远程桌面)时,我注意到一个无法解释的问题。
mstsc 首先要求输入用户名密码。如果我输入了错误的密码,mstsc 会告诉我“用于连接的凭据无效”。
仅当我提供正确的证书后,mstsc 才会警告我服务器的证书不受信任。
我认为 mstsc 应该在验证“我的用户名/密码是否被服务器接受”之前提示“服务器证书不受信任”。
所以我的问题是:如果我连接的服务器是伪造的(由攻击者托管),我的凭证是否会被泄露?
即使在这种情况下我的凭证永远不会被泄露,mstsc 在询问用户名/密码之前提示服务器证书问题不是更好吗?至少,这可以消除普通用户对密码被盗的担忧。
答案1
这里发生的事情有点复杂,但如果你阅读 NLA 和 CredSSP,你就会对它有更深入的了解。
http://technet.microsoft.com/en-us/library/cc749211%28WS.10%29.aspx
http://en.wikipedia.org/wiki/Network_Level_Authentication
基本上,回答你的问题...不会,伪造的服务器不会泄露你的凭据。他们要做的第一件事就是将你的 DNS 欺骗为错误的 IP,但即便如此,RDP 现在的工作方式(假设我们谈论的是 Win7 或 Vista 客户端和 Win2008 或更新的服务器)凭据是加密的,不会暴露(警告是 Technet 文章底部解释的 NTLM)。
以下是 Technet 文章中的一段摘录,希望对您有所帮助:
与 Windows Server® 2003 终端服务器中的体验不同,凭据提示位于客户端计算机上,而不是服务器上。最重要的是,客户端凭据提示位于安全桌面上。因此,即使是终端服务客户端也无法看到凭据,这是一项重要的通用标准要求。此外,在服务器身份通过身份验证(取决于策略配置)之前,不会委派从提示中获得的凭据。最后,在对客户端进行身份验证之前,终端服务器不会为用户建立会话(这会消耗服务器上大量的内存和 CPU 处理时间),从而降低了服务器上成功进行拒绝服务攻击的可能性。
编辑:让我们添加一个例子来澄清......
示例 1 - 用户可以访问远程服务器并使用正确的密码
在此示例中,您将输入用户名和密码,它将在本地向域进行身份验证以验证它是否是有效的用户名/密码,然后尝试连接到远程服务器。此时,如果这是第一次连接,您可能会收到“无法验证远程计算机的身份”的消息,您可以选择信任或不信任它。
示例 2 - 用户可以访问远程服务器并使用错误的密码
在这里您将看到您发布的图片...凭证无效。请输入新凭证。此操作在客户端本地完成(根据 Kerberos 票证或 DC 进行验证),无需连接到远程服务器。
示例 3 - 用户无权访问远程服务器,但使用正确的用户名和密码
在这里,您将在本地进行身份验证,因为它是一个有效的帐户和密码,但是一旦您连接到服务器并传递凭据,您将获得:
希望有帮助...