|
DNS隧道
8 t# T& d4 t( a) d1 i+ ~
' V/ m* z2 v1 ?$ {! P% x$ ?[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。
# n4 p4 Z+ @' g: W实验环境% a2 d2 j1 {. u. r) Z# J
9 Q$ L, }: k7 T- L6 _
[color=#333333 !important]CentOS Linux 两台
" y4 k8 t; e* e( c/ Z" K' O! a 创建DNS服务器$ F# k& P& z0 x( p5 h
H0 [& m4 M1 W$ M
1.安装bind6 F) F7 o2 o( r
2 x. ~7 n, u3 t( I9 ]2 j% m
[color=#333333 !important]yum install bind*
% a3 u7 [$ [' s2 w6 H4 b& u$ c 2.配置named文件
, M; [/ ]4 [, B, p: B8 \
3 `4 r, S6 X. y$ y! S' t[color=#333333 !important]修改/etc/named.conf
; v4 e3 S) a4 o# X" S- f [color=#333333 !important]将下图中选中的地方改为any# R9 @, i% t. j& j) H x
[color=#333333 !important] ! F4 K3 C3 N7 c) }6 ?) z. ?: V2 F
3. 设置NS记录,A记录
3 I2 C8 w$ q& k
* S0 |3 v- z8 r* V+ A[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件3 `; n8 Y" ^" p. ^
[color=#333333 !important]  - K/ v( ~$ R* I5 E
[color=#333333 !important]增加正向解析记录
! _9 U- P9 G y" H[color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字
5 S Z( @$ M0 i9 z# _[color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel* X0 q* Q+ `( n
[color=#333333 !important]修改文件如下' s1 f2 K5 U9 `3 j9 P
[color=#333333 !important]添加NS记录,A记录
: S$ m8 H) y) s8 U3 x[color=#333333 !important]
( |, i, Q$ ]! I5 M/ B3 b. i) m: V[color=#333333 !important]添加bind为自启动服务. e6 L) H! ~/ b! l( Z
[color=#333333 !important]systemctl enablenamed.service
& ]) r. w' D4 }5 `+ L3 T6 L5 P[color=#333333 !important]systemctl restartnamed.service9 ?5 @! @- P, d1 T t$ \5 c9 ?
[color=#333333 !important]查看启动状态, C5 q: ^0 d4 A" ~9 Y
[color=#333333 !important]systemctl statusnamed.service
. P1 {9 K1 c" k( c2 S( w [color=#333333 !important]
, m. i0 j% ~4 K& `; U[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F)4 m$ e0 J8 ?6 ?: y' m5 k9 w# f
Iodine
- P0 f& a6 L: E( J2 X
5 h4 h& ]/ K+ a[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。" v) A; O& c$ A. [( X0 c
安装0 l2 ] J w# D5 `. J8 I i
) v* z# }7 R5 Z' ]! s' A/ U
[color=#333333 !important]下载地址:
: S% a+ W) E+ P5 S# V4 u[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip
4 P9 F; x @3 {( h9 X/ O3 } [color=#333333 !important]unzip 解压
& o% M, Z4 U, B% A[color=#333333 !important]cd iodine-master
! @9 L$ ^& C' O( c3 H6 ~[color=#333333 !important]make
$ X S$ B. J8 @4 [. F! s[color=#333333 !important]出现报错9 o! @: @/ ^/ w. E: Z6 L
[color=#333333 !important]
! ~/ |3 ]- P3 z! T+ K[color=#333333 !important]yum -y install zlib-devel
# @$ k' K9 K- g" }8 @[color=#333333 !important]make;make install- l- y6 g0 X& E: w6 O* U: a0 Y9 K
[color=#333333 !important]安装完成
2 O- B' M1 ]! g! Q/ O8 d[color=#333333 !important]进入 bin( e0 n6 T4 }( t4 U
[color=#333333 !important]iodined 服务器
# W& f6 S2 Q# o7 Y- A[color=#333333 !important]iodine 客户端
7 O" }0 G0 ]# G. `% `0 L实验测试
: y l6 p/ o" e( x+ K0 C( ~) N* S8 W$ s6 Q/ ~
[color=#333333 !important]服务器$ S8 E7 w" `6 M1 u$ V
[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com7 g5 L( V( f& i5 ? w- @( o/ u
[color=#333333 !important]-f 前台显示,运行后一直在命令行等待
8 M; c& G+ F0 w; E: u1 o3 u[color=#333333 !important]-c 中继模式|直连模式
o0 t% \; B$ y. H( r[color=#333333 !important]-P 认证密码- J+ f: \ Q1 Z. m c& y& P/ b1 c( f
[color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。
6 V( z4 o5 _1 Z1 k) o4 j) @[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。1 ?, U# E) Z$ N9 ~6 F* U, C
[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡
. K+ P0 |% T8 W; e( o+ x4 M( I[color=#333333 !important] & r0 H* q1 l! n. ^9 R9 S) ` f
[color=#333333 !important]
9 Q2 I0 t' j5 t6 c1 k[color=#333333 !important]客户端
5 @" t# s9 J3 b. n% }+ _[color=#333333 !important]./iodine -f -P 123456 192.168.1.7 ns.dnstuneltest.com
5 n2 A3 [4 v. m/ F: d3 j* b5 h[color=#333333 !important]-f 前台显示6 m( M* P/ A9 e& R E, t$ c, s
[color=#333333 !important]-P 认证密码) G" o0 e0 e# |
[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析
1 _1 ^# p$ Q3 g2 w$ s |; Q [color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。
* g1 F5 a/ `/ w: b) N! }" k[color=#333333 !important] / V! v5 @4 y% `3 s5 G! S
流量包分析
: ^, p0 n% W5 D
" U# @. [. B6 m: e[color=#333333 !important]抓包. }1 R- c' N" ~ ]
[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap M( P/ A0 U" `1 D/ K
建立链接的包分析& c9 C: k2 g8 j8 \" w) Q
- o1 D2 |1 f. E' _2 b[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包
' u5 ?2 a+ k/ M1 i5 T' ]) w, R: ?+ k[color=#333333 !important] 6 E# @, i2 r& r2 V+ U1 z
[color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀
# O5 a$ q! Y3 b! [! V[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据) P" J1 V. n+ X0 o0 z6 S% ^5 i
[color=#333333 !important] : D( P0 O& |; n3 w3 z
[color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)
) ^* B* s) a: F6 L- y[color=#333333 !important] - s4 S! }' ]- [
[color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。
2 S& L5 |$ f# E9 Y! ~+ k通信流量包分析
( k" Y/ D& } }; }/ e7 X' A
% R/ [" Q0 Z. [4 L, B& m5 j[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析 s& \) p& `. Z: k* t
[color=#333333 !important] 3 g; B, f/ A# \+ X5 ^: _5 S
[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。# J+ S( _. S% C
[color=#333333 !important]05fanyi05baidu03com; Y, T# |4 _8 Q8 N2 U
[color=#333333 !important]
$ g0 z7 W- f& e' o[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。
# F6 ~2 S+ l6 i: X' @- D5 B" r( {[color=#333333 !important] ! ^0 D- u; Q: O% ]
suricata检测规则(并未测试,仅共参考)
+ [, g1 {* }) T/ ?/ u. f
1 m, j; N' i, e8 s& F; |9 n, l& ? V/ c2 O/ K- e
- 1 G- B5 i$ |& N3 p
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
0 O% s0 X. P0 ~. o( Y
1 ]( z+ }" G1 [# `安装
9 W; Z: \% l u1 Y1 V# n: G+ i- ^: v+ f" S' S3 V \
[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell
" O' d# V/ |& V[color=#333333 !important]下载链接
1 W) j6 t/ Z) q5 |) D( C( I; @7 x[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag9 P+ [& ]! v0 v* g! w
[color=#333333 !important]提取码:t1rw$ _2 P" ?: e+ T7 S% W* c
[color=#333333 !important]安装编译
9 c3 L8 e5 S0 _+ t7 a& [* j( e0 v" l/ G
\ N3 U7 K4 R' I7 E \ ./configure make;make install[color=#333333 !important]服务器端1 @8 k6 E2 g8 V* N0 U; ^/ c/ y
" T0 w7 {" H, s- 6 b. O6 J" y" ?6 ~6 b, S7 J
server/dns2tcpd[color=#333333 !important]客户端: ~* A* B/ a1 e
9 C1 Z% j9 S5 U# z
- 8 ~( W' ?' @! h
Linux: client/dns2tcpc windows:[color=#333333 !important]云盘直接下载windows版本,或者下载
, G5 w9 ~5 ?2 e6 o h
J5 M! s( j0 c7 a1 p" G S0 s3 l
+ j/ w9 C7 v! f4 C' E5 } dns2tcpc.exe实验测试# z' A! Q4 D8 S2 b+ T* ~
: v( }+ \* Q' A6 [1 k
[color=#333333 !important]服务器端
# d3 L6 ]+ ]4 O9 j9 @& u. W4 `[color=#333333 !important]1.创建配置文件- n. P# V+ r0 f: f
% F# N: s8 O8 i$ m- : P( ]/ p. Z1 s9 h
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.启动! S( i$ o- M* u, N
; `5 n6 v$ ^5 A. ~ s% u
- % b; q- ]7 E% z4 j. A
./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接6 i/ `9 H+ I$ a8 T& {7 g( g3 E
[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务
. `1 N0 r/ z. U- n# `0 ]- U[color=#333333 !important]  - r7 }# D: l* K9 f
[color=#333333 !important]客户端
6 K$ {) ?/ g- q) @, w8 O4 ^: p[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 2: |( P/ n' d! D o, V: L
[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源
- R; I) Z5 F" [/ I' Y( l) Q[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP; D7 k+ Z) @- S
[color=#333333 !important]-l:端口0 h7 S7 v s$ D' C+ z
[color=#333333 !important]-d:是否为调试模式 2 等级可以省略1 d, W' |& c3 j; F" K3 j
[color=#333333 !important] 1 c* Q% ?8 I! v
[color=#333333 !important]客户端使用访问服务器
/ U1 s+ T! S( F/ ~& m! f[color=#333333 !important] & B, R5 |9 a* x! T& W* Z2 ^9 e
流量包分析" t, O& [3 s4 w7 |$ P1 G" ?' ^3 j
) o1 E8 A1 l" p
[color=#333333 !important]建立链接并未产生通信包
; g& q: r4 T0 l- W& R3 |[color=#333333 !important]
' S) X! s3 o, e: |, a$ `* r[color=#333333 !important]使用ssh访问时,才会产生数据包
6 s: b8 I, H% t, y& [[color=#333333 !important]
8 a6 ^( ]% b& q9 I. e[color=#333333 !important]数据包分析. V9 L* G; ?( K6 V# n6 q+ v
[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中4 D7 |0 E! S O6 i
[color=#333333 !important]
2 p/ W. h5 Z) m0 {[color=#333333 !important]
6 }. I8 K0 [. C/ N4 [[color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。
5 P- g! ^' Q0 k- b/ w6 J. P: BSuricata规则检测(并未测试,仅共参考)9 K$ Y s9 q' S8 D
/ Y: m/ p9 w8 S. q% H
[color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测. J6 N/ h3 V, i4 I8 u! Y
; h2 k* Z: n& v! h" U1 g; C" F9 o
- : B0 O8 S7 S! T- t/ o
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]结尾
+ B# W! m' L0 d[color=#333333 !important]小白水文,求大神放过1 E6 c& j- v4 z% P6 ~
[color=#333333 !important]pcap包下载地址:
3 E8 Z( _7 s. Q$ ?# Q5 ?[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw3 N* }* N( N- ^
[color=#333333 !important]提取码:n5ha+ B) y/ L% G. C5 ~- V: b" E1 B
[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载
# q1 d7 G* T4 y5 v8 V' h# |& i
. S. t* c$ T( |- d( R精彩推荐4 v( _! p6 q7 X6 [2 x2 u- h% O
, ^1 Z( X8 M& D% y( C, b8 _5 ~
5 W, M7 p. I2 _5 b4 X - E) }# G1 V, h, J% o# N

2 X, ?0 ]# p& a, ~' d0 s% f. j  / q. r4 R$ S. H7 R) o0 J
% ?7 {. E; ^8 [! q4 ]( U来源:http://mp.weixin.qq.com/s?src=11×tamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=19 R1 q& w8 [: _- h. H
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|