|
DNS隧道, ^, L5 e, T% ~( v$ t4 h
0 g% D' `$ I# Q; E& j. c; D& b[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。
$ L, g1 w$ ~9 j: t7 }6 y实验环境* G( B* T: i9 C5 ~" Y8 E; U
& e% d1 S9 [6 O b$ G* i! ?0 h# v4 H[color=#333333 !important]CentOS Linux 两台8 s# |# T$ A' C) n
创建DNS服务器
# C4 e3 b4 u. R
. l* F0 | B" b) e) I7 O1.安装bind8 N$ e T3 ` |9 O6 O
4 K* c; r0 W& k[color=#333333 !important]yum install bind*
$ G( C9 W Z4 t 2.配置named文件5 R: [- U# X- Y; R
: @/ q, w. J {) Z[color=#333333 !important]修改/etc/named.conf& s4 E4 R! Q7 n- Y8 j1 d v, o0 Q
[color=#333333 !important]将下图中选中的地方改为any& ]( ?/ T: J+ ]+ N+ f4 e
[color=#333333 !important] 1 b2 u3 Q1 B: B) h3 [% o7 ^
3. 设置NS记录,A记录7 P7 @4 ]5 A5 d8 l
o) l0 K$ s$ F( |* j6 K* R[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件
T8 Q: N* j3 x" s% U9 }, d. b2 O& `[color=#333333 !important]  & W9 L2 @5 n# t7 |7 `/ z$ R2 \
[color=#333333 !important]增加正向解析记录. L5 o( C% i% u) x: Y* D
[color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字2 n) u& a" {$ c# b b( S
[color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel# t! c$ l: D' C: v3 a# D$ a
[color=#333333 !important]修改文件如下
/ _* u. n% |/ ]1 g" V/ w2 e[color=#333333 !important]添加NS记录,A记录
v1 j# q- E: q& t- h9 G; A[color=#333333 !important] / a& W+ E! m& R1 d8 d+ w
[color=#333333 !important]添加bind为自启动服务
- U) D% v/ ]. |$ U7 { P( ~. N[color=#333333 !important]systemctl enablenamed.service
% Q% }& S0 B* f# e[color=#333333 !important]systemctl restartnamed.service7 @2 I% a8 k3 U' B4 a6 u5 S. f
[color=#333333 !important]查看启动状态3 `+ b* x& ?" P" g: k0 a* B* X" K% K
[color=#333333 !important]systemctl statusnamed.service
1 e8 _3 K; D1 k: w, a( c$ a [color=#333333 !important] 3 f7 n+ D, Z' Z. ^2 T$ b8 a1 N) R
[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F)( {8 Q% ~' _% b7 w z2 X5 z7 D9 D
Iodine
4 d# H" T3 X7 H+ i6 m8 a; c1 x& d8 a: g2 R' | O- ]
[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。6 _$ c' I7 C2 M
安装# t$ K( d$ R2 A5 |
# `3 Z: O( r* k. U4 g) k" u5 A/ Y! f[color=#333333 !important]下载地址:2 S, \. w. p/ F! [# C
[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip
. e" I6 U8 m* n; G [color=#333333 !important]unzip 解压 k5 B8 ^6 p M; p
[color=#333333 !important]cd iodine-master9 ?0 Y8 q' S/ D: J* J/ J h$ r
[color=#333333 !important]make
5 J [7 H9 w# O( m- x[color=#333333 !important]出现报错0 [+ N8 e9 T: ~9 J: k
[color=#333333 !important]
* U2 `8 P2 b! D8 G[color=#333333 !important]yum -y install zlib-devel
$ v$ `2 o- ~5 y, X& ^[color=#333333 !important]make;make install
m+ @) K" ?& T! P2 z) W[color=#333333 !important]安装完成5 A( \- g1 _3 D+ M2 q+ w: g
[color=#333333 !important]进入 bin$ ^$ t; l& E7 e% ^7 i, {
[color=#333333 !important]iodined 服务器( K& p% V$ y7 c' y; ^, X4 b
[color=#333333 !important]iodine 客户端/ A2 {+ ~ m# t" D6 _" V! F( ]4 Y1 ^
实验测试
( E6 z+ \; O, A2 {
+ N7 G5 {5 p. X5 c( m[color=#333333 !important]服务器
" `, M. c1 ~$ ]5 c: F+ y. Q[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com/ U A3 |- Y7 u- _/ U# k
[color=#333333 !important]-f 前台显示,运行后一直在命令行等待' t' z$ o1 v, L4 L S/ F4 _% ]* B3 U5 E
[color=#333333 !important]-c 中继模式|直连模式
, H8 w( D+ W9 S- l) ^' g( d$ J[color=#333333 !important]-P 认证密码+ o! c! I' A( G$ _2 e8 ]0 J1 M
[color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。& X% S% X# ]0 c/ e" W, H# J1 J
[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。9 p P. U, l9 m3 @6 k
[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡4 ^3 g' G6 p1 H* F2 l& U9 y3 `
[color=#333333 !important] / O( C! Z' V* U5 N8 X: A
[color=#333333 !important] # M7 ^4 ~6 L, Z( V
[color=#333333 !important]客户端$ o* ?# I+ C, ]9 `) M5 t
[color=#333333 !important]./iodine -f -P 123456 192.168.1.7 ns.dnstuneltest.com
. x. X; F* J! ^/ w[color=#333333 !important]-f 前台显示
5 E3 h5 H: @9 y6 ~[color=#333333 !important]-P 认证密码
* N5 r7 ^1 F; `[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析
3 `1 z8 z6 q: K4 ]( O [color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。
6 U4 r$ S* a6 `9 X7 K7 ~[color=#333333 !important] : `; H2 {, U2 M5 ^6 G
流量包分析( I1 \* p; p A/ A
7 P' z# C! h1 l% _7 T
[color=#333333 !important]抓包
; ^6 ^5 e! M+ ]) z2 g[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap" B- G! Q$ B, ]
建立链接的包分析
) j$ L. W: H/ F a! a' S* A- G1 ]
) T& _: Q1 ?" S1 F& n ~[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包+ Q8 O5 C& |7 G8 n
[color=#333333 !important]
; X/ j& Q- U( G; {) @( c% @& |: _[color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀2 e) p% R4 V3 @7 F3 L5 x. Q4 X( S8 C
[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据$ t: `) ?1 {$ l
[color=#333333 !important]
9 O; }& B' P: F% u, J7 h9 |[color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)( m) |6 V, a" H; v9 i3 a
[color=#333333 !important] ) |" }) D) f% \* n( v
[color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。+ I, t+ v d9 g5 t
通信流量包分析
$ |' v2 w" s1 F- |! D
: | p" q, L. O5 ~, _[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析
. @: o" n6 T; m5 B! g5 o* R) C! F[color=#333333 !important]
( O! b- B& ` i) i3 N5 h9 s& |. H[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。
" J0 Z% R2 q# T3 G9 q[color=#333333 !important]05fanyi05baidu03com
. T) ^: E4 \+ c* \4 z1 G4 M[color=#333333 !important]
! J; ]3 n( ^. H+ k[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。& T+ ~ N0 d' n# Q1 b7 M0 y- W4 Z6 ^
[color=#333333 !important] / P4 K" K0 B1 Z5 m& s' I
suricata检测规则(并未测试,仅共参考)
- k( N! T4 X$ D' s5 t, ] G+ G" T6 ] M5 S& A
( W2 y6 z6 g6 v Y& ?
/ u7 K0 e7 G4 K7 z 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* L2 @5 r) x7 s
$ ]& }6 O" M: }4 z
安装
/ w, n. w. t2 ]# F) X* ]1 ^' `( ?
[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell/ K9 Q/ J2 s7 P5 S/ Z$ i
[color=#333333 !important]下载链接
4 a9 ^' f& ?1 R7 `3 \0 p6 K[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag: Z8 b3 V$ Q0 W9 M! }
[color=#333333 !important]提取码:t1rw
" K% J! L' F; s1 T" t: h$ i* |[color=#333333 !important]安装编译
1 R4 L' ` R; ]1 v, n" N. Q* p" X* U" e6 V; O
; M# x5 [- L& v0 s ./configure make;make install[color=#333333 !important]服务器端
" X8 X3 C4 Y, M: r$ i2 A2 G9 x% b. `) T/ v/ W7 H" @! \
9 C, X2 _1 s3 D& K" Z d3 z server/dns2tcpd[color=#333333 !important]客户端
9 e% B( K# {, V# c4 ~, h
+ p! H$ h$ r* F
* E+ b$ J% R9 C/ N; ` Linux: client/dns2tcpc windows:[color=#333333 !important]云盘直接下载windows版本,或者下载
* t- @4 i# D7 h# w" ?# S+ Q
7 X+ p) }( U) T- ; {) n1 o$ @: k p( l( J
dns2tcpc.exe实验测试) u" V( w- R2 g& t- l* {$ Y: t8 K
* R2 J, }* J( d5 J+ M8 s[color=#333333 !important]服务器端3 X5 Y- e0 L9 {" A5 K
[color=#333333 !important]1.创建配置文件8 A9 w) Y3 U1 Q
/ J2 y, [9 o* ]6 i$ _1 Z: ]4 m- ( O g \+ @. {' _7 g
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.启动
8 f. `* F6 z4 Z8 J% Y3 h) P
! Q" ^0 V7 _) M
6 S0 P; K( }. { d2 V" ? ./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接
6 t1 @, R$ R) r! B( I, |$ f$ J[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务
: a2 L: i# j8 w3 n: D[color=#333333 !important] 
Y; B# K: w% H( l- R[color=#333333 !important]客户端7 j1 m) E$ ]5 p" s2 Y2 q
[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 2" j" B7 E' p7 C/ x1 Y5 H! {6 g- Z- ]8 t
[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源
1 R6 H1 E* w# x8 ]+ J[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP
, r4 B8 [2 M" l+ [# r" X$ Y[color=#333333 !important]-l:端口
$ y* r7 z3 F& N W) U6 m[color=#333333 !important]-d:是否为调试模式 2 等级可以省略
% F1 V6 n" Y# P$ v% s [color=#333333 !important]
1 ]& Y5 K P }5 W- ~! V z) L[color=#333333 !important]客户端使用访问服务器
' _7 R; q3 s) t# o2 U* g. r6 Q+ Z[color=#333333 !important] 3 P* |* x, j6 d6 Q6 y$ Y+ K' G
流量包分析
# v1 V1 W: y6 X0 b$ N$ O+ k1 O! s5 P4 `
[color=#333333 !important]建立链接并未产生通信包
: Y$ C7 G1 _, ^! c" S- s[color=#333333 !important]
; v1 c% s* u) S[color=#333333 !important]使用ssh访问时,才会产生数据包 L p# t+ h" v" H9 P* x3 @
[color=#333333 !important]
' h( F# `( S, _) O1 f) c4 I[color=#333333 !important]数据包分析
* F* z$ j. v4 r6 ?/ ?- t! H! h+ v[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中
" K% b# ~ [% ^+ D[color=#333333 !important] : v& T! m+ ~$ Z3 f! D6 @: g* g
[color=#333333 !important] 2 Q Q. G: G9 W( F/ `9 W7 Q6 {* |+ {
[color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。/ F! t" f$ I" I0 ~. h
Suricata规则检测(并未测试,仅共参考), W' Z( h' v2 H. V# S
- U' a7 X/ y# y( F x[color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测- z$ P7 w; z8 k/ O$ D
# e+ t. N: j1 m$ r5 s
0 ~1 W$ k" N- k& \/ l6 G4 }9 t# e" ` 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]结尾
5 P& u/ a, w% l1 \: m2 r[color=#333333 !important]小白水文,求大神放过2 M( Z! Z$ c' x1 V' f
[color=#333333 !important]pcap包下载地址:# K' [$ [, k2 z
[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw& ~ R" C# p( B5 J4 _; S' f
[color=#333333 !important]提取码:n5ha; x& D% V; r" T5 [% D, p0 y
[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载# G' [0 G8 n, s3 d0 `1 B9 Y

% n$ v3 [, T# a1 i+ G精彩推荐) f) P$ N0 X; ^% t
9 {) ?: W; s+ A
) }# L- ]* \' w( m6 L, z

& r* {% z/ |5 [" m
' o. A* R, Z/ W' a  * E4 ^# T/ D8 p- h' [
6 q k9 [$ F- s" E" Y
来源:http://mp.weixin.qq.com/s?src=11×tamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=1& P1 c" D- w J$ m% U6 V
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|