域名劫持——网易云信 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

相关推荐

  • 优艾智合创始人张朝辉:死磕细分行业Know-How,中国制造将引领全球移动机器人市场

    西安交通大学机器人学博士研究生 中国自动化学会制造系统控制专业委员会副秘书长 2019恰佩克杰出青年创业者,主持多项省重点研发计划 文 | babayage编辑 | 笑 笑 优艾智合,移动机器人赛道领航者,创始团队脱胎于西安交大机器人专业博士团队。2017年走出象牙塔,至今短短5年时间,不…

    2022年8月25日
    13200
  • DCloud崔红保:uni-app和HBuilder背后的男人,让天下没有难做的开发

    MUI,国内个接近原App体验的性能前端库,github star数过万;流应,国内程序应用形态的最早原型;HBuilder,拥有数百万前端开发者,国内唯做成功的开发工具;5+ Runtime,上亿活跃终端;uni-app ,户量最、社区最活跃的跨端框架…… 这张炫到刺眼的成绩单,来自DCloud。…

    2022年3月20日
    31100
  • 体系管理员的主要工作内容是什么

    体系管理员的工作主要包括:1、维护质量安全;2、落实内部审核工作;3、对审核情况进行实施;4、负责文章的编制。在此基础上形成一套完整的“企业管理基本法”,通过基本法对企业进行管理和约束,确保企业的正常运营和盈利。 系管理员的工作主要包括维护质量安全、落实内部审核工作、对审核情况进行实施、负责文章的编…

    2022年11月6日
    7000
  • 奈学教育创始人孙玄:《是的,我创业了》之后的600天

    文 | babayage 编辑 | 笑 笑 2021年2月21日,公众号“架构之美”发表的一篇《是的,我创业了!》刷爆IT业界,资深架构师孙玄在文中写道:“为中国 IT 教育培养行业做出一点点贡献,让 IT 教育培训获得应有的尊严,对于我来说,这样的人生会更加精彩和夺目。” 2021年9月中,新在线…

    2022年3月20日
    28400
  • 快狗打车CTO沈剑:努力不会背叛,承担社会责任的企业胜算高一点点

    都说选择大于努力,事实上,努力到了一定程度的人,才有选择人生的资格。 文| babayage 编辑 | 笑 笑 落榜中南财经政法努力不到位谈何选择 科创人(以下简称科):改变了您人生方向的第一个节点是? 沈剑(以下简称沈):高考,报考中南财经政法,没考上。 科:……一个意外的开场。 沈:我是湖南人,…

    2022年3月20日
    14700
  • 17汽车网黄玲艳:乐天派程序媛,梦想是打造社会型企业

    程序媛本就罕见,做到技术管理者的更是少之又少。采访黄玲艳(Helen)前多少有些纠结:“女性”显然是她的特色标签,但若仅围绕“女性”展开话题,无论对女性群体还是黄玲艳本人都显得缺乏尊重。 黄玲艳用阳光的笑声和“没所谓”的爽快熨平了一切。她认可女性技术人员的稀缺及由此衍生出的偏见(包括偏袒),同时也自…

    2022年3月20日
    12700
  • 激励理论是什么

    激励理论是指通过特定的方法与管理体系,将员工对组织及工作的承诺最大化的过程。激励理论是关于如何满足人的各种需要、调动人的积极性的原则和方法的概括总结。激励理论有1、内容激励理论;2、过程激励理论;3、行为后果理论;4、综合激励理论。 一、激励理论简介 激励理论是指通过特定的方法与管理体系,将员工对组…

    2022年11月15日
    2600
  • 使用项目工时管理软件有哪些好处

    使用项目工时管理软件有以下几点好处:1、将实际的项目和非项目结合;2、高效管理和控制项目的进度;3、增进团队协助和沟通;4、高效控制成本;5、外部工作管理;6、减轻劳动力负担;7、具有数据分析功能;8、性价比高。 1、将实际的项目和非项目结合 项目工时管理软件可以将实际的项目和非项目结合起来,这样就…

    2022年11月30日
    4900
  • 什么是快速原型模型

    快速原型模型需要迅速建造一个可以运行的软件原型 ,以便理解和澄清问题,使开发人员与用户达成共识,最终在确定的客户需求基础上开发客户满意的软件产品。快速原型模型允许在需求分析阶段对软件的需求进行初步而非完全的分析和定义。 快速原型模型需要迅速建造一个可以运行的软件原型 ,以便理解和澄清问题,使开发人员…

    2022年11月30日
    1600
  • 防火墙的重要性是什么

    防火墙的重要性体现在:当用户将自己的计算机连接到网络或互联网时,可能会暴露在威胁之下,最常见的威胁包括黑客攻击、身份盗窃、恶意软件和网络欺诈。而防火墙帮助阻止恶意活动并防止专用网络内外的任何人进行未经授权的 Web 活动。 防火墙的重要性 防火墙的作用是什么,重要性又体现在哪里?没有保护措施的网络很…

    2022年10月27日
    4000

发表回复

登录后才能评论
联系我们
关注微信
关注微信
分享本页
返回顶部