|
|
DNS隧道
, Q4 Z* m! U7 w: _) x
: @/ R. X6 I9 ]7 W' h[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。
" p' B; \ ?* R5 U. P' d, _/ o实验环境
! w9 M( \! m, Q: ~5 V* @, N: J# B
[color=#333333 !important]CentOS Linux 两台3 ~: L! h% n9 b7 h) f# f
创建DNS服务器7 E$ J* x! G/ G& l3 j- i E
+ e! N7 _9 m( q+ G! z' W! f
1.安装bind
5 V1 W; @9 @* s3 \9 c D$ Z8 n8 r1 D, O, b; i) u- D
[color=#333333 !important]yum install bind*, n3 z: ? o( Z$ u `& q: Z, [
2.配置named文件
' J, b- u: N$ ?* G' s2 q. n3 j
0 Z, w6 H0 \6 H1 t" }[color=#333333 !important]修改/etc/named.conf
/ [6 S5 a, K* S8 H* s [color=#333333 !important]将下图中选中的地方改为any
) R, I. J7 \. N9 R8 G[color=#333333 !important]
8 w8 S' z. B& C* o; s4 y$ {3. 设置NS记录,A记录# q7 N7 y" E" W0 m
( M2 k0 F, E7 K; V) Q[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件
4 m: }& j& Y' ?( q. {[color=#333333 !important] 
: x8 |1 r3 m" R/ ^1 Z: r1 I[color=#333333 !important]增加正向解析记录
* y$ x: E5 Q) }- K[color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字
* R% |) M4 G! ~+ |[color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel
: l. P/ |$ S* p' f [color=#333333 !important]修改文件如下
( k' U: O; x! x9 [, A" D[color=#333333 !important]添加NS记录,A记录' p8 L: S0 M7 T
[color=#333333 !important]
/ n# r. Y+ j. x' s- r) B! K[color=#333333 !important]添加bind为自启动服务+ K9 c$ P$ N* E7 B, G5 Z9 p
[color=#333333 !important]systemctl enablenamed.service
0 E9 N3 G1 Z! a5 E! ^, i[color=#333333 !important]systemctl restartnamed.service
- k6 n1 B" `# s7 d) _ [color=#333333 !important]查看启动状态2 A# i! O( U" L
[color=#333333 !important]systemctl statusnamed.service3 r4 I0 X5 x6 ^
[color=#333333 !important]
5 S0 f) ^9 ^. e7 V[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F)+ L d l1 `6 U A2 `9 C
Iodine
+ I! ~. d4 x2 V+ z( A) _( Z# D5 P' S. e
, ^$ X @$ w( n, c$ w[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。
- s9 i7 N/ k4 u ^安装/ D7 [1 v/ n g/ g5 b
6 q* o- f- w% h[color=#333333 !important]下载地址:/ f/ K% ^0 ^5 ~! ?. @, k) j) M: [" U! _1 t
[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip8 l7 k! h+ f7 o7 _) T; P* M/ x
[color=#333333 !important]unzip 解压
, O t' u: o4 q ]+ n[color=#333333 !important]cd iodine-master
/ O; Z- B* _, U( q5 G9 j/ }) M/ W[color=#333333 !important]make3 C: E* P; A4 u+ z5 ]. K
[color=#333333 !important]出现报错
: r- @$ w& L6 \/ a+ F[color=#333333 !important]
7 C9 p8 t& R3 ]6 j( h/ u* o[color=#333333 !important]yum -y install zlib-devel
$ r& _7 `$ X4 v5 E8 j[color=#333333 !important]make;make install. v, N) i% Y& [7 Y$ {
[color=#333333 !important]安装完成% _; h p! \; F4 u5 i
[color=#333333 !important]进入 bin
! P) x0 m, ~4 g. b[color=#333333 !important]iodined 服务器
' D8 H* V. j( S% g1 i[color=#333333 !important]iodine 客户端$ u+ U |5 `+ L2 [6 n2 ~: a# h
实验测试) g% `, q) q. c, {
2 p* t: w" a: X# W[color=#333333 !important]服务器$ r2 ^, E8 o* O# [
[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com0 m- K8 V/ ~4 S4 ^4 E7 e$ w
[color=#333333 !important]-f 前台显示,运行后一直在命令行等待0 G5 {3 t* S' y; A( B; T6 ~ A+ z
[color=#333333 !important]-c 中继模式|直连模式' E8 f* @/ C1 ]+ K) \) i
[color=#333333 !important]-P 认证密码2 L6 s( d4 x: e
[color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。6 p, [( B0 Z" i, e& g) q5 k
[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。 Z( c* ]* K8 @9 b$ T* i4 G
[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡4 ^3 r+ }0 C W" f2 h
[color=#333333 !important] 3 I+ C9 o+ G0 H9 Z. @9 A
[color=#333333 !important] , ?0 E6 s; `. }+ W4 P
[color=#333333 !important]客户端% m" y6 C2 h# y; j
[color=#333333 !important]./iodine -f -P 123456 192.168.1.7 ns.dnstuneltest.com
' @/ @6 e- z+ U$ a' f- p9 m[color=#333333 !important]-f 前台显示* A3 E4 p5 v3 M" x2 b6 C$ d
[color=#333333 !important]-P 认证密码* i$ e0 |6 j/ P p$ ^
[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析
/ J6 t' J% f% l4 Z1 s- G [color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。4 h; H# R9 }# i
[color=#333333 !important]
: y! C \8 }+ {" {% ]流量包分析
- `6 S' ]/ f3 y6 K( w# P- F* _" e F; q& l4 {# [( i; d7 e; }
[color=#333333 !important]抓包
: Q3 e, P2 c) V$ P5 }+ ?5 H! l[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap
( T+ W, Q/ z3 D6 ~- t7 z! P 建立链接的包分析! |; k. Q* k& d5 B$ w) T
4 z7 g& [/ M0 F- C9 R j X[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包8 D# T$ f2 R8 t# k7 y* a
[color=#333333 !important]
- o9 t% a5 S- B9 V[color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀/ L$ x. q! @+ E/ D1 y' N: n+ ]
[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据
$ R: v0 W3 ]& L8 U[color=#333333 !important]
' @% g- k! v2 H7 {, F; S+ t[color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)
8 k' j8 t6 ^0 e/ f2 m[color=#333333 !important] " Q) o i) Y( t W
[color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。& P$ n6 C+ Q* t6 D3 d8 b+ @# c
通信流量包分析
- x7 c3 l0 B9 q' G4 k1 ~; @3 T, H+ M8 g
[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析, S. I; l' L5 J5 ]
[color=#333333 !important]
/ i: C/ W# A+ ]$ y0 m$ F2 n[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。
1 Y+ t# v+ \& l- U# u[color=#333333 !important]05fanyi05baidu03com( S8 u8 E" B7 t9 Y0 Q9 F( v6 Q
[color=#333333 !important]
$ k; _& U& J' t2 q- K7 b[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。7 k- n7 p) e* O1 n7 B3 V" Y8 J" m
[color=#333333 !important] 7 v6 c& D. r/ i2 x, q0 R2 ?, g5 d$ T3 C
suricata检测规则(并未测试,仅共参考)4 Y& Z6 N2 I; S, r. T: N" K
) O& A7 M' Q% j9 y+ W: T
$ W+ s) E: R7 Y/ t
/ e3 {+ q7 L/ Y, 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;)Dns2tcp4 i7 n m$ x& `' y" @9 H4 `
3 O8 g, R0 J9 b1 C
安装
: m, J! H+ d: x1 r9 z2 p) v$ e1 X- C. @) D) k5 p: }$ v2 s
[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell& P& D, N0 z2 K( c4 Y
[color=#333333 !important]下载链接
$ ~9 g1 M, A5 \5 t# O4 _6 R[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag, y# @. \9 _7 x' U
[color=#333333 !important]提取码:t1rw
) r( _/ \& I8 y7 a* X. Y1 r[color=#333333 !important]安装编译, @5 _3 Q* r8 G9 Z9 c
" a) A! k# b6 Q7 u5 p
- ( E3 L) ~ `- F, k
./configure make;make install[color=#333333 !important]服务器端
" e: U5 j* E3 K' i, u! c, m1 n& n( H: j2 [) Z3 g) ?, b7 q
6 W9 O) `3 `3 `) X; ] server/dns2tcpd[color=#333333 !important]客户端
7 `4 X: n2 s$ V6 F2 e# k3 d" Z9 ^
- 3 k5 Z/ n. n( y3 T( A+ I7 _" ~
Linux: client/dns2tcpc windows:[color=#333333 !important]云盘直接下载windows版本,或者下载$ c1 G4 o. D9 M. h( r3 G' B
}! I, y# t$ n3 I" \0 S
- T. l C% |1 K m, T) r dns2tcpc.exe实验测试
U# f- l7 f( h/ u9 o
( |$ e; P$ w. g1 N1 M8 p6 r2 X `- P[color=#333333 !important]服务器端
+ ?0 { _; B% Z; j. K0 I[color=#333333 !important]1.创建配置文件
% ?; Y9 g" Z2 {" Y1 b8 {6 U. Q
* l8 `3 T1 j' J6 H9 d- % D8 A- u/ Z! \+ b9 S' `
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.启动! C# }( t3 m+ l' t
! x$ u3 u8 j7 b9 u9 L
" L, W* p. t' X( q0 ?5 v7 b ./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接
/ V6 ]' y0 p5 L! O[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务
2 |% b! M! a! L0 }+ E: b[color=#333333 !important] 
" K7 q! g9 L$ I" o, b[color=#333333 !important]客户端
, W+ }1 e1 X! `: t[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 2# G5 |1 \& i" J
[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源
- |1 z8 i R* s( O/ g[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP
# K& o" s6 O' S, {2 I[color=#333333 !important]-l:端口( h- \1 m' n4 K; o/ M: N9 O& A6 s% g/ L
[color=#333333 !important]-d:是否为调试模式 2 等级可以省略0 d I0 R& W/ q1 s
[color=#333333 !important]
* H3 L8 c Q0 ^3 s" A- I& f[color=#333333 !important]客户端使用访问服务器
* k% l) E% }4 Y0 }7 q T[color=#333333 !important]
9 m- A$ g. X7 M& o- U5 T流量包分析
, a6 }2 x2 I7 N* O+ n2 ? k& c, x* {3 F; ] I; b$ q- X! s4 V$ U3 j
[color=#333333 !important]建立链接并未产生通信包6 ^# m7 d) J5 X C+ s
[color=#333333 !important] & u J- m( ^0 r% x+ ~
[color=#333333 !important]使用ssh访问时,才会产生数据包
+ v" `1 g" i( }7 m) i: J8 }4 A& [1 U[color=#333333 !important]
3 w4 }. D- n- j( o. @[color=#333333 !important]数据包分析" u2 Q+ B Y& V% t' C
[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中5 e1 N+ p S! Z: z" d
[color=#333333 !important] ( J. r" X& L* K6 [7 E
[color=#333333 !important] - C, q. y/ g Y" i! K* l
[color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。7 L; J. D9 g, \0 Y+ u! p5 P2 t
Suricata规则检测(并未测试,仅共参考)
6 e) j+ L6 V* n# b" F4 q& `* U: f/ Z: ^9 a2 j l
[color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测
1 K2 l1 _* Z5 X# E i" b4 I
3 p9 y0 R9 v# m6 C
+ S2 }& [ a, D4 V% h9 @6 I 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]结尾% m9 S; [; {6 b2 D4 P' T- S
[color=#333333 !important]小白水文,求大神放过
1 E* w8 w* X/ ]2 @% } n0 Q5 \. Y[color=#333333 !important]pcap包下载地址:: E; {3 a7 y% }$ @( ?/ w
[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw9 k* y/ \; u8 j- B( S
[color=#333333 !important]提取码:n5ha5 m9 ]7 M, T2 z8 H; Y# m
[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载3 d' H3 n q# Y7 o( M

3 t: s* ]. t8 {% I精彩推荐4 V2 w) ?& v* y9 u) ^6 g

& G, C0 A# d6 V# K- I- N2 ] ^" n& [: J
! ]9 t4 @/ F+ @$ H) Q. h5 G

6 k+ } U4 }/ Z# @0 q  
5 d6 |6 h/ l, V+ G+ F0 }+ C% A; j+ p( [4 \# G4 c( u" Q) E0 O T" ~
来源:http://mp.weixin.qq.com/s?src=11×tamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=1/ c/ Y- q7 r, h& z2 k/ o
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|