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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7899|回复: 0

DNS隧道流量分析

[复制链接]

13

主题

0

回帖

10

积分

新手上路

积分
10
发表于 2019-10-9 23:15:32 | 显示全部楼层 |阅读模式 来自 中国
DNS隧道
- h, z3 _# Y  M$ q8 j: Y" N
, A" X9 f/ a# M7 y# _4 a: r; h[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。
$ f& W. x! s- N& O实验环境
! N$ ~$ x8 b8 N5 r* x8 q6 s3 U' G0 U6 T5 o& r3 Z3 S
[color=#333333 !important]CentOS Linux 两台
. n  {+ b* b- B. f8 s; U1 `
创建DNS服务器
7 K& @% Z3 |2 P
9 j7 V7 Z/ W$ I0 x7 J1 T$ y3 L1.安装bind
& C& X% \$ z4 X' e' ~7 a4 Y
- G: n9 O' A3 ^9 j8 N, B$ N  ~
[color=#333333 !important]yum install bind*
% }" C7 d6 `1 B5 T" y8 {% n
2.配置named文件
( p. c0 f: B% Z6 P! p' o3 ~+ i1 O; j: d
[color=#333333 !important]修改/etc/named.conf
! b1 [2 t1 `( t7 S; L$ \
[color=#333333 !important]将下图中选中的地方改为any/ r* a7 o9 k( {
[color=#333333 !important]
3 K" n1 h/ }: V8 z3. 设置NS记录,A记录
& r3 p8 u8 c/ Y' d
( k6 y  O( S' r4 S8 z- Z) Q, O[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件' e& j$ @$ K1 i- P$ @6 w
[color=#333333 !important]

. t5 s( O3 }; q/ n, G. L[color=#333333 !important]增加正向解析记录3 O9 L: I, w# y9 g( p3 M  K- |
[color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字
" B8 o/ B4 S7 ~& c' H" g
[color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel4 n* P, z- X' H  A& A
[color=#333333 !important]修改文件如下9 L& c8 _/ P' Z" `6 x/ L# D$ E
[color=#333333 !important]添加NS记录,A记录
6 Z- }$ g* B# i# \/ i[color=#333333 !important]
/ L: |' F) _3 z& k2 o, N[color=#333333 !important]添加bind为自启动服务
4 l% R) Q( \: `
[color=#333333 !important]systemctl enablenamed.service! P  |8 P! R1 {5 ]9 c3 P0 [( m
[color=#333333 !important]systemctl restartnamed.service
" j" b" ]$ B. f2 B% f& Q
[color=#333333 !important]查看启动状态# d1 t. V$ H& b; k! B
[color=#333333 !important]systemctl statusnamed.service/ A; a4 n/ e: V" T* L! y/ Q
[color=#333333 !important]! S; C8 v1 _" W9 E6 b  e& U
[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F)5 T0 Z" j3 J7 q  C$ y" h
Iodine+ H4 W( N/ Y9 u4 z; ^4 h

: w8 l7 }4 a. [5 }1 V3 E- N[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。. |6 E3 s9 I4 L3 G) U4 l0 t2 B3 G1 e
安装( N1 P+ P8 [9 `) G2 _% \0 d
, o, p1 l( T; ^3 X
[color=#333333 !important]下载地址:. {) s) N: p. Q# g' u
[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip
& C' S+ o' _& s: D
[color=#333333 !important]unzip 解压
) P* x( A" M4 z% A$ v. r[color=#333333 !important]cd iodine-master
1 w5 w1 P) B. x2 U% @' y% f: ~3 H[color=#333333 !important]make9 [, m6 |8 X' F) u% [3 L$ G
[color=#333333 !important]出现报错- n, _3 A/ s3 u8 b
[color=#333333 !important]: [: L# v/ ^$ e4 Z" p. g
[color=#333333 !important]yum -y install zlib-devel
, k% h7 _: a4 ][color=#333333 !important]make;make install3 t0 X" Q: d( {# m
[color=#333333 !important]安装完成( G0 M' n; P7 V; H* v& o
[color=#333333 !important]进入 bin: D# e4 }: [$ P& A2 n2 Q
[color=#333333 !important]iodined 服务器
+ E( o' A7 j" y: ?' ?[color=#333333 !important]iodine 客户端! v! M+ _' u" b8 u$ v1 J/ u) u
实验测试
2 D  |2 q: @5 W  E" ~. k5 n9 I6 m( _' V. e9 d6 b  x3 B  t, Y, m5 E
[color=#333333 !important]服务器
* P1 i$ `4 L# f& I  |& A/ M( |! e" S
[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com
2 Q. Z/ C  _/ }2 w+ U9 h$ W7 W: J8 e[color=#333333 !important]-f 前台显示,运行后一直在命令行等待9 E3 O4 B5 {. @/ j3 r
[color=#333333 !important]-c 中继模式|直连模式
% h1 M" I" M" Z: d+ F[color=#333333 !important]-P 认证密码) K( C5 n- A8 q  s& v* c2 H
[color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。
, o0 ~+ F0 l( T' O+ o( N) X1 g. J7 H1 B[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。
, L. V: R6 A; w[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡, E: w4 S: R2 B# J
[color=#333333 !important]
1 Y. V' f! |# W2 f5 T; C7 @/ u[color=#333333 !important]. J: e$ E$ D/ z' L( k9 L
[color=#333333 !important]客户端
5 W" y6 D, |& s& t
[color=#333333 !important]./iodine -f -P  123456 192.168.1.7 ns.dnstuneltest.com
. y* L6 Q0 p0 ?# k  N: i[color=#333333 !important]-f 前台显示% Z1 R) R! [7 t" ~/ t
[color=#333333 !important]-P 认证密码9 g9 y. e' }9 w$ Q; p
[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析% u4 I2 _5 k, t+ V$ H/ a' K' a
[color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。
* q: k4 S) v5 Z- r[color=#333333 !important]
* M, @' g- G9 K& A0 w! m$ v( W流量包分析
2 j  p" Q( k% F$ d3 T- }( g/ K
: U) V* J# S6 Z8 D& t
[color=#333333 !important]抓包% v1 L" x6 |* x4 F, h: X
[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap5 p4 Z5 [( T9 T& h
建立链接的包分析
( R, E: v. Q( L+ l
4 @+ x' I6 R5 a[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包, R# _4 m2 \9 G6 U) k. A
[color=#333333 !important]: E- d1 r" B5 O4 \/ `
[color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀
, m* \" v% x/ J  }2 U[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据  W! q7 p+ v, x  P' g: [1 g0 ]3 N3 ]
[color=#333333 !important]
! v7 P0 J% _. Q: R$ @' `[color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)
' p' T% B* m6 g[color=#333333 !important]
5 C6 ]6 u# r' V1 x  f[color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。: c  u) {7 I/ e* R; }8 E
通信流量包分析; {) H7 O1 d% V4 K; e4 \$ f. @# H
5 g+ S( s) y) \: f8 {
[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析
5 r; w* a  p4 D6 S- [[color=#333333 !important]0 s$ C+ w; H7 s+ z
[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。
6 x! ~# }. D$ z4 t# M[color=#333333 !important]05fanyi05baidu03com( u% Q* ?7 H- C1 _5 C+ b4 S! B% P
[color=#333333 !important]3 g5 `) d6 P4 ^$ o# W$ B
[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。
8 j5 a9 Z! U% |( @[color=#333333 !important]! \6 N: d% [' }7 v7 W$ @
suricata检测规则(并未测试,仅共参考)3 e1 W% ^6 _( U# O9 E7 b

$ t- E) b7 l8 ^9 i5 C
    5 {  u- Z( Y7 h! c: L

  • % O& a1 Q: w! Z# S$ o4 b! X
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;)Dns2tcp7 X3 _9 D/ d& S8 g  P# C
! Z2 ]5 M5 O3 Y  Q
安装
" n' p6 W" b/ i* b0 a( a9 H/ r6 M9 j* J9 m* L
[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell. N$ m) y' s% C2 H
[color=#333333 !important]下载链接
: h$ k# Q; l6 s0 i) A) Y
[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag
/ }2 \5 H4 J* A) {* c. O
[color=#333333 !important]提取码:t1rw
0 S2 V! G; Z+ b  Y[color=#333333 !important]安装编译
  |( ^! m* [* F- S, V1 y& P

    7 `& [0 k. d9 A
  • 5 k. a$ \6 m: c4 o1 B+ B( u
./configure    make;make install[color=#333333 !important]服务器端
; B& G$ S$ F7 _/ y5 m

    & Z' s: @% E$ ^0 W& n
  • & }- O4 u; |' w
server/dns2tcpd[color=#333333 !important]客户端! P( s4 \% a1 F: I* Q5 \, H, q; I, |
    : C3 l0 K3 x! l. k4 S
  • 0 J# \$ Z, n+ j1 O( W  m
Linux:    client/dns2tcpc     windows:[color=#333333 !important]云盘直接下载windows版本,或者下载
3 @  A5 E' U' y

    / B. v: G0 O" o0 Q# Q/ m5 M
  • % E4 k: L) ?; h: h" L$ d
dns2tcpc.exe实验测试- K: H! T) a1 I$ E- y' d4 f
, Y  e' i+ F1 w" v; l
[color=#333333 !important]服务器端
0 ^* c% j6 ]# S( z+ m& }+ t; O[color=#333333 !important]1.创建配置文件
% C+ E: N9 D1 [' c

    : f* y& P+ G2 y, f) ^, K% S
  • & c! `' `& _& D( c9 v0 O6 y) L
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.启动8 z6 }0 y0 m2 Y9 }/ _6 ~

      O6 v. g& r" H& U6 g

  • * o6 i4 z8 H, {  X: Q5 E5 W
./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接
+ Z( N1 ^7 S) R! H4 O[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务
4 j7 d7 H; I) Z2 e8 i5 i9 e+ P3 B
[color=#333333 !important]
9 ^" x5 |1 A" d+ h# p( k( n2 \
[color=#333333 !important]客户端
9 S$ ]' v* p; W
[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 27 C+ c: X3 R+ M) C8 K
[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源
; y) L! X/ R  h3 M[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP; \% q1 X5 y6 ~* P& {( S# Y
[color=#333333 !important]-l:端口
" _3 F1 A% v; H9 y[color=#333333 !important]-d:是否为调试模式 2 等级可以省略: `6 W% {! @0 j
[color=#333333 !important]
+ T' a) f% p, f: I; l  I  n[color=#333333 !important]客户端使用访问服务器
4 t$ V/ |  z# p0 b: J[color=#333333 !important]
* ?: m0 ^# X3 O& D2 W' }流量包分析3 S# Q6 L( R( I1 `7 |# H8 S5 K7 Y
- \$ z- \& @, a' u( _! H
[color=#333333 !important]建立链接并未产生通信包9 T' h5 x2 e! u4 {" P
[color=#333333 !important]  d- q7 [2 a4 _  O7 f  O  p, z: x
[color=#333333 !important]使用ssh访问时,才会产生数据包
2 i0 c% a9 k2 j1 H7 T[color=#333333 !important]0 o( [* L* r- X, R5 E- b
[color=#333333 !important]数据包分析8 v  V" ?9 i1 I, X
[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中; T: B( K7 _4 I8 B# [# ?% r) H' [
[color=#333333 !important]
& U1 d' v. o0 x& P$ D2 R) o* z[color=#333333 !important]
/ J6 r2 ?. Z- r" e' ]! l8 }5 y[color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。& ?9 v* q* d5 t: @' t" m) B% [
Suricata规则检测(并未测试,仅共参考)
* \( K, T( Z! |8 B" h+ Q0 P: f! o( T1 Q% H
[color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测3 f) D9 T2 c: ^6 K& U+ P; L) h
    ) A# W+ P0 `7 _  J

  • 1 z3 C2 C! H1 U/ C% 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]结尾" g3 L+ R: x9 ~4 J" f8 N4 ]3 |6 C$ Q. f
[color=#333333 !important]小白水文,求大神放过' ^* k( L! @0 t. H% l- \
[color=#333333 !important]pcap包下载地址:
& t' ~+ w! P/ a0 u
[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw
& F; x- g; M3 _4 I1 S, U2 w6 o' R) D
[color=#333333 !important]提取码:n5ha
6 K: `# a3 |) h6 B( f[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载
+ [' H/ Z4 c  N  q% }6 U8 X0 a3 N! @- ?) c
精彩推荐
& c+ F5 H' e; {: ?! U5 U: r0 Y* S5 V6 z$ T' j4 o$ [

7 w4 ~9 X  O8 ^9 `1 i- @- y. ]7 X& q& U. [2 r- f" w( Z

4 a0 M* F; s- H2 f4 _/ \9 k- q" [& }; r
! |5 Q) n, ^$ {) S4 |$ v
来源:http://mp.weixin.qq.com/s?src=11&timestamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=1
+ v2 O# c; z- s3 S; r$ v免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

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

×

帖子地址: 

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-9-13 19:16 , Processed in 0.049247 second(s), 29 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2026 Discuz! Team.

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