中间人攻击（英語：Man-in-the-middle attack，缩写：MITM）在密码学和计算机安全领域中是指攻击者与通讯的两端分别建立独立的联系，并交换其所收到的数据，使通讯的两端认为他们正在通过一个私密的连接与对方直接对话，但事实上整个会话都被攻击者完全控制。在中间人攻击中，攻击者可以拦截通讯双方的通话并插入新的内容。在许多情况下这是很简单的（例如，在一个未加密的Wi-Fi 无线接入点的接受范围内的中间人攻击者，可以将自己作为一个中间人插入这个网络）。
一个中间人攻击能成功的前提条件是攻击者能将自己伪装成每一个参与会话的终端，并且不被其他终端识破。中间人攻击是一个（缺乏）相互认证的攻击。大多数的加密协议都专门加入了一些特殊的认证方法以阻止中间人攻击。例如，SSL协议可以验证参与通讯的一方或双方使用的证书是否是由权威的受信任的数字证书认证机构颁发，并且能执行双向身份认证。


特性 中間人攻擊需要通过一个安全的通道做额外的传输。与連鎖協議不同，所有能抵御中间人攻击的加密系统都需要通过一个安全通道来传输或交换一些额外的信息。为了满足不同安全通道的不同安全需求，许多密钥交换协议已经被研究了出来。


攻击示例 假设爱丽丝（Alice）希望与鲍伯（Bob）通信。同时，马洛里（Mallory）希望拦截窃会话以进行窃听并可能在某些时候传送给鲍伯一个虚假的消息。
首先，爱丽丝会向鲍伯索取他的公钥。如果Bob将他的公钥发送给Alice，并且此时马洛里能够拦截到这个公钥，就可以实施中间人攻击。马洛里发送给爱丽丝一个伪造的消息，声称自己是鲍伯，并且附上了马洛里自己的公钥（而不是鲍伯的）。
爱丽丝收到公钥后相信这个公钥是鲍伯的，于是爱丽丝将她的消息用马洛里的公钥（爱丽丝以为是鲍伯的）加密，并将加密后的消息回给鲍伯。马洛里再次截获爱丽丝回给鲍伯的消息，并使用马洛里自己的私钥对消息进行解密，如果马洛里愿意，她也可以对消息进行修改，然后马洛里使用鲍伯原先发给爱丽丝的公钥对消息再次加密。当鲍伯收到新加密后的消息时，他会相信这是从爱丽丝那里发来的消息。
1.爱丽丝发送给鲍伯一条消息，卻被马洛里截获：

爱丽丝“嗨，鲍伯，我是爱丽丝。给我你的公钥” → 马洛里              鲍伯
2.马洛里将这条截获的消息转送给鲍伯；此时鲍伯並無法分辨这条消息是否从真的爱丽丝那里发来的：

爱丽丝          马洛里“嗨，鲍伯，我是爱丽丝。给我你的公钥” → 鲍伯
3.鲍伯回应爱丽丝的消息，并附上了他的公钥：

爱丽丝          马洛里  ←[鲍伯的公钥]— 鲍伯
4.马洛里用自己的密钥替换了消息中鲍伯的密钥，并将消息转发给爱丽丝，声称这是鲍伯的公钥：

爱丽丝  ←[马洛里的公钥]—  马洛里          鲍伯
5.爱丽丝用她以为是鲍伯的公钥加密了她的消息，以为只有鲍伯才能读到它：

爱丽丝“我们在公共汽车站见面！”—[使用马洛里的公钥加密]→  马洛里          鲍伯
6.然而，由于这个消息实际上是用马洛里的密钥加密的，所以马洛里可以解密它，阅读它，并在愿意的时候修改它。他使用鲍伯的密钥重新加密，并将重新加密后的消息转发给鲍伯：

爱丽丝          马洛里“在家等我！”—[使用鲍伯的公钥加密]→  鲍伯
7.鲍伯认为，这条消息是经由安全的传输通道从爱丽丝那里传来的。
这个例子显示了爱丽丝和鲍伯需要某种方法来确定他们是真正拿到了属于对方的公钥，而不是拿到来自攻击者的公钥。否则，这类攻击一般都是可行的，在原理上，可以针对任何使用公钥——密钥技术的通讯消息发起攻击。幸运的是，有各种不同的技术可以帮助抵御MITM攻击。


防御攻击 许多抵御中间人攻击的技术基于以下认证技术：

公钥基础建设
在PKI方案中，主要防御中间人攻击的方案就是PKI的相互认证的机制。这样的机制由应用程序验证用户，由用户设备验证应用程序。但在使用某些不安全的应用的情况下，这不是很有用。因此，需要注意选择正版软件。
更强力的相互认证，例如：
密钥（通常是高信息熵的密钥，从而更安全），或
密码（通常是低的信息熵的密钥，从而降低安全性）
延迟测试，例如使用复杂加密哈希函数进行计算以造成数十秒的延迟；如果双方通常情况下都要花费20秒来计算，并且整个通讯花费了60秒计算才到达对方，这就能表明存在第三方中间人。
第二（安全的）通道的校验
一次性密码本可以对中间人攻击免疫，这是在对一次密码本的安全性和信任上建立的。公钥体系的完整性通常必须以某种方式得到保障，但不需要进行保密。密码和共享密钥有额外的保密需求。公钥可以由证书颁发机构验证，这些公钥通过安全的渠道（例如，随Web浏览器或操作系统安装）分发。公共密钥也可以经由Web在线信任进行在线验证，可以通过安全的途径分发公钥（例如，通过面对面的途径分发公钥）。
查看密钥交换协议以了解不同类别的使用不同密钥形式或密码以抵御中间人攻击的协议。


中间人攻击的取证分析 从被怀疑是中间人攻击的链接中捕捉网络数据包并进行分析可以确定是否存在中间人攻击。在进行网络分析并对可疑的SSL中间人攻击进行取证时，重要的分析证据包括：

远程服务器的IP地址
DNS域名解析服务器
X.509证书服务器
证书是自签名证书吗？
证书是由信任的颁发机构颁发的吗？
证书是否已被吊销？
证书最近被更改过吗？
在互联网上的其他的客户端是否也得到了相同的证书？


其他的非加密的中间人攻击 一个著名的非加密中间人攻击的例子是贝尔金无线路由器2003年的某一个版本所造成的。它会周期性地接管通过它的HTTP连接，阻止数据包到达目的地。并将它自己对请求的回应作为应答返回。而它发送的回应，则是在用户原本应该显示网页的地方，显示一个关于其他贝尔金产品的广告。在遭到了解技术详情的用户的强烈抗议后，这个功能被贝尔金从路由器后续版本的固件中删除。
另一个典型的非加密中间人攻击的例子是“图灵色情农场”。布赖恩·华纳说，这是垃圾邮件发送者用来绕过验证码的“可以想象的攻击”。垃圾邮件发送者设置了一个色情网站，而访问这个色情网站需要用户解决一些验证问题。这些验证问题实际上是其他网站的验证问题。这样就可以达到绕开网站验证发送垃圾邮件的目的。然而，Jeff Atwood指出，这次袭击仅仅是理论上的——没有任何证据指出垃圾邮件发送者曾经在2006年建立了图灵色情农场。然而，2007年10月有新闻报道称，垃圾邮件发送者确实建立了一个Windows游戏，当用户键入从雅虎收到的注册邮箱验证码后，程序将奖励用户色情图片。这将允许垃圾邮件发送者创建临时的免费电子邮件帐户以发送垃圾邮件。


实现 dsniff - 一个实现SSH和SSL中间人攻击的工具
Cain and Abel - Windows图形界面的工具，它可以执行中间人攻击，嗅探和ARP投毒
Ettercap - 一个基于局域网的中间人攻击工具
Karma - 一个使用802.11 Evil Twin以执行MITM攻击的工具
AirJack -一个演示802.11 MITM攻击的工具
SSLStrip一个基于SSL的MITM攻击的工具。
SSLSniff一个基于SSL的MITM攻击的工具。原本是利用一个在Internet Explorer上缺陷实现的。
csploit -一個在android系統上實現的MITM攻擊工具包。
Mallory - 一个透明的TCP和UDP MiTMing代理。扩展到MITM SSL，SSH和许多其他协议。
wsniff - 一个802.11HTTP / HTTPS的基于MITM攻击的工具
安装在自动取款机银行卡插槽上的附加读卡器和安装在键盘上的附加密码记录器。
zanti-一款在android系統上的多功能網路滲透包。


参见 浏览器中间人攻击 -一种网页浏览器中间人攻击
Boy-in-the-browser - 一个简单的Web浏览器中间人攻击
Aspidistra transmitter -英国二战“入侵”行动中使用的无线电发射器，早期的中间人攻击。
计算机安全 - 安全的计算机系统的设计。
安全性分析 - 在不完全知道加密方法的情况下破解加密后的信息。
数字签名 -一个加密文字的真实性担保，通常是一个只有笔者预计将能够执行计算的结果。
联锁协议 -一个特定的协议，在密钥可能已经失密的情况下，规避可能发生的中间人攻击。
密钥管理 - 如何管理密钥，包括生成，交换和存储密钥。
密钥协商协议 - 又称密钥交换协议，一个协商如何创建适合双方通信的密钥的协议。
相互认证 -如何沟通各方的信心建立在彼此的身份。
密码认证密钥协议 -建立使用密码钥匙的协议。
量子密码 - 量子力学的使用提供安全加密（老方法，而依靠单向函数）。
安全通道 - 一种在通信中防截获和防篡改的方式。
欺骗攻击
HTTP严格传输安全
HTTP公钥固定
哈薩克斯坦政府實行的中間人攻擊


参考资料