# 从吴亦凡事件学习安全测试


一般情况下我是不喜欢追热点蹭热度的，不过这两天公安机关警情通报之后，吴亦凡事件发生了各种逆转，这起全员恶人事件非常凑巧的契合了安全测试中的一个概念：也就是中间人攻击。我们在吃瓜之余可以简单了解一下中间人攻击的一些原理，通过例子去学习，印象自然会深刻一些。

### 什么是中间人攻击？

下面的定义来自维基百科。

**中间人攻击**（英语：**M**an-**i**n-**t**he-**m**iddle attack，缩写：**MITM**）在[密码学](https://zh.wikipedia.org/wiki/%E5%AF%86%E7%A0%81%E5%AD%A6)和[计算机安全](https://zh.wikipedia.org/wiki/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%AE%89%E5%85%A8)领域中是指攻击者与通讯的两端分别创建独立的联系，并交换其所收到的数据，使通讯的两端认为他们正在通过一个私密的连接与对方直接对话，但事实上整个会话都被攻击者完全控制。在中间人攻击中，攻击者可以拦截通讯双方的通话并插入新的内容。在许多情况下这是很简单的（例如，在一个未加密的[Wi-Fi](https://zh.wikipedia.org/wiki/Wi-Fi) [无线接入点](https://zh.wikipedia.org/wiki/%E6%97%A0%E7%BA%BF%E6%8E%A5%E5%85%A5%E7%82%B9)的接受范围内的中间人攻击者，可以将自己作为一个中间人插入这个网络）。

一个中间人攻击能成功的前提条件是攻击者能将自己伪装成每一个参与会话的终端，并且不被其他终端识破。中间人攻击是一个（缺乏）相互[认证](https://zh.wikipedia.org/wiki/%E8%AE%A4%E8%AF%81)的攻击。大多数的加密协议都专门加入了一些特殊的认证方法以阻止中间人攻击。例如，[SSL](https://zh.wikipedia.org/wiki/SSL)协议可以验证参与通讯的一方或双方使用的证书是否是由权威的受信任的[数字证书认证机构](https://zh.wikipedia.org/wiki/%E6%95%B0%E5%AD%97%E8%AF%81%E4%B9%A6%E8%AE%A4%E8%AF%81%E6%9C%BA%E6%9E%84)颁发，并且能执行双向身份认证。

### 举个例子

下面的内容依然来自维基百科。

假设[爱丽丝](https://zh.wikipedia.org/wiki/%E6%84%9B%E9%BA%97%E7%B5%B2%E8%88%87%E9%AE%91%E4%BC%AF)（Alice）希望与[鲍伯](https://zh.wikipedia.org/wiki/%E6%84%9B%E9%BA%97%E7%B5%B2%E8%88%87%E9%AE%91%E4%BC%AF)（Bob）通信。同时，[马洛里](https://zh.wikipedia.org/wiki/%E6%84%9B%E9%BA%97%E7%B5%B2%E8%88%87%E9%AE%91%E4%BC%AF)（Mallory）希望拦截窃会话以进行窃听并可能在某些时候传送给鲍伯一个虚假的消息。

首先，爱丽丝会向鲍伯索取他的[公钥](https://zh.wikipedia.org/wiki/%E5%85%AC%E9%92%A5)。如果 Bob 将他的[公钥](https://zh.wikipedia.org/wiki/%E5%85%AC%E9%92%A5)发送给 Alice，并且此时马洛里能够拦截到这个[公钥](https://zh.wikipedia.org/wiki/%E5%85%AC%E9%92%A5)，就可以实施中间人攻击。马洛里发送给爱丽丝一个伪造的消息，声称自己是鲍伯，并且附上了马洛里自己的[公钥](https://zh.wikipedia.org/wiki/%E5%85%AC%E9%92%A5)（而不是鲍伯的）。

爱丽丝收到公钥后相信这个[公钥](https://zh.wikipedia.org/wiki/%E5%85%AC%E9%92%A5)是鲍伯的，于是爱丽丝将她的消息用马洛里的公钥（爱丽丝以为是鲍伯的）加密，并将加密后的消息回给鲍伯。马洛里再次截获爱丽丝回给鲍伯的消息，并使用马洛里自己的私钥对消息进行解密，如果马洛里愿意，她也可以对消息进行修改，然后马洛里使用鲍伯原先发给爱丽丝的公钥对消息再次加密。当鲍伯收到新加密后的消息时，他会相信这是从爱丽丝那里发来的消息。

![%E4%BB%8E%E5%90%B4%E4%BA%A6%E5%87%A1%E4%BA%8B%E4%BB%B6%E5%AD%A6%E4%B9%A0%E5%AE%89%E5%85%A8%E6%B5%8B%E8%AF%95%20f4fcfd1919004bae89ca78e6f0949ed6/Untitled.png](%E4%BB%8E%E5%90%B4%E4%BA%A6%E5%87%A1%E4%BA%8B%E4%BB%B6%E5%AD%A6%E4%B9%A0%E5%AE%89%E5%85%A8%E6%B5%8B%E8%AF%95%20f4fcfd1919004bae89ca78e6f0949ed6/Untitled.png)

具体展开如下：

1.爱丽丝发送给鲍伯一条消息，却被马洛里截获：

> 爱丽丝“嗨，鲍伯，我是爱丽丝。给我你的公钥” -->  马洛里   鲍伯

2.马洛里将这条截获的消息转送给鲍伯；此时鲍伯并无法分辨这条消息是否从真的爱丽丝那里发来的：

> 爱丽丝   马洛里“嗨，鲍伯，我是爱丽丝。给我你的公钥” -->  鲍伯

3.鲍伯回应爱丽丝的消息，并附上了他的公钥：

> 爱丽丝   马洛里<-- [鲍伯的公钥]--  鲍伯

4.马洛里用自己的密钥替换了消息中鲍伯的密钥，并将消息转发给爱丽丝，声称这是鲍伯的公钥：

> 爱丽丝<-- [马洛里的公钥]--  马洛里   鲍伯

5.爱丽丝用她以为是鲍伯的公钥加密了她的消息，以为只有鲍伯才能读到它：

> 爱丽丝“我们在公共汽车站见面！”--[使用马洛里的公钥加密] -->  马洛里   鲍伯

6.然而，由于这个消息实际上是用马洛里的密钥加密的，所以马洛里可以解密它，阅读它，并在愿意的时候修改它。他使用鲍伯的密钥重新加密，并将重新加密后的消息转发给鲍伯：

> 爱丽丝   马洛里“在家等我！”--[使用鲍伯的公钥加密] -->  鲍伯

7.鲍伯认为，这条消息是经由安全的传输通道从爱丽丝那里传来的。

这个例子显示了爱丽丝和鲍伯需要某种方法来确定他们是真正拿到了属于对方的[公钥](https://zh.wikipedia.org/wiki/%E5%85%AC%E9%92%A5)，而不是拿到来自攻击者的公钥。否则，这类攻击一般都是可行的，在原理上，可以针对任何使用公钥——密钥技术的通讯消息发起攻击。

### 边吃瓜边学习

首先我们看一下公安机关的调查结果，代入上面的中间人攻击原理，简单还原一下这次光怪陆离的事件。

> 据北京朝阳警方通报：
> 近日，针对都某竹通过网络反映受到侵害和吴某凡一方报警称被敲诈勒索的情况，公安机关介入调查后，通过讯问嫌疑人、询问当事人、走访证人、调取书证、固定提取电子证据等工作，初步查明了有关事实。现就调查情况通报如下：
> 一、关于吴某凡与都某竹交往情况
> 2020 年 12 月 5 日 22 时许，冯某（女，28 岁，时任吴某凡执行经纪人）以挑选 MV 女主角面试为由，约都某竹（女，18 岁）到吴某凡（男，30 岁）家中参加聚会，10 余人共同玩桌游并饮酒，次日凌晨至 7 时许，其他聚会人员陆续离开，都某竹酒后在吴某凡家中留宿，两人发生性关系。当日下午，都某竹在吴某凡家中用餐后自行离开，期间两人互相添加微信。12 月 8 日，吴某凡给都某竹转账 3.2 万元用于网络购物。此后至 2021 年 4 月期间，两人保持微信联系。
> 二、关于都某竹等人发布网络信息情况
> 2021 年 6 月，都某竹与好友刘某文（女，19 岁）商议，在网上公开与吴某凡交往过程以提升网络知名度，遂由刘某文于 6 月 2 日以“刘美丽同学\_”微博账号发布都某竹被吴某凡“冷暴力”的博文，7 月 8 日至 7 月 11 日，都某竹跟进发布 3 篇博文。7 月 13 日，网络写手徐某（男，31 岁）为牟取利益，主动联系都某竹，经商议后，共同策划并由徐某撰写“决战”等 10 余篇微博文案，7 月 16 日起由都某竹通过微博账号陆续发布。
> 三、关于犯罪嫌疑人刘某迢涉嫌诈骗犯罪的情况
> 2021 年 7 月 14 日，朝阳警方接到吴某凡母亲吴某报警，称遭到都某竹敲诈勒索。当日警方依法进行了受理和调查，工作中锁定犯罪嫌疑人刘某迢（男，23 岁），并于 2021 年 7 月 18 日在江苏省南通市将该人抓获。
> 经查，2021 年 6 月，犯罪嫌疑人刘某迢看到都某竹和吴某凡的网络炒作信息后，遂产生冒充相关关系人对涉事双方进行诈骗的想法。期间，刘某迢虚构女性身份，以曾被吴某凡欺骗感情欲共同维权的名义骗取都某竹的信任，使用昵称为“DDX”微信号与都某竹联系，获取都某竹与吴某凡部分交往情况信息。7 月 10 日，刘某迢利用获取的信息冒用都某竹名义与吴某凡律师联系，以双方达成和解为名索要 300 万元赔偿，并将自己和都某竹的银行账户一并发给吴某凡律师。同时，刘某迢使用“北京凡世文化传媒”微信号，自称系吴某凡律师，与都某竹协商达成 300 万元的和解赔偿，但双方未签署和解协议。
> 7 月 11 日，吴某凡母亲分两次向都某竹账户转账 50 万元。此后，未得到钱款的刘某迢继续冒充都某竹，向吴某凡律师索要剩余 250 万元未遂。后又冒充吴某凡律师要求都某竹签署和解协议，否则索回 50 万元。都某竹同意退款后，刘某迢冒充吴某凡律师将本人的支付宝账号提供给都某竹，都某竹陆续向该账号转账 18 万元。
> 刘某迢被抓获后，对其诈骗犯罪事实供认不讳。目前，该人已被朝阳公安分局依法刑事拘留。
> 针对网民举报的“吴某凡多次诱骗年轻女性发生性关系”及近期网络互曝的有关行为，警方仍在调查中，将根据调查结果依法处理。

这里涉及到 3 个人物，分别是吴，都，以及中间人刘

![%E4%BB%8E%E5%90%B4%E4%BA%A6%E5%87%A1%E4%BA%8B%E4%BB%B6%E5%AD%A6%E4%B9%A0%E5%AE%89%E5%85%A8%E6%B5%8B%E8%AF%95%20f4fcfd1919004bae89ca78e6f0949ed6/Untitled%201.png](%E4%BB%8E%E5%90%B4%E4%BA%A6%E5%87%A1%E4%BA%8B%E4%BB%B6%E5%AD%A6%E4%B9%A0%E5%AE%89%E5%85%A8%E6%B5%8B%E8%AF%95%20f4fcfd1919004bae89ca78e6f0949ed6/Untitled%201.png)

1，刘某迢虚构女性身份，以曾被吴某凡欺骗感情欲共同维权的名义骗取都某竹的信任，使用昵称为“DDX”微信号与都某竹联系，获取都某竹与吴某凡部分交往情况信息。这部分信息其实只有吴和都知道，所以可以认为是吴和都进行身份认证的公钥，只要出示这个公钥，吴和都就可以确信对方的身份，毕竟一些事情只有天知地知你知我知；

2，7 月 10 日，刘某迢利用获取的信息冒用都某竹名义与吴某凡律师联系，以双方达成和解为名索要 300 万元赔偿，并将自己和都某竹的银行账户一并发给吴某凡律师。这一步中间人直接伪造消息发送给吴，并通过公钥获取了吴的信任，将自己认证为都；

3，同时，刘某迢使用“北京凡世文化传媒”微信号，自称系吴某凡律师，与都某竹协商达成 300 万元的和解赔偿，但双方未签署和解协议。这一步，中间人又故技重施，伪造吴的消息发送给都。

由于第 1 步刘已拿到了双方的公钥，所以已经具备了中间人攻击的条件。一般情况下中间人都是一个监听者，被监听双方互相通信时，中间人会收到消息，查看甚至篡改消息的内容，比如你用了一个 wifi，通过 http（非 https）请求将密码发送给了对端，那么中间人可能会截取你的密码，造成信息的泄漏。不过这个事件里的刘很显然是一个勤奋的中间人，吴和都其实并没有主动发起通信，所有的消息都是中间人伪造，完全凭借自己的努力让两方鸡犬不宁，矛盾无法调和，从而将这场闹剧推向了高潮；

4，7 月 11 日，吴某凡母亲分两次向都某竹账户转账 50 万元。这里吴向都发送的消息直接被中间人截获，中间人没有向都转发，从而为日后的东窗事发埋下伏笔。有人说这一步其实吴母动了吴秀波的心思，这里见仁见智，大家应该有自己的判断；

5， 此后，未得到钱款的刘某迢继续冒充都某竹，向吴某凡律师索要剩余 250 万元未遂。中间人伪造信息发送给吴，都是不知情的；

6，后又冒充吴某凡律师要求都某竹签署和解协议，否则索回 50 万元。都某竹同意退款后，刘某迢冒充吴某凡律师将本人的支付宝账号提供给都某竹，都某竹陆续向该账号转账 18 万元。伪造吴的消息发送给都，吴不知情，都也应该很懵，毕竟凭空账户多了 50 万，前车之鉴还历历在目，这里警惕性应该是上来了的；

7，刘某迢被抓获后，对其诈骗犯罪事实供认不讳。目前，该人已被朝阳公安分局依法刑事拘留。

多行不义必自毙，刘的中间人攻击暴露是迟早的事情，毕竟中间人攻击的核心是隐藏在暗处，监听和篡改双方的信息从而达到获利的目的。这次的事件里，通信双方其实是没有主动联系过的，所有的魔幻情节全靠中间人一己之力全力推动，导致双方起疑，进而报警事发。这就好比中介卖房，本来买卖双方并没有强烈的意愿，结果中介强行撮合，给双方一些虚假信息，这样很容易引起买卖双方的反感，从而让交易泡汤。

### 如何防御中间人攻击

以下来自维基百科

许多抵御中间人攻击的技术基于以下认证技术：

- [公钥基础建设](https://zh.wikipedia.org/wiki/%E5%85%AC%E9%96%8B%E9%87%91%E9%91%B0%E5%9F%BA%E7%A4%8E%E5%BB%BA%E8%A8%AD)
  - 在[PKI](https://zh.wikipedia.org/wiki/PKI)方案中，主要防御中间人攻击的方案就是 PKI 的[相互认证](https://zh.wikipedia.org/w/index.php?title=%E7%9B%B8%E4%BA%92%E8%AE%A4%E8%AF%81&action=edit&redlink=1)的机制。使用这样的机制并由应用程序验证用户，用户设备验证应用程序。但在某些流氓应用的情况下，这不是很有用，所以需要注意对流氓软件应与正规软件进行区分。
- 更强力的相互认证，例如：
  - 密钥（通常是高信息熵的密钥，从而更安全），或
  - 密码（通常是低的信息熵的密钥，从而降低安全性）
- 延迟测试，例如使用复杂加密哈希函数进行计算以造成数十秒的延迟；如果双方通常情况下都要花费 20 秒来计算，并且整个通讯花费了 60 秒计算才到达对方，这就能表明存在第三方中间人。
- 第二（安全的）通道的校验
- 一次性密码本可以对中间人攻击免疫，这是在对一次密码本的安全性和信任上创建的。公钥体系的完整性通常必须以某种方式得到保障，但不需要进行保密。密码和共享密钥有额外的保密需求。公钥可以由[证书颁发机构](https://zh.wikipedia.org/wiki/%E6%95%B0%E5%AD%97%E8%AF%81%E4%B9%A6%E8%AE%A4%E8%AF%81%E6%9C%BA%E6%9E%84)验证，这些公钥通过安全的渠道（例如，随 Web[浏览器](https://zh.wikipedia.org/wiki/%E6%B5%8F%E8%A7%88%E5%99%A8)或[操作系统](https://zh.wikipedia.org/wiki/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F)安装）分发。公共密钥也可以经由 Web 在线信任进行在线验证，可以通过安全的途径分发公钥（例如，通过面对面的途径分发公钥）

