关于httpdns

概要

httpdns就是通过http的方式进行域名解析;阿里云有提供httpdns服务(目前2016-4-9 还处于公测阶段,需要申请公测资格才能用)。

传统dns解析存在的问题:

  1. 由于传统dns解析采用udp方式,而且是明文,所以
    1. 可能会被篡改
    2. 可能会被投毒(什么叫“投毒”?且看下文)

httpdns的实现原理:

  1. 通过http的方式进行域名解析,如:
  2. 通过设置http host header的方式发起http请求,如:

 

问题:

  1. httpdns server的域名如何解析?
    httpdns server 不通过域名提供服务,(只能)直接通过一个固定IP提供服务;服务提供商有足够的手段让这个IP不会出现宕机,而且世界各地(或者是全国各地)访问都能很快(就近访问),这个IP在世界上存在多份。
  2. 如何保证连接的这个ip是没被劫持呢?
    1. 或许可以给这个IP买个https证书,https证书提供商是可以给IP颁发证书的(比较少见),不过可能贵的多

 

优点:(参考文档: https://www.aliyun.com/product/httpdns?spm=5176.7960203.223922.4.2JohAO

  1. 防劫持
  2. 避免dns服务商莫名其妙的cache,可以做到立即修改理解生效
  3. 精准调度

问题:

  1. https请求问题及解决方案: https://help.aliyun.com/document_detail/httpdns/practice/https.html?spm=5176.7947101.220063.5.9DtXGS
    1. 这里回避了单个IP上多个https证书的问题,或许也可以通过钩子解决,但是不一定存在这样的钩子; ssl握手的时候,必须告知正确的host信息,否则,服务器无法知道该返回哪个证书,而不仅仅是验证证书的问题
  2. httpdns只适用于app、client的情况,对于web浏览器是不行的,还好现在大家都是在玩app了;
  3. 对于app里面适用webview的情况需要特殊处理一下:https://help.aliyun.com/document_detail/httpdns/practice/webview.html?spm=5176.dochttpdns/user-guide/resolve-stats.6.127.VFTz3N
  4. 对于通过react native来开发app的情况不知道是否方便使用

 

dns投毒:

因为域名解析是udp的,只要我已dns server的ip不断地向你的机器发送域名解析结果响应的话,你可能就会认为确实是dns server响应的结果;当然,有几个关键点需要注意:

  1. 用户确实需要解析某域名(一般来讲,解析完了会cache一段时间的)
  2. 伪造的响应里面是需要包含用户正在查询的域名的,域名不匹配自然不会被接受
  3. 用户发起请求的端口号(2字节)是随机的,响应的数据包需要能匹配上这个端口,否则不会被接受
  4. 用户发起的请求有一个随机的请求标识(2字节),响应的数据包需要能匹配上这个请求标识,否则不会被接受
  5. 我咋感觉这个难度其实并不算小啊,除非你是个中间人

httpdns示例:

 

更多参考:

全局精确流量调度新思路-HttpDNS服务详解: http://www.zmke.com/i/8705.html

渗透测试:内网DNS投毒技术劫持会话:http://www.freebuf.com/articles/web/43157.html

http://www.onedns.net/  需要特殊的dns客户端

加密的dns: https://www.opendns.com/about/innovations/dnscrypt/   需要特殊的dns客户端

wireshark分析dns协议: http://blog.csdn.net/hunanchenxingyu/article/details/21488291

dns协议格式: http://cjhust.blog.163.com/blog/static/1758271572014111875652363/

留下评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据