7.3 防范网络监听、篡改的对策
本节将主要讨论一下 Web 网站的网络监听、篡改攻击的对策。首先还是会先对网络监听、篡改的方法进行说明,之后会讨论如何使用 SSL 来防范网络监听、篡改。
7.3.1 网络监听、篡改的途径
针对 Web 网站的监听及篡改主要通过以下方式实现。
- 通过无线网进行监听、篡改
在无线网中传输的数据,如果没有进行加密的话,则很有可能被网络监听到。网络监听发生的原因主要有(1)通信内容没有被加密;(2)使用了已被破解的诸如 WEP 等加密方法;(3)使用通用密码的公用无线网;(4)使用假的无线热点。如果攻击者设置假的无线热点,还可能轻易发动网络篡改攻击。
- 利用交换机端口镜像
在有线局域网里,有可能利用交换机的镜像端口实现网络监听。不过这种方法只会发生在攻击者能物理接触到网络硬件的条件下。但是即使交换机没有镜像端口,如果攻击者能修改交换机内部线路的话,也可以通过让通信经过中继 HUB 的方法来实现网络监听。
- 利用代理服务器
如果攻击者可以控制代理服务器的话,或者可以在网络中设置代理服务器的话,就可以通过让 HTTP 通信经过代理服务器来实现监听。而且,如果代理服务器支持的话,还可以实现对 HTTP 消息的篡改。本书实验用的 Fiddler 也是代理服务器的一种,也可以用来实现网络监听和篡改。
- 伪装成 DHCP 服务器
在使用 DHCP 的局域网环境中,可以通过伪装的 DHCP 服务器,来实现伪装 DNS 或者默认网关的 IP 地址的目的。一旦伪装成了默认网关的 IP 地址,就和 ARP 欺骗攻击一样,所有的网络通信都会通过伪装的网关服务器,可以轻而易举的实现网络监听和篡改。如果能伪装成 DNS 服务器的 IP 的话,那么就和下面要说到的 DNS 缓存污染一样,发起伪装攻击。
- 使用 ARP 欺骗攻击和 DNS 缓存污染攻击(DNS cache poisoning)
在前面作为网站伪装的方法我们已经介绍过了 ARP 欺骗攻击和 DNS 缓存污染攻击了,这两种方法同时也能被用来实现网络监听和篡改攻击。通过这些方法,攻击者会使用在自己管理下的路由器或者反向代理服务器来对用户通信进行中继,以实现网络监听及篡改的目的。
7.3.2 中间人攻击
前面提到的网络监听和篡改方式中,有一种方式利用了监听设备的中继功能。在这种中继型监听的环境下,即使是加密通信,也可能实现网络监听和篡改。这种方法被称为中间人攻击(Man-In-Th-Middle Attack,MITM)。
下面的图显示了中间人攻击的大概示意。
图 7-7 中间人攻击的例子
中间人攻击如图 7-7 所示,攻击者在用户和目标网站之间接入自己的硬件设备,通过对用户和目标网站 HTTPS 通信的连接,来实现网络监听和篡改。图中通信部分虽然使用了 HTTPS 协议,但是中间人可以在中继器上进行一次解密操作,根据需要决定是否修改原内容,然后再次加密后发给对方。中间人攻击就是利用这样的方式实现了网络监听和篡改。
使用 Fiddler 模拟中间人攻击
为了加深对中间人攻击的理解,我们使用 Fiddler 来模拟一下如何进行中间人攻击。首先,启动 Fiddler 后,选择 Tools 菜单里的“Fiddler Options”,在弹出的对话框里选择“HTTPS”页。在这里,选中“Capture HTTPS CONNECTs”和“Decrypt HTTPS traffic”这两个复选框,如图 7-8 所示。
图 7-8 将 Fiddler 设置为 MITM 模式
选中了这两项后,会弹出如图 7-9 的对话框,在这个对话框里选择“No”。
图 7-9 根证书的导入确认对话框
这时候再去访问 HTTPS 网站,浏览器就会显示安全证书有问题的提示消息,忽略这个提示继续访问网站。Internet Explorer6(IE6)的话会弹出“是否继续”的对话框,点击“是”之后继续会访问 HTTPS 网站。IE7 及以后的版本,可以通过点击“继续浏览此网站(不推荐)”继续访问 HTTPS 网站。下图 7-10 就是这之后访问 verisign 的结果。
图 7-10 访问 HTTPS 网站
这时浏览器的地址栏变为粉红色,地址栏右边也出现了“证书错误”的提示。之后,就可以在 Fiddler 中查看监听到的通信内容了。当然,也可以在 Fiddler 中对 HTTP 通信消息进行修改。
图 7-11 成功监听到 HTTPS 通信内容
从上面的操作我们可以得出如下结论。
- 即使是使用 SSL(HTTPS),通过中间人攻击也能实现网络监听和篡改
- 中间人攻击时浏览器会出现数字证书错误的提示
在中间人攻击中,对连接客户端通信的代理服务器(在这个例子里为 Fiddler)可以看作是一个 Web 服务器。浏览器显示的数字证书错误,相当于是提示了存在中间人攻击的可能。此外,在没有使用正式的证书而是使用自己署名的证书,或者证书的域名不一致、证书过期等情况下,浏览器也会提示证书错误。这时候就不能区分是证书有问题了还是中间人攻击导致的。
专栏:请不要手动安装证书
在上面使用 Fiddler 模拟中间人攻击的例子里,我们在图 7-9 的对话框里选择了“No”,如果选则了“Yes”的话会怎样呢?选择“Yes”的话,就像对话框里提示的那样,会将 Fiddler 生成的根证书导入到 Windwos,这时候在 MITM 模式下,浏览器也不会显示证书错误了。由于这时候 Fiddler 被 IE 所信赖,所以经过 Fiddler 的 HTTPS 通信在浏览器都不会显示错误。
由于这属于比较危险的行为,所以在图 7-9 里我们选择了“No”进行模拟实验。与此相同,如果个人电脑感染了间谍软件(Spyware)也可能出现这种问题。那样的话,SSL 就不能发挥域名认证的作用了。
也有一些网站会要求手动导入根证书,这同样是很危险的行为。应该使用浏览器里保存的正规合法的根证书,或者通过 Windows Update 等安全的方式导入的根证书。
但是这只是适用于网络上提供服务的正式网站,如果是公司内部自建的 CA 的话(私有 CA)则不受此约束。私有 CA 和自己署名证书的区别,可以参考高木浩光的 Blog 文章“PKI 常见误区(3)如果私有认证中心安全的话那么自署名证书也是安全的”9
9 高木浩光 .(2005 年 2 月 5 日).PKI よくある勘違い (3)「ブライベート認証局が妥当ならオレオレ認証局も妥当だ」(PKI 常见误区(3)如果私有认证中心安全的话那么自署名证书也是安全的). 参考日期:2011 年 1 月 13 日,参考网址:高木浩光 @ 自宅日记: http://takagi-hiromitsu.jp/diary/20050205.html#p02
7.3.3 对策
合理利用正规的数字证书加 SSL 通信,就可以有效的预防网络监听和篡改。此外,在运用中有以下几点需要注意。
使用 SSL 时的注意事项
- 从输入页面就开始使用 HTTPS
这是因为如果输入页面被篡改的话,就不能保证后续的网页能正常的进行 SSL 加密通信了。
- 注意 Cookie 的 secure 属性(参考 4.8.2 节)
- 图像或者 CSS、JavaScript 等也需要使用 HTTPS
如果图像被篡改了,就等于显示的页面也被篡改了。JavaScript 被篡改的话,就可能通过 JavaScript 代码进一步篡改页面内容。如果页面里的内容既有 HTTP 也有 HTTPS 的话,那么浏览器就会弹出如图 7-12 的那样提示框。
图 7-12 浏览器弹出的提示框
- 不使用 frame 和 iframe
如果外层的 frame 没有使用 HTTPS 的话,那么浏览器的地址栏里也不是 HTTPS 的网址,所以不能简单地通过眼睛来确认(内部 frame)是否正在使用 HTTPS。此外,如果 frame 的源文件地址链接被替换了的话,那么整个页面的内容也会被替换。所以最好的选择就是不使用 frame 和 iframe,在不得不使用的情况下,则要将所有的资源都放在 HTTPS 下。
- 让浏览器在默认设置下不显示错误提示
我们需要保证应用程序在不修改浏览器默认的“使用 SSL 2.0”“对证书地址不匹配发出警告”等设置时也不让浏览器提示错误。由于 SSL2. 在协议本身存在缺陷,所以需要在服务器端设置不使用 SSL2.0。另外,如果将“对证书地址不匹配发出警告”设置为无效的话,那么域名认证功能将会失效,服务器的数字证书也就失去了存在的意义。如果使用正规的域名和证书,那么浏览器也就不需要做额外的设置了。
- 不隐藏地址栏
- 不隐藏状态栏
- 不屏蔽鼠标右键菜单
这 3 条措施都是为了让用户方便确认证书有效性。因为标识证书有效性的小锁头标记会显示在地址栏或者状态栏里,也能通过右键菜单来确认证书的有效性,所以不能把这些项目隐藏或者禁止。
专栏:SSL 认证标签
有一些证书提供商会给用户提供证明用户合法性的标签(或叫作图标,一段可以嵌入到用户网页的 HTML 代码)。访问者在点击这个标签后,即转到证书提供商的页面,在这个页面里会显示证书的内容、期限和组织名称等信息。
但是这个认证标签很容易被伪造。虽然有类似“点击标签确认是否安全”的提示说明,但是攻击者的网站有可能显示的是伪造的证书认证标签,关于这个标签的真伪也需要花时间去确认。要确认的内容包括现在浏览的网站的域名,以及浏览器是否显示了证书错误等。
如果浏览者能做上面这样的确认,那么应该也能够对使用了证书的原网站作出真伪鉴别。所以说与其花时间去确认证书认证标签的真伪,还不如确认网站本身的真实性,这样更快一些。
证书认证标签的问题不仅如此。由于这些认证标签一般会使用 JavaScript 或者浏览器插件来编写,所以如果标签本身存在 XSS 等漏洞的话,也会对嵌入证书认证标签网站的安全性代理产生不利影响。从这点意义上来说,证书认证标签不但没有降低系统的风险,反而是增加了安全隐患。
建议大家在确定了由证书认证标签带来的好处大于由此带来的风险时,才在网站上显示 SSL 证书的认证标签。
参考文献
[1] 高木浩光 . (2005 年 2 月 5 日 ). PKI よくある勘違い(3)「プライベート認証局が妥当ならオレオレ認証局も妥当だ」.参考日期:2011 年 1 月 13 日,参考网址:高木浩光@自宅の日記 : http://takagi-hiromitsu.jp/diary/20050205.html#p02
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论