简述

相比大家对中间人劫持的攻击相当了解,尤其是局域网中的中间人攻击。有很多的利用手段比如ARP投毒、DNS投毒、ICMP重定向等等,这类的文章在网上非常的多。但是今天要讨论的是一个全新的中间人攻击方式,这种方式在近几年的顶会论文中被研究。这种中间人攻击条件一旦具备,攻击者可以从任何地方对网络发起中间人劫持。

在这篇文章里我将总结和分析这类攻击的原理,并列举目前网络上存在这些漏洞的服务应用。最后讨论一下作为软件开发人员应该怎么去防范这类攻击。

背景知识

在很多私有网络环境里会使用许多私有的域名后缀比如.ntld等等。在ICANN(The Internet Corporation for Assigned Names and Numbers)互联网名称与数字地址分配机构 最初指定的顶级域名中有.com、.org等,这些后缀的域名可以被公共网络的用户注册和使用。但是几年前,该组织对gTLD(Generic top-level domain,通用顶级域)进行了扩充,将许多泄露的私有域名后缀列为了合法的通用顶级域。这个举措就导致了后面的攻击发生。

在介绍攻击之前,需要介绍本文涉及的一些知识点。

  • (1)WPAD协议
    全称:WebProxy Auto Discovery Protocol。WPAD 通过让浏览器自动发现代理服务器,使代理服务器对用户来说是透明的,进而轻松访问互联网。WPAD 可以借助 DNS 服务器或 DHCP 服务器来查询代理自动配置(PAC)文件的位置。

  • (2)PAC文件
    全称: Proxy auto-config。一个PAC文件包含一个JavaScript形式的函数“FindProxyForURL(url, host)”。这个函数返回一个包含一个或多个访问规则的字符串。 用于控制用户访问网络资源的时候是否需要使用代理以及使用何种代理。一个典型的例子如下:

  • (3)基于DNS的服务发现协议
    英文名称:DNS-based Service Discovery。基于DNS的服务发现协议在RFC 6763文件中被定义,简称DNS-SD。比如想发现一个comp.ntld域下的svc服务所在的IP和端口,整个过程如下:

    • DNS PTR请求发送给DNS服务器得到所有的服务实例名称
    • 对于每一个服务实例名称,一条SRV请求会被处理得到服务的IP和端口
    • 上述PTR和SRV请求的格式都会是_svc._prot.comp.ntld这样的,这也是标准的格式。
  • (4)AS域
    自治系统:autonomous system。在互联网中,一个自治系统(AS)是一个有权自主地决定在本系统中应采用何种路由协议的小型单位。

WPAD中间人攻击

在你的浏览器中开启自动切换代理就是开启了WPAD协议,我们设想一个这样的攻击场景(如图)。受害者启用WPAD协议,然后去DNS服务器上请求PAC文件所在的链接,之后DNS服务器返回受害者PAC资源路径,然后受害者电脑下载这个PAC文件并设置。

问题就在于如果DNS返回给用户的是恶意的PAC文件,这个文件将所有流量代理设置为攻击者的服务器,那么受害者之后所有的流量都会被传送攻击者,这就是中间人攻击的模型。

整个中间人攻击的核心就是图中红色的返回内容,但是过去的攻击基本都要依靠局域网的投毒或者从DNS投毒、缓存等角度去实现。这篇文章利用的是域名碰撞,接下来我们将详细分析。

利用域名碰撞实现任何地方发起的中间人攻击

如下图所示,在受害者的自治域(AS)内,有一条WPAD服务请求被泄露发送到公网的DNS服务器里,比如root根服务器,由于这个服务请求是请求company.ntld域下的WPAD服务,这是个私有域,公网的根服务器当然不知道这种域名的情况,因此会返回给请求的客户端NXD消息( Non-eXistent Domain )。泄露的原因多种多样,因为DNS服务器本身查询这种不存在域名的时候会向根服务器发送查询指令导致泄露,有可能是服务应用本身配置不当导致的泄露。

公网的根服务器或者数据收集机构可能会记录下这样的域名查询记录(wpad.company.ntld)。如果攻击者通过某种手段知道了这样的域名,并且在gTLD扩充之后.ntld后缀被允许注册,那么攻击者可以合法的注册一个公网的company.ntld域名,并且绑定到攻击者的服务器。

那么危害就来了,如果私有网络自治域内的应用向外网请求了wpad.company.ntld这样的一条请求,希望知道WPAD服务器的IP和端口,那么公网的DNS服务器会解析这个域名到攻击者的服务器上,之后攻击者可以可以任意控制自治域的受害者主机代理配置,劫持受害者的流量。如果这个请求来自受害者自治域的服务程序(为这个AS所有用户提供WPAD服务),那么攻击者甚至可以将整个AS域内的全部主机流量劫持,这种危害相当巨大。

这种中间人攻击,对于攻击者来说,只需要去公网注册这样的域名就可以造成巨大的危害,成本很低。而且现实中许多服务应用在对系统底层请求DNS解析的内容都是无条件信任的,攻击者只要利用这种域名碰撞就能轻松地实现对漏洞的利用。

服务应用漏洞的定义

不仅仅是提供WPAD服务的应用,上面只是用WPAD举例,但是从前面的攻击分析可以知道,只要服务应用满足以下二个条件就能被攻击者利用:

  1. 使用的域名后缀被通用顶级域名接受
  2. 使用了基于DNS服务发现的请求,并且这个请求被泄露到公网

只要攻击者知道了这个DNS服务发现的请求链接,并在公网注册这样的域名就能返回给这样的服务应用攻击者决定的内容,可以导致很多漏洞的发生,包括中间人攻击、恶意代码注入、程序流程劫持等等。

寻找存在漏洞的服务应用

如何获得这样的DNS服务发现请求链接呢(比如wpad.company.ntld)?

作为黑客,可以通过社工、窃密、其他漏洞等等得到一个AS自治域的一些私有域名信息。作为科研人员,我们可以直接DNS根服务器记录中去发现,比如DNS-OARC Day In The Life of the Internet (DITL) 数据集。

从根服务器的记录中,我们去寻找二类记录:

  • 一是gTLD扩充前的响应为NXD的DNS请求
  • 二是现在gTLD扩充的域名后缀

从这些记录中整理提取出泄露的DNS服务发现请求,对应这些链接和服务在网络上也可以找到对应的服务程序。这里列举去年研究人员总结的服务应用和漏测试的漏洞情况如下:

防范这类攻击主要从二种层面:

  • 网络管理层面:做好网络配置,避免自治域的私有请求发送到公网。在网络内也要检测是否被外网的服务劫持。
  • 软件层面:对请求返回的内容加以验证,比如IP地址是否是允许的范围内,对一些敏感操作需要严格的控制和验证,避免恶意代码注入。

利用域名(host碰撞)碰撞实现从任何地方发起中间人攻击(理论篇)相关推荐

  1. 【Linux云计算架构:第三阶段-Linux高级运维架构】第19章——安装Kali黑客操作系统-利用ettercap实施中间人攻击

    内容: 19.1 安装Kali黑客操作系统及相关实战 19.2 实战:linux之kali系统ssh服务开启 19.3 实战: kali下的nmap扫描工具 19.4 MITM中间人攻击理论 19.5 ...

  2. 利用“域名后缀”的漏洞劫持国家顶级域名(一)

    本文讲的是 利用"域名后缀"的漏洞劫持国家顶级域名(一), 域名是互联网基础的一部分,我们时刻都在使用它.然而,大多数使用域名的人却很少了解域名是如何工作的.由于涉及到许多抽象层的 ...

  3. 把域名和IP地址绑定后,利用域名+端口号访问自己搭建的网站

    前言:当你看到该博客时,你或许想写一些漂亮的前台界面,或者能写一个小的web项目,但是你可能不知道怎样让自己的这个界面或者项目,只通过一个网址,都可以随时随地进行访问.学会这个技能再加上自己的编程思想 ...

  4. 域名解析与绑定教程:把域名和IP地址绑定后,利用域名+端口号访问自己搭建的网站

    前言:当你看到该博客时,你或许想写一些漂亮的前台界面,或者能写一个小的web项目,但是你可能不知道怎样让自己的这个界面或者项目,只通过一个网址,都可以随时随地进行访问.学会这个技能再加上自己的编程思想 ...

  5. 研究人员发现利用Excel宏可发起跳板攻击

    SpecterOps公司的研究人员Matt Nelson(马特·尼尔森)研究是否可以通过Microsoft Excel发起跳板攻击(Pivoting).结果,Nelson发现默认的启动与访问权限存在漏 ...

  6. SSH协议弱加密算法漏洞的利用及复现(中间人攻击)

    SSH协议弱加密算法漏洞的利用及复现(中间人攻击) SSH协议弱加密算法漏洞的利用及复现(中间人攻击) 很多服务器或者交换机是存在SSH协议弱加密算法漏洞的,但是该漏洞如何利用呢?最近研究了下此漏洞的 ...

  7. 如何利用 LTE/4G 伪基站+GSM 中间人攻击攻破所有短信验证

    这次公开课请来的嘉宾对自己的简介是: 连续创业失败的创业导师: 伪天使投资人: 某非知名私立大学创办人兼校长: 业余时间在本校通信安全实验室打杂. 自从他在黑客大会上演讲<伪基站高级利用技术-- ...

  8. 利用fastcoll实现MD5碰撞

    源码: <?php show_source(__FILE__); class CDUTSEC {public $var1;public $var2;function __construct($v ...

  9. Cocos2dx利用intersectsRect函数检测碰撞

    1 if (sp1->boundingBox().intersectsRect(sp2->boundingBox())) { 2 pLabel->setString("碰撞 ...

最新文章

  1. currentThread的一个复杂案例
  2. 运用SQLAlchemy
  3. 二进制转16进制转文本[BJDCTF 2nd]cat_flag
  4. 提高SQL查询效率(SQL优化)
  5. jquery自动触发事件
  6. Android 电量优化
  7. 使用BufferedImage进行渐变色操作
  8. 安卓原生读写u盘_aigo Type-C固态U盘速度如何?好用吗?
  9. redis的内存优化【转】
  10. android中ViewPager详解--视图滑动、界面卡等效果 (三)
  11. 03day输入及转义符的使用
  12. 【C语言】16-预处理指令2-条件编译
  13. php集成环境总结(php新手)
  14. 幅度谱、相位谱、能量谱等语音信号处理中的基础知识
  15. android WPS中设置目录标题和目录引用
  16. python 数据显示不完整 有省略号_python pandas之Dataframe的数据print输出显示为...省略号...
  17. 什么是海外DDoS高防?
  18. 服务器内存占用率76%,IT运维常见问题之一:服务器内存占有率高
  19. C++ 第一章(2)空行
  20. 夜明け前より瑠璃色な 攻略

热门文章

  1. OpecCV颜色分割
  2. Gaze Estimation笔记——data normalization
  3. 这篇Cell里面的GSEA展示很不错!
  4. 视频:PNAS报道纤维化扩展中“旁张力信号”介导的细胞间机械通讯
  5. 10产品经理要懂的-人性行为之自私的本质
  6. 百度自动提交链接的php应用seo功能实例
  7. 5分绩点转4分_高考语文如何考上120分?衡中老师建议:这5点高中生必须重视
  8. css字体样式代码大全_这都2020年了,还没了解CSS?
  9. testng查看覆盖率_使用Cobertura统计单元测试覆盖率
  10. 判断大小简单算法_算法浅谈——人人皆知却很多人写不对的二分法