0%

模拟一个中间人攻击

最近在看密码加密相关的知识点,了解到了中间人攻击,对这个操作比较好奇,因此尝试一下自己模拟一个中间人攻击。

中间人攻击简介

中间人攻击(Man-in-the-Middle Attack,简称MITM攻击)是指攻击者与通讯的两端分别建立独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。在中间人攻击中,攻击者可以拦截通讯双方的通话并插入新的内容。(来源:中间人攻击 - 维基百科

常见的中间人攻击有如下几种:(来源:chatgpt)

  1. IP 欺骗(IP Spoofing)。攻击者伪装成一个合法的网络设备(如路由器或网关),通过伪造 IP 地址或欺骗 ARP 表来进行数据的转发。可以用来劫持网络连接,截获敏感数据。
  2. ARP 欺骗(ARP Spoofing)。攻击者通过发送伪造的 ARP 响应,使受害者的 ARP 表将攻击者的 MAC 地址与合法 IP 地址关联。攻击者可以获取到所有通过受害者网络的数据包,包括用户名、密码等敏感信息。
  3. DNS 欺骗(DNS Spoofing)。攻击者将域名解析结果劫持,使其解析到恶意 IP 地址。可以用于获取用户输入的敏感信息,或传播恶意软件。
  4. SSL/TLS 劫持(SSL/TLS Hijacking)。攻击者在客户端和服务器之间伪装成两端,并截获并篡改 SSL/TLS 加密的通信。攻击者可以解密和篡改加密通信的数据。
  5. Wi-Fi 热点劫持。攻击者创建一个伪造的 Wi-Fi 热点,诱骗受害者连接。攻击者可以获取到所有通过该热点的数据,包括敏感的个人信息。
  6. HTTPS Stripping。攻击者将浏览器的 HTTPS 请求降级为 HTTP,使通信变为未加密状态,便于攻击者拦截数据。攻击者可以轻易获取和修改传输中的数据。
  7. 恶意中间件。攻击者利用操作系统或浏览器漏洞安装恶意软件,插入中间件在通信中拦截和篡改数据。恶意中间件可以实现对用户的全方位监控和数据篡改。
  8. 会话劫持(Session Hijacking)。攻击者窃取会话令牌(Session Token),冒充合法用户。攻击者可以完全控制用户的会话,执行敏感操作如资金转账等。
  9. Email Hijacking。攻击者通过入侵邮件服务器或使用社会工程手段获取邮件凭证。可能导致机密信息泄露、财务损失等。
  10. 恶意代理服务器。攻击者设置一个恶意代理服务器,诱骗受害者使用它进行上网。攻击者可以控制所有通过代理的流量,获取敏感信息。
  11. 蜂窝网络劫持。攻击者使用伪基站设备拦截或篡改移动设备的通信。攻击者可以监听语音通话、短信或数据流量。
  12. HTTP Host Header Injection。攻击者通过篡改 HTTP 请求头中的 Host 信息,伪造请求数据。可以用于钓鱼攻击、数据泄露等。
  13. 脚本注入(Script Injection)。攻击者向客户端发送恶意脚本,利用浏览器漏洞劫持通信。攻击者可以获取用户的敏感信息或操作权限。
  14. 物理拦截。物理拦截数据通信设备或网络基础设施。可以完全控制和篡改通信数据,通常用于间谍活动。

模拟 DNS 欺骗

直接修改本地的 hosts 文件,文件所在位置:C:\Windows\System32\drivers\etc,我们这里将 www.baidu.com 映射到本地 IP 127.0.0.1,如下:

picture 0

如下,www.baidu.com 被解析到了 127.0.0.1

picture 1

在浏览器访问 www.baidu.com,出现如下提示信息

picture 2

这里模拟的 DNS 欺骗是最简单的做法,在实际案例中,更多是通过劫持 DNS 服务器,以及伪造 DNS 服务器,

模拟中间人攻击

这里使用 Fiddler 工具来模拟,之前使用过这个工具来捕获微信小程序的网络请求。

其实 Fiddler 工具本身的抓包原理就是一个中间人攻击:

  1. Fiddler 接到客户端的 https 请求,将请求转发给服务器。
  2. 服务器生成公钥证书,返回给 Fiddler。Fiddler 拦截下真的公钥证书,并生成伪造的公钥证书给客户端。
  3. 客户端使用伪造的公钥证书加密共享密钥发送给 Fiddler,Fiddler 使用伪造的私钥解密获取共享密钥。
  4. Fiddler 将解密后的共享密钥,使用真正的公钥加密发送给服务端,服务器使用共享密钥与 Fiddler 通信。
  5. Fiddler 使用共享密钥与客户端通信

我们这里调整一下 Fiddler 默认的抓包配置,尝试自己配置来模拟一次中间人攻击,按照 HTTPS中间人攻击实践(原理·实践) 这篇文档中给出的步骤进行配置即可,下面简单说一下,具体参考上面的文档。

首先在 工具->选项->Https 按如下方式配置:

picture 3

之后下载一个插件:FreeHttp,将 FreeHttp.dll 文件放到 Fiddler 安装目录下,如下:

picture 4

之后重启 Fiddler,就能进行配置了

picture 5

使用代理的 HTTPS 请求会利用 Connect 请求建立 SSL 通道,我们修改 Connect 连接目标即可(因为这个时候 SSL 通道还没有建立,目标地址还是明文,我们可以直接修改,这样操作可以模拟网络中存在的攻击)

picture 6

上面的配置相当于是将所有请求的 Https 握手请求转发到本地服务上处理,配置好之后就可以开始模拟了,在 Chrome 浏览器下模拟了如下几种情况:

  • 本地服务没有配置证书。浏览器会提示如下信息:

    picture 7

  • 本地服务配置目标服务的合法证书,相当于模拟攻击者窃取到了服务端的证书文件,然后发起中间人攻击。这时 Https 握手请求可以通过验证,并且这时对应的请求也会转到本地服务中执行,相当于攻击者成功执行了一次中间人攻击。

  • 本地服务配置自定义证书,这是常规的中间人攻击手段,即攻击者使用自定义证书发起中间人攻击。这时浏览器会提示 您的连接不是私密连接,如下:

    picture 8

    如果用户点击继续前往,那么攻击者就可以完成对请求结果的篡改操作,如下,在本地服务中添加了一个自定义的接口,模拟攻击者篡改请求数据的情况:

    picture 9

    这里仅仅模拟了攻击者篡改请求结果的场景,在真实场景下,攻击者可以做更多复杂的操作,比如将上面的页面设计成知乎登录页的样式,然后用户输入密码后,攻击者就能窃取到用户的账号密码。

    而为了应对这一问题,可以为网站引入 HSTS:什么是HTTP严格传输安全性(HSTS)?

    HTTP严格传输安全性 (HSTS)是一种网络安全策略机制,旨在保护HTTPS网站免受降级攻击和cookie劫持。 配置为使用HSTS的Web服务器指示Web浏览器(或其他客户端软件)仅使用HTTPS连接,并禁止使用HTTP协议。

    引入 HSTS 后,链接只能通过 Https 访问,如下:

    picture 10

总结

本篇在 HTTPS中间人攻击实践(原理·实践) 的指引下,使用 Fiddler 工具简单模拟了一个中间人攻击。本次模拟比较简单,真实场景下的中间人攻击往往更加复杂和隐蔽。通过这次模拟,意识到网络安全方面的工作还是很重要的,项目之后也可以考虑添加 HSTS 配置来提升 Https 连接安全性。

参考文档

部分中间人攻击手法简介

HTTPS中间人攻击实践(原理·实践)

如何检测与清理不可信的 CA 证书