|
|
DNS隧道
) P& g1 o, O5 R) {* ]9 I; y8 G# _3 \
[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。9 j) I k- o$ O0 @# Z8 _ y
实验环境& x5 {9 F7 O' P' F/ I. Z; P
. t# h9 b4 Y3 w% T[color=#333333 !important]CentOS Linux 两台
1 s8 s" d! f+ D9 v; b 创建DNS服务器7 s o- t( @9 _! ^# z2 q3 z1 n" n
, d) d+ K" a8 i) @6 r8 f5 O" C6 ^8 J1.安装bind& G- o1 T4 |, ?+ ?
, g2 x3 a* M/ P[color=#333333 !important]yum install bind*
1 ?3 G. y* H$ D7 @. ^+ g$ p 2.配置named文件
8 ]' f. U- f/ r8 b2 T& Y6 l& K! e& ?& J) h* n
[color=#333333 !important]修改/etc/named.conf
8 T# e7 f; Q7 M( {/ H9 V- B [color=#333333 !important]将下图中选中的地方改为any3 Y0 P8 H5 V' p# g% d0 Z$ c
[color=#333333 !important] ) B# R. a# O6 f9 N$ v
3. 设置NS记录,A记录+ ~) Y5 Y8 A$ X8 o" C4 x
) e. m$ z( V& Y# d[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件$ ?3 ~) W- E9 |, s) f; R$ ^+ G
[color=#333333 !important] 
7 n: i, ~6 B9 ` Q0 ]1 L" C[color=#333333 !important]增加正向解析记录
% ^$ c5 h% q8 ]. ~[color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字
" b5 n. ]# y7 \7 g: {* ]/ v[color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel6 _0 |: `8 U) t+ [
[color=#333333 !important]修改文件如下
7 ]6 d" S9 y1 l% p% d3 U9 m[color=#333333 !important]添加NS记录,A记录 V: f- o. K$ T8 T, U& H" W4 j
[color=#333333 !important] " c- n C# v0 E$ K2 P5 N" u$ N
[color=#333333 !important]添加bind为自启动服务
5 C8 w, }# L; j; M. }6 \[color=#333333 !important]systemctl enablenamed.service. z( F5 w( E8 L, w3 p7 h& I
[color=#333333 !important]systemctl restartnamed.service! b# T1 ]+ b) @* h. E$ |
[color=#333333 !important]查看启动状态
$ g& o/ U/ F z[color=#333333 !important]systemctl statusnamed.service$ H9 j4 G# G- N4 v! w. Q! u
[color=#333333 !important] " e$ `, [' l" {( _5 N, a( B
[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F)
( z* N( {$ s$ {' J0 zIodine
) J4 l0 T$ J' C1 @* Q9 G$ N
) J. A4 m ]9 F3 g8 H[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。
* n9 n/ y& |, L4 a, ]" Y/ A$ b' h安装' I+ m- ~7 Q- P; W, A# s
3 t% f4 R5 y# h% g' H
[color=#333333 !important]下载地址:! X/ W U7 a5 y" p( [! |/ o
[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip
/ h# f) X3 p$ g. C9 u2 G [color=#333333 !important]unzip 解压
]7 r, g' l8 w& B[color=#333333 !important]cd iodine-master% C" ] N8 j3 O' j
[color=#333333 !important]make
T8 a+ ^+ |1 {6 S[color=#333333 !important]出现报错1 c* g1 U2 y" V* N3 ]
[color=#333333 !important]
/ @5 X% f" N3 H[color=#333333 !important]yum -y install zlib-devel
6 }, S8 w( v6 G+ Q0 J[color=#333333 !important]make;make install) X: V1 v/ U6 S- q# ~
[color=#333333 !important]安装完成5 ?3 s q" L- I; `( U, s
[color=#333333 !important]进入 bin
8 R7 g- Y2 Z k2 _# q9 v3 {4 ?[color=#333333 !important]iodined 服务器
- \1 u3 P3 {. b" y9 g* @[color=#333333 !important]iodine 客户端
& \+ ^/ L8 L) N3 N* ^. ]实验测试, k: h4 w' b9 d8 q) w
8 Y$ x- } x B; R) _8 t; Y- h[color=#333333 !important]服务器5 q/ {) r m3 J5 o
[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com L$ j7 W, `) A# ^
[color=#333333 !important]-f 前台显示,运行后一直在命令行等待1 i! I0 H$ u0 k: ?4 I
[color=#333333 !important]-c 中继模式|直连模式
2 {( P* L4 @ E$ m! C5 }; H[color=#333333 !important]-P 认证密码0 n; c# ~, H" c* F# U& k( J0 @
[color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。+ a- H8 @, i+ x0 S! c; O, v `7 T" n
[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。- f. W. m. i. t/ h
[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡( o6 _9 i9 R3 f( B3 n
[color=#333333 !important] 0 N9 t/ y# y! l0 S. _
[color=#333333 !important]
2 \: S2 M) O8 ~0 K[color=#333333 !important]客户端$ [9 ~ n* |1 t
[color=#333333 !important]./iodine -f -P 123456 192.168.1.7 ns.dnstuneltest.com* J4 d' G4 a( H
[color=#333333 !important]-f 前台显示0 [& X) G2 Q0 t; I; S
[color=#333333 !important]-P 认证密码
" l- y0 }# l/ e) }# R[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析
. l; `6 V4 R6 }# v. ]0 V# \ [color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。" E" { f. ]- [2 h( y E1 l
[color=#333333 !important]
9 X1 R/ u V, F0 c) |) q流量包分析 g. B: s" }, n( I1 c
" ^. v1 e/ k5 y& {; G/ J, p
[color=#333333 !important]抓包+ p* x6 X* B. ^( U. d
[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap8 g5 T4 o3 ?* V. ?& [/ m
建立链接的包分析
9 e( O" K# H" G0 {
0 }2 f# P+ q/ p[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包
9 k0 J+ U0 u9 O7 g6 I* I$ r: c[color=#333333 !important] 4 H4 k2 e1 C8 P. i5 F
[color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀: I9 z4 u# K% W x% K% u
[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据& j Y0 u5 l" F3 P \/ P3 ^: a% _
[color=#333333 !important]
R" K7 x3 b8 ~% c1 N D/ J1 X[color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)2 o3 A3 }/ {1 l
[color=#333333 !important]
, F& r/ d8 ~4 }6 m3 t1 a[color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。6 c& a) X* P2 K. M6 R) F) n& r4 T9 \
通信流量包分析
. h$ ?4 @6 U: `& S' R4 h: o
- y( S3 U0 r9 q7 v% H' l+ w. y[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析
, _: Q) i; \% a[color=#333333 !important]
: V7 ]0 R2 e: O6 G[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。2 v. S, k; t5 I
[color=#333333 !important]05fanyi05baidu03com
( X9 |8 P/ T6 b$ R/ N: j5 I l6 N3 @[color=#333333 !important]
; n0 z2 t; P* a! l j[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。% m/ W* o' v5 [
[color=#333333 !important] 1 \) i, ?$ P7 G- z
suricata检测规则(并未测试,仅共参考)
3 p" D& W0 g) ^9 ?9 {. Q G: b
7 F. h) o/ e) [# ?/ G' G4 {: p4 R9 p {) T9 x9 [- ]# x; E
- * ^4 ~- s9 l* F8 m$ ~% E
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
- d3 n N6 D6 Z5 B- E$ A, U* Y
% K( l) I$ i2 J6 p }安装
) Q5 B+ x& T$ ^: i! C1 T( }
% w& i9 A, X( Y[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell8 _/ f/ @$ s) S. h
[color=#333333 !important]下载链接
- J- v+ ]# x* {$ d* B6 R- R[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag: G1 v; \2 u& a" a9 ?+ C1 R# ]; G
[color=#333333 !important]提取码:t1rw
, W1 S8 L6 E- c[color=#333333 !important]安装编译/ x ~, g Y3 R
2 O/ z2 o1 C9 A2 O
& r, i$ z8 r+ y) _4 Y# w9 W+ f ./configure make;make install[color=#333333 !important]服务器端! I& |8 ]" M8 R- J! e; z- H
+ M. e/ X# q4 _. }
- : x7 I( r$ [, ^) F: n" n
server/dns2tcpd[color=#333333 !important]客户端
: E$ S! [& U' ?/ g
" \8 z% m: N7 E' t7 L! a. X- # X: g4 G! ~/ G, c0 Y) ]
Linux: client/dns2tcpc windows:[color=#333333 !important]云盘直接下载windows版本,或者下载) t2 k% v/ ^! F# y# X; X) w
U( E4 Q& G: y$ x+ t- ; D# Q- a1 P1 {
dns2tcpc.exe实验测试
2 n4 Q, }1 B5 }+ }& J6 y! ?- C* J" w
' b; x) u$ v d1 {[color=#333333 !important]服务器端( C5 b& _# ?" z- W# U" w
[color=#333333 !important]1.创建配置文件( H; C0 g4 I0 X& W9 H) F
9 m5 H4 B5 K4 y
7 p+ k0 Y6 i# Y3 j1 S3 O 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.启动2 \/ s; n) }) u
3 f5 }( @8 X7 [9 b+ Z* I7 m. F
. E7 U5 l s2 r- m) ]* i ./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接
6 C3 F$ S( }( D0 D[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务
; h4 u+ F% |" M[color=#333333 !important] 
! f" P0 {/ x) m; g[color=#333333 !important]客户端3 m8 a2 [8 g' N( Q9 x3 a
[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 2
0 f g/ s+ c: a1 E[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源8 a0 j9 z9 p# A! Q: t
[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP5 B! p& Y- }* C' |
[color=#333333 !important]-l:端口
+ \ ~. b* X% h, X[color=#333333 !important]-d:是否为调试模式 2 等级可以省略
' [- l9 u5 v. G [color=#333333 !important]
/ U* v/ D# e7 q. n$ h[color=#333333 !important]客户端使用访问服务器0 Z% R8 s1 |' n0 ]/ \1 P+ S
[color=#333333 !important] " f% Q: {" @) @' V, l
流量包分析
! n: I8 p2 Y7 q% R) [' B
/ {/ T5 ^! ~: T9 I[color=#333333 !important]建立链接并未产生通信包
7 l4 ]" A# O% O, q* J2 Y[color=#333333 !important]
$ k5 Y% ]0 r1 ]8 e0 }[color=#333333 !important]使用ssh访问时,才会产生数据包
* d. B i" U( r. L5 a! T7 e[color=#333333 !important] + {9 ~) G" U/ G9 s Z3 d; d% Y
[color=#333333 !important]数据包分析
0 {% J1 F. ~: y( i/ T( }+ |[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中
( {1 k2 w# o6 y/ n[color=#333333 !important] & X3 l. z& s, Z) z2 p3 j; T
[color=#333333 !important]
2 [, M6 S2 K3 [[color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。1 l, _9 a; t3 ^9 ~; Y5 r) A; p* _7 O
Suricata规则检测(并未测试,仅共参考)
4 R( P0 b* H7 t& f# z$ q; e) t# h6 a+ I; s2 c
[color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测4 \; P# X3 D4 ?1 p
5 E% m X& e- o/ V/ e0 u
% D! ~6 T/ }/ w$ o' `/ Y4 h; t 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]结尾$ \& C' g' U( V4 v. R( o
[color=#333333 !important]小白水文,求大神放过9 W" F+ O, u8 r6 W
[color=#333333 !important]pcap包下载地址:$ x9 q8 X) G) I* m. K; j' x w
[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw/ h9 q. B U& i! Z! u7 j1 u9 F& R7 S
[color=#333333 !important]提取码:n5ha# V1 n+ n/ G8 s3 h w
[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载* J; ]/ d9 o1 e2 `2 b( a

- `1 p3 i( ^7 r4 ]9 Z精彩推荐0 R! T* g& Q _" f# p# m, |

4 d5 z, v1 u' \8 V S1 m: j" n( Z/ m
7 G) Z' I( h2 i: `& Q' v q% x
! _' u" ^1 |) l6 H3 }9 r* [
  
( d8 ~) w; k e8 w! L$ d1 N: h
9 \3 r' s+ I0 _5 N9 @4 s% X" |来源:http://mp.weixin.qq.com/s?src=11×tamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=1
8 H$ o2 P) A4 f, v免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|