|
|
DNS隧道9 l8 l% H; j k7 j( D6 _1 @; d4 }6 C! s
9 i! w3 n; I! A6 A- K) v3 a* @9 d[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。
" @3 E- M+ I$ e( A" k/ R/ k. y- C实验环境
# G/ c: T/ R( h# {# l J) {* }8 t- M+ v- J7 N/ H! W* L
[color=#333333 !important]CentOS Linux 两台8 N3 S6 Q& C( r1 l% f& }
创建DNS服务器0 q" z5 t1 F- x4 z# Q& I
; I+ I0 d0 W6 c5 x+ Q0 L1.安装bind1 @& v" ^( s0 w( B) _! [# {( B
/ E$ ^' s: `6 c4 Y# A
[color=#333333 !important]yum install bind*% W# r; Y+ E9 T9 h
2.配置named文件6 |8 w( d7 g% ]
! L/ ?: ?# L0 o. V" V& ^3 i. S[color=#333333 !important]修改/etc/named.conf- w+ Q' Q; {0 j: n: R: M
[color=#333333 !important]将下图中选中的地方改为any
. r* X: t* a( P% i* W[color=#333333 !important] % p6 L! A& [ |" r' r2 A: {
3. 设置NS记录,A记录8 Q! g/ F3 e( z9 T! B- g0 `9 N
; A( j# i" Y9 h9 s/ y R: z9 |; b[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件
( M I. [+ v' e/ e, W9 J. r% C[color=#333333 !important] 
8 K; y4 T; S6 |6 ]9 \0 E[color=#333333 !important]增加正向解析记录
& l& S9 o; [% P, j[color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字7 a5 W( B# N* |6 y" T$ ^2 O, Q8 v
[color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel
) e& ^* G7 Y& n1 a [color=#333333 !important]修改文件如下0 i( K: @( f8 J" Z
[color=#333333 !important]添加NS记录,A记录 E* S" H" s- j8 ~) ~
[color=#333333 !important]
3 q5 K1 Q& w0 C" z& G[color=#333333 !important]添加bind为自启动服务 \: u( k9 c% C7 [: q
[color=#333333 !important]systemctl enablenamed.service$ H+ {+ |9 E) }2 V
[color=#333333 !important]systemctl restartnamed.service
$ l* {3 O, T. \ [color=#333333 !important]查看启动状态% q/ B' T: p8 @" Q& {9 B
[color=#333333 !important]systemctl statusnamed.service# ]& u6 S( `' S2 \0 P9 r& P8 V$ z
[color=#333333 !important]
! B2 P+ j! W9 e' c/ I# d; h[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F)0 o6 m7 P3 k, p4 l
Iodine
; v$ q; M. S$ Y' P! K$ J5 U% k/ F- s1 L6 \4 @
[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。
% H( n9 C6 d! k2 y4 D. v2 r安装
6 R+ V1 m- @9 u e: P% k" C L4 p) {" U3 l2 Q+ f8 L4 j
[color=#333333 !important]下载地址:
! j& {1 U4 T( H# [; v. |# B9 b' X) B[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip
9 w. k' l* y1 x# Z9 @( G/ c3 r" E [color=#333333 !important]unzip 解压
3 O& I6 s' H$ j/ j[color=#333333 !important]cd iodine-master
6 Y6 t+ ~& b; `, u& F/ {[color=#333333 !important]make( h% b/ \8 O/ }. U6 ]# p" @* J
[color=#333333 !important]出现报错4 L/ e! z. [1 k. k: ?$ \7 M* i
[color=#333333 !important] 6 e7 Z: Y4 F" `
[color=#333333 !important]yum -y install zlib-devel
& D: m; K8 j+ Z9 A[color=#333333 !important]make;make install, n* x- [; F5 I% h- |# q8 H, s3 Q* F
[color=#333333 !important]安装完成
% Q/ v8 ]# _( Q: D6 D7 @$ y) _[color=#333333 !important]进入 bin
* D) g! ?1 t/ D$ }- P[color=#333333 !important]iodined 服务器
; ^! z4 | U; d; G* Z[color=#333333 !important]iodine 客户端; V# r( Z! R7 C. m$ @
实验测试5 A w' f& k" Q
1 ^) l2 N* n u7 V# S
[color=#333333 !important]服务器
Z) s# f5 ]$ E- v; o[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com4 q! L' n0 n; J) ^) j
[color=#333333 !important]-f 前台显示,运行后一直在命令行等待
9 p% X* I1 a8 r[color=#333333 !important]-c 中继模式|直连模式- _+ I3 [1 ^5 z( Z
[color=#333333 !important]-P 认证密码+ P. n1 I) D* G5 _* Z7 M/ Y
[color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。) K* ]( v: A' y' V
[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。2 v9 e8 Q8 f' P5 C/ @
[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡! Z3 o9 Y8 `6 i
[color=#333333 !important]
; |, m, {. H) ][color=#333333 !important] 6 |; i* u& k' G$ R U
[color=#333333 !important]客户端
5 g! R/ T; {6 n8 H$ r5 ^[color=#333333 !important]./iodine -f -P 123456 192.168.1.7 ns.dnstuneltest.com6 }5 [3 k5 \9 G# [- k
[color=#333333 !important]-f 前台显示
R, j g* Z3 K/ h6 \3 i[color=#333333 !important]-P 认证密码
' `$ T. y/ j, |[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析
8 R# @3 Q9 p8 x [color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。
. P% p: a' H; s. X[color=#333333 !important]
( o/ T+ G5 ?. o" b+ m流量包分析2 N |( L* g, r5 N
) @- n9 i9 \. }( E! F3 h" V[color=#333333 !important]抓包
, `# U% n! b- p[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap
" W# D/ U6 E2 V+ v 建立链接的包分析
: T5 O# G. i- _9 Z- K% A1 ~7 x- L, A7 d! q/ T/ u+ }2 t
[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包3 D/ J- k+ h+ y; w+ W+ W9 y
[color=#333333 !important] }& `. B# Z1 y
[color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀3 i& A( B- U0 F7 R$ i( d& H
[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据$ k* I0 ~. t! L) u& W1 k
[color=#333333 !important]
5 A6 x: G5 v1 @& g+ [1 f[color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)
4 X0 w$ {, m* \. L/ H4 K[color=#333333 !important]
: S. {- s0 i# h j, \% V- ?; C; W[color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。
0 F. z8 k% J" ]4 x1 a通信流量包分析
. B9 [3 O, H9 e$ A7 n; c2 n" @) v5 L9 F* N& ]; ]/ Q. h+ p1 J% ?2 t
[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析
& u& r. _- c8 Z; e M[color=#333333 !important]
, Y+ t$ i: T. _7 x[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。
$ F; i4 N" r0 w& }[color=#333333 !important]05fanyi05baidu03com
* m' J' v. {% l( ?- a7 l3 L[color=#333333 !important] # D) ?# o9 T! h! W; u: _( g
[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。 f+ n4 w! h! `1 s7 r
[color=#333333 !important] $ P$ t3 s7 A" V9 m2 z: k! n
suricata检测规则(并未测试,仅共参考)
& G5 h. o# Y; H8 l3 K7 U, v' \: b$ }% s" V; j
0 |: N' W- F1 \- p: l
1 u2 B- A, T$ y0 i9 r 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;)Dns2tcp8 r, r+ ~$ x$ V& z; V1 E
6 l: Y" L" A; _/ d安装
3 A4 r/ P# e/ Y; ] m" v
1 x7 q4 r. A- E& s! D[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell
- _) I! m) h( h* n; P[color=#333333 !important]下载链接
/ k& ^5 E+ U" u2 m) W) z% C[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag. h7 r) x6 h% Q' s# y( S" s
[color=#333333 !important]提取码:t1rw# d1 v- ]! G1 W& }, d
[color=#333333 !important]安装编译
* X2 b4 ~5 V/ m( N
+ y. U# q3 |: _, n+ M" F. s% c
# |3 q4 o; X) {: K, B ./configure make;make install[color=#333333 !important]服务器端5 m- q5 I* T& N* e/ d% l5 T
% Z: S- s6 H- C" d' c" p' E
: C& T6 q: k) o* n6 D& h server/dns2tcpd[color=#333333 !important]客户端9 i& v9 j% P: I
% g) D1 {7 V% a4 [" S$ N
- 3 r7 |3 F* H. {) e7 F7 G
Linux: client/dns2tcpc windows:[color=#333333 !important]云盘直接下载windows版本,或者下载- o6 ~9 s3 e) Q- F9 ^3 W/ c
/ ~0 x. ^- M4 Y' C: L
0 m# U2 ~! z$ `& K8 K) E2 [( c dns2tcpc.exe实验测试, Q0 ~" C7 m7 a( v
& R% G# J; _0 n2 `7 n' J, ^[color=#333333 !important]服务器端3 K! Y$ U' t3 |8 {% V1 H7 z$ w# H$ c' J
[color=#333333 !important]1.创建配置文件# i! M R* O: H$ m2 I2 K; f& |. X
1 A+ r* x/ o0 A8 _- 7 Q# R7 m1 t: M/ P7 f0 }
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.启动, H. j% p( |, t d( u
) \, Z$ `" I! d6 q( V
, J8 z! h; {( X% v* m ./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接
- L9 V. O2 G3 |- K$ u& G% N* W[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务
0 w) q5 [/ P3 ^- G. N/ ]( J c! V1 v[color=#333333 !important] 
5 I) i7 K& p& V6 v, f[color=#333333 !important]客户端
6 X9 H' u. T4 l$ a. f[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 2
5 q5 E+ ^* S8 k1 `9 s w[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源
) u& l, U) e, Z8 m[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP8 ?# s0 w( z# H/ M9 S
[color=#333333 !important]-l:端口0 X& ]! I6 l, z0 w
[color=#333333 !important]-d:是否为调试模式 2 等级可以省略
' e: T; X& x0 \# c. G [color=#333333 !important]
3 a0 C" h4 _1 c s/ |" o[color=#333333 !important]客户端使用访问服务器
: E6 s& A# V' V% P7 @' s[color=#333333 !important]
, x' X3 u- d' G8 W: h. y' H流量包分析
+ v5 d) |9 O, v6 d6 H6 X& r3 n( g
* `$ W$ w1 j* N, z. W[color=#333333 !important]建立链接并未产生通信包
- c9 M' S; _1 t[color=#333333 !important] $ z0 o- F \( u3 E" z5 f$ o
[color=#333333 !important]使用ssh访问时,才会产生数据包0 O( ~$ [0 h i0 S Z) r
[color=#333333 !important] j+ \+ _5 G& X f" M
[color=#333333 !important]数据包分析
; K2 f7 _ @8 a& j: e# ?[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中' w7 k/ _5 Y% p$ }
[color=#333333 !important]
& e6 m9 ]1 x" s0 v2 X4 Y* c3 r[color=#333333 !important]
! }9 K; n# j, K! { z[color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。: S0 R [0 `% l0 ~" D8 E
Suricata规则检测(并未测试,仅共参考)
" ]5 L% d5 t! [- h; Q+ Z4 k q' m. W: X8 _3 D4 G$ B
[color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测
( q8 W$ m5 _. x$ ?$ m) _. m+ O8 Q4 h2 b) K$ N
) X) X; q0 u( x 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]结尾! G8 O! G+ |' z
[color=#333333 !important]小白水文,求大神放过
7 A H8 s5 ^! M% t7 i# S[color=#333333 !important]pcap包下载地址:
6 _/ Z. ~1 A8 _[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw
5 ~, |+ {6 Z3 ?$ v [color=#333333 !important]提取码:n5ha
) K6 @: a8 r0 ^# K[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载; S9 H* c! G- y7 e

( q( W E2 I s# @精彩推荐
! S' _2 m# U8 W. z- w 7 W% V5 P, B0 ]& B& a
7 B3 Q' x. _" T$ F/ j( F
# n0 {: J8 X4 }+ S! c; \
! w) m4 e3 L" R; s; F6 C5 s
  4 k# t+ N0 W9 e6 Z% q
- @. ~, b7 K. W0 N* V
来源:http://mp.weixin.qq.com/s?src=11×tamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=1
' _" b( o2 E( L) ?; @免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|