一、什么是中间人攻击

中间人攻击(Man-in-the-MiddleAttack):当数据离开一个端点前往另一个端点时,数据传输的过程便是对数据失去控制的过程,此时当一个中间人位于两个端点之间对数据进行劫持转发,称为中间人攻击。

二、中间人攻击的类型

Wifi 欺骗

攻击者可以创建与本地免费 Wi-Fi 选项同名的虚假 Wi-Fi 接入点(AP)。一旦您连接到了恶意访问点,攻击者就可以监视您的一切在线活动。

例如,您用计算机设备连接到咖啡馆的免费公共 Wi-Fi 上,然后试图访问银行的网站。随后,您可能会遇到如下错误提示。
中间人攻击(MITM) - 图1
如上图所示,您会遇到一个证书错误,通知您该银行的网站不具备有效的加密证书。这表面上好像是提醒您银行的配置存在问题,真实情况却是中间人攻击正在进行中。

尽管如此,很多人仍然选择单击该错误信息并继续访问该银行网站。之后,他们进行银行账户登录、汇款、账单支付等操作,貌似一切如常。

而实际上,攻击者可能已经建立好了一个虚假的服务器和伪造的银行网站。当你连接到虚假的银行服务器时,他们会将目标银行的真实页面略作修改,并呈现给您。您所有输入的登录详细信息,都将被发送到中间人服务器的后台。

SSL 剥离(劫持)

原理

当您尝试连接或访问不安全的 HTTP 站点时,浏览器可以将您重定向到安全的 HTTPS 选项。
但是,攻击者可以劫持重定向过程,将指向其自建服务器的链接植入其中,进而窃取您的敏感数据以及您输入的所有凭据。

我们以客户端发起一个 https 请求为例,看看 SSL 剥离攻击的原理
中间人攻击(MITM) - 图2

防御方式

  1. 使用 HSTS 来过滤

浏览器发起请求前都会检查一个由浏览器维护的HSTS预加载列表,只要请求地址在该列表中,我们就会强制浏览器使用https请求
若列表中没有该地址,且地址访问协议不为 https ,则按照正常的访问 http 协议网站的步骤。

以访问 baidu.com 为例子

  1. 浏览器时先按照 http://www.baidu.com 进行访问
  2. 百度服务器发现是 http 请求,这是不安全的,于是响应一个 301/302 重定向 response 让客户端重定向至https://www.baidu.com
  3. 客户端接收到重定向响应信息,于是重定向至 https://www.baidu.com。让浏览器直接发起 HTTPS 请求。
  4. 响应报文头包括Strict-Transport-Security字段,HSTS 预加载列表将加入该地址
    1. Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

    响应头的 Strict-Transport-Security 给浏览器提供了详细的说明。 从现在开始,每个连接到该网站及其子域的下一年(31536000秒)从这个头被接收的时刻起必须是一个 HTTPS 连接。 HTTP 连接是完全不允许的。 如果浏览器接收到使用 HTTP 加载资源的请求,则必须尝试使用 HTTPS 请求替代。 如果 HTTPS 不可用,则必须直接终止连接

    此外,如果证书无效,将阻止你建立连接。 通常来说,如果 HTTPS 证书无效(如:过期、自签名、由未知 CA 签名等),浏览器会显示一个可以规避的警告。 但是,如果站点有 HSTS,浏览器就不会让你绕过警告。 若要访问该站点,必须从浏览器内的 HSTS 列表中删除该站点

HSTS优点

  1. 强制使用 HTTPS 建立安全连接防止重定向劫持以及中间人 SSL 剥离攻击。
  2. 省略从前 http 访问服务器,服务器响应,客户端再重定向的步骤,节省时间与资源。
  3. 无 HSTS 浏览器显示证书错误时用户可以选择忽略警告继续访问,有了 HSTS 之后证书错误时无目标页链接入口,防止中间人使用 SSL 劫持攻击。

HSTS缺陷

HSTS 无法解决第一次访问时的 HTTP 请求,只能要求客户端第一次以后每次访问都使用 HTTPS 请求。

解决HSTS缺陷

浏览器发起请求前都会检查一个由浏览器维护的 HSTS 预加载列表,所以我们只需要将服务器地址加入到 HSTS 预加载列表中即可解决 HSTS 存在的缺陷。

HSTS 是否完全安全?

  • 你第一次访问这个网站,你不受 HSTS 的保护。 如果网站向 HTTP 连接添加 HSTS 头,则该报头将被忽略。 这是因为攻击者可以在中间人攻击(man-in-the-middle attack)中删除或添加头部。 HSTS 报头不可信,除非它是通过 HTTPS 传递的。
  • 目前唯一可用于绕过 HSTS 的已知方法是基于 NTP 的攻击。 如果客户端计算机容易受到 NTP 攻击( NTP-based attack),它可能会被欺骗,使 HSTS 策略到期,并使用 HTTP 访问站点一次。

DNS 欺骗

原理

  1. 正常的 DNS 解析

如果您想访问 www.example.com,您的浏览器需要找到该特定 Web 服务器的 IP 地址。
它首先要查询系统的 hosts 文件,这是一个文本文件,其中包含任何域名的 IP 地址,这些域名被有效地“硬编码”到该系统中。

在 window系统中,hosts 文件的位置 C:\Windows\System32\drivers\etc

但是,大多数时候该网址不在系统的hosts文件中,那您的浏览器将询问DNS服务器(可能是一个在您组织网络上的解析器,也可能是由ISP运营或由Google、OpenDNS等组织运营的外部公共解析器)

  1. DNS 欺骗

DNS 欺骗就是攻击者冒充域名服务器的一种欺骗行为。原理:如果可以冒充域名服务器,然后将查询的 IP 地址设为攻击者的 IP 地址,这样的话用户上网就只能看到攻击者返回的页面。

DNS 欺骗之前一般需要使用 ARP 攻击来配合实现。
同时欺骗局域网内的用户主机和网关,局域网中用户的数据和网关的数据会发给同一个攻击者,这样,用户与网关的数据就会泄露。

  1. 欺骗用户主机:攻击者通过ARP欺骗使得局域网内用户主机发送给网关的流量信息 变成 发送给攻击者。用户主机刷新自己的 ARP 使得在自己的 ARP 缓存表中对应的 MAC 为攻击者的 MAC。
  2. 欺骗网关:通过欺骗网关的形式,使得用户发送给网关数据后,网关发送给攻击者。

如下图 主机 C 为攻击者。
中间人攻击(MITM) - 图3

防御方式

DNS 攻击存在一定的局限性:

  1. 攻击者不能替换缓存中已存在的记录,这也就是我们为什么要在实验开始时刷新受害机的DNS缓存的原因
  2. DNS服务器缓存时间的刷新

防御措施

  1. 使用最新版本的 DNS 服务器软件,及时安装补丁
  2. 关闭 DNS 服务器的递归功能
  3. 限制区域传输范围
  4. 限制动态更新
  5. 采用分层的DNS体系结构
  6. 保护内网设备,DNS攻击一般都是从内网中发起的,如果你的内网设备很安全,那么也就不存在被感染的风险

参考资料

《8月更文挑战|中间人攻击-流量欺骗与流量劫持总结》
《一文了解“中间人攻击(MITM)”》
《HTTPS连接过程以及中间人攻击劫持》