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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7901|回复: 0

DNS隧道流量分析

[复制链接]

13

主题

0

回帖

10

积分

新手上路

积分
10
发表于 2019-10-9 23:15:32 | 显示全部楼层 |阅读模式 来自 中国
DNS隧道
! `* r' n! j9 E. g7 L. j
# c! y+ ^! M2 p[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。; O/ ?* \% U7 P' ^
实验环境
, L! ~% N( J7 L. Q/ b) k3 T) Z
& @% w: h9 t' a2 J9 J
[color=#333333 !important]CentOS Linux 两台
# N  Z- U1 O4 _, _
创建DNS服务器2 N6 M1 f' `  `, Y

9 X. h# ~$ I. [0 r6 ]2 J4 k8 K( G! J; }# I1.安装bind9 D8 r* u: O3 c2 m  u  Q0 }

; Y+ @6 Q. h' E  ?
[color=#333333 !important]yum install bind*
/ q- b, a, R. Q' E
2.配置named文件8 ?* Q+ `0 }" X, a$ j8 @1 n8 o7 s+ R
5 l" v7 u1 i6 W3 T( o
[color=#333333 !important]修改/etc/named.conf
3 S/ y, C& y+ }9 D. e: g6 d0 F
[color=#333333 !important]将下图中选中的地方改为any
6 B& D9 T, Z( F$ k, `- r& K[color=#333333 !important]: {) e3 I* P+ q$ H: `+ ~' O/ S
3. 设置NS记录,A记录( R2 Y+ ?* K. E% Z

+ P, s* j, j5 p0 C[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件
" L1 [1 t# ]! {5 {- k3 b* V" R
[color=#333333 !important]
" x- t2 B: I: [- d: i0 j
[color=#333333 !important]增加正向解析记录
' {3 o2 O  c( A- f4 ^[color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字# [' H6 J, N" S* A" e7 v
[color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel. X& r1 j: O; j4 W
[color=#333333 !important]修改文件如下& u$ t5 Q# S5 Y
[color=#333333 !important]添加NS记录,A记录
1 _8 o# x" E6 Y[color=#333333 !important]; l4 x& f. U; b; z1 |1 q2 g$ _
[color=#333333 !important]添加bind为自启动服务
4 }2 L# G& L# l/ H! L1 h- j, L; n0 G
[color=#333333 !important]systemctl enablenamed.service
/ t0 ~; U+ V. K% d4 s[color=#333333 !important]systemctl restartnamed.service
: m! J) l, g* r& S
[color=#333333 !important]查看启动状态
1 L+ g6 a* {% [  R" C# c+ `
[color=#333333 !important]systemctl statusnamed.service* M+ f  m3 c6 s% e9 Q
[color=#333333 !important]
2 j/ f% u8 f, h[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F)/ i0 h- A6 y8 x, {
Iodine
) A  Y; W3 I% r+ j& w+ Y2 y0 W4 z5 V) H2 M! m
[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。6 q  t! `8 _1 |# O* s7 [# [/ k
安装5 W: Q' o+ o+ X4 A

2 p5 p- V- ?/ `# ~0 @8 Z[color=#333333 !important]下载地址:3 {) z5 l( Q9 I8 v
[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip1 {& [( X. |; x  e  A* L
[color=#333333 !important]unzip 解压( m" F) O7 a* s1 R0 y% W2 M' Z
[color=#333333 !important]cd iodine-master0 v/ \( N) a3 j  ^
[color=#333333 !important]make
" \, J5 X" W7 D! i1 D[color=#333333 !important]出现报错
# J/ v! w. e* W# u' A; I- a$ P$ |[color=#333333 !important]
5 v9 U7 g# K- t- E/ O: h[color=#333333 !important]yum -y install zlib-devel
* E8 G  r. S) S& D" z[color=#333333 !important]make;make install; H6 W2 I1 w3 m. |1 }7 q
[color=#333333 !important]安装完成" J4 {7 b$ k) v7 P& t
[color=#333333 !important]进入 bin0 }, J' d9 r9 b. E5 q# K
[color=#333333 !important]iodined 服务器: {- w; I, s/ y; t5 p
[color=#333333 !important]iodine 客户端
5 W9 O# w6 Z( c: [实验测试
. ?+ C) m" M. c) A4 T. t/ f+ e" ]% r* n& Q6 q
[color=#333333 !important]服务器1 z% Q7 @- O6 u8 j% D) S
[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com: u" Z# j9 e  W1 v( m
[color=#333333 !important]-f 前台显示,运行后一直在命令行等待
# e8 k( Y* L0 ^' X; X[color=#333333 !important]-c 中继模式|直连模式$ A) G" I' L1 s6 Y+ ?. s
[color=#333333 !important]-P 认证密码
! J% M. [2 `( U+ y# W
[color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。
1 t9 @0 F6 _. r! s7 V3 e9 U[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。
1 M  }  m# Y$ O7 J0 i; N[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡+ i3 @% ~8 i' |& z/ O7 a
[color=#333333 !important]
+ n% g' Q5 i7 F8 d! L+ }- t[color=#333333 !important]
& B. m, d' i" }8 S. B1 M[color=#333333 !important]客户端# Q! W. d% ?. x0 m/ n$ k& \% T1 p
[color=#333333 !important]./iodine -f -P  123456 192.168.1.7 ns.dnstuneltest.com
. Z( T( d5 `4 f- ~% r+ q' ~- o[color=#333333 !important]-f 前台显示7 v6 E. w3 Q! H, I+ S5 f0 ~
[color=#333333 !important]-P 认证密码
. |  T2 b+ o) l2 {) \; J[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析5 ?' u, }7 X$ p* l# `% u) F$ b5 R
[color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。
9 Q. t8 U9 ]  @) e' n4 K5 w[color=#333333 !important]
7 }, I# v% `3 d  W' ^) E* i流量包分析  R4 j* q; s( J( ~9 N( W) I% X4 l

1 O5 E2 c; l9 G- A, U% U  s
[color=#333333 !important]抓包
! f- z$ I5 B& W[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap; C; G$ P! T6 i7 |9 ~" B
建立链接的包分析0 i3 c. o$ u, C+ l2 P& \0 q6 _

9 _2 A1 u$ J# p% I[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包
/ p# ~+ A, h+ f" }; j[color=#333333 !important]
2 x! d3 P! t% u( X8 w3 O[color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀
( t& @: \( b8 [  {[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据/ R0 ^3 }$ C5 {/ ^( d) n3 u& I. v+ s) v5 ^
[color=#333333 !important]
2 a" v/ {+ ?" W! q3 y[color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)/ @5 \1 {8 |; i/ I, a
[color=#333333 !important]
; i% ?! Y: F: t- [# h& q[color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。+ m$ K" n& P  t8 h2 R, y- d" ~$ ?
通信流量包分析
. i' s' q( y& }
! k* U9 ?4 j4 U7 p. R2 S[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析
8 S' d+ G* i1 M0 O[color=#333333 !important]
7 l6 E! v  f* s# v[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。
# m& h) R9 ~) r) e: A5 W' R[color=#333333 !important]05fanyi05baidu03com
) z- Q# X: M& ]; N[color=#333333 !important]0 a# h. ?2 z7 d4 R) a+ e" J
[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。# e$ x% i7 S' P0 j
[color=#333333 !important]0 B& U1 e* X* f! N4 l; q
suricata检测规则(并未测试,仅共参考)2 Q7 Y, s# T: F0 j; n0 U

3 f, u) U; B0 u$ ?0 u# ]5 g4 |& V

    3 v3 e8 Y  t& P9 c

  • 4 d+ C4 g' Y. P3 Y: N: W
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
# R. [8 M$ o5 |/ e3 u' p  W
$ \' W- e6 c; {  M# H" r; k9 O( c安装: e! z4 Q# Y& F& i8 R
  t- ~) G3 M, K$ a
[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell
  I; b+ y) Q1 |) F7 E7 [6 \[color=#333333 !important]下载链接2 S9 ~, U6 b/ O4 w  x' v7 O$ S- G
[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag
0 N$ x4 f: d8 A( m
[color=#333333 !important]提取码:t1rw
: z* M% S  L* ~# X6 X[color=#333333 !important]安装编译
, A- P4 \: j# F+ P: X: b

    ; n) @- H; w9 l# L+ b

  • ( M4 H' k7 I  o0 v8 [
./configure    make;make install[color=#333333 !important]服务器端2 t. H- e: U$ U8 l, C$ h% K

    ) h3 q0 X; D3 R, b* l
  • * s' n$ c5 h6 \7 c: N8 U8 K
server/dns2tcpd[color=#333333 !important]客户端
' f- n& O" A/ x+ f$ }5 O
    ) g, x# f0 I& j; m- k; J1 \
  • ) r/ Q" M0 ]# {0 P. _* T
Linux:    client/dns2tcpc     windows:[color=#333333 !important]云盘直接下载windows版本,或者下载  d. z8 g2 K- U( W4 p! a; ~; `

    6 m9 t: g: }7 v  o) w& K. u- }9 D

  • ( E# H8 S: g& M9 i: S; C# U7 Y
dns2tcpc.exe实验测试
# `- s0 P6 W- }9 ]7 c
4 q; e- y* a3 f( |) K% N[color=#333333 !important]服务器端; N  X$ }2 L, H6 q
[color=#333333 !important]1.创建配置文件
1 d% u" f( s' D  c

    0 o0 ~) ^8 w3 w7 j
  • 4 G$ z7 ~. L7 o: U4 [1 R* O
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.启动
' w1 B( N' j" ?  G4 y

    8 |- i, `/ W: G6 A6 J
  • ; W: k; K: S* O" b& p. _
./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接
* X0 k9 x% S4 ]4 N# S7 u[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务2 H# x8 n7 v; o- m! J) p" }) [
[color=#333333 !important]
- ^" w$ i& h- M. E! x# y
[color=#333333 !important]客户端
2 }. L. d9 |  {& n
[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 2, d1 R( N" M% S
[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源
; m0 n& S/ s" X) X" g[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP: }7 E$ g! r* u3 v
[color=#333333 !important]-l:端口. e$ a4 I; J: x0 ~; F
[color=#333333 !important]-d:是否为调试模式 2 等级可以省略  X# S9 _! O1 `" H
[color=#333333 !important]1 j/ V( C; f) i- K6 w
[color=#333333 !important]客户端使用访问服务器
$ D5 K" z* q/ O$ ~* j4 k[color=#333333 !important]
. f7 l& `( Z) }  Z- @6 j1 \$ z8 l; ~# B流量包分析( w/ g& j* h$ b% R* w

, a, T2 _4 o% B  P; X[color=#333333 !important]建立链接并未产生通信包( x( Q: R& N' a
[color=#333333 !important]7 d4 C& t8 {/ W, {) w
[color=#333333 !important]使用ssh访问时,才会产生数据包1 E' ?4 J* c4 P3 I! H' f# e
[color=#333333 !important]% D% ^1 C2 C* v4 p
[color=#333333 !important]数据包分析/ K( @& h9 P' W& R: n9 r
[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中! D) I1 ]" K' h& t$ W$ k) `) d' w
[color=#333333 !important]
5 R5 P$ v0 _* h$ ~, o) j2 x# @[color=#333333 !important]9 X2 [! p2 j# Q0 [% Y) Y" U2 Q
[color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。4 a, R& ]( X. t+ w  m# @
Suricata规则检测(并未测试,仅共参考)
* p  o: c, J9 H# w3 `5 u7 V; J% X8 D- l9 t2 M& \3 j0 u  ^+ L' f4 o8 s
[color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测$ ~  b5 S5 K1 l9 r3 Q

    5 F6 \9 ?4 w) S. E0 r$ ^/ f

  • 7 P) a" Z' F4 f: k7 t/ Y
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]结尾
* d/ @( q* l0 `; N' T; D[color=#333333 !important]小白水文,求大神放过$ }6 Y9 R, ^' O# \( c
[color=#333333 !important]pcap包下载地址:2 R  w6 s1 H" [$ u5 u
[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw
9 @6 T7 L' T# F% A5 u8 I7 D
[color=#333333 !important]提取码:n5ha
. S9 A7 J  P( G[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载1 k$ l2 t7 E% c- i0 |' O

! \! `- E* `2 w精彩推荐8 s" g, m/ y6 o) a. i/ n5 X1 D

7 x3 f/ U6 z3 l! |0 a2 _- Z# P

. @% N# C! ^( H7 N" G4 M  j' k4 d+ t7 G& v# u5 l8 l3 X1 |
# b1 X0 E  _: l+ z
- u* b1 z! X3 W: \+ e3 G
! s& v1 c8 e- x; I+ h
来源:http://mp.weixin.qq.com/s?src=11&timestamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=1
0 v' b* |+ D' P# v6 T1 l2 y, l5 E免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

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

×

帖子地址: 

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-9-14 12:50 , Processed in 0.049458 second(s), 29 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2026 Discuz! Team.

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