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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7653|回复: 0

DNS隧道流量分析

[复制链接]

13

主题

0

回帖

10

积分

新手上路

积分
10
发表于 2019-10-9 23:15:32 | 显示全部楼层 |阅读模式 来自 中国
DNS隧道
# b! W4 Z- o5 F7 a0 P
/ \9 j, k  i5 M7 C: i# p[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。: h! b4 ?& s; \. b1 w8 D2 z
实验环境
& F: X9 Z1 ~& G# Q3 K
: w' @7 v1 [" D7 q0 D( s* X& y  u
[color=#333333 !important]CentOS Linux 两台
# ~' R, |0 B3 p: t; }( r
创建DNS服务器0 G1 a! P1 `  k1 l- a; ~# b5 l
. o! i; |0 S( O- t& q5 r- a/ n& Z# r
1.安装bind
/ h" y) {9 p4 i% Q3 l
% F& n3 I8 |8 Q% {2 ?
[color=#333333 !important]yum install bind*
1 W1 E7 x, J& w( B9 v0 e# `
2.配置named文件
5 f  G2 H2 K! H& B8 l% R' h. R2 z" ?/ A0 r3 i8 I( P$ O
[color=#333333 !important]修改/etc/named.conf" F+ n  X0 \1 A- i5 Q9 ^
[color=#333333 !important]将下图中选中的地方改为any( r  G; t/ o( q6 x
[color=#333333 !important]
* ^5 |$ V  C* `7 U" C8 m3 r3. 设置NS记录,A记录0 L0 m  b# F8 g) m
$ B' V, h3 F( P. J. R$ c
[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件
4 V) D3 l7 t* Z  ?
[color=#333333 !important]

1 z$ q/ R% f  u, A/ m# f) u8 v[color=#333333 !important]增加正向解析记录
- m8 v5 [% w; r! Y[color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字! h  N- W0 Q2 |- x: o* X4 r) Y! U
[color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel
3 ?0 K& {; M% ~) I& {9 z- m( B
[color=#333333 !important]修改文件如下
$ D1 ^) y& q+ |7 n( w* N[color=#333333 !important]添加NS记录,A记录
( i# [$ }7 v; M, t9 [8 [5 v[color=#333333 !important]% T$ P0 X  j& @. c( K% ]) [% i; F0 K
[color=#333333 !important]添加bind为自启动服务( R. H/ q% R( U* S. i" Y
[color=#333333 !important]systemctl enablenamed.service" u2 {+ v8 H" J
[color=#333333 !important]systemctl restartnamed.service) d5 e2 W* y" [1 b- L  e
[color=#333333 !important]查看启动状态' C6 \/ h: o: `2 @/ m
[color=#333333 !important]systemctl statusnamed.service2 U0 l( z2 W7 g, L1 z; ]  |  L6 G
[color=#333333 !important]8 G0 I. W; ]5 B8 F) ^
[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F)
5 W. y% y4 R3 D2 `! Q6 [. gIodine
3 B/ Z8 Z& t% A3 T5 l
" U1 r& z8 ~/ R4 k[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。
3 J) U% X" z- ~: C+ E8 O安装- K+ N4 ^. c$ q& J# P

( u/ m9 i4 Y7 {[color=#333333 !important]下载地址:
% L0 ^0 ]( H* K# H) M% B) X
[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip
' k) d7 s; k& w' @
[color=#333333 !important]unzip 解压8 \6 g5 W1 [3 N$ L
[color=#333333 !important]cd iodine-master
0 D* X6 a! w8 f7 ?* P9 D[color=#333333 !important]make& d0 Q9 {- W: d, T4 r
[color=#333333 !important]出现报错
& W2 g$ B1 l4 m' @  C[color=#333333 !important]
8 q2 |4 i: ]% b[color=#333333 !important]yum -y install zlib-devel
0 I# }- l* L1 o7 J- J[color=#333333 !important]make;make install: i( b) A% @$ D
[color=#333333 !important]安装完成( z; W  [0 I& u( W+ }- o. F
[color=#333333 !important]进入 bin* }( a2 P% {1 o
[color=#333333 !important]iodined 服务器8 u/ Q* p  R8 g# ]
[color=#333333 !important]iodine 客户端, D( [3 S6 i1 Z5 a
实验测试
/ D& ?% D' F, b5 [% N! s0 K+ e3 U3 Z3 A
[color=#333333 !important]服务器! J3 \$ g$ A: y: z
[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com* F* y* K% M; w! g8 l  j" Q* ]
[color=#333333 !important]-f 前台显示,运行后一直在命令行等待2 v1 F* x3 S- i+ l6 E
[color=#333333 !important]-c 中继模式|直连模式" m( T$ [: X' ~% H5 v1 n" N* F
[color=#333333 !important]-P 认证密码4 n5 x' y+ Q! G3 Q- H( a
[color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。/ K: x: g; l( s, W
[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。" x; e3 j6 f+ l
[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡
6 r/ d+ @- Z. w+ j! `' w& g[color=#333333 !important]
# Z6 k7 [( ~7 s: x/ _5 @5 q[color=#333333 !important]' a; e/ K  N$ n, c( a
[color=#333333 !important]客户端
, t! R7 E5 }1 w7 o& X
[color=#333333 !important]./iodine -f -P  123456 192.168.1.7 ns.dnstuneltest.com. f3 W3 J7 q# Z
[color=#333333 !important]-f 前台显示" w. f9 Q' N! T1 V8 M5 h
[color=#333333 !important]-P 认证密码% N- p8 M7 ~. W1 K( T- X$ Y, d
[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析4 @+ u3 k! _/ {0 S" j2 O6 k
[color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。, d4 U: c# Y' @0 W: K
[color=#333333 !important]
) _5 g" g" d! z! W流量包分析" y" U  `' A4 l

- e3 J7 ~! q: L+ k+ e9 U2 m& [; D
[color=#333333 !important]抓包
5 y# {# s& X" {2 G[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap
  X4 O* G5 X5 A$ K  _' \* }" u: b
建立链接的包分析
4 R8 ^/ j9 N8 ~( c9 k7 m# c# Y8 T. b
[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包
0 `. j" l6 h* t) ?, B! U* L/ g2 Q" R[color=#333333 !important]
$ v0 @0 e, e, Y[color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀
5 w& r1 l2 R5 Q* k9 h7 o[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据
# h6 x6 t- ]) n* T; N, _! B/ _6 I* J[color=#333333 !important]
7 J" z6 t5 u. w[color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)3 ]! a& k0 E# o+ r: M
[color=#333333 !important]& N8 F  `1 p8 f
[color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。$ D  ~/ c& k6 R2 X$ J0 `! M
通信流量包分析" w8 _# u& U; ?

' j) g0 P: Z2 O0 S5 \) X[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析! |# N& q8 x$ G
[color=#333333 !important]
1 ^7 ~+ f6 e* D  u% Y8 D4 N[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。/ g3 j4 E3 ]. G' T$ \$ _
[color=#333333 !important]05fanyi05baidu03com
3 Y, @0 S2 ]3 c- |+ K& U! r[color=#333333 !important]8 L6 p  l4 \& U! E
[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。
! K& {' z: `1 r" i, l& j" f, i1 i[color=#333333 !important]# k+ ?0 ?6 t$ m8 ?
suricata检测规则(并未测试,仅共参考): T. p1 S, L4 w; d" o& e: _/ N
/ \' y) {& t1 Z5 U# x, x, q" a

    7 T& X6 ]9 C; F

  •   ^5 _/ o4 D/ T4 N3 w) c6 ~
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;)Dns2tcp2 N/ j$ ^$ {4 W" F% }$ @: S& |
+ G4 O" z# I3 S  ~0 s  e
安装* P6 |5 G9 G- J6 X: i2 q
, h) J) |& w1 x. g: W
[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell5 G$ f+ G/ M! j" t) I' w. A; U0 E
[color=#333333 !important]下载链接7 l- }" a' m* G9 h
[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag3 c6 f3 X  g! [5 H4 U
[color=#333333 !important]提取码:t1rw
$ J, [) C2 E2 j' q: K[color=#333333 !important]安装编译
" W$ a" \5 [% T: V/ ?) X# _" a

    6 v0 F$ }9 `/ {6 h
  • ! @. d8 A7 i# ]
./configure    make;make install[color=#333333 !important]服务器端$ I. R1 ~4 C7 N- M: I6 ^

    : i6 |7 K. o5 ^7 a; D
  • ( v7 {3 o' `2 Y: B* G# k+ G
server/dns2tcpd[color=#333333 !important]客户端
7 ^! m8 G$ j. @5 k4 o( b5 s

    4 G$ c' M4 m% [- p

  • / A! @. N8 h1 W* S' c3 n
Linux:    client/dns2tcpc     windows:[color=#333333 !important]云盘直接下载windows版本,或者下载2 \- k+ L/ ^  w# I2 G4 Y4 v

    8 X9 l  X: ?( ~( D( j

  • * E9 v2 [, _  o: B' q$ c+ w# D9 h" {
dns2tcpc.exe实验测试
+ ?, G( P9 t9 h( y, P
5 R- M/ G" {* g! g0 F) \[color=#333333 !important]服务器端
1 \0 s% w- b0 p& k6 n9 E[color=#333333 !important]1.创建配置文件; f( }4 W* r6 ^5 p

    , w' Q3 h9 S6 R3 m
  • / a: D6 F4 y# J# m1 w+ w
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.启动) w' a2 m' b8 T  Z$ a
    8 C8 ?5 [& d$ B) I1 o
  • 9 Y! ~; Y+ h8 r
./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接
8 M, c) z1 P, ?4 o# _3 P[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务
' a/ I& n) c" n
[color=#333333 !important]
$ E0 V: W! L! y, n% j8 X+ H; }8 c
[color=#333333 !important]客户端" y# L3 O# _, ?  |2 R
[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 21 h  Y$ N, M% f& z1 ]( F7 d1 S
[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源3 o5 K8 G/ H! m& z+ D* V0 C
[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP
2 G  _1 v( k3 v[color=#333333 !important]-l:端口* t, u% T& b: L" s+ R
[color=#333333 !important]-d:是否为调试模式 2 等级可以省略7 u0 z% x2 [* l# a2 n: a) o9 l4 t
[color=#333333 !important]
# x1 z  g/ R3 O" i[color=#333333 !important]客户端使用访问服务器
; \! d/ e# N# }9 u' S[color=#333333 !important]! l! R% T+ a3 b7 v* \
流量包分析" I( |3 r8 P. p+ ^1 f) R5 N
+ {( `' @  Z" G+ ?
[color=#333333 !important]建立链接并未产生通信包# O; D9 s9 p" i  B& m* C
[color=#333333 !important]
0 M; \* \4 a" F% o& {% e5 [[color=#333333 !important]使用ssh访问时,才会产生数据包
' j) ~$ D2 j7 t[color=#333333 !important]3 {0 K% E: \- [6 \1 C5 t) ?
[color=#333333 !important]数据包分析
- A8 |& `6 a6 C' D2 d: Z[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中
" F8 p( S$ G& ?7 @[color=#333333 !important]6 H5 L4 P% {% |/ p
[color=#333333 !important]' d  r" ^- `1 C- Y8 Y: m, H/ _7 F
[color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。
( {# ?. j+ z! m+ r2 l, Z- |Suricata规则检测(并未测试,仅共参考)
& r; l1 f$ X. w  P9 B# H3 `- H; _  w3 X) i* ?5 r7 @1 m4 ^' T
[color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测& n$ Y# \: {) }: p/ f7 |9 N) a

    5 b$ c5 M) M- g) n6 V
  • ( ^/ a! `0 l' W) j8 L; t
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]结尾
: ]9 X9 U0 N$ Z$ T8 D[color=#333333 !important]小白水文,求大神放过
; }2 w0 a  i: k# V[color=#333333 !important]pcap包下载地址:$ m5 j) y! U! f2 L5 \; K: F' E6 u
[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw% D* a; I- O- D' [& k
[color=#333333 !important]提取码:n5ha
5 _+ u: ^0 x1 K[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载, S/ O5 K) y8 Y2 J. u

; c3 f- s7 v5 W0 ]* L精彩推荐6 `, _5 E: {/ ?/ ?6 x
$ u" C$ J# a+ r- v  K
' c0 D  U: P2 o7 n: o
' ?& ~& O# s1 T, u3 H

7 i2 [( N- G$ S; K; ]& a
" {" j( ^! ?! A1 p' f! W2 E3 p( g, m4 |  R" |
来源:http://mp.weixin.qq.com/s?src=11&timestamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=1
- X  q! U$ E' B- l6 G( b4 q免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

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

×

帖子地址: 

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-15 01:24 , Processed in 0.055817 second(s), 28 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2025 Discuz! Team.

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