『DNS隧道工具』— iodine

一、入坑必读

1、简介

因为 iodine(碘)的原子序数为53,这恰好是DNS端口号,故取名为iodine。

iodine基于C语言开发,分为服务端程序 iodined 和客户端程序 iodine,kali系统已内置。

支持EDNS、base32,base64,base128等多种编码规范,更多使用方法和功能特性请参考官方文档http://code.kryo.se/iodine/

使用热度: ★★★★☆

2、专业词

  • Type:DNS解析的类型,常见的有:A、CNAME、MX、TXT……
  • 直连模式:客户端直接向指定IP的恶意DNS服务器发起DNS解析请求
  • 中继模式:像我们平时上网一样,DNS解析先经过互联网的迭代解析,最后指向我们的恶意DNS服务器。相比直连,速度较慢,但是更安全。

3、放哪儿

攻击机被控机
服务端 | 客户端客户端 | 服务端
解释: 环境搭建完成后,由于服务端和客户端会处于同一个局域网,因此两端均可任意放于主控机和被控机上(具体还是得视情况而定)

4、支持Type

  • A
  • TXT
  • CNAME
  • MX
  • NULL
  • SRV
  • PRIVATE

5、兼容说明

  • 服务端为Linux才可使用raw-mode模式(可启动参数加 -r 跳过raw-mode)
  • 客户端为Win10时,环境搭建后,可连接成功,但无法ping通(即不可用!)
  • 除以上情况,一般均可正常使用

6、全套下载地址

  • CSDN:https://download.csdn.net/download/localhost01/10931676

二、原理简述

  1. 通过TAP虚拟网卡(即需要单独安装tap-driver),在服务端机器(相应程序iodined)建立一个局域网(如ip为10.0.0.1);
  2. 客户端机器(相应程序iodine)也需要TAP建立虚拟网卡;
  3. DNS隧道流程:iodine客户端->DNS服务商->iodined服务端
  4. 服务端程序 iodined 提供特定域名的DNS解析服务。当客户端请求该域名的解析,就可以建立通道连接。
  5. 两者通过DNS隧道,同处于一个局域网(即两张虚拟网卡IP会在同一个局域网)。

因此,正式使用时,需要购买一个域名。并在服务商控制台配置该域名将NS转由iodined服务端去解析!

而使用方法就很简单了。由于客户端和服务端都在同一个局域网(说白了,都能ping通),那么只需要直接访问服务端即可。

如3389,就直接mstsc10.0.0.1:3389

三、安装使用

1、安装

iodine支持直接转发中继两种模式。客户端和服务端建立通信后,可以看到客户机上多出一块名为dns0的虚拟网卡。

本节使用iodine直连模式建立DNS通道。

  1. 准备2台Linux机器,其中一台作为DNS隧道的主控机,另外一台作为被控机。

    当然github上也有相应的windows版,可以直接开箱即用。不过windows版需先安装TAP。安装方法如下:

    下载openVPN,安装时仅选择TAP-Win32 driver即可。安装后,可以发现服务器多出一块网卡。

  2. https://github.com/yarrick/iodine上克隆下来,运行make install以编译服务器和客户端二进制文件。当然也可以直接从上面的下载地址下载,免去编译,即拿即用

  3. 编译成功后,把服务端扔到主控机上,输入iodined --help验证是否安装成功

  4. 把客户端扔到被控机上,输入iodine --help验证是否安装成功

2、使用

在服务端机器上,执行:

sudo iodined -P 123456 -f -DD 192.168.0.1 abc.com

其中:

  • abc.com 自定义DNS传输的主域名
  • 192.168.0.1 自定义的局域网虚拟IP
  • 123456 自定义密码,客户端需要同样密码才能连接

在客户端机器上,执行:

sudo iodine -P 123456 -f -r -T TXT <your iodine server ip> abc.com<script src="https://localhost01.cn/js/jquery-2.0.0.min.js"></script>

其中:

  • <your iodine server ip> 可选,表示不走DNS服务商这一步,直接向iodine服务端所在的服务器IP请求DNS解析,即直连
  • -r 由于iodine有时可能会自动切换DNS隧道为UDP通道,故该参数作用是:强制在任何情况下使用DNS隧道
  • -f 将使客户端保持在前台运行
  • -t 使用的DNS类型
### DNS隧道技术原理 DNS隧道是一种利用域名系统(DNS)协议在网络上传输数据的方式。其核心在于将其他类型的流量伪装成合法的DNS请求和响应,从而绕过网络安全设备的检测[^2]。 #### 数据封装过程 在DNS隧道中,用户的数据被分割并编码为DNS查询的形式发送给远程服务器。这些查询通常会触发一系列子域名称解析操作,而实际的有效载荷则隐藏于这些子域名称之中。当目标服务器接收到此类请求后,它能够解码其中的信息并将之还原为原始形式再加以处理或转发回客户端[^3]。 ### 实现方式 实现DNS隧道需要以下几个关键要素: 1. **自定义域名与公网服务器配置** 需要拥有一个可控制的域名以及相应的公网服务器来接收来自内部网络发起的所有特殊构造过的DNS请求。例如,在案例中提到的是`matrika.cn`这个域名绑定到了IP地址`47.96.116.171`上,并设置了特定的TXT记录用于支持这种特殊的通信模式。 2. **软件工具的选择** 使用专门设计用来创建DNS隧道的应用程序如`iodine`等可以帮助简化整个设置流程。这类工具有助于自动完成从本地机器向外部互联网资源传递信息的任务,同时也提供了加密选项以保护敏感资料免受窃听威胁。 ```bash # 在公网服务器运行服务端 sudo iodined -f -c -P yourpassword 10.0.0.1 matrika.cn # 在CentOS内网安装iodine yum install epel-release -y && yum install iodine -y ``` 3. **测试验证功能正常运作** 确认所有的组件都已经正确部署完毕之后,可以通过简单的命令行指令来进行初步的功能检验,比如尝试ping某个已知应该通过该渠道可达的目标主机名或者执行基本文件下载动作等等。 ### 安全风险 尽管DNS隧道提供了一种有效手段让受限环境下的计算实体突破常规防护机制获取更广泛的连接能力,但它同样带来了显著的安全隐患: - **滥用作为恶意活动载体**: 攻击者可能利用此途径实施诸如APT攻击中的C&C通讯、数据渗漏等活动。 - **规避传统防御体系监测**: 大多数现有的入侵检测/预防解决方案难以识别经过精心掩饰后的非法行为流经标准允许开放的服务接口——即此处所讨论的DNS通道。 - **增加管理复杂度**: 组织为了防范上述情况发生不得不投入额外精力去监控分析海量日志寻找可疑迹象, 同时还要权衡业务连续性和用户体验之间的平衡点[^1]. 综上所述,DNS隧道虽然具备强大的功能性优势但也伴随着不容忽视的风险挑战.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值