|
DNS隧道( v' ~. @8 N) x
% ^4 D# ^1 f& J E2 ]7 p7 Q
[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。4 K4 ?( J& [8 l+ o& c) v9 I0 \
实验环境
% ~- f4 @% C& q6 [+ T$ Z8 q- o6 M1 A2 }
[color=#333333 !important]CentOS Linux 两台
) o& V- E) y+ Z4 \ 创建DNS服务器
) |9 Z9 d: h' n; z9 e- J! t! d! ?4 }# F0 \2 g0 {% u
1.安装bind [, h' o7 ` i
U3 n1 h" w: G( x; @, |/ O1 I[color=#333333 !important]yum install bind*
& N. u5 m) O# k! b0 X. m! G 2.配置named文件8 l2 @; }' E2 h9 |
$ @: f: w7 h8 ]' c[color=#333333 !important]修改/etc/named.conf' M5 U# [1 ?/ O0 s4 Z
[color=#333333 !important]将下图中选中的地方改为any7 O" K1 n" m1 m- |5 } s4 p
[color=#333333 !important] . C8 z$ r9 A# q' `: b g C
3. 设置NS记录,A记录
5 }& W# Z+ S, p8 }) s0 c( ?. G& z6 v6 G
[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件
. Z2 v, H$ r T/ ?[color=#333333 !important] 
' X& Y1 B# t; f @0 k/ s[color=#333333 !important]增加正向解析记录7 h9 _/ s7 P- ^
[color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字
7 ?- C; s+ z# @1 y/ T- ~. j[color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel) i& b% [, u3 u( H( ?- ?
[color=#333333 !important]修改文件如下
2 I# s8 `8 ~& G# m% v4 n[color=#333333 !important]添加NS记录,A记录; W* U) o. x3 \. z3 S' O7 Y& a
[color=#333333 !important]
: i& {7 f0 Q1 D6 e9 Y: u( q8 D/ Q[color=#333333 !important]添加bind为自启动服务
$ N0 X! ^* J4 ~, L' [6 ?" B[color=#333333 !important]systemctl enablenamed.service7 Q; x7 I) L: ?; F5 y5 I2 z
[color=#333333 !important]systemctl restartnamed.service; y* s& _8 V- z1 ]# k) R5 m! N
[color=#333333 !important]查看启动状态" W2 b- r( v& r& E K \& _
[color=#333333 !important]systemctl statusnamed.service
0 a u z+ J: g4 e) u* n. X [color=#333333 !important] * B6 o; h; V, V6 b! R
[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F)
! |4 K, G/ C9 x f% ^Iodine
* n: [ f3 y \6 ~% I$ P5 T2 P
2 ?0 Y- `' \9 i s[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。$ t2 V+ G, z! r) r. u' ?
安装" J8 n: w) F6 u" J5 N: m
A+ U# c6 \: I/ d) [' P5 s% P- ^[color=#333333 !important]下载地址:
: f* r' d' O% ?, X2 o[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip" F# E7 ~7 d% d* r1 r' W
[color=#333333 !important]unzip 解压
* [( Y, b- A8 Y$ n[color=#333333 !important]cd iodine-master
) V% ?$ f$ }+ f- G: ?7 J# g+ d[color=#333333 !important]make
q/ j, V) S; n3 Q* l7 `4 M[color=#333333 !important]出现报错
, h* s) I; W- M[color=#333333 !important] j* a+ z2 A* x0 Y5 q
[color=#333333 !important]yum -y install zlib-devel
. o; }2 r* ~0 w% L[color=#333333 !important]make;make install
' k. T1 O; X/ H$ p[color=#333333 !important]安装完成5 [/ Q. t9 x! Q5 l- ?
[color=#333333 !important]进入 bin
2 ]; h4 O) w6 a[color=#333333 !important]iodined 服务器) ~5 D9 {8 R4 `0 ?. b+ p
[color=#333333 !important]iodine 客户端& f) w- B% j2 X& z
实验测试
0 \# m; e* T! O
3 E& e$ s2 {$ @# E+ v[color=#333333 !important]服务器
+ K7 a& _- f) z/ L# U[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com& l. m$ ^* c! O1 f2 V# C
[color=#333333 !important]-f 前台显示,运行后一直在命令行等待
. r7 I' Y% F: c[color=#333333 !important]-c 中继模式|直连模式0 d" O4 r, B0 d2 t% Y& a( [+ B
[color=#333333 !important]-P 认证密码
. O$ }$ D( d: _3 A [color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。 ~# f% B& `5 d* i$ w- t, g
[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。
' G" W/ c% Z& J9 i: _4 f+ b[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡* H& \# _, s5 x: ?8 i1 z
[color=#333333 !important]
1 n0 j" r4 B" R/ d' ^( W[color=#333333 !important]
( y6 m( |/ r# y, q$ T" M- G. E[color=#333333 !important]客户端
8 d5 H+ s1 c- N2 k+ o( [" B[color=#333333 !important]./iodine -f -P 123456 192.168.1.7 ns.dnstuneltest.com7 T& ]- F! d- s# Q$ @6 t
[color=#333333 !important]-f 前台显示
8 I a# U4 ?! F% r[color=#333333 !important]-P 认证密码
3 u# [8 X* d& j6 k[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析
5 L" S2 F8 H+ Z3 L2 F [color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。
9 W" D- N2 K- D5 Y8 W4 o[color=#333333 !important]
, g; s2 u8 j2 \$ Q; k! j: n流量包分析
, H7 n( M& Q1 _ u. i+ W( N$ x5 s8 u3 y6 N0 e3 |
[color=#333333 !important]抓包; a6 b; ~+ O9 ^6 t( L
[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap
" T6 Q7 R* s# j6 U7 A1 o 建立链接的包分析* ]- w) z9 y5 r4 M5 w
B ?3 W6 x/ f3 g[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包
. W! ~0 r* o5 a- ~- w[color=#333333 !important]
7 R: j4 }) p! N, u+ [2 f- E[color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀& [0 M- @. @, L# d3 K
[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据
2 J4 l$ J. }9 h! n" v[color=#333333 !important] 3 i9 j: x3 ~* E0 z
[color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)
m" A( @2 f# B/ L$ J[color=#333333 !important] - N- D; e; S$ F. K
[color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。
- ^ m& \. H& \1 }通信流量包分析
' F2 n! Z# z6 u! p+ c7 k+ b8 X% M. U7 V* B- J( v( [* r
[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析6 s! `/ f$ s' @3 \0 o b
[color=#333333 !important] 3 h. E' Q+ a+ y2 J5 V& B& E
[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。+ x: }% ^9 K: b/ Y! [) ~
[color=#333333 !important]05fanyi05baidu03com% ?( B& y$ ?: x% _
[color=#333333 !important]
7 H* ^* H4 V( G7 D+ U8 B" \[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。( C g2 I" I" m. A r5 ?4 B5 Q
[color=#333333 !important] # V+ b1 q& B/ o' M9 ^ ?* f, j
suricata检测规则(并未测试,仅共参考) M% h. f V8 U
2 ]9 k2 ^3 ~8 B) o( ^7 [: H% F
& Z2 ^# _" r- n9 v l- + Y" L( V7 ?0 u( _: B
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
9 j6 Y( ]2 C' V/ @. R
i$ n' H/ H% F8 D3 K' v安装6 m2 I$ N# n$ f& z% d
. W( x/ J. h: h- F[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell
% v1 w1 J0 x( b3 j3 y9 E& i0 C[color=#333333 !important]下载链接' n2 f4 O3 H" _' k
[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag
8 M# p8 W" z8 w [color=#333333 !important]提取码:t1rw
R/ C- Z8 j' I/ q& e( ^& a[color=#333333 !important]安装编译# B# e8 T/ T6 r: Q9 L
% X U) } n# c- 1 P, ~$ `8 r. N- I
./configure make;make install[color=#333333 !important]服务器端
7 o$ G. q5 O/ r; q2 @- l0 N' J7 P2 ]& W7 \' W7 h8 g* j
4 h* J. m. C6 [" J server/dns2tcpd[color=#333333 !important]客户端
9 \/ S" X: f4 Q0 v: F& M) k$ U/ E' j, N) Z5 O
- 4 s8 ^- y" A: e |8 U
Linux: client/dns2tcpc windows:[color=#333333 !important]云盘直接下载windows版本,或者下载
; d9 s) z( l! ~" w( h b
% E) l+ p8 u' |- ' Q9 N; W) \1 Y( d$ c, i# k3 f
dns2tcpc.exe实验测试" V8 f8 J, K& W7 k( U
/ @/ P/ v$ i4 y! n% E2 L* O) l" g% [[color=#333333 !important]服务器端0 z: f1 y- C7 ~1 P8 @6 Z$ s2 c
[color=#333333 !important]1.创建配置文件
0 p5 [, z; Y0 h9 i) O" C# ?% `- q& p- F5 R; _& l! A1 t" Q S" A
- F2 G5 i3 w2 S6 y" W: ^# r 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.启动
4 K3 ~/ m3 T7 i
/ j7 T' \7 |: b5 _9 T
5 ]" [6 y/ ~# G. L: j/ D ./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接+ H+ m5 o% ?+ k& \' \. i3 E( v
[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务. I( I4 K( ^, d, H+ p
[color=#333333 !important] 
# H) j5 N! ~8 ~. E[color=#333333 !important]客户端
; q0 a. W+ g: k; m* c[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 2; c" b+ W) U! k: O! i, I
[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源1 Y1 ?4 T/ i) {: X2 G
[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP8 g0 N) Q$ ^: [
[color=#333333 !important]-l:端口
9 L. C5 p* T. i0 o. G# T+ E( O[color=#333333 !important]-d:是否为调试模式 2 等级可以省略 R {: S3 u, P3 G; |* \' N; C
[color=#333333 !important] % l# T" c& a( Q2 T4 f: X; P# L
[color=#333333 !important]客户端使用访问服务器# j% r1 O, D; w
[color=#333333 !important]
) s+ Z! U1 k' x* I流量包分析9 \, X' E) m5 W3 t: A5 a
( W$ p! x1 ^* B2 V( d) J2 v z[color=#333333 !important]建立链接并未产生通信包' C/ C2 E D3 P. ?, m! R
[color=#333333 !important]
) M5 V) j: G$ {1 R1 M9 R# n3 \[color=#333333 !important]使用ssh访问时,才会产生数据包+ a( P0 u" p- v; |9 Q% p. i7 U5 J
[color=#333333 !important] + c. R: w9 ` L. ]$ [
[color=#333333 !important]数据包分析# F6 r; a# g7 ], [! r9 K4 D
[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中0 B0 Q3 j- _/ T( m+ {7 P
[color=#333333 !important]
9 r5 C' A' u5 A. w; v[color=#333333 !important]
; s' G7 j2 s* \% T7 f5 E/ C- P[color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。1 b8 ^: t$ |2 \% `+ L4 o
Suricata规则检测(并未测试,仅共参考)
' @* ^* q) }7 R0 d% q' c6 z+ I
7 K( n" N% g$ ~! d[color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测+ x6 d; Q+ h# e
0 r0 a1 V m' X
- ) x0 e y# u: ]3 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]结尾4 b+ P5 W% u; W u5 m
[color=#333333 !important]小白水文,求大神放过% D/ _! o9 D+ F7 J. a
[color=#333333 !important]pcap包下载地址:
9 A8 F; l: F4 d, {% r0 L2 K[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw
6 f& x3 @& X4 y/ t/ j4 K0 [ [color=#333333 !important]提取码:n5ha
& I+ A5 c6 {% @: W" f[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载- D) v7 \7 e7 H1 D5 }

3 P. [) n3 }" G$ m) e精彩推荐
) [# a" Y8 Z' l1 _4 v8 V
0 {! A# f% }1 Y# T h+ C* B. I! W9 z3 ~
2 e6 u' F8 h# |- |0 R2 p7 \ ! T% m/ y& Q$ e; j& P4 R% i

% Y9 p- V' n' o5 V6 b9 U  
* Z2 [6 j( b' Z+ O3 r; H4 a) N0 }" {1 I" B3 c# J2 ^7 g* E& k6 w! h
来源:http://mp.weixin.qq.com/s?src=11×tamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=1# F* q/ j( ~. \5 p3 r Q9 w6 f5 U
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|