需要可信通道的对应方面(见 第 7.11 节)是向用户保证他们确实在使用他们想要使用的程序或系统。
传统的例子是“伪造登录”程序。如果一个程序被编写得看起来像系统的登录界面,那么它可以保持运行。当用户尝试登录时,伪造登录程序可以捕获用户密码以供日后使用。
解决这个问题的一个方案是“可信路径”。可信路径仅仅是一种机制,它提供用户正在与他们想要通信的对象进行通信的信心,确保攻击者无法拦截或修改正在通信的任何信息。
如果您要求输入密码,请尝试建立可信路径。不幸的是,即使对于正常的登录序列,标准的 Linux 发行版和许多其他 Unix 系统也没有可信路径。一种方法是在登录前要求按下不可伪造的键,例如,Windows NT/2000 在登录前使用“control-alt-delete”;由于 Windows 中的普通程序无法拦截此按键模式,因此这种方法创建了可信路径。Linux 有一个等效的机制,称为安全关注键 (SAK);建议将其映射到“control-alt-pause”。不幸的是,在撰写本文时,SAK 尚不成熟,并且 Linux 发行版对其支持不佳。另一种在本地实现可信路径的方法是控制一个只有登录程序才能执行的单独显示。例如,如果只有受信任的程序可以修改键盘灯(显示 Num Lock、Caps Lock 和 Scroll Lock 的 LED),那么登录程序可以显示一个运行模式来指示它是真正的登录程序。不幸的是,由于在当前的 Linux 中普通用户可以更改 LED,因此 LED 当前不能用于确认可信路径。
可悲的是,对于网络应用程序来说,问题要严重得多。虽然为网络应用程序建立可信路径是可取的,但完全做到这一点非常困难。当通过网络发送密码时,至少在可信端点之间加密密码。这将至少防止未连接到系统的人员窃听密码,并至少使攻击更难执行。如果您担心实际通信的可信路径,请确保通信已加密和认证(或至少经过认证)。
事实证明,这不足以拥有网络应用程序的可信路径,特别是对于基于 Web 的应用程序。有记录的方法可以欺骗 Web 浏览器的用户,让他们认为自己在一个地方,而实际上在另一个地方。例如,Felten [1997] 讨论了“Web 欺骗”,用户认为他们正在查看一个网页,但实际上他们查看的所有网页都通过攻击者的站点(攻击者可以监视所有流量并修改任何双向发送的数据)。这是通过重写 URL 实现的。通过使用其他技术(如 Javascript)隐藏状态行、位置行等中的任何可能证据,可以使重写的 URL 几乎不可见。有关更多详细信息,请参阅他们的论文。另一种隐藏此类 URL 的技术是利用很少使用的 URL 语法,例如,URL “http://www.ibm.com/stuff@mysite.com”实际上是使用不寻常的用户名“www.ibm.com/stuff”请求查看“mysite.com”(一个潜在的恶意站点)。如果 URL 足够长,则不会显示真实内容,并且用户不太可能注意到该漏洞。另一种方法是创建名称与“真实”站点故意相似的站点 - 用户可能不知道其中的区别。在所有这些情况下,简单地加密线路并没有帮助 - 攻击者可以很乐意在完全控制所显示内容的同时加密数据。
应对这些问题更加困难;目前我没有很好的技术解决方案来完全防止“被愚弄”的 Web 用户。我鼓励 Web 浏览器开发人员对抗这种“愚弄”,使其更容易被发现。如果您的用户正确连接到正确的站点至关重要,请让他们使用简单的程序来应对威胁。示例包括让他们停止并重新启动浏览器,并确保 Web 地址非常简单且通常不会拼错(因此不太可能拼错)。您可能还想获得一些听起来“相似”的 DNS 名称的所有权,并搜索其他此类 DNS 名称和材料以查找攻击者。