🧑 作者简介 :阿里巴巴嵌入式技术专家,深耕嵌入式+人工智能领域,具备多年的嵌入式硬件产品研发管理经验。

📒 博客介绍
:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导、简历面试辅导、技术架构设计优化、开发外包等服务,有需要可私信联系。

🗄️ 专栏介绍
:本文归属于专栏《嵌入式解决方案》,专注嵌入式开发中的常用工具,持续更新中,欢迎大家免费订阅关注。

域名劫持无处遁形:基于HTTPDNS打造可靠且安全的域名解析体系
  • 1. 概述
  • 2. 原理介绍
  • 3. 阿里云HTTPDNS平台配置
  • * 3.1 服务开通
    
    • 3.2 创建项目
    • 3.3 添加域名
    • 3.4 自定义解析域名(可选)
    • 3.5 快速验证
  • 4. 阿里云HTTPDNS集成接入
  • * 4.1 SDK接入
    
    • 4.2 HTTP(S) API非鉴权直接接入(不推荐)
    •   * 4.2.1 请求API
      
      • 4.2.2 服务IP
      • 4.2.3 API响应说明
    • 4.3 HTTP(S) API鉴权机制接入(推荐)
    •   * 4.3.1 请求API
      
      • 4.3.2 鉴权方案
      • 4.3.3 鉴权响应
      • 4.3.4 特别说明
    • 4.4 IP调度(可选)
    •   * 4.4.1 功能说明
      
      • 4.4.2 调度API
      • 4.4.3 接入方式
  • 5. 总结

1. 概述

在嵌入式系统的广阔天地中,网络安全常常是设计和部署考量中的重中之重。这些系统,无论是在智能家居、工业控制还是现代汽车中,都扮演着日益重要的角色。随着嵌入式设备越来越多地连接到互联网,它们暴露在诸多网络威胁之下,其中,域名劫持尤其令人担忧。这种攻击不仅威胁到数据的安全性和隐私,而且可能对设备的功能性和稳定性造成破坏。在这样的背景下,采用HTTPDNS就显得尤为重要。

传统的DNS查询存在诸多弱点,这使得嵌入式设备容易受到中间人攻击和缓存污染。而HTTPDNS,通过利用HTTPS的加密协议,提供了更为安全的域名解析服务。这不仅增强了嵌入式设备的安全性,还提高了解析速度和准确性,这在资源受限且对实时性要求极高的嵌入式应用中尤为重要。

本文将深入探讨HTTPDNS如何强化嵌入式开发领域的网络安全,以及它是如何成为嵌入式设备网络栈中不可或缺的一环。我们将讨论如何在嵌入式系统中实现和部署HTTPDNS,以及这一技术是如何提升整体系统的健壮性,确保嵌入式设备能在一个越来越互联的世界中安全可靠地运行。

随着嵌入式设备越发普及,保护这些设备免受网络攻击的需求日益迫切。HTTPDNS代表了一种创新的解决方案,它预示着在保障关键系统安全这一永恒议题上的一大步进。让我们一起走进HTTPDNS的世界,探索它如何为嵌入式开发领域带来变革。
![在这里插入图片描述](https://img-
blog.csdnimg.cn/direct/196b45ec036c4b2a83732de0a6624d4e.gif#pic_center)

2. 原理介绍

HTTPDNS是面向多端应用(智能设备、移动端APP,PC客户端应用)的域名解析服务,解析请求基于HTTP(S)协议,有效解决了传统域名解析容易被劫持、解析不准确、更新不及时、服务不稳定等问题。

从原理上来讲,HTTPDNS 只是将域名解析的协议由 DNS 协议换成了 HTTP 协议,并不复杂。但是这一微小的转换,却带来了巨大的收益。

对于大多数开发者来说,可以尝试自己实现 HTTPDNS
,比如在公网服务器搭建一个HTTPS服务,专门用于提供DNS解析服务,这种方案适用于小规模,对性能和成功率要求不高的场景。但是如果想快速稳定持续更新迭代,现在各大云服务也有提供
HTTPDNS 服务,如 HTTPDNS - 阿里云、[HttpDNS

  • 腾讯云](https://cloud.tencent.com/product/httpdns)、移动域名解析服务 -
    百度云

    等等。每家供应商都有各自的免费额度,比如百度云提供300万次/月免费解析,阿里云提供300万次/月免费解析,腾讯云提供600万次/月免费解析。

下面,我们以阿里云HTTPDNS服务为例,讲解其调用流程。其它厂商的接口调用方法参考各自的文档即可。

3. 阿里云HTTPDNS平台配置

接入方式如下图所示:
![在这里插入图片描述](https://img-
blog.csdnimg.cn/direct/88376c11da3b4d33a00a32a87c1acbec.png#pic_center)

3.1 服务开通

  1. 登录阿里云控制台
  2. 鼠标悬停在左上角的(橙底三白色横杠 )图标上,然后在产品与服务中,打开产品和服务列表。
  3. 在产品列表中,选择企业云服务 > 移动研发平台 ,进入产品介绍页。
    ![在这里插入图片描述](https://img-
    blog.csdnimg.cn/direct/e9660ac35a8540d9a8eb179167e3d2c8.png#pic_center)4.
    在产品介绍页,勾选服务协议后,单击立即开通。

3.2 创建项目

  1. 产品开通后即可进入EMAS移动研发平台的管理控制台

  2. 在控制台首页,单击添加项目 ,打开创建项目 右侧栏。
    ![在这里插入图片描述](https://img-
    blog.csdnimg.cn/direct/2fcfe28e3f7e440b9e5a2ef14c74f97e.png#pic_center)

  3. 在创作项目右侧栏,填写项目基本信息。

选项 | 说明
–|–
项目名称 | 必填,用于设置项目的名称
【取值范围】1~30字符
【字符类型】中文/英文大小写/数字/下划线
项目描述 | 项目描述,选填,简要介绍项目用途

  1. 单击创建并进入 ,保存项目,并打开概览 页面。
    ![在这里插入图片描述](https://img-
    blog.csdnimg.cn/direct/94fdea5019c34fbc9bb4537e39a1a9d9.png#pic_center)

3.3 添加域名

  1. 点击进入平台服务 功能页,然后展开左侧的HTTPDNS菜单,点击概览 进入HTTPDNS产品首页。可以看到Account ID以及免费解析量等信息。
    ![在这里插入图片描述](https://img-
    blog.csdnimg.cn/direct/24ce48c45beb4a03a896fc43ee23c2d6.png)

  2. 点击左侧的域名列表 ,然后点击添加域名 按钮,填写合法的具体域名或泛域名后,点击确定 按钮即可保存。

示例:添加*.aliyun.com,aliyun能匹配所有以aliyun.com结尾的域名,比如aliyun.comwww.aliyun.comemas.console.aliyun.com
![在这里插入图片描述](https://img-
blog.csdnimg.cn/direct/47676e6c4cc842e0b527f8ac13f50a90.png#pic_center)

3.4 自定义解析域名(可选)

在HTTPDNS的基础上,引入自定义解析功能,可以实现:

  • 客户端自定义参数输入。
  • 服务端结合自定义函数处理能力,支持实现复杂的自定义解析功能。
  • 返回自定义解析结果。

使用自定义域名解析使用频次较低,不再赘述,方法请参见概述

3.5 快速验证

到这里,就可以对设置好的域名进行快速验证了,以确认我们配置的域名是生效的。
方法:浏览器访问测试URL:https://203.107.1.33/Account ID /d?host=待解析域名

需要将**Account ID替换为HTTPDNS产品首页看到的Account ID,将 待解析域名 **替换为控制台添加的域名。

预期返回类似下面的结果,就表示验证成功了:
![在这里插入图片描述](https://img-
blog.csdnimg.cn/direct/8ca449cdcc25484396bfa063fc0238d8.png#pic_center)

4. 阿里云HTTPDNS集成接入

HTTPDNS提供了简洁的HTTP(S)
API接口供用户访问,接入代码较为简单;同时HTTPDNS也为Android和iOS移动端用户提供了SDK进行集成。

4.1 SDK接入

SDK下载请参考下面截图,选择对应平台和SDK包后下载即可。
![在这里插入图片描述](https://img-
blog.csdnimg.cn/direct/ac154d52a56e40fdb3506a2e6bf7d9e3.png#pic_center)
![在这里插入图片描述](https://img-
blog.csdnimg.cn/direct/f0f3798e0e764c829dbf8d127b8786a0.png#pic_center)
SDK服务接入请参考各自平台的参考文档进行,不再赘述:

4.2 HTTP(S) API非鉴权直接接入(不推荐)

HTTP(S) API早期无需鉴权,拿到Account ID之后即可直接使用,非常方便(所以注意保密Account
ID)。但为了避免可能存在的盗刷问题,后面又支持了鉴权机制接入,大大提高了安全性,保护了数字资产。

阿里云HTTPDNS支持单域名解析和多域名解析,本文只演示单域名解析的使用方法,多域名解析请自行参考官方文档

4.2.1 请求API

HTTPDNS通过HTTP接口对外提供域名解析服务,服务接入直接使用IP地址(不使用域名访问就避免了使用传统DNS解析阿里云HTTPDNS域名带来的劫持问题),服务IP有多个(请提工单或加入钉钉群35248489获取),这里以203.107.1.33这个服务IP为例,说明HTTPDNS服务的访问方式。

请求方式:HTTP GETHTTPS GET
HTTP服务URL:http://203.107.XXX.XXX/{account_id}/d
HTTPS服务URL:https://203.107.XXX.XXX/{account_id}/d

其中的{account_id}需要替换为用户的HTTPDNS服务的Account ID,在HTTPDNS控制台上可以获得这个ID。

URL参数说明:

名称 是否必须 描述
host 必须 要解析的域名
ip 可选 用户的来源IP,如果没指定这个参数,默认使用请求连接的源IP。
query 可选 指定解析结果IP的类型,可以选择6(IPv6)或4(IPv4)。默认值为4。

访问HTTPDNS服务时,一次请求只能解析一个域名。

请求示例(假设Account ID为100000):

  • 示例1(默认来源IP):http://203.107.1.33/100000/d?host=www.aliyun.com

  • 示例2(指定来源IP):http://203.107.1.33/100000/d?host=www.aliyun.com&ip=42.120.XX.XXX

  • 示例3(指定解析类型):http://203.107.1.33/100000/d?host=www.aliyun.com&ip=219.242.XXX.XXX&query=4,6

  • 示例4 (支持IPv6):http://[2401:b180:2000:XXXX:XXXX]/100000/d?host=www.aliyun.com&ip=219.242.XXX.XXX&query=4,6

4.2.2 服务IP

考虑到服务IP防攻击之类的安全风险,为保障服务可用性,HTTPDNS同时提供多个服务IP,当某个服务
IP在异常情况下不可用时,可以使用其他服务IP进行重试。上述文档中使用的203.107.1.33是其中一个服务IP。

如果使用场景特殊(比如嵌入式设备开发),无法使用SDK,需要直接访问HTTP
API接口,请提工单联系官方获取服务IP列表。

4.2.3 API响应说明
  • 请求成功

请求成功时,HTTP响应的状态码为200,响应结果用JSON格式表示,示例如下:

    {
"host":"www.aliyun.com",
"ips":[
"192.168.XX.234"
],
  "ipsv6":[
"2400:3200:1300:0:0:0:XX:XX"
],
"ttl":57,
"origin_ttl":120
}

返回字段说明:

名称 描述
host 请求解析的域名
ips 该域名的IPv4解析结果,是一个列表,可能包括0个、1个或多个IP地址;仅当query=4时返回这个字段。
ipsv6 该域名的IPv6解析结果,是一个列表,可能包括0个、1个或多个IP地址;仅当query=6时返回这个字段。
ttl 该域名解析结果的TTL缓存时间。
origin_ttl 域名原始TTL,即权威NS上配置的域名TTL值。
重要:因服务后端对不同域名的解析方式不同,可能没法获得域名的这个TTL值,此时不返回这个字段。

请求成功时,返回结果中的ips字段可能是空列表,即没有获得该域名的IP地址,这里主要有两个原因:

  • 该域名没有在HTTPDNS控制台中添加,请前往控制台添加。

  • 该域名不存在对应IP,域名未注册,或者没有配置IP地址。
    ips字段为空的返回结果示例:

    {
    

    “host”:“www.aliyun.com”,
    “ips”:[],
    “ttl”:300
    }

返回结果中包含TTL缓存时间,为避免频繁进行域名解析,用户应该按这个TTL时间,对域名解析结果进行缓存。在TTL过期之前,直接使用缓存的IP;TTL过期后,再去请求HTTPDNS服务,获得最新的解析结果。

  • 请求失败

请求失败时,HTTP响应的状态码为4xx/5xx,同时也返回具体的错误码,响应结果用JSON格式表示。

请求失败的响应示例:

{
	"code":"MissingArgument"
}



错误码列表如下:
错误码 HTTP状态码 描述
MissingArgument 400 缺少必要参数。
InvalidHost 400 域名格式不合法。
TooManyHosts 400 单域名解析接口传递了多个待解析域名。
SdnsNotSupported 400 海外暂不支持SDNS服务。
InvalidAccount 403 无效账户或账户不存在。
MethodNotAllowed 405 不支持的HTTP方法。
InternalError 500 服务端内部错误。
  • 错误处理说明

用户业务使用HTTPDNS时,应做好异常情况下的出错兼容逻辑,主要包括异步请求重试降级

* **异步请求**  

访问HTTPDNS服务时,应该使用异步请求的策略,避免解析延迟太大而对业务造成影响,特别是在网络环境异常或HTTPDNS服务IP异常不可用时,如果用同步访问,需要等待网络超时后才会返回解析失败,这个超时时间较大,可能对业务的使用体验造成很大影响。

异步请求策略:解析域名时,如果当前缓存中有TTL未过期的IP,可直接使用;如果没有,则立刻让此次请求降级走原生LocalDNS解析,同时另起线程异步地发起HTTPDNS请求进行解析,更新缓存,这样后续解析域名时就能命中缓存。

* **重试**  

访问HTTPDNS服务解析域名时,如果请求HTTPDNS服务端失败,即HTTP请求没有返回,可以进行重试。

大部分情况下,这种访问失败是由于网络原因引起的,重试可以解决。

* **降级**  

当通过HTTPDNS服务无法获得域名对应的IP时,都必须降级 :使用标准的DNS解析,通过Local DNS去解析域名。

请求HTTPDNS但没有返回IP时,主要是因为“域名没有在控制台添加”或“域名本身不存在”,无论什么原因,如果通过HTTPDNS没有解析出IP,为保证业务请求正常,必须降级
使用标准的DNS,作为兜底方案。

4.3 HTTP(S) API鉴权机制接入(推荐)

在非鉴权直接接入的基础上,为了避免可能存在的盗刷问题,后面又支持了鉴权机制接入,大大提高了安全性,保护了数字资产。

4.3.1 请求API
  • 签名生成算法及示例

新鉴权接口

* `http://203.107.1.33/{account_id}/sign_d`
* `http://203.107.1.33/{account_id}/sign_resolve`

其中,

  • {account_id} 需要替换为用户的HTTPDNS Account ID,在HTTPDNS控制台上可以获得这个ID。
  • 鉴权接口可以添加IP参数,是否添加该参数及参数内容不影响签名的计算。
  • 服务IP列表请提工单或加入钉钉群35248489获取。
4.3.2 鉴权方案
**签名算法**
`sign = md5sum( host-secret-timestamp )`

**鉴权字段说明**
字段 |描述
---|---
host|需要被解析的host,与URL中的host参数取同样的值。
secret|由服务器负责生成,查看方式:`控制台 > 鉴权配置 > 鉴权secret key`。
timestamp|签名失效时间,1970年1月1日以来的秒数(整型正数,固定长度10)。

**说明**
* 签名最长有效时间不超过24小时。

**签名示例**
-   示例1(普通解析API接口):

    -   原请求:`http://203.107.1.33/{account_id}/d?host=www.aliyun.com`
    
    -   假设密钥为:`IAmASecret`,希望在北京时间2018-08-15 15:00:00失效(时间戳`1534316400`)
    
  	  -   sign = `md5sum(“www.aliyun.com-IAmASecret-1534316400”) = 60c71e98b6d7fcbb366243e224eab457`
    
	 -   鉴权请求:`http://203.107.1.33/{account_id}/sign_d?host=www.aliyun.com&t=1534316400&s=60c71e98b6d7fcbb366243e224eab457`
    
-   示例2(批量解析API接口):

  	-   原请求:`http://203.107.1.33/{account_id}/resolve?host=www.aliyun.com,www.taobao.com`
    
   	-   假设密钥为:`IAmASecret`,希望在北京时间2018-08-15 15:00:00失效(时间戳`1534316400`)
    
   	-   sign = `md5sum(“www.aliyun.com,www.taobao.com-IAmASecret-1534316400”) = 12a3f6b1b14a46ca813ca6439beb59a4`
    
  	-   鉴权请求:`http://203.107.1.33/{account_id}/sign_resolve?host=www.aliyun.com,www.taobao.com&t=1534316400&s=12a3f6b1b14a46ca813ca6439beb59a4`

**此方案优缺点**
-   **缺点**
	-   客户端时间不同。
	-   密钥放在客户端丢失有风险。
    
-   **优点**
	-   无需去服务器拉取。
4.3.3 鉴权响应
  • 鉴权成功时,HTTP响应的状态码为200 ,响应结果同原HTTPDNS响应,各字段含义不再赘述,请参考第三章。

    {
    

    “code”: “OK”,
    “host”:“www.aliyun.com”,
    “ips”:[
    “192.168.XX.234”
    ],
    “ipsv6”:[
    “2400:3200:1300:0:0:0:XX:XX”
    ],
    “ttl”:57,
    “origin_ttl”:120
    }

  • 鉴权失败时,HTTP响应的状态码为403400 ,响应结果同时也返回具体的错误码,响应结果用JSON格式表示。

     { "code": "InvalidSignature" }
    

3.3 状态码说明

HTTP状态码 错误码 描述
403 SignatureExpired 时间戳已过期
403 InvalidSignature 签名不正确
400 InvalidDuration 签名有效期过长(最长86400秒)
400 InvalidSignature 签名格式不正确
400 InvalidTimestamp 时间戳格式不正确
400 AccountNotExists 账户不存在或被禁用
4.3.4 特别说明

非鉴权接口默认是开启的,对于默认使用鉴权机制接入的产品来说,可以关闭非鉴权接口,以避免产生安全和费用问题,如下图所示。
![在这里插入图片描述](https://img-
blog.csdnimg.cn/direct/08b14698bb2e42c3968713bc5bf1465e.png#pic_center)

4.4 IP调度(可选)

4.4.1 功能说明

ip调度接口根据请求IP,再次返回最优和最新的服务调度信息,并同时提供更多的容灾能力。包括以下能力:

  • 获取服务IP列表,允许客户端动态获取服务节点IP。
  • 列出当前所有已启用的域名列表,允许客户端避免无效解析请求。
  • 当某服务节点异常后,允许动态获取最新的服务接入点列表。
4.4.2 调度API

URL:https://{当前的启动IP_或_服务IP}/{account_id}/ss

其中,{account_id}是您HTTPDNS服务的专属ID,您可以在HTTPDNS控制台上获取。

请求方式:GET

非高频使用功能,请求参数和响应不再赘述,详情请参考官方文档

4.4.3 接入方式

接入流程如下图所示:
![在这里插入图片描述](https://img-
blog.csdnimg.cn/direct/6fc7d3964dfc491a9fe482185c3c132a.png#pic_center)

5. 总结

随着嵌入式系统在我们日常生活中的植根深化,从智能家居到工业自动化,再到互联车辆,确保其网络通信的安全和可靠性变得至关重要。HTTPDNS作为一种创新的域名解析方法,已经证明了它在防止域名劫持和提升嵌入式系统网络安全性方面的显著优势。通过采用HTTPDNS,开发者不仅能够保障设备在互联网上的数据传输更安全、更隐私,同时也显著提升了响应速度和系统的整体可靠性。

通过在嵌入式系统中采用HTTPDNS,我们能够更好地为这些不断增长的网络安全挑战做好准备,确保我们的技术能够抵御最新的威胁,提供给用户最可靠、最安全的体验。

黑客/网络安全学习路线

今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

网络安全学习资源分享:

最后给大家分享我自己学习的一份全套的网络安全学习资料,希望对想学习 网络安全的小伙伴们有帮助!

零基础入门

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

读者福利 | CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享 (安全链接,放心点击)

在这里插入图片描述

1.网络安全学习路线图

要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

在这里插入图片描述

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本【点击领取技术文档】

在这里插入图片描述

(都打包成一块的了,不能一一展开,总共300多集)

3.技术文档和电子书

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本【点击领取书籍】

在这里插入图片描述

4.工具包、面试题和源码

“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。

在这里插入图片描述

最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。

这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。

参考解析:深信服官网、奇安信官网、Freebuf、csdn等

内容特点:条理清晰,含图像化表示更加易懂。

内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…

在这里插入图片描述

在这里插入图片描述

读者福利 | CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享 (安全链接,放心点击)

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐