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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7729|回复: 0

DNS隧道流量分析

[复制链接]

13

主题

0

回帖

10

积分

新手上路

积分
10
发表于 2019-10-9 23:15:32 | 显示全部楼层 |阅读模式 来自 中国
DNS隧道0 d' P' v( r0 @2 [7 i
( O5 }& d2 F" j0 X. L
[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。  i$ I( ^7 C  D; A2 w
实验环境
6 D9 s$ P7 ^; b7 b1 g5 r. s8 U* U7 `2 K# u) Y  e7 g
[color=#333333 !important]CentOS Linux 两台! F6 P8 H7 g. t9 f7 I  J
创建DNS服务器& \( P" }: G1 ^, @- t

& h8 {4 u' S1 {4 g' B& Q1.安装bind# ]$ I$ ~2 J# H

9 }4 |* m, [5 J/ A9 z, @
[color=#333333 !important]yum install bind*  {* I4 |  S/ ]. x% `  u! c# x
2.配置named文件3 s. G( E; |- c& A& `

; v- @6 c; x# S
[color=#333333 !important]修改/etc/named.conf1 x' b& {% _, Z6 Z6 G$ w
[color=#333333 !important]将下图中选中的地方改为any
4 X) s1 X. {. o# ?6 i* z/ |[color=#333333 !important]
! V9 }2 ]4 Q8 K3. 设置NS记录,A记录5 t% X& x6 I& {: Z
( K( R4 Q4 ~8 H, o# Z0 l" ?
[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件- P* {' e. P+ t
[color=#333333 !important]

. O" N, Y6 x4 p1 V" Q1 l3 Z. c[color=#333333 !important]增加正向解析记录3 m: U8 }* O3 g: ]
[color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字
$ P$ ]8 `8 o1 W5 O
[color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel% m0 Z1 r, {0 O+ o
[color=#333333 !important]修改文件如下0 T3 e9 ^; W5 H" c9 }$ p
[color=#333333 !important]添加NS记录,A记录
1 [8 [& z, L+ B* X1 x[color=#333333 !important]
: x& w' v  R3 k1 l8 E[color=#333333 !important]添加bind为自启动服务
1 h6 d0 X8 m2 F( |
[color=#333333 !important]systemctl enablenamed.service
7 v3 C* o0 b4 C" T% o: v% v4 v1 E0 E, f[color=#333333 !important]systemctl restartnamed.service" g- a* `) X8 S) g' _
[color=#333333 !important]查看启动状态
3 L' q( u0 S. Y9 {$ e
[color=#333333 !important]systemctl statusnamed.service
7 i% {) K" i8 r7 O' n# D% J
[color=#333333 !important]/ M3 W' r1 S' z- m
[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F)5 T: o: l0 I. Q2 F
Iodine
$ i$ z6 y' z- d8 f7 P9 P' ^, s6 k+ D3 b. H
[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。
' y  S+ n3 q  {/ i: Q4 D, s安装, g7 |: y2 @8 m9 c! F, i; B$ F( H
8 c  u: p! v1 h1 k+ y7 Y, s9 _
[color=#333333 !important]下载地址:
) Q% p, \7 `/ s  y) F
[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip
* I* d2 `3 N& ^3 J% g7 Y
[color=#333333 !important]unzip 解压
" h4 ?' i# `: _[color=#333333 !important]cd iodine-master: i( e% J3 h/ O
[color=#333333 !important]make4 E6 X" }) i0 g( c2 @5 \' ?
[color=#333333 !important]出现报错
% t5 I4 I4 f0 Q8 E+ R4 I[color=#333333 !important]/ O1 _9 ~( E5 I% ~; Z  f" v
[color=#333333 !important]yum -y install zlib-devel
3 }  p4 n& h: X, b* x1 j+ N[color=#333333 !important]make;make install/ H6 I/ C& N( X7 b, w9 Y
[color=#333333 !important]安装完成$ G: W4 @# I" S
[color=#333333 !important]进入 bin
4 T8 p: J: n- K( M[color=#333333 !important]iodined 服务器
: M! Z( [2 w; f  }( K) Z4 r[color=#333333 !important]iodine 客户端" l7 e" f: Y" _6 t/ x" s8 {
实验测试
) i. v3 D0 ]- s4 v
# X+ M% p& r# B& _( B[color=#333333 !important]服务器4 i' Q4 r' V' [5 a- t4 Q9 q2 b
[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com* I) s( c0 S! q4 y+ {8 F/ ^2 J
[color=#333333 !important]-f 前台显示,运行后一直在命令行等待
" m5 a2 L; b2 t; X4 t4 a( I* }[color=#333333 !important]-c 中继模式|直连模式! B, n1 U( ~& W) J" f8 J
[color=#333333 !important]-P 认证密码
6 H; V  a4 p5 m0 o3 a4 U: W
[color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。
: W: r$ h8 J0 q; m8 t  Y' Q7 A' w( y[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。
6 B: C1 g3 m$ p8 k( [[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡
6 `9 m' l' Q% j! G[color=#333333 !important]
7 I  C+ o; Y2 H* F[color=#333333 !important], L0 H, i  H0 j; M
[color=#333333 !important]客户端( S& K0 C. P+ y" q
[color=#333333 !important]./iodine -f -P  123456 192.168.1.7 ns.dnstuneltest.com! d9 e3 x! `4 u' i8 u
[color=#333333 !important]-f 前台显示
" ^" b0 E5 z8 \3 v( \[color=#333333 !important]-P 认证密码
( j, @$ t% ]: P. g% l& N[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析8 k* d# k- }6 r7 i
[color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。
0 j' o* p4 g  [9 ~+ i[color=#333333 !important]
0 V8 J; N6 K5 @! f& U. i流量包分析
$ }4 W5 ^" E8 I: E( s- ]3 K3 [) ?- F
[color=#333333 !important]抓包
9 W( [; }( z3 E# F0 i# s[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap
& j( W+ a! {) O  y
建立链接的包分析" O- l9 T' D- C6 p
5 a; b! e! p! Q' V( h0 ^: e
[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包# L7 c4 G  {2 P( v* ~7 z+ Z, j
[color=#333333 !important]0 F; x/ V5 B' ~6 _) i1 `  B
[color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀0 ~0 G1 s9 r( G) h7 n
[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据3 W3 ?4 v/ O0 C! `
[color=#333333 !important]) I+ c7 D9 m& g' L; f
[color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)
  B9 t! U2 n( ^, W[color=#333333 !important]
7 k" ~; m+ c3 I+ ][color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。
$ z/ O- S3 |8 y2 V- U* ^通信流量包分析' @0 A! z+ A( x0 X! r4 x& M5 a
4 y+ r9 N3 R3 l$ ]! F+ G, ^" s
[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析
' ^1 Z- S2 C4 {1 @' L& G, K9 q[color=#333333 !important]
2 v7 q1 ^  A1 ^+ v[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。
" r/ I0 e6 l, d- p5 q% x[color=#333333 !important]05fanyi05baidu03com7 }6 f7 [, T6 F: g6 ]& ?
[color=#333333 !important]
* g( V8 n) g) B, Q5 i2 {& V0 t$ T% L[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。
% t! S' b* b( v- k2 d- I[color=#333333 !important]. n$ Z' y% ?9 a
suricata检测规则(并未测试,仅共参考)
" P3 l0 T5 z6 s
  W: [; Q! g, U4 s4 t( p

    3 ^" y0 Z5 O8 b! M/ N9 \
  • / `8 |7 o6 w! N' P
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;)Dns2tcp6 \9 U' r  j# H; A) m' {
! L/ ^+ ^6 D0 |# L
安装* E, `# `% b# D) o

, F- V- R, j: h/ r8 d7 ^[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell
5 f( u$ I% O9 w( t1 e& B. {% y: {0 j[color=#333333 !important]下载链接
6 g9 e' `4 A3 [1 B
[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag
1 A! X1 z5 j- U. b6 X& L* n
[color=#333333 !important]提取码:t1rw
% t( g' S4 b6 r6 F/ ?) D/ Z" U[color=#333333 !important]安装编译0 z2 a9 K  @0 B+ F$ _# ~9 v
    / U) {- U- [- Z9 ?" i8 B1 Y
  • / M) I( q+ L: x/ o) M3 Y
./configure    make;make install[color=#333333 !important]服务器端6 F" n- U0 k3 Z7 o+ O9 w8 T

    & z3 i- _. D- q  l- a! O

  • 2 ?7 p; S% z6 z1 w
server/dns2tcpd[color=#333333 !important]客户端- D/ J8 [6 {4 d9 V; j  f9 }2 M
    3 Q# p" E; Z' ]% J; T1 B
  • 2 d/ z5 c2 ?; p0 f6 K; X- s6 u
Linux:    client/dns2tcpc     windows:[color=#333333 !important]云盘直接下载windows版本,或者下载
; l# D8 G* U3 r0 ~; p1 }
    & G- T* _' R: C- f

  • / y% Y! j% t8 Y( |6 |- m3 |8 B
dns2tcpc.exe实验测试
; N' R1 D9 F, v+ Z) d1 \1 x* v6 ]3 u# l$ p
[color=#333333 !important]服务器端
' L( q; Q# y- M0 Y8 e[color=#333333 !important]1.创建配置文件
2 C% P! i7 F; c
    + ^3 z* B5 N7 W

  • : Q" S# c4 J% i& R7 ?
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.启动
& z& X* C# k% |6 N  r

    3 o6 H  h6 K5 F: _0 n! S" o+ u! l+ j1 v: Q

  • " q/ C4 `- e, A( M9 {: Y( K' R% X5 R
./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接
5 J0 k! F8 w: P2 Q1 u* ?[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务
: `* y1 j1 v' |! h
[color=#333333 !important]

6 E+ l7 U7 g: r) U  J2 I) ^* J* {% g[color=#333333 !important]客户端
8 u. r, ~& V8 p' @4 z0 T$ t- Q* H& @
[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 2
& o/ R* U  v& R+ z5 R5 Q[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源; D$ W% I1 t) |$ P6 m9 ]
[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP
+ F# I$ A" R. O4 c& u. }[color=#333333 !important]-l:端口6 j- c$ _, F, N/ _& j# N
[color=#333333 !important]-d:是否为调试模式 2 等级可以省略
7 Z2 L- C2 |4 r* @- n9 }
[color=#333333 !important]
* j* N5 o: [" r3 k[color=#333333 !important]客户端使用访问服务器
* R0 G, O" K) ?$ O* m[color=#333333 !important]- w1 \6 L4 {- h# O; `$ C
流量包分析* e0 i/ p4 r2 V7 G

% x! l2 T0 ^! s/ H+ E% A[color=#333333 !important]建立链接并未产生通信包
- _4 ]) q: E' F5 t, a[color=#333333 !important]
3 z' [3 s3 i6 f2 U5 P$ h, Y7 G[color=#333333 !important]使用ssh访问时,才会产生数据包
' V7 h% ~# V% m- ~! `[color=#333333 !important]
" v; u: H. ?- ?1 M/ k5 C[color=#333333 !important]数据包分析
) ]( P1 }% E  e[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中; G3 e3 P" K# W, S/ z
[color=#333333 !important]3 |5 V' V8 }4 V/ L4 Z4 e
[color=#333333 !important]4 O& j- y' C" }5 O0 G
[color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。6 g3 j6 `& A; Q1 G
Suricata规则检测(并未测试,仅共参考)* F* v# B6 X- ~

7 `# J6 ~$ n* f: n0 M, X' h[color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测
. e5 Y$ _" a" ~$ ^  R2 m0 X

    % k" i6 n' ~8 r' b

  • + D1 x2 y8 V+ 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]结尾
! A7 o8 L  @7 x; q3 r# l[color=#333333 !important]小白水文,求大神放过
8 Z( i2 a5 V+ J) \& F5 `2 w[color=#333333 !important]pcap包下载地址:
$ P+ C- C5 Q) E6 {1 y
[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw
; Q0 t0 }/ c9 N, y# E
[color=#333333 !important]提取码:n5ha
5 C- {( R7 `5 t% o( I1 t. F[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载) I' ^# B# K. S  E2 l" Y( i0 J" b

- @0 `) V0 ~% J: N: s# q" w精彩推荐6 W% M! {4 U, |1 u

( j, V9 K3 z; T1 t+ Q" z  L( \2 `

$ r% T- J" Y+ j9 V
" M( T& j% ~( r9 ^" R4 p7 Y  V1 `0 `% E8 O4 {" E0 u( l- ~

# X$ ]7 |/ m) s" I- k8 o2 M3 B
8 F) H/ @& k3 \0 |来源:http://mp.weixin.qq.com/s?src=11&timestamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=1! ]# Y1 w- |# Q+ |0 Z5 n1 s/ z
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

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

×

帖子地址: 

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-29 17:34 , Processed in 0.048881 second(s), 26 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2026 Discuz! Team.

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