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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7562|回复: 0

DNS隧道流量分析

[复制链接]

13

主题

0

回帖

10

积分

新手上路

积分
10
发表于 2019-10-9 23:15:32 | 显示全部楼层 |阅读模式 来自 中国
DNS隧道
' U- R. h- V% `1 ]) M
* {* ?1 y. x! R4 z9 p. b9 W[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。
% x1 n# d9 N  h9 V8 y' [实验环境
  |5 M" G- ]% b. a+ m5 b. |, c. L
; r; ]1 _: [0 I( R
[color=#333333 !important]CentOS Linux 两台
( w! |! a2 {/ U: v9 U" a% Y  s
创建DNS服务器7 @5 Y6 v. F4 n; f- h, j* I' I" l
( ]' Y  m: o+ E
1.安装bind
  |) Q! y, ~9 _" @8 @4 y' `9 o* b
1 }" c+ l) P7 Z- d( ^1 z" o" ]. ?; ^
[color=#333333 !important]yum install bind*
6 A5 U/ O+ v$ {( C2 k
2.配置named文件
  [+ {/ m" I6 m' n/ P6 w$ Y" M& \% q" \) _8 {* a
[color=#333333 !important]修改/etc/named.conf: F' F! Y/ d+ A" J1 Z
[color=#333333 !important]将下图中选中的地方改为any
5 N: g! L  g6 U& h' T. S[color=#333333 !important]- M3 C1 E- H) H& v2 p/ }" S) {2 C
3. 设置NS记录,A记录
3 {+ ^, q, _2 e  d5 b
  v1 x# Z" t9 m4 G2 g" F[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件
, X8 s; g6 H- X4 L: a
[color=#333333 !important]

* X9 W  X1 h' z$ O4 @[color=#333333 !important]增加正向解析记录8 L- w, D. Y# j: R; A4 a
[color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字
1 m8 O$ G1 L, a. |! \4 I5 b1 ~
[color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel
* i7 p7 a0 }: I
[color=#333333 !important]修改文件如下. ^: b+ m( Z& h8 `$ N
[color=#333333 !important]添加NS记录,A记录" x1 ]( ~  v; m  [7 t+ L* c
[color=#333333 !important]7 G5 w( @# m: h& ?& P; y
[color=#333333 !important]添加bind为自启动服务& U( B$ O+ B- ~
[color=#333333 !important]systemctl enablenamed.service# x" K  [( g, |" k1 F. w) e/ d) Y
[color=#333333 !important]systemctl restartnamed.service/ z& c; j7 g( P) ~5 w& S. M. ]
[color=#333333 !important]查看启动状态
) k5 P7 f8 P6 J6 w; d, |
[color=#333333 !important]systemctl statusnamed.service
8 K4 @- E0 X/ z1 L( W) K
[color=#333333 !important]4 G  w2 ~2 J. \
[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F)5 }( R, Z  V3 d$ U6 o3 j7 j7 p
Iodine2 \  a% }4 }& K& p& E1 E8 W; x

) D& g# P# U) Z  B' V8 l1 H! u# s[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。
: j0 X5 i: [& h  y  _安装
4 I, }$ R) h3 v  E, _6 p5 s+ C8 _6 x) m* X7 A# o5 \1 _' M
[color=#333333 !important]下载地址:
3 q; h( V) x8 N/ d2 Q3 P  t8 `
[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip' u( l% U# w) H6 Q, y! P$ l$ c
[color=#333333 !important]unzip 解压+ _0 O1 b4 k7 s6 A
[color=#333333 !important]cd iodine-master) F8 p, @/ b( q( r! E! }' `% ~' m
[color=#333333 !important]make
- L# R" U4 F; \[color=#333333 !important]出现报错
) i9 u6 U9 Q$ W% C! k4 e& i[color=#333333 !important]# a, p- h9 C6 b
[color=#333333 !important]yum -y install zlib-devel
) H2 M; W: o0 M[color=#333333 !important]make;make install, X5 Q  @2 I$ ~  q4 ^) ^
[color=#333333 !important]安装完成4 G5 j7 Q2 W% m7 G7 e- E
[color=#333333 !important]进入 bin5 X  Y/ `0 w! Z$ N
[color=#333333 !important]iodined 服务器4 `$ j3 e4 A3 n& |; d7 t
[color=#333333 !important]iodine 客户端# ~7 T8 I- E/ T+ L7 H# ^0 f
实验测试
- O# \0 L  S! z% g0 k/ \. U; p7 h, ]2 f& c- {4 S. l& B
[color=#333333 !important]服务器
- t7 ~' i  T0 t+ I1 j0 b
[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com
0 C3 R. x3 Z; |6 i' b[color=#333333 !important]-f 前台显示,运行后一直在命令行等待
4 _$ l% x( {  I5 U5 H[color=#333333 !important]-c 中继模式|直连模式# s. E! L8 b' a5 b9 a# Z$ e
[color=#333333 !important]-P 认证密码
; d" w: l  m7 L8 V0 F
[color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。" ]/ y" N- ~  H2 c/ _' a8 s: O
[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。
) Q' r; R0 O- Z; o# Y& P- U' t( K[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡! m: V6 u" k/ y4 p! {' j  P' k
[color=#333333 !important]& E" w  J6 J* O0 u: R& Y
[color=#333333 !important]
. W3 S6 L5 S0 q7 U1 k[color=#333333 !important]客户端8 f( ?: L5 D: y! }3 L* E
[color=#333333 !important]./iodine -f -P  123456 192.168.1.7 ns.dnstuneltest.com
; V. g8 E5 G+ s[color=#333333 !important]-f 前台显示
4 c% j; J9 H& s0 n/ N8 }/ r[color=#333333 !important]-P 认证密码
& v# X4 t, b; W: ~- g  o, D. l[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析
/ y, x3 d- U' v$ J
[color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。! Y" `- ^, D/ D; c" j# M
[color=#333333 !important]3 W( C4 E0 t6 p: V9 d( s- [/ f7 r3 {
流量包分析' ?0 m% ~5 K2 }- `
5 G) c& m9 A! V; q6 U  y2 i
[color=#333333 !important]抓包+ W; w& C) K5 y3 j7 u& V
[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap
( p2 G- Q5 {5 S
建立链接的包分析* s6 T- G+ y; F- |; z% [4 R
7 x- W5 x4 j3 c* H2 ~* p3 U" `; A
[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包5 q; w" F7 }6 ?9 W4 P' L/ W% A& U8 t
[color=#333333 !important]
4 f/ y8 n7 L4 G, T' w[color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀
. o, B  J0 d$ ?- R$ w7 E: _[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据0 n  J/ g$ e" ^* P- F! |6 Y
[color=#333333 !important]/ i0 H" W% \7 N8 @* c9 [
[color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)
5 B7 z7 ^( k  Z7 @, _4 j- `8 M[color=#333333 !important]
$ d* E& v' \! E% I; K3 ~5 ~[color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。! A% W! E! j. X9 Z6 K0 }. J
通信流量包分析
( d) Z) q& z% c
5 a$ G" K" E2 F: k[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析/ o; b0 p6 B! v
[color=#333333 !important]
9 ~/ d  y# j4 B' z1 }' m; B! ?4 G[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。
8 S$ Z3 W6 X8 Z- F( R, O% v[color=#333333 !important]05fanyi05baidu03com  b0 T" [5 m. U1 Q
[color=#333333 !important]
, \7 g* Y- g" r[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。6 I4 V  B; j. }5 r( w0 Z5 H, s
[color=#333333 !important]) ~  ^) U* y2 n" \) b$ }3 o2 V
suricata检测规则(并未测试,仅共参考): q+ @) C7 \1 x! R, [0 M* y; e1 w
# Q& ?& r* q# Y% d" Z
    2 r$ @0 f- h- |$ P3 G: d0 A
  • 6 ]4 T; d0 x$ E! e5 _
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
) L# p: b& c, g2 p. O4 T+ |, P7 B9 [7 R& l0 ~2 V
安装
6 f; p! E/ b- N# P$ {0 ~: y* I$ l7 p9 ]: j5 i3 d
[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell0 l3 |8 p  i+ i, g+ d$ B8 Z
[color=#333333 !important]下载链接
2 g# H2 F1 q7 A1 o" y
[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag0 m1 }/ u+ M; O
[color=#333333 !important]提取码:t1rw# o; P' X' Q* p7 \; W) A( `1 y: v4 X3 C
[color=#333333 !important]安装编译
: Z' U: z; z; I8 A
    # c6 v1 e. J) \. f9 k+ h( H- J) f

  • & ^/ Q6 h2 n( j" l
./configure    make;make install[color=#333333 !important]服务器端
+ }1 B# S% Q0 e  I

      D# b6 ~- D$ @. ^

  • 1 E5 D7 `+ D; ?8 {8 p
server/dns2tcpd[color=#333333 !important]客户端
7 t# W9 B7 C2 h' }" b

    1 O3 v# W: z+ ^+ |6 S: Y

  •   `7 n+ H: m- H9 m
Linux:    client/dns2tcpc     windows:[color=#333333 !important]云盘直接下载windows版本,或者下载. G" w" T* B- F" T1 y6 A. C
    5 Z2 a% `0 }1 K
  • 4 n9 p/ h% G$ W$ w3 x/ @( L  ^% s" R
dns2tcpc.exe实验测试3 l" j1 k( u2 {2 F' g

9 l4 k4 m2 \4 s6 H, i[color=#333333 !important]服务器端
4 Y7 L: ]1 U1 v" {) g[color=#333333 !important]1.创建配置文件
( l: ?( {% x6 \0 S, S" R
    4 B' e  W4 T- }' j$ ~
  • $ Q/ t2 L$ T# w2 C0 n
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.启动9 M3 x. E# v/ J. H' H

    4 D! B. y+ Y3 K- v- X8 a$ o
  • ! E' X/ i9 T0 f( D& d
./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接
3 H7 T) P9 {4 G$ D: N8 U' m[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务
9 g! V! n6 H, ?$ D! S
[color=#333333 !important]
5 s- [+ P/ Y; r9 ~- ]
[color=#333333 !important]客户端$ a4 Y+ Z) I, }
[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 2/ J, y' q7 X) e3 _+ r" _% y9 M
[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源
+ S' \- A: m; z6 h' z7 p; X[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP
: w: p0 r# e# u# a[color=#333333 !important]-l:端口6 T7 W# D& o$ P& A9 ]
[color=#333333 !important]-d:是否为调试模式 2 等级可以省略8 s+ _. n6 C0 P
[color=#333333 !important]. }& Y- y8 k/ y: m. n2 o
[color=#333333 !important]客户端使用访问服务器
+ s7 T6 Q& f# \[color=#333333 !important]  i' `' F' e/ y- `
流量包分析2 E# N. O% i$ r9 a' D0 L

$ Q6 ^  Y0 D9 V( _) G2 D[color=#333333 !important]建立链接并未产生通信包$ v6 C$ K) {* S0 O" \
[color=#333333 !important]
  V$ G$ B+ J: X! _" ?[color=#333333 !important]使用ssh访问时,才会产生数据包
: c$ Z- k) C2 e[color=#333333 !important]
/ J; X5 w% E6 J[color=#333333 !important]数据包分析
) N: X; t3 N8 H( B' u7 ~- S# ?1 H[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中
8 `* d" D2 M* \/ c1 R[color=#333333 !important]
  K* G& z0 b0 S+ `# e! _* X. }[color=#333333 !important]
7 ~9 p' o. @$ B+ w9 u% _[color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。: k; o& Z0 h) t
Suricata规则检测(并未测试,仅共参考)6 Y% ^( I$ g+ f. d+ w" d4 L
& a- V4 E$ D7 N
[color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测
* f# _* f; U* B: X

    2 W  U7 H/ c! ^

  • ) J% ?! x" Z- |' @1 n, S
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]结尾  p" g" I+ q# {- D% {
[color=#333333 !important]小白水文,求大神放过
$ O0 Q! n; i2 r' m- S) O9 e, b[color=#333333 !important]pcap包下载地址:' p. Z+ \- ?; f5 t
[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw, s# L3 b4 G+ @- ?8 @% Q( U
[color=#333333 !important]提取码:n5ha* A, h, [5 l* S* r5 Y/ d
[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载  u) {- p4 Q5 ?- K

) H% {7 m; k( J( `3 ^精彩推荐
  |( n/ Z) K/ R. R. `; ~+ R; H! q- K4 }! @
6 p7 F! M5 {; H

! c6 y8 u) c1 c) A. N3 [+ n% E! H0 s- L' b; R8 m2 D7 T" W2 W
* e/ F; v9 D1 O8 ~( I
5 c( V8 r9 s# H6 w, a, k
) ?, w; `1 C, s8 t: b
来源:http://mp.weixin.qq.com/s?src=11&timestamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=1& h% l+ Y: ~1 V9 T$ k5 B2 v) ]
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

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

×

帖子地址: 

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

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /6 下一条

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

GMT+8, 2025-7-3 19:34 , Processed in 0.048694 second(s), 28 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2025 Discuz! Team.

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