京东6.18大促主会场领京享红包更优惠

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7676|回复: 0

DNS隧道流量分析

[复制链接]

13

主题

0

回帖

10

积分

新手上路

积分
10
发表于 2019-10-9 23:15:32 | 显示全部楼层 |阅读模式 来自 中国
DNS隧道
1 y. T- B, p0 C* w3 a4 k! u. T2 a  j' ~- w
[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。7 d4 |( E$ r. M! B1 ^) i& Y( h. |
实验环境
0 ^0 }  a4 e/ E& c8 E$ {, W' M; c
[color=#333333 !important]CentOS Linux 两台
  H, C" q1 b& h- Q% {
创建DNS服务器* o7 @9 D" x" J' r) o5 U
8 ~& Q5 L, ], g# h, w5 A
1.安装bind
/ F* _& V* w% E$ O# E* a' j, d( M9 y  c# @: N
[color=#333333 !important]yum install bind*
% h- f' d. Z, N* q/ B( C& l& \6 A  [
2.配置named文件" d# x* `  S# ]4 |" b& f7 j. w
7 T' S: `, S+ S  l
[color=#333333 !important]修改/etc/named.conf
2 S: \9 L: [3 ~
[color=#333333 !important]将下图中选中的地方改为any7 O* L' a1 m8 _5 E
[color=#333333 !important]# _9 N2 u" s* ?# D: D: b
3. 设置NS记录,A记录
0 v; Q4 @# G, m; ?) O) Y/ V4 ?9 C' Q6 w! o# Z0 B
[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件. {+ d! I& t; P9 A
[color=#333333 !important]
; j9 B$ B; C8 R' u
[color=#333333 !important]增加正向解析记录  V5 |0 i- p5 `' j
[color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字
3 A) p4 _+ U# x7 [
[color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel
6 [: Q" b( ~  W# g# |' j3 {
[color=#333333 !important]修改文件如下$ |% {( k& Q3 f# I7 i
[color=#333333 !important]添加NS记录,A记录
: r' s- i  S; F7 h  v[color=#333333 !important]4 z0 h$ C: m* F# u
[color=#333333 !important]添加bind为自启动服务3 |( d3 {* t  d& I2 g
[color=#333333 !important]systemctl enablenamed.service
; @5 O9 w  R( p) ]7 E$ d1 n[color=#333333 !important]systemctl restartnamed.service
9 c! i0 H. F7 {$ s* @0 l1 ~
[color=#333333 !important]查看启动状态( o( ]3 H, I) o0 J4 K3 W9 k6 p0 O% D
[color=#333333 !important]systemctl statusnamed.service/ R# u7 v; N& {/ J- \
[color=#333333 !important]4 C: ^1 j& B) C) {6 e7 p
[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F)
5 {& i! p, V3 Q  h( {7 }( X2 NIodine
! q7 L4 j) A  y5 v
1 @( K! b! b+ s8 L[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。1 c. Q! R/ y. x1 J" i% }
安装* k! ]1 Y& Q6 n0 a! s: d$ ?
) r5 t2 T5 b2 t/ k" ^  R, A* @
[color=#333333 !important]下载地址:
3 n1 }9 P) r5 R7 j8 S
[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip
6 r1 D6 G# I6 h5 l8 E/ _
[color=#333333 !important]unzip 解压
: n7 i. ]. K7 i7 e[color=#333333 !important]cd iodine-master* T! q) J7 s# C" b- k( d* q
[color=#333333 !important]make/ I) u- r; x/ n4 Q/ G
[color=#333333 !important]出现报错
0 |# M( v# u# \' w/ z' a+ n  Y[color=#333333 !important]8 h8 K4 A( d' @8 ^; ~+ f
[color=#333333 !important]yum -y install zlib-devel
9 @  M' x8 v# E5 x; ?' ?[color=#333333 !important]make;make install
9 z) s: t1 h2 N; q0 s" |( p4 k% }[color=#333333 !important]安装完成2 b2 o  _2 @* \" X5 u
[color=#333333 !important]进入 bin
& n# Z, Z! E8 b- J[color=#333333 !important]iodined 服务器- y/ ~9 L4 s6 j  W, ~3 H$ t
[color=#333333 !important]iodine 客户端
0 N# l( p# n1 G. V, Y实验测试
. R; \, V6 L+ C  Z9 [7 y; J* M$ I3 L, o2 |$ C
[color=#333333 !important]服务器' |+ q9 @) g2 r4 s4 J, z
[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com  d; n% H2 ~0 G$ T" T; m" [# {4 c
[color=#333333 !important]-f 前台显示,运行后一直在命令行等待+ F, k4 D2 c7 E
[color=#333333 !important]-c 中继模式|直连模式7 ^# k: g; ?& |1 g) q
[color=#333333 !important]-P 认证密码
" b" P3 A7 Q2 j! k0 I2 ?9 r# @
[color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。
3 B& J: E  F' ?& M7 n" P[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。
  e8 H+ f6 q+ ]) j/ H[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡6 ~2 M: P; c2 Z; G7 i  _7 h
[color=#333333 !important]
+ z7 ]9 K; a3 X[color=#333333 !important]
" T! R+ i0 ^% p9 R* N( N$ e: m[color=#333333 !important]客户端
$ s- ?) t$ b( p8 v
[color=#333333 !important]./iodine -f -P  123456 192.168.1.7 ns.dnstuneltest.com- u' t. z9 ^* Z) y
[color=#333333 !important]-f 前台显示
/ _+ h% h, X. ^; V8 o[color=#333333 !important]-P 认证密码
0 _2 Z2 X3 A/ j' S" G) l6 b[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析
; i2 z' u* \, s& }
[color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。' G2 P! E- R9 V4 ?' A8 }
[color=#333333 !important]! a5 C  u2 j! q0 Q
流量包分析/ m% P7 h6 |2 K

5 Y8 l- ?6 S2 h9 E4 P9 w+ {
[color=#333333 !important]抓包
% S6 t! u) v: v[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap) K+ n) a8 M8 D, S
建立链接的包分析
" G2 w0 J( w& z8 u6 \
% Z4 l$ O& W: J[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包
6 i1 u4 t0 N. J! d/ [  m[color=#333333 !important]
7 F; X- P# `; a. p$ f% F& V[color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀
: G  k, F1 a7 ^1 O% N[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据
; o- H4 a! }/ y) M5 y9 ^1 i$ y[color=#333333 !important]
3 z  {* C, \2 `[color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)
* ^- D, I  g5 L# |3 w+ ~, s[color=#333333 !important]
- f9 o% {. s' T0 _[color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。
7 T- h8 h6 r! W, _) E. d通信流量包分析
, I/ K, \: r1 H  L- u
+ k: B, _4 d* ^) B. W! X[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析
5 w1 P  i4 g" I[color=#333333 !important]! Z& A: q: r) G9 a+ R! _7 Z& J
[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。
7 {; O; i2 e6 Q) L[color=#333333 !important]05fanyi05baidu03com
3 S' g7 A8 @9 q1 p3 j[color=#333333 !important]$ X4 }$ q2 Q1 E( V
[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。& B7 V6 P; b3 {; B
[color=#333333 !important]4 X# x/ `# [& }; j, t4 G
suricata检测规则(并未测试,仅共参考)
1 F0 N' l$ d9 I# B5 r* N
- H# h$ g: o: g* ~% ^, O0 s& s
    ' t! o4 ~0 d/ _% ~9 b( ?! @

  • $ l. C& D# d9 t8 A- s9 Z
UDP payload协议偏移40个字节处是否为00 0a并且频率达到5秒3次以上。alert udp $HOME_NET any -> any 53 (msg:"dnstunnel-iodine-connect";content: "|00 0a|";offset:40;depth:4;threshold: type limit, track by_src, count 3, seconds 5;classtype:dns;sid:2010000; rev:1;)    通信包,query字段60 08开头,并且后面跟的不是59个字母或者数字的组合,或者后面的字母不存在\x00同时频率在60s一百次以上。alert udp $HOME_NET any -> any 53 (msg:"dnstunnel-iodine-traffic";dsize > 100;content:"|6008|";offset:12;pcre:    !"/[\x60\x08][a-zA-Z0-9]{59}/";threshold: type limit,track by_src, count 100, seconds 60;classtype:dns; sid:2010001; rev:1;)    alert udp $HOME_NET any -> any 53 (msg:"dnstunnel-iodine-traffic";dsize > 100;content:"|6008|";offset:12;content:"|00|";depth:    59;threshold: type limit, track by_src, count 100, seconds60;classtype:    dns; sid:2010002; rev:1;)Dns2tcp# Z' H4 S0 K8 X9 U4 K9 B  T

7 s' N( Z' a% @1 `4 q2 g安装
) r5 a: B2 A- x) J! m8 u+ H9 O1 F' j4 \
, L% E+ I9 V% Q9 I[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell' k) g1 G" v! q! E: P) S( e/ d
[color=#333333 !important]下载链接
9 k  k7 k* f2 v) g2 |1 a1 S% h" X
[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag
. E$ r0 D' F0 N% W: s0 c
[color=#333333 !important]提取码:t1rw
/ D1 G1 K9 G; c. F& e9 R/ I+ N[color=#333333 !important]安装编译& \. ]3 v- X1 L/ @7 b

    " o& }4 @' Y  V$ A0 _, [( u- C3 f
  • 5 B. }! o" l" k/ y  O
./configure    make;make install[color=#333333 !important]服务器端
6 j4 Y! y, w) S* R& S6 S

    3 \& ?. Q: o" b: h8 K5 ^
  • 4 l& s/ d5 X, B% n& L% J$ C
server/dns2tcpd[color=#333333 !important]客户端
+ I; v8 e! a0 \' p  ]0 }

    ' l% R7 ^2 x3 c) o4 ^
  • 4 n3 s/ E3 R; n( e
Linux:    client/dns2tcpc     windows:[color=#333333 !important]云盘直接下载windows版本,或者下载
6 X' m1 k& |% Q# @' D. @) X

    & T0 {3 d6 \0 ]
  • : H- Q) g& c5 C8 V' t+ S
dns2tcpc.exe实验测试" f/ q7 \7 X' |- \
# F# c0 o( r9 p- g1 R
[color=#333333 !important]服务器端
) Q. V7 k; o/ \. |+ P- @- s  Q[color=#333333 !important]1.创建配置文件
" p" A* e' a/ P" T% Z0 D5 W

    + ]' n- a1 v/ o6 G
  • & P. b( G1 }6 E! B4 z4 I2 k
Vim/etc/dns2.conf    Listen  = 192.168.1.6(Linux服务器的IP,服务器的IP)     port   = 53         (监听本机的端口)    user   =nobody         chroot  = /tmp           domain =.ns.dnstuneltest.com(上面配置NS记录的域名)     resources =ssh:127.0.0.1:22,socks:127.0.0.1:1082,http:127.0.0.1:3128(设置本地监听的服务资源,根据自身服务开启的资源设置)[color=#333333 !important]2.启动; N0 Z" d& v: i0 `

    , N* _% E! L5 E- S4 T+ `+ F$ ~' D

  • 7 w. g% ^# p+ d4 Q& C; Q$ f5 ?. t
./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接& u6 e( F8 _8 g6 g7 N
[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务
5 y6 @' R: H9 |- _$ n
[color=#333333 !important]
1 w$ L. Q5 x4 x- U0 P9 [/ S
[color=#333333 !important]客户端
7 n9 M% s- j1 C  z0 X$ @
[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 2- D, H- D# }/ E3 {8 w
[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源4 O9 D2 o9 G" i! }% p3 p  Y
[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP
2 k( [2 U* p% f+ m[color=#333333 !important]-l:端口
1 {" o) A7 z6 a/ h$ A, p* N[color=#333333 !important]-d:是否为调试模式 2 等级可以省略7 I$ _- D- R; o1 K7 v: }; I
[color=#333333 !important]) k8 I) j0 p, _
[color=#333333 !important]客户端使用访问服务器: e5 C& `/ H) \  N0 d! e6 m
[color=#333333 !important]
5 y( z" t) I9 A4 \+ @9 A2 W( j流量包分析, b# M. Y6 D. @- n  O; Q1 Y0 ^# J
! z# u5 _) R- ?6 V4 ]1 \8 x9 B) i
[color=#333333 !important]建立链接并未产生通信包" h( A7 H5 |, ?
[color=#333333 !important]  q, I2 W2 }9 c8 v3 R
[color=#333333 !important]使用ssh访问时,才会产生数据包
7 T! T7 A$ x2 B3 R3 `) X[color=#333333 !important]8 [' V$ n; k+ y' L
[color=#333333 !important]数据包分析9 |3 e! ]" N" q. J! E- [
[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中' a7 ?# K& s  c( q3 Q* V/ y
[color=#333333 !important]
+ r# @/ h7 h* x4 A/ R# l[color=#333333 !important]
# ~; _, T! z) O4 ^$ y9 c[color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。+ p% O4 l& Y% B. U
Suricata规则检测(并未测试,仅共参考)$ b) \# H7 S9 J+ K) f2 V( }& ^
  O; Q# R* A) h
[color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测
2 u: y1 f4 P4 I6 S
    ) m" \5 w8 ]( V: m. `' W
  • , m# `: P. ~+ T0 c
alert udp $HOME_NET any -> any 53(msg:"dns tunnel-dns2tcp";content: "|0010|";offset:40;depth:4; threshold: type limit, track by_src, count 150,seconds 10;classtype:dns; sid:2010003; rev:1;)[color=#333333 !important]结尾/ q5 Z8 ^7 {6 a! @
[color=#333333 !important]小白水文,求大神放过! e& a  S1 ]2 B1 i8 G9 q
[color=#333333 !important]pcap包下载地址:
1 e% U9 X1 U% R# B+ |
[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw) z$ |8 j! z, k; N
[color=#333333 !important]提取码:n5ha) Q, O5 n. A' K+ R' |
[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载* \1 `) l$ R2 l; E
- ]8 c' S5 |: W4 u& k% X
精彩推荐
. W0 }# P/ B; d- {8 d
- h2 W9 Z6 k2 M. _: {7 m

: t. m( p# r& k/ x. l1 \4 a( p( B7 A
0 i% ]/ E; y$ E3 J# g( R
2 `6 J4 l4 s. W$ U2 k

* H! W  {1 K) f& A: D- a5 ?来源:http://mp.weixin.qq.com/s?src=11&timestamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=1* p: h4 Q+ [) z2 x  }( J/ p1 X/ h
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

帖子地址: 

梦想之都-俊月星空 优酷自频道欢迎您 http://i.youku.com/zhaojun917
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|梦想之都-俊月星空 ( 粤ICP备18056059号 )|网站地图

GMT+8, 2026-3-1 10:57 , Processed in 0.054505 second(s), 28 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表