|
DNS隧道
; E0 J) ^+ k. k6 f# f, u
4 `1 j% t5 b5 }) \* p3 `. J9 G1 l: ?[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。4 o& `2 C W) G1 l& W
实验环境
1 p9 ~& z0 C N! _6 W; f( o: K' _! U) Z6 {( C1 |
[color=#333333 !important]CentOS Linux 两台6 X5 P- a% v! I8 H! o g* q Q
创建DNS服务器% e4 _) ]3 M" J" Q
3 ]2 V' n# |2 R! t4 [9 e. r b/ _- |
1.安装bind
% C* a% {. a# D0 `) t3 [; k' H5 _7 L$ G* f
[color=#333333 !important]yum install bind*
& H6 U3 K: |; O4 ~3 D: i4 O9 o( V 2.配置named文件
- P# d+ H! O% u% I8 k4 W! B
9 Y$ ^' ~) m; j9 U[color=#333333 !important]修改/etc/named.conf# q% A9 t$ g9 l
[color=#333333 !important]将下图中选中的地方改为any* s3 L8 B5 E/ V# V0 l5 r
[color=#333333 !important]
% p' Q! ]+ O4 P3. 设置NS记录,A记录/ I' U& |0 f- z2 U6 u( J
; n/ f( _0 R& p( `' T1 m8 g; D[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件 k T0 ^9 D$ x( K3 U
[color=#333333 !important]  * I6 L! a$ t: l' ~$ J$ ~
[color=#333333 !important]增加正向解析记录
* v3 p# p1 K* [' R5 m[color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字6 \8 ]' |8 ^# t4 y/ V) u7 W
[color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel
. ]! b2 [/ i. O% V' e x2 s; ` [color=#333333 !important]修改文件如下2 t* t; O* D. T) E8 a
[color=#333333 !important]添加NS记录,A记录5 H9 i, v9 R! b0 P7 b
[color=#333333 !important] ; K% {, B( `5 V( r$ p% q- V* D
[color=#333333 !important]添加bind为自启动服务
" h5 \% {: [$ d! Z0 t# h# Z9 |[color=#333333 !important]systemctl enablenamed.service b/ Q, r* ?9 q. m$ U
[color=#333333 !important]systemctl restartnamed.service8 s/ k' _% q& Z, ^5 K8 T
[color=#333333 !important]查看启动状态" g! p: n7 p$ j+ x1 y( g
[color=#333333 !important]systemctl statusnamed.service% x7 @" a3 E0 ]0 a% R3 H, T/ K
[color=#333333 !important]
8 R4 L3 w3 W: q, K4 z4 E& o, W% B6 q[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F)
1 p: A) f( p, W* W6 @' OIodine4 C9 D7 k C# Z' | L+ d
! h- t, M6 V. J5 Y* R/ Q( ^( v+ o3 I
[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。' |( Z: k3 w& J" r4 }7 H! g) |5 M
安装
# J: \9 K* i9 t/ I* Z2 Q
; r% |5 \5 B3 m- s" t[color=#333333 !important]下载地址:/ Z+ D, e& ?; M# q- x3 O
[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip5 z# k+ F5 k0 J& b* K
[color=#333333 !important]unzip 解压
5 n* V/ x0 ^0 L: y8 O% A+ u[color=#333333 !important]cd iodine-master
- a2 O' |2 M6 Q" z[color=#333333 !important]make
: Z1 x ]3 K5 D" ~+ _0 k b. t[color=#333333 !important]出现报错6 C) w% z B3 a2 Y. C" h
[color=#333333 !important]
: t" N; y. x& |/ ]7 g[color=#333333 !important]yum -y install zlib-devel! y9 O; y1 s, B9 K
[color=#333333 !important]make;make install
: y1 o$ V: d- ^3 m# }. ^[color=#333333 !important]安装完成
1 [* S1 i! t" C* r) |+ b4 a& w: T[color=#333333 !important]进入 bin
( z8 ^0 V" f0 F- ~* y- }[color=#333333 !important]iodined 服务器) h0 i. I2 K1 B; q2 F9 C
[color=#333333 !important]iodine 客户端
1 `& A& w! j5 v实验测试- J( m& S: n$ A
4 G* R0 ~! a/ U0 j
[color=#333333 !important]服务器4 `8 c8 Q% y8 S1 D+ z6 `3 P0 O
[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com' g+ ?/ Z! X; ]) S: D* [
[color=#333333 !important]-f 前台显示,运行后一直在命令行等待8 i( j' O+ R6 L7 W! d5 E- _+ n
[color=#333333 !important]-c 中继模式|直连模式% ]3 ]; Y1 c7 W9 M. w+ _
[color=#333333 !important]-P 认证密码
8 b) M$ H, |. { [color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。# M: O0 Z% N) a- T# |
[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。
# u8 w$ t( A: D8 I[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡
; j) i$ [- L {8 P$ C' X2 G) e[color=#333333 !important] $ k4 S- D( c$ l3 c( t
[color=#333333 !important] 8 q9 U" `9 ~! v; `" N, C
[color=#333333 !important]客户端
2 h& a! |4 [2 L# ]6 n: C2 L2 B[color=#333333 !important]./iodine -f -P 123456 192.168.1.7 ns.dnstuneltest.com i* C& c. n; v$ z" U" d2 W! h( ~
[color=#333333 !important]-f 前台显示
$ q2 V( G: a. ^3 g3 ^1 x[color=#333333 !important]-P 认证密码
. }# ~ c/ H, m) B/ Q( G' h[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析! y8 k, _2 E7 R7 M0 K, @, u, [ W
[color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。
+ A$ q# I* @5 ?5 s6 m; J[color=#333333 !important]
6 ~0 I0 z; Y" [' ^; b- f9 l流量包分析
5 B8 {; y) N& t, s# b$ c S1 T1 P U9 x$ x0 \! a, N* A) f `! @
[color=#333333 !important]抓包
0 C0 O& ]$ B+ I& x' x[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap8 z2 i- R6 G+ n
建立链接的包分析2 v0 e: b) _8 U5 F, Z9 [
* S* B" a [+ z[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包- ^# P# @6 F2 y% S
[color=#333333 !important]
; X* c! \$ a. C- A5 Y; s2 X, C[color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀, A& R1 d- W6 E) f
[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据$ V: T. L; }2 U% N* C) L
[color=#333333 !important]
& R: o i* A% n6 g[color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)( I3 i8 U# P9 ]% ]* [* a# R. x4 U$ }- B
[color=#333333 !important]
( e( e, G# Z5 m# q4 T6 k[color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。
, T- I6 e& P( Z& [3 X通信流量包分析
8 X: ^1 P# o5 J% a9 F: ^
+ u- ~. T; G( s/ ?[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析" t1 `$ T$ R" E/ t4 C
[color=#333333 !important]
, U$ S: D, O# L* [6 L& u[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。 B; p* ]7 Q: H6 k7 e ~/ \8 Z
[color=#333333 !important]05fanyi05baidu03com! L. H- _7 M6 Y D
[color=#333333 !important] 8 D& v+ r) F0 W; Z+ Q+ _& }) I
[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。+ L& V3 E+ [ p; j U" r! F) l# I$ O
[color=#333333 !important]
8 q `4 U' G* d4 x1 w+ V; J Tsuricata检测规则(并未测试,仅共参考)# y, o9 {+ q2 D/ s4 t' {
' W& F( ~' p9 Z. y+ ^9 v) k
( }0 J1 Z) d" C0 w" K& Z
) _+ N1 d5 i z: f 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 y7 u. l } _" l0 I8 l
! N7 K$ J6 b9 A2 m* F$ Q
安装4 f7 l. K9 C {: ]7 h7 @
# _/ x4 L0 R/ b, W( c' O! }[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell& ~, R* i9 j" ~2 r
[color=#333333 !important]下载链接, j ~- y, Z, ^* }8 z0 m- M0 G
[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag( R$ m. o+ P$ B) E. {$ U
[color=#333333 !important]提取码:t1rw# j, Y) d: Z1 m* u% R% F" e0 h
[color=#333333 !important]安装编译) B+ E6 C' i8 f7 D8 \
; o% C% |& ^4 s' ~5 B/ J( u. f- ' [+ ?8 H4 u& w0 G) v2 r) G
./configure make;make install[color=#333333 !important]服务器端
( ^- S5 P2 z, r2 R
3 o; Q2 K1 r! \; j
$ o, O8 i+ d. e4 _- \/ m6 M server/dns2tcpd[color=#333333 !important]客户端
' {' b, Q' ^0 w- m6 p
! ?9 Y' O$ _$ Q) X) q
# f; P$ x6 Y: q# Y+ i. ]! L Linux: client/dns2tcpc windows:[color=#333333 !important]云盘直接下载windows版本,或者下载
9 z! @' V. [. e1 N @& W0 \1 o! ^* Q0 ?2 O" n6 S1 m
- ; [8 z ` D' v; R, d
dns2tcpc.exe实验测试! a1 I8 x1 r, K1 I- S
8 q$ t" ^4 K+ T, {0 e( s9 {
[color=#333333 !important]服务器端- d. U9 C3 }! z
[color=#333333 !important]1.创建配置文件% V/ Q# r' }* s* a
4 S* H" l% i+ r. n, q: ^
- ' j1 M+ R4 Z# q& e4 P
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 K7 E: l K: X" L6 r1 U
1 P4 H- y0 p8 @: b, P3 d+ D$ t- 7 _8 M- `5 {% O: Q% S5 o! R
./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接' @0 s4 t/ d0 |
[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务" I# A8 d+ k) m9 b* K* U( u" W
[color=#333333 !important]  1 o I$ G7 p% C- y, e) e+ s
[color=#333333 !important]客户端2 r U& t) R8 R( X
[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 2& Q7 [1 F% b S R
[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源
$ ^7 l) L" W8 R( |4 }[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP% D$ U8 _$ m: u) B |6 D6 m0 T
[color=#333333 !important]-l:端口$ ~8 o( g% X$ Q3 Q
[color=#333333 !important]-d:是否为调试模式 2 等级可以省略( s9 M* q' K( L6 y
[color=#333333 !important] : w/ Y& h+ c' k
[color=#333333 !important]客户端使用访问服务器
8 R1 i0 d. _% {! C! r, m" u: K' ~[color=#333333 !important] 9 a& A' N4 y- r- }
流量包分析
. ]/ N7 h6 C! |1 b
9 X, u! |- V9 P6 g% c& n6 c[color=#333333 !important]建立链接并未产生通信包/ v5 [: r: D# L& Q" G, V
[color=#333333 !important]
8 N8 P8 i8 |; z5 K8 b, U% v[color=#333333 !important]使用ssh访问时,才会产生数据包) @, w$ m5 }7 e* @2 i* [
[color=#333333 !important] " N; u4 T4 `4 k$ E
[color=#333333 !important]数据包分析' J) `' k: C7 i! d( t9 s7 j8 c
[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中
+ u% a' P V/ w5 s7 A& u[color=#333333 !important]
1 t2 T# y O9 |; [, y9 \3 l3 E3 l[color=#333333 !important]
& A9 Z" a" @6 h+ ~# B3 v9 B3 k[color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。: @- r7 q2 v% K, f( G
Suricata规则检测(并未测试,仅共参考)' @& n; n- m* f A
/ a; ^/ R* _* k[color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测
( {+ N* z- k. p# g6 E" o' `$ Q/ v
- 7 _# a, t1 S! R. L% O V5 c7 _
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]结尾
% P% S3 [, T3 C6 W- A* y7 q[color=#333333 !important]小白水文,求大神放过
6 b! j: ~8 Z1 q' Q3 o/ ^[color=#333333 !important]pcap包下载地址:
$ X: ^' E( ?6 r5 n[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw
2 c q. M) S( O [color=#333333 !important]提取码:n5ha
& [+ h2 y( w; ?* X4 Y5 ]7 {[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载* \( |* [4 d4 P) o0 D+ g
! Y1 N" N/ I. E: b* A) m
精彩推荐
, S2 ?, n6 o, v
1 i+ h; h9 }0 e& b/ c7 U+ ~8 S( {; m2 z
# b! b5 ~$ g }0 _) _

% B) f, G; C* ~; B" B% q3 ?6 t$ @  1 g- P& h8 z% O; X" j% r- s# F
4 U' |7 Y) v0 K$ e. ]+ I
来源:http://mp.weixin.qq.com/s?src=11×tamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=1
! I9 V6 n* R6 y, Q: a0 Z) I; B6 H% O免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|