域名劫持——网易云信 IM SDK 服务高可用技术方案

域名劫持是互联网攻击的一种方式,通过攻击域名解析服务器(DNS),或伪造域名解析服务器(DNS)的方法,把目标网站域名解析到错误的 IP 地址从而实现用户无法访问目标网站的目的,或者蓄意/恶意要求用户访问指定 IP 地址(网站)的目的。”(以上内容引自「域名劫持」百度百科) 。网易云信 IM SDK 作为一款 ToB 产品,支撑着各种三方业务的开展。面对各种复杂的网络环境,DNS 劫持与 DNS 污染时有发生,那么在我们提供服务的过程中应该如何避免此类事故的发生呢?

作者:郝魁 网易云信资深客户端开发工程师

一、关于域名劫持

技术是一把双刃剑,在大侠手中定国安邦,在鼠辈手中祸国殃民

“域名劫持”虽然带了“劫持”二字,但在此环境中实属中性词汇。例如对于一些非法网站的访问,可以通过 DNS 服务把相应的域名解析到不可访问的 IP 地址,以阻止对于该非法网站的访问并给予警告等。在网易云信即时通信产品运维过程中,曾经发生过服务域名 “netease.im“被别有用心的人或组织恶意劫持的事件,导致接入网易云信 IM SDK 的应用无法正常登录,给客户以及客户的用户造成影响。

为了弄清楚这种事故是怎么发生的,我们来分析一下网易云信 IM SDK 的登录过程:

域名劫持——网易云信 IM SDK 服务高可用技术方案

从流程上来看,在“更新 LBS”的节点上,如果发生 DNS 劫持,在访问网易云信 LBS 服务时有可能超时或者拿到了错误的应答,导致 IM SDK 无法获取正常的 Link 服务器地址及端口,如何避免此类事故的发生呢?本文将围绕网易云信端侧服务高可用技术方案以及高可用组件实现方案进行具体分享。

二、如何预防 DNS 劫持

通常对于域名被劫持后,我们可以采用以下几种方式:

域名劫持——网易云信 IM SDK 服务高可用技术方案

上述几种方式,都是在发生劫持后采取的方案,无论是从服务提供侧还是服务使用侧来说都不够灵活,为了解决这些问题,提前预防事故的发生,我们主要采用以下两种方案:

IMG_256

其中接入了 HttpDNS 服务的方案降低了所有场景下域名被劫持的风险。

(一)LocalDNS 域名劫持

域名劫持一直是困扰许多开发者的问题之一,其表现为域名 A 应该返回的 DNS 解析结果 IP1 被恶意替换为了 IP2,导致 A 的访问失败或访问了一个不安全的站点,常见域名劫持方式有以下几种:

  • 黑客入侵宽带路由器,篡改终端用户 LocalDNS,并指向伪造 LocalDNS,通过控制 LocalDNS 的逻辑返回错误的 IP 信息进行域名劫持。
  • 监听终端用户域名解析请求,在 LocalDNS 返回正确结果之前将伪造的 DNS 解析响应传递给终端用户,进而控制终端用户的域名访问行为。
  • 缓存污染,LocalDNS 缓存了域名的解析结果,并对部分域名结果进行更改,导致用户访问被指向被更改的地址,示意图如下:

域名劫持——网易云信 IM SDK 服务高可用技术方案 (二)HttpDNS 实现原理

Step 1:客户端直接访问 HttpDNS 接口,获取业务在域名配置管理系统上配置的“正确的”、“访问速度优异的”IP 列表。

Step 2:客户端向获取到的 IP 后就向直接往此 IP 发送业务协议请求。以 HTTP 请求为例,通过在 header 中指定 Host 字段,向 HttpDNS 返回的 IP 发送标准的 HTTP 请求即可,如果是 Https 还要考虑 SNI 的问题。

域名劫持——网易云信 IM SDK 服务高可用技术方案

三、网易云信服务高可用策略

为了提高服务的高可用性,网易云信 SDK 接入了 HttpDNS 服务,高可用方案整体结构如下所示:

域名劫持——网易云信 IM SDK 服务高可用技术方案

IM SDK 接入 HttpDNS 服务实现服务高可用的一般流程:

IMG_262

(一)端侧 HttpDNS SDK 实现

IM SDK 高可用组件采用了跨平台开发方案,主要针对 Native SDK(Windows 、MacOS、iOS、Android)进行了支持,基本结构如下:

域名劫持——网易云信 IM SDK 服务高可用技术方案

高可用组件为了保证高可用性、响应的及时性、结果的正确性,在设计时需要完成以下几个功能:

  • HttpDNS 服务接口的更新及缓存维护
  • 域名查询结果更新及缓存维护
  • HTTP 请求的实现
  1. 阶梯式 HTTP 请求

某一域名通过 HttpDNS 的域名查询服务,可能会解析出多个 IP 地址,如果这些地址当中包含已下线或者访问速度不理想的节点,会使整个 HTTP 的访问时间变长,最坏的情况是所有的地址都进行了访问,且都超时,如下图所示:

IMG_264
域名劫持——网易云信 IM SDK 服务高可用技术方案

为了提高 HTTP 请求的访问效率,在网易云信高可用组件中引入了多地址阶梯式的 HTTP 请求机制,比如单一链接的 HTTP 请求超时时间指定为 30s,当开始名列前茅个链接访问时开启一个超时时间为 3 秒的定时器 Timer0,如果该请求在 3 秒内返回并且经过业务模块验证为正确应答,此时整个多地址阶梯式请求结束,否则在 Timer0 触发时,启动对下一链接的 HTTP 请求,并启动一个新的超时时间为 3 秒的定时器 Time1,以此类推,直到有正确的响应结果或者所有的链接都已访问完成,流程如下所示:

IMG_265

域名劫持——网易云信 IM SDK 服务高可用技术方案 2. HttpDNS 服务接口的更新及缓存维护

HttpDNS 也是一个 HTTP 服务也存在被劫持的可能,所以除了使用 HttpDNS 域名外,高可用组件还内置了多个固化的 IP,以解决 HttpDNS 域名被劫持后无法访问的问题,使用固化 IP 虽然可以解决域名被劫持的问题,但不一定是最新、优异的节点,为了解决这个问题,高可用组件在指定时间内会更新 HttpDNS 服务地址,拿到最新、优异的节点。为了减少对 HttpDNS 的访问量,引入了服务地址的 TTL(一般是 1 小时)机制,即在服务地址有效期内使用本地缓存,不再向 HttpDNS 请求服务地址。

HttpDNS 服务初始化流程如下:

IMG_266
  1. 域名查询结果更新及缓存维护

高可用组件为了保证域名查询的及时响应,以及减少对 HttpDNS 的访问量,引入了“查询结果缓存”,对已经查询过的域名结果进行了本地缓存,为了提高正确性同样也加入了 TTL 机制(一般是 5 分钟),超出指定时间后,会对结果进行再次更新,同时为了保证响应的及时性,在 TTL 的基础上加入了冗余时间(一般是 TTL*0.75),所以调用高可用组件查询域名会存在三种结果:

  • 缓存未到达冗余时间,返回缓存结果。
  • 缓存达到冗余时间,但尚未过期,返回缓存结果,同时发起更新请求。
  • 缓存已过期,发起更新请求,应答成功后,更新缓存,响应上层调用,如果应答失败,继续使用缓存数据。

调用高可用组件进行域名查询的流程如下:

IMG_267
  1. HTTP 访问流程设计
域名劫持——网易云信 IM SDK 服务高可用技术方案

(二) 疑似劫持事件上报

当调用高可用组件进行 HTTP 请求时,如果因非网络原因导致的请求失败,而且触发了 HttpDNS 查询域名操作,则判定此次访问的域名可能存在已被劫持的风险,高可用组件会收集与此域名相关的信息内容上报到网易云信数据大盘,数据大盘后台根据上报信息来定位是否存在域名劫持的情况,并根据实际情况来决定是否要重新配置 HttpDNS 解析结果还是配合安全部门对相应的 App 进行封禁处理。

域名劫持——网易云信 IM SDK 服务高可用技术方案

(三)SNI 处理

为了让多个域名复用一个 IP,在 HTTP 服务器上引入了虚拟主机的概念。多个虚拟主机共享 IP 的 HTTPS 服务器中,在握手建立之前服务器无法知道客户端请求的具体 Host,所以无法将请求交给特定的虚拟主机,从而导致服务器无法读取虚拟主机中配置的证书信息。SNI 就是用来解决这个问题的,SNI 是 SSL 和 TLS 的一个扩展协议。SNI 要求客户端在与服务器握手时就携带需要访问的域名的 Host 信息,具体实现方法是在客户端 “Client Hello” 报文的请求头中,增加了 Server Name 的扩展字段,因此服务器便会知道需要用哪个虚拟主机的证书与客户端握手并建立 TLS 连接。

以下是使用 libcurl 发送 HTTP 请求的代码片段:

域名劫持——网易云信 IM SDK 服务高可用技术方案

参考资料

  • DNS污染_百度百科 (baidu.com)
  • 域名劫持_百度百科 (baidu.com)
  • 域名服务器缓存污染 – 维基百科,自由的百科全书 (wikipedia.org)

以上就是网易云信端侧服务高可用技术方案以及高可用组件实现方案的分享,如有兴趣,欢迎你在公众号留言与我探讨。

作者介绍

郝魁,网易云信资深 C++ 开发工程师,主要负责网易云信 IM SDK 的开发、维护、重构等工作,拥有多年 C++ 客户端开发经验,现致力于跨平台 C++ 开发。

关于网易云信

网易云信:网易智企旗下融合通信云服务专家、通信与视频 PaaS 平台。集网易 24 年 IM 以及音视频技术打造的融合通信云服务专家,稳定易用的通信与视频 PaaS 平台。提供融合通信与视频的核心能力与组件,包含 IM 即时通讯、5G 消息平台、一键登录、信令、短信与号码隐私保护等通信服务,音视频通话、直播、点播、互动直播与互动白板等音视频服务,视频会议等组件服务,并联合网易易盾推出一站式安全通信方案「安全通」。目前,网易云信已经成功发送 1.6 万亿条消息,覆盖智能终端 SDK 数累计超过 186 亿,我们期待每个智能终端都有云信的融合通信能力。

文章标题:域名劫持——网易云信 IM SDK 服务高可用技术方案,发布者:网易智企,转载请注明出处:https://worktile.com/kb/p/5975

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年3月17日 上午12:30
下一篇 2022年3月17日 上午12:42

相关推荐

  • 大数据平台是什么

    大数据平台是一个全面的信息处理和分析系统,它能处理和分析海量、多样性的数据,从而为企业提供决策支持。大数据平台通常包括数据采集、数据存储、数据处理和数据分析等模块。这种平台的使用,帮助企业从大数据中获取价值,提升业务效率,优化决策过程。 大数据平台,从宏观上来说,是一个集成了各种大数据技术和工具的系…

    2023年5月15日
    38600
  • 运算符的结合性,从左向右,从右向左到底是什么意思

    运算符是编程语言中非常重要的一部分,它们用于执行各种计算和操作。在编写代码时,我们通常需要使用多个运算符来实现所需的功能。但是,运算符的结合性对于我们正确理解运算符的优先级和顺序至关重要。本文将详细介绍运算符的结合性,包括从左向右,从右向左的含义以及其在编程中的应用。 运算符的结合性 在编程中,每个…

    2023年3月1日
    33400
  • 远程办公和学习,哪些工具好用

    远程办公和学习的好用工具有:1、腾讯文档;2、IIS7远程助手;3、钉钉;4、企业微信;5、腾讯会议。腾讯文档最大的精髓在于协同办公。我们可以将在线文档共享给自己的同事,只要将相应的网址发给对方即可。获得分享的同事同样也可以对文档进行在线编辑,同时实时同步。 一、腾讯文档 首先,在基础功能方面,腾讯…

    2023年4月30日
    2100
  • 如何在Electron上实现IMSDK聊天消息全文检索

    在 IM 场景的客户端需求上,基于本地数据的全文检索(Full-text search)扮演着重要的角色。所谓全文检索,就是要在大量文档中找到包含某个单词出现位置的技术。 作者介绍:李宁 网易云信高级前端开发工程师 一、前言 在以往的关系型数据库中,只能通过 LIKE 来实现,这样有几个弊端: 无法…

    2022年3月17日
    27100
  • 为什么C++继承过程中使用访问说明符和虚函数

    访问说明符可以保证派生类对基类的访问权限是可控的,从而保证代码的安全性和可维护性。虚函数可以实现多态性,使代码更加灵活和可扩展,同时也提高了代码的可读性和可维护性。因此,在C++中,继承过程中使用访问说明符和虚函数是非常重要的。 在C++中,继承是一种重要的特性。它允许一个类(称为派生类或子类)继承…

    2023年2月28日
    3800
  • OKR的关键组成部分是什么

    OKR(Objectives and Key Results)的关键组成部分是目标(Objectives)和关键结果(Key Results)。本文将详细解释以下几个方面:一、Objectives的定义和特性;二、Key Results的定义和特性;三、OKR的成功应用方法。其中,“Objectiv…

    2023年9月4日
    1900
  • linux绝对路径和相对路径的区别

    Linux绝对路径和相对路径的区别主要有:1、路径的表示方式不同;2、使用的便利性不同;3、工作的适用场合不同;4、文件查找的速度不同;5、路径的复杂性不同;6、使用的风险程度不同。其中,路径的表示方式不同指的是绝对路径始终是从根目录开始,而相对路径则是从当前目录开始的。 1、路径的表示方式不同 L…

    2023年6月9日
    50600
  • pscc和pscs6有什么区别

    Photoshop CC和Photoshop CS6的区别主要体现在:1、版本更新方式不同;2、功能特性不同;3、许可证方式不同;4、云服务支持不同。总的来说,Photoshop CC是Adobe公司推出的云服务版本,相比于CS6版本,它提供了更多的新功能和更好的云服务支持。 1、版本更新方式不同 …

    2023年5月22日
    48900
  • 什么是甘特图

    甘特图是一种用于管理时间和任务活动的工具,它能够将活动列表以及时间、顺序以图形方式直观展示,方便管理者查看活动计划、跟进任务进度、合理分配资源。甘特图主要应用于项目管理,具有直观展示、制作简单、便于理解等特点。

    2022年11月16日
    7.9K00
  • 二叉树的前序遍历,中序遍历和后序遍历分别有什么作用

    二叉树的前序遍历的作用:可以用于复制一棵树,或者用来打印一个二叉树的结构。二叉树的中序遍历的作用:可以用于快速查找一棵二叉树中某个节点的位置。二叉树的后序遍历的作用:可以用于计算一棵二叉树的表达式。 一、二叉树的前序遍历,中序遍历和后序遍历分别有什么作用 1、前序遍历的作用 二叉树的前序遍历可以用来…

    2023年4月15日
    25500

发表回复

登录后才能评论
联系我们
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部