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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7693|回复: 0

DNS隧道流量分析

[复制链接]

13

主题

0

回帖

10

积分

新手上路

积分
10
发表于 2019-10-9 23:15:32 | 显示全部楼层 |阅读模式 来自 中国
DNS隧道0 s- C; E  n& i
) f4 c$ d" C8 ^0 S3 c: y8 Z& I5 F
[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。& Z& j3 r+ a9 \; ?6 X4 c9 `; Z
实验环境1 m/ {2 _7 \; L8 X9 y
) I  p0 K5 o$ H4 W. B9 j& Y/ f
[color=#333333 !important]CentOS Linux 两台
  q' w0 s5 e8 z' W
创建DNS服务器
5 S/ h- N9 y6 L! u" Z/ f( N: t4 t3 C
1.安装bind
6 A, j( ]& E1 A( b- ]( l5 p  C3 l, C- R, T. h* K+ E, W
[color=#333333 !important]yum install bind*' H3 |) s& l' y7 P0 v
2.配置named文件
  F* O8 J9 [6 w8 @+ X; q$ K( `% d* M) X
[color=#333333 !important]修改/etc/named.conf
2 W, C: o. l. l1 Z4 e4 e6 ^+ [$ R$ O6 D
[color=#333333 !important]将下图中选中的地方改为any
+ G; Q8 `. N3 q+ K5 F! |, j[color=#333333 !important]0 a8 E9 z( U- P. D9 _) k
3. 设置NS记录,A记录$ F( `2 d- V2 V4 f7 p; p, P# [

% J: v0 M$ F- G: A- p( r5 ?9 L& v[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件
# `# o* J& Y8 H/ W' e1 m
[color=#333333 !important]

4 C9 n& Y1 ^8 Z4 v+ ~( e3 h7 k! ~! x[color=#333333 !important]增加正向解析记录
7 D2 E8 r7 G# Y! E7 ~[color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字! h8 i( g8 r9 S& V8 K
[color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel! b+ ]5 h3 t7 U; [! t
[color=#333333 !important]修改文件如下+ W4 `* i5 N6 W* c8 l
[color=#333333 !important]添加NS记录,A记录: M8 T5 b' `; b/ a7 ^5 M8 m5 b3 m, x8 l
[color=#333333 !important]
  `# P+ U; x$ ?" w9 ^7 a[color=#333333 !important]添加bind为自启动服务
: w9 p* s  h' V  T' N
[color=#333333 !important]systemctl enablenamed.service
* }2 M- W4 [! S; H$ j3 b[color=#333333 !important]systemctl restartnamed.service
4 W; u% Q6 g) c
[color=#333333 !important]查看启动状态
0 ]; e- c" M; m
[color=#333333 !important]systemctl statusnamed.service
" A; }0 Q+ u$ K; N  w
[color=#333333 !important]
. o& `7 ^. p1 f/ U" o' u% X7 b[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F)
$ v$ o; ~# L: w" O/ ^9 \Iodine
4 U" V) ~7 |& ^* ?, X/ ?
7 _% c+ R; W+ g* Z: U1 c% v[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。
6 H3 v2 ?: u7 }) G安装  R. X0 J' w1 U- P
; P$ t4 K# x. ^& l
[color=#333333 !important]下载地址:( u6 N0 k4 N: Z$ _1 ~$ e
[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip# r" N  G: a5 _" F" R& x. ^/ c
[color=#333333 !important]unzip 解压3 ^# e( |/ Y; M3 Z2 B
[color=#333333 !important]cd iodine-master
7 m/ x; f2 U( F: T[color=#333333 !important]make- Y/ |- \! |( D) x/ p
[color=#333333 !important]出现报错$ o( L" ]8 [: V2 ^8 S5 U
[color=#333333 !important]
0 O9 P( ]3 T. I6 Y/ f  B% D[color=#333333 !important]yum -y install zlib-devel
  ?- G! a  O: L% ]& F: U[color=#333333 !important]make;make install
7 W: y% a& J" i( e( \: v3 X[color=#333333 !important]安装完成' Z: g! U6 D8 R) j9 J
[color=#333333 !important]进入 bin
* p. n5 e4 D) E[color=#333333 !important]iodined 服务器
5 `2 s% X, @7 f; E2 z% }[color=#333333 !important]iodine 客户端: N  [' c1 z: B
实验测试
+ ~2 ]  X7 \! C* p* r, n) i% f9 u1 p) a1 U; w6 M4 H
[color=#333333 !important]服务器
' \2 s5 l9 ^+ |# T8 X) d2 B+ c
[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com
4 [& ~7 Q) Y  B6 s[color=#333333 !important]-f 前台显示,运行后一直在命令行等待1 \- J9 R# }) Y' \2 @  K% Y& v7 K
[color=#333333 !important]-c 中继模式|直连模式; T  M. h' o( k$ i! O
[color=#333333 !important]-P 认证密码
2 h: N3 k$ A1 a* F- e
[color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。+ b. i$ I/ _$ g, W2 {+ c5 Z* ^
[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。
& f; O0 I3 u* C( J[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡9 n% ?% f+ r  S; N
[color=#333333 !important]
* ^0 C* Q# C$ \. s$ A/ p[color=#333333 !important]6 s: l: D& d! \8 r. c
[color=#333333 !important]客户端
: ?9 ~% F- A- I2 f' p! Q4 s" C. I3 ^& U0 B
[color=#333333 !important]./iodine -f -P  123456 192.168.1.7 ns.dnstuneltest.com
7 R) L/ l( g$ w& ?1 G" w[color=#333333 !important]-f 前台显示
% R8 F+ E$ H0 r* t& V[color=#333333 !important]-P 认证密码5 J8 _$ [1 h. @- n6 x4 o8 c, C
[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析$ r7 M9 W' e; J$ q: J6 k$ w
[color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。% @+ h* |8 k1 N( r
[color=#333333 !important]; o; h+ T7 o( I
流量包分析
# d; w+ o' q# ~5 J4 [& r6 F" g* {! w/ R: B) y& Z6 Y
[color=#333333 !important]抓包
1 h* o) P) }. W[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap
- y. u2 d9 Q: l" k: `1 }0 R
建立链接的包分析$ @. c& o& G" ^

# G% [9 n) }. \0 h[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包  B$ F6 t8 ~2 [4 Z" ^9 B) J2 T
[color=#333333 !important]7 m, R, M' t1 d% {6 M& {+ `. v
[color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀9 Z- |& k1 o2 v4 z4 q
[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据
% D8 o0 k* o2 q[color=#333333 !important]
$ a! J5 Q2 s& V/ ~- r5 `[color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)+ q# p, c) K/ v9 d# R
[color=#333333 !important]
' ?' d6 ~4 j4 ~. j[color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。- N$ w( \4 w2 m2 c
通信流量包分析
. q! ^% o; ^5 B* R# v" }7 Q6 ], J
[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析
' Y6 V2 X4 A& }5 `[color=#333333 !important]
" X$ r2 e9 m: q) w8 `$ r, Y* d[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。
2 V1 r# p3 _* j. u" i[color=#333333 !important]05fanyi05baidu03com
9 h- K2 C- p; K[color=#333333 !important]
' B+ f# C# s0 q" ~1 D9 E9 u# ^! Z[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。
* N: F( f, Q' |4 y$ b[color=#333333 !important]
+ ]9 P+ R6 ^: csuricata检测规则(并未测试,仅共参考)
4 Q" r0 a8 S6 O8 I
) m* E7 F& I1 n% ]+ P, j$ C! A
    7 u9 M% \7 j3 d1 ~9 f; Y- ]! z
  • # a6 A) W# j$ H1 B% C; ]
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
- j- Q" Q( p4 A" {+ U) E# X- ?: F- E8 i; x3 T
安装9 u2 V# j  s2 x; Q* s- N; z
! D/ R3 B: K4 E! ?2 n  l
[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell
! g( t! c6 j% p/ H9 M3 m[color=#333333 !important]下载链接
, r- Z- f$ a8 k" |) ]3 h3 S
[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag5 }- g2 k4 ~( z: ^4 o- c& P! I
[color=#333333 !important]提取码:t1rw$ S; H( X+ ~* R; o! [4 \# C
[color=#333333 !important]安装编译3 B6 G8 W7 c( m  i4 ~2 \3 c
    , Q) O5 y/ {% V) v' G* i- @: ~$ i
  • 8 c' T0 F8 {( ~: K& S: F; X
./configure    make;make install[color=#333333 !important]服务器端
; A( _: }) P8 l' W

    $ W- U( [2 n/ v
  • % c" ]* ~6 ]" k, ]0 u+ U" O1 ]
server/dns2tcpd[color=#333333 !important]客户端
2 y1 R6 Y& b. E

      L+ n. l6 U' H0 M: w4 M0 g
  • # A) s6 d8 ^: T& z# M) w9 s
Linux:    client/dns2tcpc     windows:[color=#333333 !important]云盘直接下载windows版本,或者下载
+ T1 y* o& @# U7 E9 w  Y; ^
    / I- j, p0 i9 `, U. ]
  • . m4 q8 _7 p9 S% E: y' ^5 z
dns2tcpc.exe实验测试- P+ p  @5 C! _4 `3 d2 q

: }+ N3 l, ^8 ?# }' \[color=#333333 !important]服务器端6 q' j+ L* ^% n. u; w7 v2 G
[color=#333333 !important]1.创建配置文件. Z+ m2 J4 U5 V* n9 ~# C) r# p9 C
    - R( R. M8 B. u0 v2 d. }+ ^6 }
  • 0 L$ Q, C1 ^; [" c* f, y9 z5 s
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.启动
( v/ i2 @, N! r; `, P6 p# [
    " `) F- Q- h' Z7 @6 P
  • ! K: Z& V* W' m7 k
./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接1 R7 X0 J; {* P3 p; V7 {8 M) b
[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务
$ V$ |0 p) s" A( u0 x; D0 b8 h
[color=#333333 !important]
7 y- {! K% t! J: R- g4 V' i, h
[color=#333333 !important]客户端  Y) j( p# O0 g; ?  A
[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 2
1 B6 N8 u- N& c9 q, ~[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源; f: u9 ^0 [* b! U3 f8 p; Y
[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP) D: d3 a* o. e/ o% D0 @* {
[color=#333333 !important]-l:端口/ O0 |- g3 [) o6 Y% g
[color=#333333 !important]-d:是否为调试模式 2 等级可以省略
& ]9 V; S  w' \$ W) y) f5 [0 M
[color=#333333 !important]
, }0 ~% t* I3 H" Q[color=#333333 !important]客户端使用访问服务器
3 ?. g9 B  k& G& Q7 w; O' Q- f; H[color=#333333 !important]
! u6 F0 W' ^6 z$ u9 _+ X流量包分析
7 j; R6 l( }* I4 p
9 S- e. z! }( t) }0 y1 ^6 Y[color=#333333 !important]建立链接并未产生通信包
# h6 B) k) v1 O5 B" i' B[color=#333333 !important]
7 V6 _; u' s; ?' ]* D* U, u  ]1 F[color=#333333 !important]使用ssh访问时,才会产生数据包
. H. [4 k4 ^0 D5 N[color=#333333 !important]5 T4 T- Z1 s  {- N! J- j' T5 e
[color=#333333 !important]数据包分析
/ R& L( a: B! E" U[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中& g1 j  Q0 L4 _% J7 |0 p
[color=#333333 !important]+ b7 X4 ]) [# a6 {: z
[color=#333333 !important]/ B, J! i/ F3 a
[color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。
" f. ]  G( W: K0 A& ?% m' pSuricata规则检测(并未测试,仅共参考)
; k7 D3 N" v7 {' N3 B$ q' z
# _. t3 f2 h7 B4 w+ ][color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测
$ C+ K& s( i0 b( e; S7 ^5 M
    9 G" m5 K# T: U; ^# S( J, _

  • - E. Z: X- i6 o- S& \, F
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]结尾+ o& C6 r9 W& a$ B4 _
[color=#333333 !important]小白水文,求大神放过( n2 e2 r( Z- b- y
[color=#333333 !important]pcap包下载地址:
+ N+ ^$ z; z3 u- S( ^8 Q
[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw
  ?  l' h. e) `8 [: i2 g" R1 \' Q
[color=#333333 !important]提取码:n5ha
, @/ _" n& p5 s* z1 M% E[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载
, p, X* |  N4 h
; T( n% O+ c0 _精彩推荐
1 O: X/ z6 r9 V. x1 [( i+ g- B1 y! _" ^
& v$ m% ~2 \/ e: p

' e: a4 a; ~. U7 K' t& A( D
3 n6 X6 D1 [; B  m
. Z" @0 h3 c0 c  c
% S- i0 f9 l3 A来源:http://mp.weixin.qq.com/s?src=11&timestamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=1/ B* n# ^% H8 O( g( a
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

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

×

帖子地址: 

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-16 19:28 , Processed in 0.055815 second(s), 28 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2026 Discuz! Team.

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