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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7679|回复: 0

DNS隧道流量分析

[复制链接]

13

主题

0

回帖

10

积分

新手上路

积分
10
发表于 2019-10-9 23:15:32 | 显示全部楼层 |阅读模式 来自 中国
DNS隧道
4 z, q) A8 Q, h* R3 f
6 w2 {: T1 U7 z% w% Q7 a[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。! q. t2 f3 v+ k5 V. a
实验环境% E3 x/ L  A  A5 x6 C" J6 P" M
" s7 J* M: Y" w( q4 _% ?
[color=#333333 !important]CentOS Linux 两台
' E+ a9 ?; @5 z) G2 l* m  u+ j
创建DNS服务器' n% v* y  V" }& s% m
' q6 b) b- q8 x- n( A( G
1.安装bind  G4 h8 W0 T8 \# j% e& @+ H
) c% H$ s6 i2 v3 ^5 O) q
[color=#333333 !important]yum install bind*
* ~, G4 }: F0 ], d
2.配置named文件5 }- q' Q. \5 J3 p. B+ e. }( E

# s! S4 H( u8 [  }
[color=#333333 !important]修改/etc/named.conf
! L+ b1 }0 t" W2 |, [5 d6 f
[color=#333333 !important]将下图中选中的地方改为any* S( O4 @0 D. }5 H6 @" t5 j
[color=#333333 !important]
- f2 b7 U" Q* j5 b# c( E3. 设置NS记录,A记录
* \# n9 ?* `+ i' n/ g; \. `# q" ]2 j3 _$ E( e0 P5 [8 {+ k
[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件
/ j& d! F# v+ {6 S1 M) Q: R7 o. U8 Z
[color=#333333 !important]
- w- o7 _2 j$ i# z  i
[color=#333333 !important]增加正向解析记录
0 v' ^. Z/ }: w/ E% E% v* A8 W1 H[color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字
9 o7 E# g0 k- x
[color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel, ^5 t. m7 F- D, x8 X6 Q
[color=#333333 !important]修改文件如下
$ E3 t6 F; C0 m7 L[color=#333333 !important]添加NS记录,A记录
1 r3 R& p) T9 z7 m  p: ^# Q[color=#333333 !important]3 N0 n/ R1 k+ c4 c4 w: V* O/ a
[color=#333333 !important]添加bind为自启动服务
: V3 d" m1 L4 y, N
[color=#333333 !important]systemctl enablenamed.service9 b* ^" L$ f  h" t' y
[color=#333333 !important]systemctl restartnamed.service
# V8 k. E; g- w/ A6 y9 @: c
[color=#333333 !important]查看启动状态. ?, q5 s' d; u( v
[color=#333333 !important]systemctl statusnamed.service" h9 g* c: B5 d- h1 ~
[color=#333333 !important]
2 N" J; i& _' q' d7 I, \1 ~[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F)
4 |1 o% v2 F6 @! D% i' |Iodine
  v3 ^0 a, Y1 {) ~5 P" _0 d, C3 O  [( n7 g9 b/ f% n
[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。
% G  _5 i8 t! S7 R& {4 W安装
: T$ Z6 d0 D& I. O% j1 y4 F) ~( T7 \& \: j9 [
[color=#333333 !important]下载地址:- D+ j$ q$ _  d/ G0 j2 Q
[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip
* \; |2 n( @. H% ~. S7 {( e+ g5 P
[color=#333333 !important]unzip 解压7 n; N5 g( c, l$ j. A
[color=#333333 !important]cd iodine-master' I2 b* U- ^6 [& o1 ]' W
[color=#333333 !important]make
* B& u7 q9 l3 [4 w2 j; F+ E+ n[color=#333333 !important]出现报错1 [: J4 F) B" A+ r# U
[color=#333333 !important]; \- j% B4 f6 X$ ]
[color=#333333 !important]yum -y install zlib-devel
# S, i9 `3 I( e7 E3 I* A[color=#333333 !important]make;make install
* ~. c1 |* u) E  V[color=#333333 !important]安装完成
' \# F9 r# }) {* G  ]1 U  U2 [3 n[color=#333333 !important]进入 bin2 K( M$ r/ T+ O1 y
[color=#333333 !important]iodined 服务器
* x. p, S: C" W' F& v5 E[color=#333333 !important]iodine 客户端
" _9 v2 D3 d4 z! u实验测试
- l; Z+ }$ f  Y: c1 R! ^/ i5 u6 H4 \! e$ @0 O/ y6 l, A
[color=#333333 !important]服务器7 k3 O) N! ^, h
[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com
: y+ U- f; Q1 Q! x; W0 {4 ?. K[color=#333333 !important]-f 前台显示,运行后一直在命令行等待2 O0 O" p; B- L( N5 q7 k
[color=#333333 !important]-c 中继模式|直连模式
  x* m; t% M+ j" Z6 N[color=#333333 !important]-P 认证密码& \+ c- t. _7 S* V
[color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。
2 l1 J% E' o8 X3 r[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。
1 h0 J& r: S# k1 L/ `1 u6 Q6 q[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡
: [+ i8 N% K0 g) S: F[color=#333333 !important]
& p0 j% O3 d) [1 j3 }[color=#333333 !important]" @# l" w$ A! K1 g
[color=#333333 !important]客户端
9 J/ V7 W2 G+ V4 {! e
[color=#333333 !important]./iodine -f -P  123456 192.168.1.7 ns.dnstuneltest.com1 Y! c* p/ R/ x3 N4 f
[color=#333333 !important]-f 前台显示- l2 ^% \! ^3 x
[color=#333333 !important]-P 认证密码
/ k, C! P# ?' z0 U3 `[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析; ^) a' \  ]. F0 P/ O2 Q0 l! Q- E
[color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。
/ t. V  J4 H* Y2 a1 i. @2 E7 s[color=#333333 !important]
3 u8 L5 s0 R& ?' r2 P8 h1 B流量包分析1 G1 ^% A& g4 C% l/ V
; z4 n: C; b1 q6 g7 ]* v4 {$ ^1 M% }+ x
[color=#333333 !important]抓包
4 Q% n6 @7 k' O' G2 s' }[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap
# l" Y4 p, ^3 r1 U& ^& u" C6 ]
建立链接的包分析7 w0 t/ c- q  t) ^5 N
- n) {/ L6 N3 |% R
[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包
' F- s7 N9 J, c* t' Q' l9 U0 Y[color=#333333 !important]: `9 S' T$ O! z5 f9 u4 k: r, a! ^2 ]
[color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀
$ @; j, e9 Y& s* C% ~[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据  ?3 s) _6 G5 J* U4 N, U% s% r
[color=#333333 !important]
; [6 f& E  i, A# I- D# x[color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)
- o: |2 v+ S9 K6 _1 z[color=#333333 !important]
3 l% r& G; W; K% b  H. ?, a% i0 _* [/ u[color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。5 Q, g& I) L! I. G( |/ W& Y# C- F( x
通信流量包分析
; z, z4 H0 V6 _/ t0 _/ i8 ^2 j; R  C% K+ c
[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析
5 p6 {8 I2 P# w: @[color=#333333 !important]
) g/ r' Y1 t. P6 m  k! B[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。6 j% Z# G, D2 |) ?( p: y
[color=#333333 !important]05fanyi05baidu03com
. U9 a  }5 ?! ^, H[color=#333333 !important]) B! q7 G, k" ^5 `: ?1 u
[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。
1 Q' Z8 B$ a. \. ~; U7 \[color=#333333 !important]8 i+ \9 A# n  _0 R: ^
suricata检测规则(并未测试,仅共参考). t* Y0 z; q5 V' w8 w+ q9 s1 |$ t

4 b- a7 Y- C) g2 r1 h9 H
    , p: F9 L: c) V& }

  • % W5 e: |- W8 w1 i, w, b
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
3 ?* y3 T/ I% C. }( b& ]7 u% I
7 `9 |5 \4 [+ a5 b安装- D5 l. u3 N! T: b# _

; u  \) @, J2 `[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell4 L( ?- K; h6 E* h/ S3 {4 ], M9 u
[color=#333333 !important]下载链接0 n( A; s& v% R
[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag
  z" m: J- y2 v$ N5 `$ I9 w5 s
[color=#333333 !important]提取码:t1rw
! d5 k" K) v( `% J[color=#333333 !important]安装编译4 K# E0 Q# D& s4 b

    $ y, P1 h# a$ z; k' L

  • . y# S5 P+ c# H3 l' N) Q; b
./configure    make;make install[color=#333333 !important]服务器端
: Y5 p* N# E' j# P, n5 H

    6 N8 |: o/ f' Y) [( L! f6 V3 R
  • # k3 y* d% E, c- T, t( u
server/dns2tcpd[color=#333333 !important]客户端
, W: h0 ?+ B/ `1 U( k/ f# _

    - R2 q- @  y8 d8 k9 q" z

  • 5 y. o3 F) ^# w; f
Linux:    client/dns2tcpc     windows:[color=#333333 !important]云盘直接下载windows版本,或者下载
$ ]$ z; B+ y) q( Y1 l5 x

    ; Q; t+ _% T' j* S- {8 C
  • ! c+ T2 i- p2 r7 g
dns2tcpc.exe实验测试1 u$ T4 i1 C: J6 {9 j
# w% A! z6 d& A
[color=#333333 !important]服务器端% e5 {, u9 Q$ F/ K/ M+ |8 j1 l, M
[color=#333333 !important]1.创建配置文件
/ m8 U6 w; D' K* i& S' [& p

    1 s5 k) N& P( t9 v5 [- _

  • 7 p; m2 X9 D( [0 e
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.启动
) B$ N, @. V. h: w" m
    $ I6 ]% z+ A' v% p6 ?

  • $ S2 q, e# s, ~" x* @4 K: L. q+ @1 X
./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接: ]% g1 [0 Y5 @+ p( Q/ c8 C* S8 T1 M! P
[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务
+ \* a4 f# ^5 x9 p! U: F; h4 _+ [- e& e+ {
[color=#333333 !important]

) @/ b$ W7 V0 ?% S9 g  k% j[color=#333333 !important]客户端, v5 N: v; B3 @
[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 2
, z0 s# i( z* j' u" |[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源* [  ]. b) P7 M2 b
[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP
+ \8 v! j: G/ K8 ~# c" `[color=#333333 !important]-l:端口  y; z- c" z0 C$ C0 D2 H/ a1 M
[color=#333333 !important]-d:是否为调试模式 2 等级可以省略
/ E( h+ L- j# E6 K/ @
[color=#333333 !important]
4 n; v' u" }2 R! z4 a- i" m[color=#333333 !important]客户端使用访问服务器( @$ ~; e0 @2 `7 [+ j, u5 z* z
[color=#333333 !important]9 a! `% c) |. c$ y/ M9 w& @- H1 Y  N
流量包分析3 S2 h8 u2 b# |: |, w; C
' [8 N% Q* Y4 b! _1 c. F9 Y/ o7 y9 v
[color=#333333 !important]建立链接并未产生通信包- S! c! a0 P* l& L( X& @/ J1 ]7 ~
[color=#333333 !important]
! f7 S! M4 L) ?/ J, s[color=#333333 !important]使用ssh访问时,才会产生数据包  z; q: j  \$ y1 }$ x7 Q8 p
[color=#333333 !important]7 o/ c( L* B6 U  [" ~
[color=#333333 !important]数据包分析2 S) i3 A9 [! r# d* k0 r
[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中  o% E8 p( p5 z' i8 \3 }& O
[color=#333333 !important]
+ N: W6 n5 i+ b! s3 g[color=#333333 !important]$ Y" y( G0 W1 @5 R& |$ \
[color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。
1 A* s, o- i, pSuricata规则检测(并未测试,仅共参考)
) P0 _! W6 H* ~6 @3 y$ {% T
1 @4 f* u  }& b, B6 v* h' n* x[color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测
* k9 b+ w/ R( Z! g  `- O! }; F

    6 C& O2 y( ]% T2 V

  • 4 r2 y2 d$ o6 f8 S7 R2 U. `: ^( U
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]结尾
8 h) |. x; d2 a3 k[color=#333333 !important]小白水文,求大神放过
& Y& Y, p* b7 _0 v) r. w1 @[color=#333333 !important]pcap包下载地址:6 j& H1 r2 n* S0 i/ `6 k0 V' H
[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw% x* ]) w! s, L
[color=#333333 !important]提取码:n5ha
- t/ j7 s$ |* Y+ M# P: j+ U" E[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载
. }1 B" P2 k! H. ^
! ^* J( d* q0 B  P精彩推荐
! T9 Q0 C2 c& J# {. ?6 a, w& U
; z9 a* s  L$ i8 b& a+ `7 d

8 C% x+ ^. ?# N7 Y# h+ u1 J
6 h0 a' s7 h* P6 L5 W2 Q7 l
6 Y& `# B. U+ f/ e" `: Z* D+ e+ y  O: N9 v4 C' H) z3 B. x# O

8 Q1 ~4 a! E" ~* U来源:http://mp.weixin.qq.com/s?src=11&timestamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=1: K4 w' L( p$ }2 Z- N0 D& x
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

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

×

帖子地址: 

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-2 09:49 , Processed in 0.040735 second(s), 26 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2026 Discuz! Team.

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