4月阅读周·HTTP权威指南:摘要认证之安全性考虑篇

举报
叶一一 发表于 2025/04/22 09:41:01 2025/04/22
【摘要】 引言HTTP(Hypertext Transfer Protocol,超文本传输协议[插图])是在万维网上进行通信时所使用的协议方案。HTTP有很多应用,但最著名的是用于Web浏览器和Web服务器之间的双工通信。《HTTP权威指南》一书将HTTP中一些互相关联且常被误解的规则梳理清楚,并编写了一系列基于各种主题的章节介绍HTTP各方面的特性。纵观全书,对HTTP“为什么”这样做进行了详细的解...

引言

HTTP(Hypertext Transfer Protocol,超文本传输协议[插图])是在万维网上进行通信时所使用的协议方案。HTTP有很多应用,但最著名的是用于Web浏览器和Web服务器之间的双工通信。

《HTTP权威指南》一书将HTTP中一些互相关联且常被误解的规则梳理清楚,并编写了一系列基于各种主题的章节介绍HTTP各方面的特性。纵观全书,对HTTP“为什么”这样做进行了详细的解释,而不仅仅停留在它是“怎么做”的。此外,这本书还介绍了很多HTTP应用程序正常工作所必需且重要的非HTTP技术。

这本书主要包括以下内容:

  • 第一部分描述了Web的基础构件与HTTP的核心技术
  • 第二部分重点介绍了Web系统的结构构造块:HTTP服务器、代理、缓存、网关以及机器人应用程序。
  • 第三部分提供了一套用于追踪身份、增强安全性以及控制内容访问的技术和技巧。
  • 第四部分涵盖HTTP报文主体和Web标准,前者包含实际内容,后者描述并处理主体内容。
  • 第五部分介绍了发布和传播Web内容的技巧。
  • 第六部分是一些很有用的参考附录,以及相关技术的教程。

摘要认证

基本认证便捷灵活,但极不安全。用户名和密码都是以明文形式传送的,也没有采取任何措施防止对报文的篡改。安全使用基本认证的唯一方式就是将其与SSL配合使用。

安全性考虑

首部篡改

为了提供一个简单明了的防首部篡改系统,要么就得进行端到端的加密,要么就得对首部进行数字签名——最好是两者的结合!摘要认证的重点在于提供一种防篡改认证机制,但并不一定要将这种保护扩展到数据上去。具有一定保护级别的首部只有WWW-Authenticate和Authorization。

重放攻击

在当前的上下文中,重放攻击指的就是有人将从某个事务中窃取的认证证书用于另一个事务。尽管对GET请求来说这也是个问题,但为POST和PUT请求提供一种简单的方式来避免重放攻击才是非常必要的。在传输表单数据的同时,成功重放原先用过的证书会引发严重的安全问题。

因此,为了使服务器能够接受“重放的”证书,还必须重复发送随机数。缓解这个问题的方法之一就是让服务器产生的随机数包含(如前所述)根据客户端IP地址、时间戳、资源Etag和私有服务器密钥算出的摘要。这样,IP地址和一个短小超时值的组合就会给攻击者造成很大的障碍。

但这种解决方案有一个很重要的缺陷。我们之前讨论过,用客户端IP地址来创建随机数会破坏经过代理集群的传输。在这类传输中。来自单个用户的多条请求可能会穿过不同的代理。而且,IP欺骗也并不难实现。

一种可以完全避免重放攻击的方法就是为每个事务都使用一个唯一的随机数。在这种实现方式中,服务器会为每个事务发布唯一的随机数和一个超时值。发布的随机数只对指定的事务有效,而且只在超时值的持续区间内有效。这种方式会增加服务器的负担,但这种负担可忽略不计。

多重认证机制

服务器支持多重认证机制(比如基本认证和摘要认证)时,通常会在WWW-Authenticate首部提供选项。由于没有要求客户端选择功能最强的认证机制,所以得到的认证效果就和功能最弱的认证方案差不多。

要避免出现这个问题,最直接的方法就是让客户端总是去选择可用认证方案中功能最强的那个。如果无法实现(因为大部分人使用的都是商业化客户端),唯一的选择就是使用一个只维护最强认证方案的代理服务器。但只有在已知所有客户端都支持所选认证方案的区域中才能采用这种方式——比如,在公司网络中。

词典攻击

词典攻击是典型的密码猜测型攻击方式。恶意用户对某个事务进行窃听,并对随机数/响应对使用标准的密码猜测程序。如果用户使用的是相对比较简单的密码,而且服务器使用的也是简单的随机数,它很可能会找到匹配项。如果没有密码过期策略,只要有足够的时间和破解密码所需的一次性费用,就很容易搜集到足够多的密码,造成实质性的破坏。

除了使用复杂的相对难以破译的密码和合适的密码过期策略之外,确实没有什么好的方法可以解决这个问题。

恶意代理攻击和中间人攻击

现在很多因特网流量都会在这个或那个地方流经某个代理。随着重定向技术和拦截代理的出现,用户甚至都意识不到他的请求穿过了某个代理。如果这些代理中有一个是恶意的或者容易被入侵的,就会使客户端置于中间人攻击之下。

这种攻击可以采用窃听的形式,也可以删除提供的所有选项,用最薄弱的认证策略(比如基本认证)来取代现有的认证机制,对其进行修改。

入侵受信代理的方式之一就是使用其扩展接口。有时代理会提供复杂的编程接口,可以为这类代理编写一个扩展(比如,plug-in)来拦截流量并对其进行修改。不过,数据中心和代理自身提供的安全性使得通过恶意plug-in进行中间人攻击的可能性变得很渺茫。

没有什么好办法可以解决这个问题。可行的解决方案包括由客户端提供与认证功能有关的可见线索,对客户端进行配置使其总是使用可用认证策略中功能最强的那一种,等等。但即使使用的是最强大的认证策略,客户端仍然很容易被窃听。防止这些攻击唯一简便的方式就是使用SSL。

选择明文攻击

使用摘要认证的客户端会用服务器提供的随机数来生成响应。但如果中间有一个被入侵的或恶意的代理在拦截流量(或者有个恶意的原始服务器),就可以很容易地为客户端的响应计算提供随机数。使用已知密钥来计算响应可以简化响应的密码分析过程。这种方式被称为选择明文攻击(chosen plaintext attack)。选择明文攻击有以下几种变体形式。

  • 预先计算的词典攻击:这是词典攻击和选择明文攻击的组合。首先,发起攻击的服务器会用预先确定的随机数和常见密码的变化形式产生一组响应,创建一个词典。一旦有了规模可观的词典,攻击服务器或代理就可以完成对流量的封锁,向客户端发送预先确定的随机数。攻击者从客户端得到一个响应时,会搜索生成的词典,寻找匹配项。如果有匹配项,攻击者就捕获了这个用户的密码。
  • 批量暴力型攻击:批量暴力型攻击的不同之处在于计算密码的方式。它没有试图去匹配预先计算出来的摘要,而是用一组机器枚举了指定空间内所有可能的密码。随着机器运行速度变得越来越快,暴力型攻击的可行性也变得越来越强了。

总之,这些攻击所造成的威胁是很容易应对的。防止这些攻击的一种方法就是配置客户端使用可选的cnonce指令,这样响应就是基于客户端的判断产生的,而不是用服务器提供的随机数(这个随机数可能会被攻击者入侵)产生的。通过这种方法,再结合一些强制使用合理强密码的策略,以及一个好的密码过期策略,就可以完全消除选择明文攻击的威胁。

存储密码

摘要认证机制将对比用户的响应与服务器内部存储的内容——通常就是用户名和H(A1)元组对,其中H(A1)是从用户名、域和密码的摘要中导出的。

与Unix机器中传统的密码文件不同,如果摘要认证密码文件被入侵了,攻击者马上就能够使用域中所有文件,不需要再进行解码了。消除这个问题的方法包括:

  • 就像密码文件中包含的是明文密码一样来保护它;
  • 确保域名在所有域中是唯一的。这样,如果密码文件被入侵,所造成的破坏也只局限于一个特定的域中。包含主机和domain的全路径域名就可以满足这个要求。

尽管摘要认证提供的解决方案比基本认证要强壮且安全得多,但它并没有为内容的安全提供任何保证——真正安全的事务只有通过SSL才能实现。

总结

RFC 2617总结了HTTP认证方案固有的一些安全风险。

  • 首部篡改
  • 重放攻击
  • 多重认证机制
  • 词典攻击
  • 恶意代理攻击和中间人攻击
  • 选择明文攻击
  • 存储密码

作者介绍
非职业「传道授业解惑」的开发者叶一一。
《趣学前端》、《CSS畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏️ | 留言📝

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。