|
|
DNS隧道
1 m3 @. a+ l1 _( n
, J& Q6 p' \# q8 @9 [# j% w[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。
5 q2 u3 z- A# |实验环境
; i& C+ x4 C) V
9 B" E4 e& \' ]4 }) T) y0 D[color=#333333 !important]CentOS Linux 两台+ H3 H) F, b5 m# w
创建DNS服务器
& w& S- B. C( H6 r' c6 `
1 S4 g8 X8 D/ I a& c$ j$ K1.安装bind
B6 [! D: s% g
- F) c& y* c D1 W7 x# T* b# L- T[color=#333333 !important]yum install bind*4 d8 R6 }* ^, L* B) e4 F; @0 s
2.配置named文件. P: L; `4 C# X% @' G( ~' a
B; i) P. b0 T& d" E; I7 Q
[color=#333333 !important]修改/etc/named.conf
* B! M- o/ V3 m [color=#333333 !important]将下图中选中的地方改为any# M8 j: z, o& r- v# a( N
[color=#333333 !important] , z0 h& u2 r- a( B# |2 r$ t
3. 设置NS记录,A记录' a. Z) k5 D( D6 V- {' k
6 `, O2 z6 K1 _) R, D5 h[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件
' s4 Q2 ^! q3 e8 T/ L/ J( d6 J[color=#333333 !important] 
' o3 D6 ?3 ?0 `* K1 h4 h, |3 h[color=#333333 !important]增加正向解析记录
# B( ^, f3 Y. }4 s: Y; x[color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字" c& [ n, U$ s$ @" P
[color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel
' n! N3 F1 D, F- m I [color=#333333 !important]修改文件如下
. M& F. Z& s9 U W[color=#333333 !important]添加NS记录,A记录
' X0 {+ y# z) x: r[color=#333333 !important] + j) g% I7 T: U3 g0 `( u7 _9 j/ A9 R
[color=#333333 !important]添加bind为自启动服务
0 H! l# U, A3 M% u0 ^) B[color=#333333 !important]systemctl enablenamed.service/ g& E: n# k( h1 S3 L) l
[color=#333333 !important]systemctl restartnamed.service
% p, ]+ v* L- R' k! G) W [color=#333333 !important]查看启动状态
' Y& j: Z; _: B& g$ \) I6 F[color=#333333 !important]systemctl statusnamed.service
7 H/ ^; z& l' j& g, Z8 @ [color=#333333 !important] 5 J; V( Z0 e) U
[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F)
$ u3 _! |( o+ _ |/ k! ^Iodine
5 X4 |, E) k4 u. s
% b) ~& w. X7 ?$ B* R+ O[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。8 j9 _5 H! f/ }2 X6 W8 M: K
安装
* X" J1 F0 E& C& q8 @( V: k" U4 l# ^8 S% A! c( j3 Y/ q
[color=#333333 !important]下载地址:
# u& {5 S5 Q9 n) ^: d[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip2 S1 E& b* D: R7 N' X+ T( T
[color=#333333 !important]unzip 解压$ j: E1 M: q! P: Y+ t- M9 L
[color=#333333 !important]cd iodine-master! I) F+ y5 G! ~( j$ T5 y
[color=#333333 !important]make
* _3 l$ M/ R! G) m[color=#333333 !important]出现报错
. P$ J0 q3 Y3 J7 x! \2 q[color=#333333 !important]
9 D' }+ V" Y' ?3 Q" m V* g- t[color=#333333 !important]yum -y install zlib-devel
; t; H& c3 w* c9 n4 \/ E[color=#333333 !important]make;make install
7 d ?( g, }3 j% T# s) }( [2 _" `[color=#333333 !important]安装完成6 ]' m' z6 K2 P
[color=#333333 !important]进入 bin
5 ^9 O6 n; b6 e[color=#333333 !important]iodined 服务器
- m+ @& H* t* T- G0 Y9 ?[color=#333333 !important]iodine 客户端3 K0 u& R) V& P. w# a- r i; R
实验测试$ I$ L3 V' D& v2 L1 |+ Q p. L
4 u" ~0 `5 A' o5 J6 O4 r6 b8 g
[color=#333333 !important]服务器
/ \1 L) u$ z; h8 S9 e& B[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com: a4 b: _% c) Z. l' c% B6 ? R9 I
[color=#333333 !important]-f 前台显示,运行后一直在命令行等待
& w" P7 e. @9 g3 d8 g, P[color=#333333 !important]-c 中继模式|直连模式
: f" `- ~5 o$ w' b# _[color=#333333 !important]-P 认证密码
1 f! D; j* g3 W& {' j2 T [color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。
( @; i4 p6 [9 f# u, }5 y[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。
i" X9 z. k/ S, g+ ? ?[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡
( ?+ X3 u6 f6 M& U* {; ?( m[color=#333333 !important]
+ R6 o3 _* J% H+ l" n6 H) w" o, z[color=#333333 !important] % b k) N* e4 b
[color=#333333 !important]客户端" M+ a9 _3 N8 q: @
[color=#333333 !important]./iodine -f -P 123456 192.168.1.7 ns.dnstuneltest.com+ T" ]" V5 w4 r9 _0 m
[color=#333333 !important]-f 前台显示
/ h% q1 | B; C9 n[color=#333333 !important]-P 认证密码
8 }. p4 t, t. g) P i3 K[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析
]( o1 G- T. l' m+ I' D [color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。
$ ~- e* p* U, j3 V5 T/ m+ f1 C& X[color=#333333 !important] * D L1 v- E# O, M
流量包分析5 @, O% E8 O0 x( i$ D5 q/ x* e
; l/ _9 g3 R$ d c% n[color=#333333 !important]抓包3 L. B/ r: t! `' C$ k" b3 ?" s
[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap
$ S+ H: \6 [" _* C$ {; S0 X 建立链接的包分析: a. `% B( w* Z; S
$ Z1 R& g" X6 r5 n[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包* |; V! t& ?4 b: F( O8 z6 H7 O9 H
[color=#333333 !important] 4 C2 x4 b3 w. K4 N8 R5 F
[color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀
$ O: d. i7 h" a2 a# E[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据
$ Z& ]9 R: @& O0 d& _7 b[color=#333333 !important]
) Q) D; Z; p# [: y9 v/ S) f, X! I[color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)- H' e5 d) w T a& V8 M
[color=#333333 !important]
' C, t1 @& p# Y0 ~3 M[color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。8 [! k$ G3 E* v }9 [: H
通信流量包分析
/ [$ [% R. t$ L! u6 C
7 ?2 I9 z8 o5 |[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析
6 ?1 C( ~* g, G. l; `[color=#333333 !important] 2 N- p/ ^9 `' m; n0 D3 L8 o+ c
[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。, A% c2 j: c. l. y" k& K
[color=#333333 !important]05fanyi05baidu03com+ ]; M* ~" D6 A0 P* u9 @2 R
[color=#333333 !important]
( B; d) W+ g/ e[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。
" L) Z( c# ?6 c5 Y; \0 R[color=#333333 !important]
9 B1 J/ ]2 N; u) i1 ^suricata检测规则(并未测试,仅共参考)/ c6 u% `: P! |
/ d j5 `3 \4 J/ z ^( N. o) G: L( ]/ G3 K4 v! A6 c3 s
- ( ^/ h+ w5 m/ O& Y0 {
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;)Dns2tcp2 M H0 Y$ r+ ]* |# @; ?9 \0 G1 L! x
2 w: J. _* N2 X: H: x9 W. s# ]安装$ S! a7 R# u q0 l
( s! b) X. t' a8 g' J3 q" S" S1 V
[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell P) }; \: o! S+ T4 b. ~
[color=#333333 !important]下载链接. o; \ M0 v, ?% ~( Q7 S y" s
[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag
# M# Y* X+ x, g- l- n0 d [color=#333333 !important]提取码:t1rw6 v$ J% }6 e# t I
[color=#333333 !important]安装编译) @+ m5 X% D+ v
3 g. b* s3 B7 R3 E
- 6 t/ }4 S0 E4 }4 m
./configure make;make install[color=#333333 !important]服务器端' Z; A: X: U* h
1 b: n+ @& K% n8 X' F. N, X7 j- * H. W( m) U) V
server/dns2tcpd[color=#333333 !important]客户端
0 P3 p* J" q1 q, }4 H; _+ T7 z
$ _ d7 x! T3 ~7 E* i: J- # B) b3 t/ [. z% q
Linux: client/dns2tcpc windows:[color=#333333 !important]云盘直接下载windows版本,或者下载9 a& j" z- u, |) c6 \; F
, R' j. g1 m# n
% H$ T5 C" \! t& f& R6 H dns2tcpc.exe实验测试. c9 V8 m. u' `$ C/ a5 c2 E
# F U9 w# e' n, Z% A[color=#333333 !important]服务器端& z! L! @+ x8 L. j* Q% i
[color=#333333 !important]1.创建配置文件/ i f: X; P( p. r. Y
6 H- B" g+ \* K7 ~5 I, H8 _0 J- 8 ]+ u! I: f) n) z
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.启动
. I( t2 z1 A0 D. T5 o( Y" l" p! \7 M8 s+ t% ^8 c& }7 l* \9 F8 @
- 1 s- ^) l7 T) u4 h* ^( s+ k# B
./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接2 B* r! T3 J( N+ L, D9 H
[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务
+ V) m* A6 a% }[color=#333333 !important] 
4 x, [2 |. ]7 d W[color=#333333 !important]客户端7 I, n& }! W8 {3 \* u
[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 2+ r$ S5 Z7 `) R. c# y( o3 U' p8 W9 `
[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源2 X, K7 \% t8 q
[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP2 G! o: {. K' q2 ~! u
[color=#333333 !important]-l:端口/ q1 _; H! x( W$ o7 [+ C. t3 Z
[color=#333333 !important]-d:是否为调试模式 2 等级可以省略9 P1 t% p6 B5 q" K0 J
[color=#333333 !important]
2 W% ~3 E2 j* W. Q: U) `. N8 h; P[color=#333333 !important]客户端使用访问服务器2 [% X! R& u9 |, ?/ O
[color=#333333 !important]
. k! r: D- a9 [流量包分析2 K0 d+ x3 b. J$ n! h9 R
; L5 b( B: H- y9 c' C. i- |[color=#333333 !important]建立链接并未产生通信包
1 X8 o4 W7 H; i4 X8 x8 ^1 o' X[color=#333333 !important]
- u" Q; ?9 h8 `1 d& T6 {[color=#333333 !important]使用ssh访问时,才会产生数据包' f5 c G- w3 Z. G O$ Q
[color=#333333 !important] 7 x4 |4 S1 K+ w6 c
[color=#333333 !important]数据包分析
# p% w ~) t! e3 r1 i[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中# A# R1 {7 Z& \/ Z; }
[color=#333333 !important]
8 v) ^) R4 L% @) X9 ^- [[color=#333333 !important]
+ q/ a; p6 b0 J/ S: L" O% K[color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。" h0 c* a! y& r# S# S- M
Suricata规则检测(并未测试,仅共参考)4 W/ ?+ ?7 P; U% e$ c' m! w# \ z% h
5 h! I0 |' N) @ F[color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测' P" r2 [! l2 l/ ^
- B7 L# Z; [! Z6 d( S9 C
- + K) D+ |' ]! _
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; N* z! k! Y: F[color=#333333 !important]小白水文,求大神放过. z5 k& y0 T4 B( e4 K5 k
[color=#333333 !important]pcap包下载地址:
6 i% T& w6 s' @" d; {8 G2 r[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw
0 m, V3 r2 p/ G2 W8 b- ` [color=#333333 !important]提取码:n5ha! q6 q/ Y5 E! H1 `+ Y- ]
[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载" `" o- _6 |9 M, Q& I( K

% I' d0 Q2 ^( L" V2 B( L精彩推荐
: |+ F9 b( c+ C* r3 u& A
8 k r3 k j t' c3 v6 ?! |3 ?3 a2 ^$ }, f( P2 j. _

# G5 i0 G* Y$ V( v1 V4 a5 V' l 2 @4 E6 U$ e# B
  2 D( q, ]; n' }& T4 U! E; Z+ s
2 ]/ i t* W' _7 [6 z来源:http://mp.weixin.qq.com/s?src=11×tamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=1: i6 b8 s5 z* W
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|