|
|
DNS隧道% |. C" b* C/ |6 q, V: p
& a9 j: o8 ?" U# ^- u; D8 k[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。; I) v, a7 R4 y3 { F* M) }0 g
实验环境
, ^' _& K8 x8 g z$ M
( y1 `" z# j, E' J! M[color=#333333 !important]CentOS Linux 两台6 I- u9 s! j5 E. W6 _+ S: G3 f
创建DNS服务器- x- ^3 r" W" P$ W
4 p; J P5 E3 b' s: D4 l
1.安装bind+ J. \# M9 K2 _4 |0 q5 c
+ H2 P2 e- k n8 S
[color=#333333 !important]yum install bind*
3 J7 _5 B) S- S 2.配置named文件
% h' ~ ^/ E4 a) k- S( j5 V1 h3 M1 K8 s1 z' E
[color=#333333 !important]修改/etc/named.conf
8 s( t: g1 |2 P7 U [color=#333333 !important]将下图中选中的地方改为any
9 ]% B A; L" Z; c- I2 o[color=#333333 !important]
: r3 Q# z2 ?& h3. 设置NS记录,A记录
# v2 u! s3 s' ?" d" s) ? N$ B4 W; m+ O9 t9 O' T- ]8 [$ Z
[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件; l/ F3 z5 S- o2 s' @1 {. Y" b
[color=#333333 !important] 
! t* M* K# }* Y) a[color=#333333 !important]增加正向解析记录
! O0 H2 V% V. I* a[color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字
! A8 R6 h4 P8 u* v[color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel
) w; J0 ~* q8 H4 T! X [color=#333333 !important]修改文件如下
/ e: Z! y3 R J& t3 Q$ b[color=#333333 !important]添加NS记录,A记录
3 L6 W3 r' U2 ^* J; Q[color=#333333 !important]
# j1 b$ S k/ N: k& e' p5 o[color=#333333 !important]添加bind为自启动服务
0 R! I: [, S" v/ I1 G$ s[color=#333333 !important]systemctl enablenamed.service
4 E- @+ V* O2 H6 ?" U+ u4 [1 K[color=#333333 !important]systemctl restartnamed.service
! n( P) x- ]- y, u0 p" D# V [color=#333333 !important]查看启动状态
4 J4 r$ R" l. G$ {[color=#333333 !important]systemctl statusnamed.service
/ Y! R3 G0 {( b9 Z+ p [color=#333333 !important] / O# _$ }4 u* {9 F
[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F)4 N8 T2 B# _0 `9 _ W; h
Iodine
1 G4 z; h' F% I# [$ e3 `/ t/ F
$ Z |! }, `# R. h# Z[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。
i: Y3 u+ [0 _# s安装
+ ?+ a: b0 }6 p2 g. c7 M$ p% G
6 H& b2 c7 x* i* e* O3 C[color=#333333 !important]下载地址:( z; \+ W, q, R( h
[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip% L8 N* w, f9 h+ H7 s* g3 ` D6 W
[color=#333333 !important]unzip 解压) v8 ^7 F0 r* s( S w9 f# z
[color=#333333 !important]cd iodine-master
; k+ ?; ^: j0 c; E) U# |& Q2 D[color=#333333 !important]make+ O$ l5 L: i5 Q! R
[color=#333333 !important]出现报错4 a( \* L& G. @0 _% p
[color=#333333 !important]
% y: |+ f' v$ w5 t& L[color=#333333 !important]yum -y install zlib-devel' n1 z# H9 {. _; c8 ^8 _
[color=#333333 !important]make;make install4 X, } b' y \ W
[color=#333333 !important]安装完成
& X6 ]8 O8 X, D( M: ^8 a n; a[color=#333333 !important]进入 bin! ^5 G; D! n5 T) U( X
[color=#333333 !important]iodined 服务器7 T0 o2 V: e8 Z& L# z- b
[color=#333333 !important]iodine 客户端- N- O5 W: s; o" \& U) [
实验测试: S/ z L9 L! k0 k8 U" C6 n3 _8 T, ]
. w* [3 m% t9 A8 a j- }% Q
[color=#333333 !important]服务器
- I$ M! U% R) J# p ~1 o# M[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com& ?! }+ `4 a, R
[color=#333333 !important]-f 前台显示,运行后一直在命令行等待
. A7 n0 d! x: f& J[color=#333333 !important]-c 中继模式|直连模式
8 F s: V: M# W, } _[color=#333333 !important]-P 认证密码1 b+ l' @" c% r5 L" K& y
[color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。
9 ~) ]/ I- T' u+ Y1 D[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。' s5 j# d. T) }8 o
[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡" K- x+ B9 a" u2 P* ^
[color=#333333 !important] 8 t6 N. z0 F0 b5 A
[color=#333333 !important]
) I! K, T* d. V+ |5 ^! l[color=#333333 !important]客户端
! ?; k$ N! V& Q; N, c[color=#333333 !important]./iodine -f -P 123456 192.168.1.7 ns.dnstuneltest.com, q1 ~9 y/ }3 W/ I1 j3 X( G, c
[color=#333333 !important]-f 前台显示
- J$ c& }$ \3 p5 |0 {[color=#333333 !important]-P 认证密码
8 R3 w. G8 A$ _3 f; E[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析
$ i. l5 G8 e! h5 a' i [color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。- A D- R. Q& |- o+ R) C9 z! [0 Q
[color=#333333 !important]
2 B8 K0 e7 q0 h流量包分析7 O3 e7 U, U( P8 i0 Q
3 h/ g7 Y. ~- {[color=#333333 !important]抓包9 A% O. y1 [7 m }+ n Z& A
[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap
/ T) s6 c% ^. q$ w7 Q# S6 G 建立链接的包分析: {/ c6 I, [1 z2 J N7 x
+ I A8 G) w1 J4 c1 ^" X4 D/ W: h: F
[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包
0 P6 i( p |8 A% w[color=#333333 !important]
7 [: b4 R! N0 ]1 v1 o[color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀
( G- A( b6 M2 p2 L[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据
2 F# A5 B, [1 K[color=#333333 !important] ! }4 n5 @' }% R2 B L
[color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节). {0 f7 C0 N: H+ a) s" g$ w
[color=#333333 !important] & z7 `+ M( O& z7 k" {6 q8 W
[color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。
3 d3 _! j) `0 h! t7 ^; @通信流量包分析4 g1 O; ]( x" ?' W7 |* ]
' q* A, j# W3 A% f( h7 Y) _7 O
[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析! ?* u* K2 D7 m8 P
[color=#333333 !important] + \/ u! E0 K2 S
[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。
6 o. A: T+ H6 h4 v[color=#333333 !important]05fanyi05baidu03com
0 D$ u8 S9 ^: L( j7 p; v# ]3 m[color=#333333 !important] 5 ?! ?3 x8 r# l4 |' B! a4 U
[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。
7 E. H3 y$ B. C; ][color=#333333 !important]
0 l% E. B5 m6 C' {suricata检测规则(并未测试,仅共参考)6 U* J" E+ E$ A5 b( H( H0 }
& y8 e4 M; y; }8 Q+ v( ]+ k! ]2 r! @" s* Q- e
- 2 X! A2 [: P1 ?( P5 N% B, V
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
1 Y1 b2 x3 _ P4 [' }1 n/ W$ z+ B! t# Y% ~) z8 A" i: ]
安装7 \9 Y& U5 D9 G7 `
: N# G+ J0 F! ~# p
[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell3 s! S! k d( c" y7 z5 r% A8 U
[color=#333333 !important]下载链接& {6 D1 m5 g$ }
[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag# E; ]( S$ u" H. d* T! N
[color=#333333 !important]提取码:t1rw0 m+ P3 J' B* @8 T
[color=#333333 !important]安装编译
5 T& R& O2 v/ w* k2 t; z0 f* n/ [
- ?" W7 d7 J! j% Y& p+ b7 L) g
./configure make;make install[color=#333333 !important]服务器端
0 k7 b4 B+ W# L4 q+ K3 R- w! m+ i8 Q* e& T6 G, _4 L# s. ]5 W
- ; l0 T$ k: M& a2 @# W
server/dns2tcpd[color=#333333 !important]客户端0 `: m; C4 b( e% @
2 t* Z: e2 p" E0 w- { ?
- 6 B V9 ]% a; _9 Y4 a- H( {0 S
Linux: client/dns2tcpc windows:[color=#333333 !important]云盘直接下载windows版本,或者下载* i0 u# z, |. f ]% t
8 ^% b: _+ ?1 C9 [
6 k3 H5 w7 f z' d8 c Z) S. Q, o dns2tcpc.exe实验测试
0 n' R# t$ r. t7 |/ i( o, n1 g
8 S- h: D) j4 h4 `& d9 G[color=#333333 !important]服务器端, X7 x* N; W5 k }
[color=#333333 !important]1.创建配置文件
( n! r. R" C3 k0 {0 ^3 E |. X, R) a: |4 n! ~5 S i7 d+ t
- ( U( ~5 o f& r! q
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.启动5 @) Z5 [6 d5 X( s5 k7 A
, Y' N. N, c D+ e
. H9 L" U( O4 {1 P; d ./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接. y* `. D1 a9 ~
[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务2 V- `; |9 C L- E
[color=#333333 !important] 
+ K3 \- R! i" q7 l[color=#333333 !important]客户端
% ?$ Y" b- |8 @# \5 I[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 2
, L8 g% a6 k: k+ ]* f W8 m[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源6 v3 {' f2 |0 Z1 _9 k
[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP
2 U1 S$ \9 w9 b) I' J7 W[color=#333333 !important]-l:端口, m6 u/ S G; @' A$ j% W9 x0 C
[color=#333333 !important]-d:是否为调试模式 2 等级可以省略
/ ]5 h; y" k/ o- f2 Z, V [color=#333333 !important] + `6 D: v! E6 K9 q
[color=#333333 !important]客户端使用访问服务器% H/ U+ L# d0 O: ~6 G* g
[color=#333333 !important] ' H8 ~5 F8 w8 D' _. g
流量包分析
: N' k5 b! g& V6 B. X* z$ d$ K1 d6 I d* x4 Z2 W1 i1 K b
[color=#333333 !important]建立链接并未产生通信包
2 w8 p; s# G* }" M* T! z+ U[color=#333333 !important]
: r/ A- Z0 n, w3 \$ r7 e[color=#333333 !important]使用ssh访问时,才会产生数据包8 X2 I5 }$ n6 I9 x: _: Q0 Y; u
[color=#333333 !important]
9 N+ ~7 S+ }; O; k3 |[color=#333333 !important]数据包分析
/ \: E4 T' l0 I3 U3 y6 g[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中! [3 G ]# v* U" `" Q9 z& k
[color=#333333 !important]
' d" o. l3 ]4 [' u7 s[color=#333333 !important]
& K- B* @( {! z( h- e4 E" ][color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。
0 ?8 X' a; P, s# N4 \+ _Suricata规则检测(并未测试,仅共参考)
2 z a% [% s" v) h2 ~( D! C3 g- _/ E8 |7 V: W. M' J
[color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测. I- `% U% V: U* M! v2 d0 q! A
1 l/ f0 _! d3 l c% I1 X* f
$ B/ z- u+ a0 q5 x Y 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]结尾 T1 y+ C( X6 V; } ]( i
[color=#333333 !important]小白水文,求大神放过
) U8 O3 |' z5 x, O5 C[color=#333333 !important]pcap包下载地址:* n d! T& u: I. a# f, T
[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw
- e& B$ |" O- Z( B [color=#333333 !important]提取码:n5ha
$ h( E5 c$ Y% _+ w[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载
0 v! b. J% \& A! H + O& a D! n5 Z8 k% t8 h+ G9 M
精彩推荐
7 i' W" `4 i$ j3 ^% `! v + x" u6 S+ }+ g% a
3 _8 U% m6 U- G6 m

) g |4 X7 y/ Y$ [ v; r, |7 r * z( V; ^) K. H
  
" _' K, A2 a8 E6 c1 o0 a
5 `2 E+ S/ }0 _7 e$ @来源:http://mp.weixin.qq.com/s?src=11×tamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=1# v$ R+ t. O- C/ [1 _1 c. N' k, _
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|