|
|
DNS隧道
% b o! b. f6 ]% K) B$ f, a0 @3 V0 E3 E" h; c
[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。
6 a: {" I! }7 w- l. G实验环境
S/ S2 q d3 Y# g. z/ [
6 a/ Z; r+ M( c( k& C+ b$ C' G( f[color=#333333 !important]CentOS Linux 两台6 E* x0 I0 M# Q6 U, H
创建DNS服务器
7 G7 B3 v R" c9 S# M6 D) @ v4 t4 Z) U% B( x; K4 R
1.安装bind
/ a7 j/ ~: O- E2 O5 i% ]' x+ E8 A9 W2 ~$ ~- c
[color=#333333 !important]yum install bind*
, J( _8 E) u+ r# Q( p9 n 2.配置named文件. S& m6 y/ e+ W& q, E8 [. r
# p/ Z4 z J1 }' x[color=#333333 !important]修改/etc/named.conf
' j/ I, C1 p6 L- {) ]# R [color=#333333 !important]将下图中选中的地方改为any/ p$ t4 `$ U( |/ g7 M1 N
[color=#333333 !important]
) M+ O4 x/ U3 v$ u- V3. 设置NS记录,A记录2 k$ f* C) w7 D% W$ T
0 i v) S/ r. q* G, \8 b+ G2 u& b
[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件
4 [. n4 [! Q _+ [# S+ m[color=#333333 !important] 
4 z! M f3 q+ Z$ P. |' w[color=#333333 !important]增加正向解析记录
8 V- l, D$ J/ r0 a[color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字. m% e: b9 d ^% R" G" Z# Z
[color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel% V, A Z0 L9 S: {# q' }
[color=#333333 !important]修改文件如下+ J" T. i$ b0 U. C" v
[color=#333333 !important]添加NS记录,A记录
8 E$ _% J: k( S/ H2 C( K3 O0 q[color=#333333 !important] 0 T5 W0 ^" {: P) I. x- J
[color=#333333 !important]添加bind为自启动服务. }7 Y7 ^! x3 j3 y2 P4 Y
[color=#333333 !important]systemctl enablenamed.service- |0 l* F! e# O! \% _. d, Z
[color=#333333 !important]systemctl restartnamed.service
. Y7 i N3 I9 V) ^; @ [color=#333333 !important]查看启动状态
* t( c2 s$ U: e[color=#333333 !important]systemctl statusnamed.service
" A! U0 _! U: n1 I [color=#333333 !important] ) L9 n, e* c. t4 R8 K
[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F)" t( c6 [- Q" T7 w+ a
Iodine1 [! K* e f d& u
) j4 X0 E1 D( z! @$ ]7 O1 b[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。0 ]2 z7 }# M* W1 D; M$ C
安装" ?- d. B5 G* R. f. q
$ A% L- ?2 E# v4 e$ u$ h[color=#333333 !important]下载地址:
* D* f) w) `" w* T$ j9 v[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip: r0 J/ s. V4 P
[color=#333333 !important]unzip 解压$ Q' y; ]3 h8 T7 j& L* J
[color=#333333 !important]cd iodine-master* F5 V5 u8 X$ _1 J! @
[color=#333333 !important]make4 O6 R" ^+ v9 c" I; p- g( n, S5 n; y
[color=#333333 !important]出现报错
8 C/ l' b8 g: A Z2 L2 q( [[color=#333333 !important]
! V J3 w9 n2 R; W[color=#333333 !important]yum -y install zlib-devel
1 V+ E3 P# c1 [( d' M[color=#333333 !important]make;make install# S7 X& ^4 a% @# _* V- } K
[color=#333333 !important]安装完成6 n/ g- F; ]) E- E+ d4 q, `
[color=#333333 !important]进入 bin" B l. P( _; K$ S2 L- b2 ?' N2 d
[color=#333333 !important]iodined 服务器
' N6 o6 A! N$ J# O% X[color=#333333 !important]iodine 客户端' d% H1 o Y6 d x
实验测试7 Z1 g4 j6 M* _
, A: h5 Q8 x, l0 ^9 |
[color=#333333 !important]服务器
/ l9 U: D. x- ]) V6 f6 y[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com
; l4 w, v5 z& J[color=#333333 !important]-f 前台显示,运行后一直在命令行等待
9 V7 F) E, ]+ R* l' }! d( Q[color=#333333 !important]-c 中继模式|直连模式7 N& ^* N) T. U7 o0 T
[color=#333333 !important]-P 认证密码
. r$ b4 f, d- Y& W7 w; {/ J- F) M7 s [color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。
8 W, k; S! P$ J[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。; X4 U4 U5 ]8 M2 r+ B& X
[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡
/ r x" P2 @9 X: u" L! ?[color=#333333 !important] 8 ~2 T5 V7 d' P1 z; D/ A3 @% s
[color=#333333 !important] . H& d9 `1 Y4 I; a/ `( F
[color=#333333 !important]客户端
8 z) {+ V8 |- y) J: Y[color=#333333 !important]./iodine -f -P 123456 192.168.1.7 ns.dnstuneltest.com
6 x# m" S7 v* o: M[color=#333333 !important]-f 前台显示
3 I9 Q! }1 ~/ I0 G4 s% S[color=#333333 !important]-P 认证密码
, N+ [$ Q; p* l3 Z+ r6 t! ?/ T) Q[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析5 C+ e$ w. _7 E X7 d4 ^3 W
[color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。& |$ q% H2 v' i" S5 M }
[color=#333333 !important] j* K9 T* a; J- C9 \" e" U
流量包分析& y9 O% l+ [- m2 ]0 H1 L9 ?
6 T! i9 d1 O( ]% S: U6 L9 g
[color=#333333 !important]抓包- Q: d) S6 `8 T4 V ^. a% I$ Y
[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap
; ] I! q# m6 B9 U5 M* y- c 建立链接的包分析, B9 V' n9 m) l0 m3 b) g7 B6 a* u
2 r. @& B4 |3 y, h% _% j[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包
5 J1 n( y8 z P$ m, [: z[color=#333333 !important] I, @+ n. N; a c( X% C8 C
[color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀
4 ?3 |: M% p0 P6 a[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据3 q* Q7 z* I e' L
[color=#333333 !important]
$ u* e, I' |# D, Z0 X$ j0 Q[color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)4 _2 O, Q2 ~/ A
[color=#333333 !important]
5 I3 H5 r' P" H5 d) w[color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。2 y5 N; S) C# T) n6 w
通信流量包分析4 B& A* Z4 @' y0 x G
, r6 ^( ?: H2 j[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析
% D3 Y8 \( Q" D[color=#333333 !important] # e1 B1 y) d+ ^: {/ u
[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。
) u M+ D; m4 L6 d1 m$ L[color=#333333 !important]05fanyi05baidu03com: m. w% [ n/ N
[color=#333333 !important] % b( A6 w8 {. C, P% J ]3 i0 J
[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。3 _7 s4 w" R5 a* q$ f9 M8 I) M% Y
[color=#333333 !important]
2 ?9 C* I' l" L+ k7 vsuricata检测规则(并未测试,仅共参考). l) h7 O; Q) ^' s
1 E( A4 } f3 u! {; a$ J) H5 D- u, K5 a# e4 E
8 a+ Q. v( Q: a- N- P2 N" t% W 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; r6 t! u( y$ t4 o! t
+ U$ n5 R0 q" a" I
安装 X/ l3 x+ K2 H9 I- @. J; c
, m. c3 o( Y% K# v[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell! R' F& Y* S; ?. }' P4 L
[color=#333333 !important]下载链接
1 I) d+ y9 n: y3 P# o[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag6 B" g! Q2 _. k. u
[color=#333333 !important]提取码:t1rw
7 T( W6 \7 }: \+ a, l* l1 }8 j[color=#333333 !important]安装编译
/ k$ ~+ k: x0 z2 `2 ]+ `6 Q+ G( _
`5 ]# x5 w [6 l- 8 g" W( R) S B1 ]% A
./configure make;make install[color=#333333 !important]服务器端& _' c* l$ E* w+ p/ x0 n; u
+ Y$ U6 Y* P; M$ U) p- P1 O5 K
- ( d1 A$ m, V2 j% ?( q
server/dns2tcpd[color=#333333 !important]客户端
/ W7 z1 D1 I1 p
) r, `$ e( @6 Y( q- b- & I7 |/ S( r* d* J3 ^: N
Linux: client/dns2tcpc windows:[color=#333333 !important]云盘直接下载windows版本,或者下载
& G- s9 j4 ^1 n% h" [
7 e1 D& {7 t( M8 l' s- & U2 ?% i8 ]8 l+ a- @% d
dns2tcpc.exe实验测试$ _0 g4 I, ~$ t3 O) e4 }
+ R, ~2 W! {2 M8 o8 M
[color=#333333 !important]服务器端
* z" H3 l7 l, i[color=#333333 !important]1.创建配置文件3 E9 R. D7 {" Z% M7 ^* u4 r
6 Z. k" Z* i1 F: l
- * u" O. m) ^9 `+ `
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.启动1 R! y6 S, @: y+ B
* }3 p+ T5 I J6 i/ P" A* b# J
0 N, N9 h! |& ` ./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接: [- q4 s- _8 t3 Z; l/ n5 e5 k; B; W$ h
[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务4 ~9 Y X$ S% K/ @& M# h
[color=#333333 !important]  + o+ u F/ O( N1 g# P
[color=#333333 !important]客户端9 L4 {' ^9 T; d+ x
[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 29 F k; U- o( W( Z
[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源
4 M% o( l. z* G9 f0 v% U[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP" K, |1 |$ m8 _2 z: f, P
[color=#333333 !important]-l:端口, C9 H& h, }" O. z
[color=#333333 !important]-d:是否为调试模式 2 等级可以省略+ w6 a- ?% N$ t/ ]1 w
[color=#333333 !important] 5 m ], @! |4 y
[color=#333333 !important]客户端使用访问服务器8 V; @9 X% N3 h8 E% S
[color=#333333 !important] ' X" w) w2 C$ v( h7 _
流量包分析
$ G& E) c- R; @0 w1 D' c. m
1 x6 u6 ~+ h# s2 d* y[color=#333333 !important]建立链接并未产生通信包
( k% l1 o( B# M2 U- s[color=#333333 !important]
9 i( T8 ?) c' O C% z# @[color=#333333 !important]使用ssh访问时,才会产生数据包: p' R4 o7 c. s% f f+ p. K' _3 R
[color=#333333 !important] 3 p. k/ L- r+ j; H- m
[color=#333333 !important]数据包分析
- s! y% O. E( @[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中
# q2 b* \: ?/ g7 J, u[color=#333333 !important]
2 H6 Q) J8 ~: X1 c[color=#333333 !important]
6 Z; \: I: o& `( o% D n[color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。2 B% l/ m1 s* e" C! D+ t
Suricata规则检测(并未测试,仅共参考)
! z, ?# T- {8 ^1 U2 [/ M4 F7 ^5 V( q
* G" B( I2 a6 G& _! P# D# r' F[color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测
# r* a) D! u% G) Y( d; K* _
* o' ?! s# x( N5 L I4 p- w& @
3 P+ _3 d. S! |* u$ I4 E 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]结尾0 ~/ D) @7 p8 m& b( I8 |- g7 q
[color=#333333 !important]小白水文,求大神放过2 {% @* D' n9 h0 y. v2 k- ^ y
[color=#333333 !important]pcap包下载地址:
7 @+ [) T& t$ Y[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw
, d& o) Q: C& \ [color=#333333 !important]提取码:n5ha
" W0 }3 K6 @) o( p# Z5 w+ o[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载
4 B' y& A4 e% D3 n1 Z
3 }8 I8 s( I. r! w8 Z6 L精彩推荐
4 V2 a0 d- n! C/ k3 I# [! |! ~! f , @) f7 s% J% Q6 B; z1 |
4 E6 Y: m3 i/ C4 ^5 k7 Y

8 c' v v: n9 H" k- |" H
9 Z" [/ T0 Y8 Z w& O. r8 q  
+ d+ H# M# l# d+ v
: ]2 k- f. e* {/ h8 n5 `来源:http://mp.weixin.qq.com/s?src=11×tamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=1
6 v! b( T- D* R8 `1 }+ x9 {免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|