|
|
DNS隧道7 }& Q9 x9 B- D3 o# W+ L
0 Q; T6 k! K4 b5 X: P1 }3 g4 A* S2 g# _: D[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。) z3 _+ h/ j6 R# P3 @2 @: ^. d0 W
实验环境+ H) e* v0 ^0 l, x# a, R
' M4 @7 {' B. s" k, a
[color=#333333 !important]CentOS Linux 两台+ T$ d2 ~1 Z4 _
创建DNS服务器
& A. R' O1 w8 L7 _ W" ^9 B. a8 e" r
) ^, [. R; s4 g8 G1.安装bind2 c' b: F# c0 T8 h- C! D3 Q
K* t' `2 n2 r9 ?
[color=#333333 !important]yum install bind*
( T! a/ p# s) ^" {; y; F' S 2.配置named文件8 F# L! c" G, ]- b$ J" d
M- Q, ]% U O4 t[color=#333333 !important]修改/etc/named.conf1 S: I6 \ v6 R, X% B; B$ E
[color=#333333 !important]将下图中选中的地方改为any( A4 {. p+ C& @; r6 m# a
[color=#333333 !important]
& T" t! E2 A2 m, _8 g3. 设置NS记录,A记录1 X& G; o- d5 z* |8 h% ]% j' t
6 c% b- I, `& N# L' p# D
[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件
) V, n4 E% M* B8 v8 @" m) V[color=#333333 !important] 
0 V0 I) m! K5 a6 @$ k[color=#333333 !important]增加正向解析记录1 ^. S7 `) I0 X5 b( O! P
[color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字
9 T/ ]/ y9 v, k9 a8 o. A/ b[color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel& x3 {3 J7 ~' ?- o- K
[color=#333333 !important]修改文件如下
, B6 `" j/ m4 {; T& D$ G0 C" k[color=#333333 !important]添加NS记录,A记录 z9 R8 |7 D+ `- D/ t
[color=#333333 !important] , _) Z% ~ [& O3 {, w7 @8 b
[color=#333333 !important]添加bind为自启动服务2 ]0 R% m/ D$ a
[color=#333333 !important]systemctl enablenamed.service7 z1 R! S) Q5 s
[color=#333333 !important]systemctl restartnamed.service# w3 h# u$ C2 o7 E9 q$ p
[color=#333333 !important]查看启动状态 {/ h1 g1 Z7 ]9 X+ A
[color=#333333 !important]systemctl statusnamed.service0 i0 e5 R4 I% E+ c- Y' c, D5 W
[color=#333333 !important]
# m v. m- _6 s2 n[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F)
) D' U! I* _/ }5 wIodine( y, s" [2 s* h" _( @) Y5 p5 L
& R$ y& @ D/ S: A& c9 a0 M( G% L[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。: {' m; B. |1 w7 v
安装
- T- b" H8 Y) y! N/ ?2 f
# n3 J1 Z2 G2 W$ D7 j' I* g[color=#333333 !important]下载地址:
7 D' T$ B/ x7 d[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip
- Y( |0 ^. ?) \$ u. a: w# j [color=#333333 !important]unzip 解压
9 u6 d) i( ~. \' ^* P( o/ ]# w[color=#333333 !important]cd iodine-master# f. {' b/ i3 G/ ]' G' Y
[color=#333333 !important]make
) j. }7 N ] ?: \[color=#333333 !important]出现报错
' T2 }$ ^( N3 s& D$ Z[color=#333333 !important] 6 O3 {% x1 f1 B7 m, X3 z
[color=#333333 !important]yum -y install zlib-devel0 q/ s0 l) F3 H, ]
[color=#333333 !important]make;make install
) U% ~9 y, D! _$ J[color=#333333 !important]安装完成
& ?- ^: I9 W1 ^, k9 `[color=#333333 !important]进入 bin
% O9 x. L6 p+ U& _; [( |[color=#333333 !important]iodined 服务器
: [7 G' O* @& y6 G4 ?$ p1 C- F[color=#333333 !important]iodine 客户端
& ?0 c$ }& I$ z' d) o$ E: q实验测试
& ^2 G+ Y* n5 ?' O" b2 b+ J- q* |3 _) k, u/ j
[color=#333333 !important]服务器
9 Z, @- L! S- L9 h8 Y( b$ u[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com
$ l7 b4 @; x& d. M% B7 `[color=#333333 !important]-f 前台显示,运行后一直在命令行等待
' ]4 t9 }" K) o6 J$ A$ e. e4 Y[color=#333333 !important]-c 中继模式|直连模式$ F6 S0 M& P4 T8 }$ [6 t
[color=#333333 !important]-P 认证密码4 N4 p4 `4 C3 ]9 m- c) q
[color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。
: G6 k% N2 M. K$ I) _- ?7 }1 a[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。( H8 D2 I- f( y( }1 U
[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡
0 J8 o' X: F9 j+ `% E R[color=#333333 !important]
W9 w) k7 e( y! U5 ]3 \; K[color=#333333 !important]
$ {7 ?$ g4 S7 e8 K[color=#333333 !important]客户端% Q1 L+ e9 i" }% J& A8 B" U! _" v
[color=#333333 !important]./iodine -f -P 123456 192.168.1.7 ns.dnstuneltest.com- B7 r2 ]# q) ?, ~! i2 L
[color=#333333 !important]-f 前台显示
& h2 q; J; L: ^8 g- n) W[color=#333333 !important]-P 认证密码- f' Z( s% l, C0 O+ d# }
[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析
3 p" B- v1 Z: j5 Y0 ]/ H& t [color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。
; s4 _( A$ \3 W1 q$ D6 D# K4 X[color=#333333 !important] $ N N. i8 p: t5 G, @; w+ R
流量包分析2 I* J. s7 ~* A( F
% ^. O R3 h; e
[color=#333333 !important]抓包
& e( Y" p1 ^9 _2 G. b: J3 Z[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap8 x# e" g2 M' h @ w* \
建立链接的包分析4 ?! P7 J2 E: `! L3 _. G; K5 n
! F. J! W- w. F0 _9 \ ^
[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包, v- x W+ j$ `
[color=#333333 !important]
/ g+ w0 p6 o* ^! ?[color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀( a! w/ g$ N& I# `" m; m! E9 ^
[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据
, M, _! A: S& O: F, D% x[color=#333333 !important] $ A# O3 |; N) {* r
[color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)
+ f$ {0 m# w! x) i[color=#333333 !important] # [7 i& H' ]/ y7 x0 z# b
[color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。" k% k" u0 ] f1 p* L% c
通信流量包分析; m3 o/ x9 M' m% V( u
; D" _. A) L& E9 Q
[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析. H% p, B7 x3 B: [
[color=#333333 !important] " S/ e7 W) Z# L: [% v
[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。
( d8 ^9 Q/ z6 X. g6 M$ |, R[color=#333333 !important]05fanyi05baidu03com
6 n3 ]$ _9 y I' s# p$ K[color=#333333 !important] 2 \- c( D0 I7 S3 y
[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。
( A# e4 K, ]: |" f- Z8 b- T[color=#333333 !important]
! K4 _9 e) Q1 w+ j8 _( Ksuricata检测规则(并未测试,仅共参考)
5 y- R- i; ?. w8 Z2 C5 {. b( `' N- J# C" N! Y2 J9 M7 T
0 Q: e9 j1 O# v5 @
- Q' A$ h% p: g% b) a( x: n 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! B" O# G$ k7 C5 }4 E* f
# O. G+ o2 h( ~0 ~# k) I
安装
6 o. s7 Q: R7 q5 s1 [
4 _' m$ b( y" _' j) \- \* F[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell5 u% Y1 G, x8 h
[color=#333333 !important]下载链接( G* \9 X+ ]8 Z6 h* `
[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag
" S# Q3 K9 d( W1 s3 h' B/ H [color=#333333 !important]提取码:t1rw3 M1 U2 G2 @+ m) m
[color=#333333 !important]安装编译
5 t$ `% `+ r# ?
0 d; h2 {2 J" y2 K1 F, q4 J& v- ~3 V- W8 _, M0 Z
./configure make;make install[color=#333333 !important]服务器端! r' q. [0 w( }8 I2 t* U& }# o$ Y
* x9 D g5 O; }0 q
1 W1 t; O- U# ?' C3 E) f server/dns2tcpd[color=#333333 !important]客户端
9 g& A$ C- J! X9 m
: {3 Q/ f3 m% @5 P- A$ M- 4 w/ h' |- k4 p' w7 h0 k/ ~
Linux: client/dns2tcpc windows:[color=#333333 !important]云盘直接下载windows版本,或者下载6 }1 c8 X# \( E- R5 {& P
+ [2 s. F: \6 v
9 X4 u+ ~, [7 [; G R dns2tcpc.exe实验测试9 S4 c# u. Y: S& T4 S0 y* P1 P. A7 A
9 q* v" W4 L1 i) E[color=#333333 !important]服务器端! \. D" m) u1 N- L
[color=#333333 !important]1.创建配置文件
6 c+ a! J! f6 Q+ L& O& t% V0 n- V, C x2 K! ^3 i
- $ G, v& q# V' L6 |" t% a- R. l6 ]
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 g# x% y) ]! {1 Q- w ^6 A
0 T9 l8 A% \' ]4 C2 Z5 I- % a+ f/ i, R: G2 ]3 ^, {0 c
./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接8 I6 P- ?. S% g- J
[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务5 q4 e. S( q4 ~" w0 L" J/ E% e& _8 u( ]
[color=#333333 !important]  4 M& W( o7 v2 X4 s$ H. i: Z7 w
[color=#333333 !important]客户端4 Z( o9 p1 o1 `3 i) \/ `' R
[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 2
$ V1 r/ { H( M/ b[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源
6 \+ C+ t- ~6 Z1 R2 ^. w9 ~: }8 F[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP
8 H. K. a- s9 p[color=#333333 !important]-l:端口5 o& U% o* R- H- M$ w
[color=#333333 !important]-d:是否为调试模式 2 等级可以省略
0 R0 B. \/ y# t/ o! `1 b [color=#333333 !important]
3 C% W! l1 j3 n5 H# g- {* I[color=#333333 !important]客户端使用访问服务器
, X, X0 U5 n w- F/ N. s% @[color=#333333 !important]
` f/ w+ g3 q. Q, Q3 Z+ C( ?流量包分析3 {5 ]- N/ E5 A; m# d& B, J& E
& P2 k1 @0 c, n5 Z) H, ^[color=#333333 !important]建立链接并未产生通信包, P8 f9 X8 k( S* N- ]1 e6 {
[color=#333333 !important] , n+ T4 |! y: u. R5 U
[color=#333333 !important]使用ssh访问时,才会产生数据包, [/ Q5 I* ^3 v( ` a/ j
[color=#333333 !important] 0 ]" L x! U' @
[color=#333333 !important]数据包分析% X2 o. Q1 S& o' M9 N0 ^) W# I: }
[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中! Y: P: {6 ]( i( z6 z; A
[color=#333333 !important]
( \ o3 S( _% V. ?[color=#333333 !important]
$ ~6 }9 ?7 e. @4 p+ X0 o[color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。
; i2 o' l3 R; v" c0 A! |Suricata规则检测(并未测试,仅共参考)
, T1 k6 u4 U1 p& \
" R- h/ C" [2 Q% l" _# o[color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测* A5 T9 P: }* y: w
/ N# {- m* h& k; N- ! G) @2 c, N( l- 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]结尾2 L3 H: }1 q; `5 T; u& P B* e
[color=#333333 !important]小白水文,求大神放过3 f! e) L& x- ^3 `
[color=#333333 !important]pcap包下载地址:
# r8 A9 p |7 c! o* A[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw8 y0 o0 r3 e+ |% _- N% c
[color=#333333 !important]提取码:n5ha% j1 n" L9 X: N- p' O
[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载
# X: u3 Y: J! a" l% g w 9 w7 l8 S5 Z9 S0 K, M
精彩推荐; X0 L; [3 H4 @4 F& ~
V& U4 Q8 m+ p
: ~3 j8 j- o( \7 ?! U % L/ Z) f9 H) i2 s! |4 d- e$ S0 D

3 r- j) z- B6 d  : [% q- S$ N, Z
$ L( J; y0 P) s6 w$ q* m9 ]来源:http://mp.weixin.qq.com/s?src=11×tamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=1
, v0 v' E( H2 v! P1 v, ]免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|