|
|
DNS隧道( P8 `9 }$ x t2 ~
2 z# j {# G& {. }8 ^[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。, S/ E( ^ {8 B
实验环境
% X# G t/ V# y6 u7 a5 W. H7 j
# |) I7 r$ ^6 o' m- U2 D1 R& C[color=#333333 !important]CentOS Linux 两台
. |- V8 C' Q3 M8 P* t# |2 W! q 创建DNS服务器
1 L0 O6 z: A5 O- w3 J* X( s! P v D8 L2 @, R$ z1 k# @' Z% y
1.安装bind; H: M$ ~; c, S' s1 v' H, Q) S
5 M: f# r! L+ c9 C5 M7 r
[color=#333333 !important]yum install bind** ?5 T/ y3 [$ k& ?( e' q+ X+ w
2.配置named文件
0 t1 @" \: A+ C" x5 ?% W2 X; D7 ~+ b5 [2 [0 ` j% @& \
[color=#333333 !important]修改/etc/named.conf
/ M6 @, d5 r3 R [color=#333333 !important]将下图中选中的地方改为any
, `9 ]' ]6 W B5 O* o[color=#333333 !important] 2 B" h( h* x0 c F$ i% U; m: a" t( v
3. 设置NS记录,A记录
+ N5 a; h! i5 |3 R
. g, G% P! n& d, N X- D& i[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件; k: \9 P. z/ a
[color=#333333 !important] 
9 m, O8 R" f0 f# \[color=#333333 !important]增加正向解析记录
& N; i9 R A9 c$ M+ k2 [[color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字
+ [4 M0 ?' I+ ~0 t g[color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel
n% ^7 X8 @# m- ]7 z+ s! Z# I [color=#333333 !important]修改文件如下
5 s! G2 _) A6 }0 _) B6 ~4 r[color=#333333 !important]添加NS记录,A记录! m4 U9 T/ p7 s
[color=#333333 !important]
9 S+ g3 p& J- {3 k6 @% \ L[color=#333333 !important]添加bind为自启动服务$ [4 i5 T$ p1 U* a& M/ i8 v; L
[color=#333333 !important]systemctl enablenamed.service
8 N" w" k3 y \& B' l4 G9 v7 O, i9 S[color=#333333 !important]systemctl restartnamed.service
# w9 b' h n* }7 d& T [color=#333333 !important]查看启动状态4 H. z- ~" m+ v2 [: ?( a; h" R
[color=#333333 !important]systemctl statusnamed.service+ z( T6 C. L8 W9 T Q
[color=#333333 !important]
+ f$ h& X8 K- [[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F)0 `. e7 r9 \; K+ p- @$ Z
Iodine
5 Z; W% G& ]* S$ ^) Y: ^ W, w8 \
" @% `. K5 _0 y- X3 x' X[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。
1 o% Q7 _; o' K+ w( I1 D4 A( y4 z6 \安装$ G3 p4 f- o3 U6 y: z
- e" I/ k2 W; d
[color=#333333 !important]下载地址:
9 I2 l7 ]' p! u[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip+ u8 b* U: m: ~1 c( E% L& P
[color=#333333 !important]unzip 解压- a U" B. G) F0 T' M9 i/ u( A
[color=#333333 !important]cd iodine-master: M3 `5 Y4 L, `& t+ ?6 l
[color=#333333 !important]make
, r" }5 w0 u# I9 L# m1 ~[color=#333333 !important]出现报错
# M3 P, p7 H5 l[color=#333333 !important] , c8 m, \6 B @/ ?# l/ r& S" ?0 ^
[color=#333333 !important]yum -y install zlib-devel
7 S- k9 _6 h4 C9 Y9 g, @; u[color=#333333 !important]make;make install
- p6 T8 `8 b, D/ W. J[color=#333333 !important]安装完成
9 F" \( g- u# g, ~4 V[color=#333333 !important]进入 bin: A9 U8 ]4 X0 H2 y1 ^& b
[color=#333333 !important]iodined 服务器
" {& v' }& J6 ?* X[color=#333333 !important]iodine 客户端
7 k1 H1 G" H: M" [4 x8 V实验测试& |1 N' C* F; W+ a
* R6 U* R* E: l4 ]8 @
[color=#333333 !important]服务器) g4 L' W# z3 s* ?7 i% ]# X* X
[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com4 a& _* n+ }+ O- @9 ~; O
[color=#333333 !important]-f 前台显示,运行后一直在命令行等待
) J; m! M4 X( L1 M4 Y' {$ \3 D[color=#333333 !important]-c 中继模式|直连模式
# M; k* L V% V! x. g" J# j" K8 d[color=#333333 !important]-P 认证密码
S+ Z5 A9 ]) M/ o, @ [color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。
" T. z% w' |0 H" g[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。2 g5 c; w- H0 k- Q
[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡
, h& m. z8 x, I[color=#333333 !important]
7 Y9 Q5 o9 X4 R1 X/ Q[color=#333333 !important]
& c: o5 v4 o' }+ s% L0 P[color=#333333 !important]客户端
3 s5 Q3 T) Q3 p: i. b[color=#333333 !important]./iodine -f -P 123456 192.168.1.7 ns.dnstuneltest.com1 H/ t7 p- f1 p* ~+ Y9 X7 a
[color=#333333 !important]-f 前台显示' M! R2 X* E: X/ E/ \: c- D
[color=#333333 !important]-P 认证密码- r) Y% L7 {; @# A
[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析9 ?( x- i# p8 P8 ]
[color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。- O! Y2 ]: L. a2 ]0 g2 l+ f( ^
[color=#333333 !important]
/ T7 B+ M* d% p, |流量包分析( p# w n2 `0 U
) x- \$ t0 n7 }7 Y* `7 P) n
[color=#333333 !important]抓包
4 g0 Y% l9 d4 \. \- m' d3 `[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap% c' N3 U3 M* Y8 t+ J1 h
建立链接的包分析
( e- j& X" |0 s7 D! S
1 m+ h" Q/ D% j4 J; O9 _ ?& M) ? k[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包
/ g: z7 ?, K- r$ F0 d4 G[color=#333333 !important]
; i2 P) |2 k* t9 E1 N+ q% n3 M% f[color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀
. e$ e' p, `- q" i. ^- ]" ~: ?[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据
9 t, ^ X6 K! E4 O f. [! _1 T) P[color=#333333 !important]
& R7 f3 `* ~. x D6 g+ D& S- h[color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)- K# O& g5 d; ?; `& \0 L0 J
[color=#333333 !important]
- r! o/ M2 q) b8 o) [+ d[color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。
5 r; `8 `) g% H通信流量包分析
5 W! W: Z8 E! y" C
: K2 Q5 J, w, i& ^: z[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析
! m5 F# U4 r9 B[color=#333333 !important]
8 V0 d0 R/ ^" f6 z# N9 g$ Z4 P[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。3 ]. ^$ s5 ?! Q v% @
[color=#333333 !important]05fanyi05baidu03com
$ T8 P- B' J5 k0 m[color=#333333 !important]
# j* C/ T9 d9 V1 G. Q" n/ V* i2 N[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。4 W' \; i2 |2 U# S4 `
[color=#333333 !important] 1 a/ X" u1 h9 R [& C6 M1 ?! O
suricata检测规则(并未测试,仅共参考)
7 t. N4 j' d5 g) u# x! S
/ |3 N+ T Y: C8 b# J: ]. q
. t+ J4 x+ _' t/ s3 P- : l/ q! C0 y$ F' ~) j! ]5 _" C
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$ l& c% @/ ]% _& f! z9 w8 T D7 s
2 g- E7 m+ y. o( M& Z6 [
安装: F! L- O3 D- r* L
9 \( C6 E* F+ {( b, m1 Z
[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell' P% W8 J3 M; T q2 I& z
[color=#333333 !important]下载链接
# E6 ^: `- N7 s[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag
+ R3 s( `: N; L, [: {8 T6 n* S+ t [color=#333333 !important]提取码:t1rw: K5 w4 K1 s" y+ D2 l6 m
[color=#333333 !important]安装编译, t' C! h' c/ z8 }7 q3 G
3 _, ~! H* o4 I/ {1 ? p
W$ ^3 t4 z2 C+ p- p' g3 f ./configure make;make install[color=#333333 !important]服务器端
' T, L4 l& U# R8 m( V: a. ?1 C! q8 H
- ; R; l& g, e" i1 h* O1 T4 {; _+ W
server/dns2tcpd[color=#333333 !important]客户端
) }' t: B+ Q+ f) Z5 H- A% I5 t$ R F: i, e
e3 q4 E/ k; R3 C/ J Linux: client/dns2tcpc windows:[color=#333333 !important]云盘直接下载windows版本,或者下载
5 c# h7 p1 @5 \$ W4 q
+ D" l9 T2 q/ s6 ?) {* R) h
6 u5 L) ]2 z5 R. v+ \& Z: f. {6 S7 K dns2tcpc.exe实验测试
2 x% Y/ o# q* x
! a; E+ `2 c2 y[color=#333333 !important]服务器端
& J+ W# L) i( p, s Q[color=#333333 !important]1.创建配置文件3 x2 \# L( m3 ]
+ Z V# B. S) K: ?8 t4 C
4 [3 Z4 i7 }7 b, 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.启动8 J7 ]) i- o/ `) i9 |4 t
, o& M4 r3 _; x( g; Q B
/ y% `& R/ a* _0 R& q r9 p- s ./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接5 A# q+ l0 T# {3 {6 L0 R
[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务) R& n# h+ z2 S5 f# Q5 U
[color=#333333 !important]  * ~3 b( G" g4 f3 w# d8 R
[color=#333333 !important]客户端) W! K0 o$ S' J% J; H1 S
[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 2) G& D( t$ }# P! U3 G2 w2 o/ t9 d& h
[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源
! ?' o7 r" `5 U: H- h7 ?[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP
5 g% I$ O# n5 X" E8 P3 B[color=#333333 !important]-l:端口
6 d3 H V) V# K, Y* g6 ?- d- f[color=#333333 !important]-d:是否为调试模式 2 等级可以省略& m3 ]$ t y! D
[color=#333333 !important] & g: Q& l( N" n
[color=#333333 !important]客户端使用访问服务器# b6 E3 x$ o. Q; J; R
[color=#333333 !important] 3 p* c# M% x) @
流量包分析5 D1 M/ X5 V h4 H/ n4 F+ F& w) [& p
; ~5 W$ r: K' v5 o' I* L' P
[color=#333333 !important]建立链接并未产生通信包 h' N6 Y6 ~& | P Q8 V
[color=#333333 !important] 1 O* ^$ [% Q/ A0 [0 s
[color=#333333 !important]使用ssh访问时,才会产生数据包
6 Q! A2 e& D2 y: p9 c[color=#333333 !important] / a7 _/ V* }. X9 l7 w$ S; P! w
[color=#333333 !important]数据包分析
% h0 [5 y% s; L+ m[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中
& l) Z; V+ Q0 |5 r* q( S, k- q[color=#333333 !important] / ?) ^0 F; b2 ]/ Z' `+ ~; z0 S
[color=#333333 !important] 6 n; h4 m0 {" L. N$ i, E
[color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。
5 J" l& V- \* v; T# [: J [Suricata规则检测(并未测试,仅共参考)5 @% n0 U3 D) n/ \
7 d( J* e; E. M' j[color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测3 A3 D+ N3 o! `$ F6 ~
0 E, H1 [% s3 S6 E, C5 G0 \6 t0 O
5 ~/ T0 j1 P7 d8 z# b! c* _ 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]结尾
3 @& w( K& Y( l[color=#333333 !important]小白水文,求大神放过5 w# B' C+ u$ D9 b( x! [. \" z
[color=#333333 !important]pcap包下载地址:' U) U1 D7 m, P7 a9 L, m+ N% l
[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw
* b3 m' S$ k3 T* n; I7 k [color=#333333 !important]提取码:n5ha
: G4 D1 B# f8 f1 c* p& ~, C6 X[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载( G# r4 |8 l @( k. O

* ]1 X$ l, u) ?0 e4 D8 C% g% O精彩推荐
9 B. P* c( _2 p# O4 F
- W0 a2 c( |$ x6 z; H4 M+ E( `$ A+ ^1 j3 Y3 z

* @1 J% [1 z% t( w0 q
1 q# n! ~, Q) C' C+ Y+ N  5 g0 g! A8 f8 o X! \# A
4 u! G# Q* f7 d: D" u$ O0 i! @( X1 \( C来源:http://mp.weixin.qq.com/s?src=11×tamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=1
3 _; ]1 e" G m+ J免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|