降级攻击

计算机领域术语
降级攻击（Downgrade attack）是一种对计算机系统或通讯协议的攻击。在降级攻击中，攻击者故意使系统放弃新式、安全性高的工作方式（如加密连接），反而使用为向下兼容而准备的老式、安全性差的工作方式（如明文通讯）。例如，在OpenSSL中曾经存在一个缺陷，从而使攻击者能够让SSL/TLS服务器与客户端创建老版本TLS连接，尽管双方事实上支持新版本。这样的攻击是最常见的降级攻击。
简介
向下兼容（downward compatibility），在计算机中指在一个程序、库或硬件更新到较新版本后，用旧版本程序创建的文档或系统仍能被正常操作或使用（包括输入数据）、在旧版本库的基础上开发的程序仍能正常编译运行，或较旧版的硬件仍可在新版使用的情况。
降级攻击是一种间接攻击计算机系统的方式，使系统放弃安全度较高的工作方式，使用向下兼容的工作方式。降级攻击常被用于中间人攻击，将加密通讯的安全性大幅削弱，得以进行原本不可能做到的攻击。SSL/TLS协议是降级攻击的重灾区，长期面临这类问题，例如POODLE(Padding Oracle On Downgraded Legacy Encryption)攻击。去除向下兼容往往是解决降级攻击的较好手段。
降级过程
降级过程通过翻转两端的认证协议来实现。具体来说， 由于对认证协议选项的配置是从服务器端开始的，当服务器发送出第一个 configure－request 报文时，服务器端 PPTP 程序记录了当前服务器认可的认证协议选项， 这个认证协议是 CHAP。 当客户端接收到这个 configure-request 报文时，必然会发送 Ack 报文对服务器发送的上一个配置报文进行确认。此时，中间人攻击程序将这个 Ack 报文拦截掉并偷偷丢弃，然后自己伪造一个 Nak 报文并在其中添加 PAP 选项之后发送给服务器端。服务器接收到这个报文以后，其认证协议选项就从 CHAP 翻转成 PAP。 但是此时客户端事实上已经接受了服务器发送的上一个配置报文， 所以客户端所记录的认证协议状态是 CHAP。下面我们需要通过伪造 configure- request报文对客户端的认证协议状态进行翻转。
由于服务器接收到了客户端发送过来的 Nak 报文，它就会进入重协商过程， 重新发送一个新的 configure－request 报文，这个配置报文中不包含对认证协议的协商。 当这个报文到达中间人主机时，中间人攻击程序将这个报文拦截，并在它的选项字段添加一个新的PAP 选项，然后继续转发给客户端。 客户端接收这个新的配置报文以后，其认证协议就从 CHAP 翻转为PAP。 此时客户端会对这个配置报文重新进行确认，发送一个Ack 报文，当这个 Ack 报文到达中间人主机时，中间人攻击程序拦截这个报文，删除其中的 PAP 选项，并继续转发给服务器端。
至此，整个降级攻击过程完成。这个降级攻击方式不会对 GRE 隧道的序列号造成混乱，因为中间人并没有凭空伪造一个报文来消耗两端的序列号， 而是通过替换原有的报文，占用了原有的序列号。从上面的分析可见，降级过程是通过伪造 Nak 报文来让两端进行强制重协商状态，只有通过 Nak 报文强制翻转服务器端的认证协议选项，才可以实现降级。 强制重协商过程也是中间人攻击的典型攻击模式。
中间人攻击
中间人攻击（Man－in－the－Middle Attack），是一种间接攻击模式。 黑客通过某种技术控制一个处于通信两端的主机之间的某个路由，在这个路由上，中间人可以嗅探、拦截或修改两端通信过程中的数据包。 能够实现中间人攻击的技术很多，比如：ARP 欺骗 ，为了欺骗一个处于同一局域网的某台主机 ，可以使用 ARP 配置报文，使目标主机误认为攻击者主机是该局域网的默认网关。 这样受害者主机所有的出口流量就都会发送到中间人主机上。
DNS 欺骗 ：在域名解析过程中 ，客户端首先需要通过域名向 DNS 服务器发送一个请求报文，以获得目的主机的 IP。 攻击者可以通过劫持这个请求报文，然后发送一个虚假的回复报文，将一个虚假的目的 IP 地址发送给客户端。 客户端就会被带到一个中间人预先设定好的目的主机上。
钓鱼网络：无线接入是非常普遍的局域网接入方式。中间人可以通过在一台安装有无线收发网卡的设备上开启无线网络诱导被害者使用该网络。由于被害者一旦接入该网络，他的所有数据都是通过这个钓鱼网络进行转发的，因此在中间人的机器上可以很容易的拦截和修改数据包。而且相比于前两种策略，搭建钓鱼网络的成本非常小，配置也比较简便。总体来说，在公共场所开放一个免费Wi－Fi是一个非常隐蔽和简单快捷的攻击方案。
一个中间人攻击能成功的前提条件是攻击者能将自己伪装成每一个参与会话的终端，并且不被其他终端识破。中间人攻击是一个（缺乏）相互认证的攻击。大多数的加密协议都专门加入了一些特殊的认证方法以阻止中间人攻击。例如，SSL协议可以验证参与通讯的一方或双方使用的证书是否是由受信任的数字证书认证机构颁发，并且能执行双向身份认证。
传输层安全性协议
传输层安全性协议（Transport Layer Security，TLS），及其前身安全套接层（Secure Sockets Layer，缩写作 SSL）是一种安全协议，目的是为互联网通信，提供安全及数据完整性保障。网景公司（Netscape）在1994年推出首版网页浏览器，网景导航者时，推出HTTPS协议，以SSL进行加密，这是SSL的起源。IETF将SSL进行标准化，1999年公布第一版TLS标准文件。随后又公布RFC 5246 （2008年8月）与 RFC 6176 （2011年3月）。在浏览器、电子邮件、即时通信、VoIP、网络传真等应用程序中，广泛支持这个协议。主要的网站，如Google、Facebook等也以这个协议来创建安全连接，发送数据。已成为互联网上保密通信的工业标准。
SSL包含记录层（Record Layer）和传输层，记录层协议确定传输层数据的封装格式。传输层安全协议使用X.509认证，之后利用非对称加密演算来对通信方做身份认证，之后交换对称密钥作为会谈密钥（Session key）。这个会谈密钥是用来将通信两方交换的数据做加密，保证两个应用间通信的保密性和可靠性，使客户与服务器应用之间的通信不被攻击者窃听。
TLS协议采用主从式架构模型，用于在两个应用程序间透过网络创建起安全的连接，防止在交换数据时受到窃听及篡改。
TLS协议的优势是与高层的应用层协议（如HTTP、FTP、Telnet等）无耦合。应用层协议能透明地运行在TLS协议之上，由TLS协议进行创建加密通道需要的协商和认证。应用层协议传送的数据在通过TLS协议时都会被加密，从而保证通信的私密性。
TLS协议是可选的，必须配置客户端和服务器才能使用。主要有两种方式实现这一目标：一个是使用统一的TLS协议通信端口（例如：用于HTTPS的端口443）；另一个是客户端请求服务器连接到TLS时使用特定的协议机制（例如：邮件、新闻协议和STARTTLS）。一旦客户端和服务器都同意使用TLS协议，他们通过使用一个握手过程协商出一个有状态的连接以传输数据。通过握手，客户端和服务器协商各种参数用于创建安全连接：
当客户端连接到支持TLS协议的服务器要求创建安全连接并列出了受支持的密码组合（加密密码算法和加密哈希函数），握手开始。
服务器从该列表中决定加密和散列函数，并通知客户端。
服务器发回其数字证书，此证书通常包含服务器的名称、受信任的证书颁发机构（CA）和服务器的公钥。
客户端确认其颁发的证书的有效性。
为了生成会话密钥用于安全连接，客户端使用服务器的公钥加密随机生成的密钥，并将其发送到服务器，只有服务器才能使用自己的私钥解密。
利用随机数，双方生成用于加密和解密的对称密钥。这就是TLS协议的握手，握手完毕后的连接是安全的，直到连接（被）关闭。如果上述任何一个步骤失败，TLS握手过程就会失败，并且断开所有的连接。