|
|
DNS隧道$ M. G x! {7 Y% l" T. \& L
7 Z& x' C+ }9 j' e$ t[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。* i. b- A( X7 ^( ?! u
实验环境" R9 W9 ^7 m, @1 B
. Z# L9 d: j5 o. F5 t/ `4 t+ M. k) j6 l[color=#333333 !important]CentOS Linux 两台+ R4 p' d9 i6 L. w5 s$ @2 |, j
创建DNS服务器
4 w) ~. p, p5 Z$ ]& z
( \' ]! M- ^, P' P1.安装bind$ N% e8 @) y9 s" s: k
1 z( ]/ l9 @6 P4 g" M" b. C
[color=#333333 !important]yum install bind*8 m3 [0 B4 b: q+ i. i
2.配置named文件; [) x+ {( n/ k
, }% ^* [9 {. A, C3 V' J% _[color=#333333 !important]修改/etc/named.conf! v+ V h) M0 ~) l: e: ~
[color=#333333 !important]将下图中选中的地方改为any
. \4 }& ~7 G6 s/ l% x[color=#333333 !important]
! C8 l* {4 A8 R8 n% K j3. 设置NS记录,A记录# A; V$ g( C: I8 Q# O$ U
6 R8 I+ W; j! H) G# G[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件
3 |2 p! P; o* ]$ t, x[color=#333333 !important] 
. ]- e7 }8 L" G4 d: L* O, r[color=#333333 !important]增加正向解析记录$ s1 @$ G5 q' K1 I6 l4 a5 k
[color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字8 ]1 i1 }: z/ J; o X; E) s
[color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel7 e6 V* ~% h7 D l7 n/ k6 r
[color=#333333 !important]修改文件如下
! {2 V6 P# L: A' v[color=#333333 !important]添加NS记录,A记录
( v6 E1 r/ m. i z& p[color=#333333 !important] ; l+ K/ _9 x; x5 i
[color=#333333 !important]添加bind为自启动服务' a& p: ]' F+ M: a, _# Z
[color=#333333 !important]systemctl enablenamed.service- y: i. ] H' n7 h7 R" S: l
[color=#333333 !important]systemctl restartnamed.service
; n' `5 R% z6 `" _ [color=#333333 !important]查看启动状态
! K: e. h) F4 i' B+ }3 ^! Q[color=#333333 !important]systemctl statusnamed.service( D0 t) }8 t' o7 I5 S
[color=#333333 !important]
, L: j/ B _" @9 f4 r; C[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F)
4 P7 ]. x7 c" l4 MIodine
1 ^: Z7 c% x5 Z5 N1 X) L6 {
/ c. ~- k! _- e f) H$ o* D1 f[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。
' A. y X0 b8 l$ N" [3 F安装
& r3 L) z3 v0 j2 k
, P" s. Q5 F+ E7 z% y[color=#333333 !important]下载地址:: }+ p: |$ {: e4 r4 E$ X) k
[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip
! v/ n8 I4 o4 V [color=#333333 !important]unzip 解压* y4 y% Z/ V) F- _- G$ `
[color=#333333 !important]cd iodine-master& q9 _! I6 v& i7 E; Z1 V3 I' ^
[color=#333333 !important]make
9 b* ?% a; H8 G( k( i d[color=#333333 !important]出现报错
1 a. m* j- l" b( f7 z+ j0 i w6 ~[color=#333333 !important] 0 x; o& G. m" b7 ?5 {6 |( k2 }
[color=#333333 !important]yum -y install zlib-devel% N& c8 c% |7 X- R, F% a' T
[color=#333333 !important]make;make install
; L4 R/ r% v8 I% h9 I5 D) D2 C[color=#333333 !important]安装完成2 Z8 _0 y/ m# }0 _
[color=#333333 !important]进入 bin0 R, ^# F% [, J' v7 F
[color=#333333 !important]iodined 服务器
* V9 s8 t% ]* q0 k; i6 J/ u6 _% T[color=#333333 !important]iodine 客户端- T/ L: [ N! `: l4 {5 G
实验测试
6 g& ~, E8 Y" o3 F7 e9 g
* b3 | k& {5 a1 p[color=#333333 !important]服务器
" M$ h! A. G/ N" m5 e" J8 ^4 E[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com) V# B# s- H& S. R8 l$ i& R3 n W
[color=#333333 !important]-f 前台显示,运行后一直在命令行等待& j3 ]# i2 k6 ?9 i( k& ~
[color=#333333 !important]-c 中继模式|直连模式
0 u# e8 ? M6 X, G; p2 M[color=#333333 !important]-P 认证密码
$ I9 }3 R! P5 X4 r [color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。
* p+ x! M8 K6 w6 Z7 L[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。3 p5 ^, I7 E5 Q) [) e# P
[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡1 I W* l/ t2 b; Z& R+ K- P! {
[color=#333333 !important] 4 o( k3 x7 C$ K) H3 o- E
[color=#333333 !important] . u8 I6 s/ Q3 a6 F, y- z* y
[color=#333333 !important]客户端5 O9 \; j" n+ ^+ _3 X
[color=#333333 !important]./iodine -f -P 123456 192.168.1.7 ns.dnstuneltest.com
9 F$ h7 D1 A: u2 m) e2 W[color=#333333 !important]-f 前台显示4 o- }5 k* {% v' K8 a5 d
[color=#333333 !important]-P 认证密码2 g& Z/ L& A/ ^ C5 |( I
[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析
+ c0 [& y$ k7 F% \0 k3 g2 r2 J [color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。
: I' S2 H/ v1 w" [7 Q# T4 x$ r[color=#333333 !important] ' x1 |$ ^& N# U, c
流量包分析. _& x/ _) Y7 f- {/ c5 o
$ k2 U) f3 `/ g; O m$ ^
[color=#333333 !important]抓包$ \ G2 b5 w0 ?+ P2 ]: b
[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap) d X, @( }9 D' `3 a/ e# ]$ W
建立链接的包分析
+ q0 i+ b5 L; V: l) D
) c, y T3 T% C5 W8 K1 K[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包5 k8 a: s# M" F
[color=#333333 !important]
" T4 o8 P" y ~' s# O1 _7 S[color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀
0 d- b8 I7 p3 W* m3 F$ l[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据6 o1 h% m1 D) {! b5 y5 D
[color=#333333 !important]
0 K; c2 D& ~5 o7 l5 o[color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)
; H4 x9 Z9 ^- [. ~[color=#333333 !important] ( Q4 [. z6 J2 R+ _% e( k2 K
[color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。
/ l& R( D; y! [* g通信流量包分析
1 X% a: W, G, l
- L, O& A+ Q5 j2 g' U; I[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析3 _6 K* y- k. K+ P- n7 _6 D
[color=#333333 !important] ) M: O; e$ O$ F& x a2 i- U
[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。
$ I& |; U! F/ Y" @; P1 ^[color=#333333 !important]05fanyi05baidu03com
6 @- l, l; E6 V[color=#333333 !important]
- j' C: [" b) h( m# v' k[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。
5 D# ^' p8 M: y# b* m[color=#333333 !important]
: I2 \; @( |! \0 {+ Fsuricata检测规则(并未测试,仅共参考)
. W. f! j$ h2 L4 w6 i; L' a" C' W9 @# W% H3 \( X8 p
# V! r" {9 o; O
' }$ Z6 E) V6 F2 P. B: z' e9 E, | 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% q R4 C; F5 e
6 H3 }0 I. m9 \$ n6 {' c+ X
安装
" M; b% P4 A) s4 u0 ~& S5 g" ^/ t- t& K6 G4 Y
[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell. D( \/ C# r( r
[color=#333333 !important]下载链接
$ L5 e6 s0 A& Q. P% O3 J[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag+ u3 ?& g' d" k [) C
[color=#333333 !important]提取码:t1rw0 F; o, h' l) a
[color=#333333 !important]安装编译
6 S: j( \5 H! O+ G
. M( b' {5 b/ h& D
! V W6 j( _4 T1 \8 u2 z' | ./configure make;make install[color=#333333 !important]服务器端
' H l* q1 j# x9 U& k, c7 ~ h# A6 ^9 D; J4 _1 U" M z6 _; k: U- s
" ^' N r% G+ s8 n server/dns2tcpd[color=#333333 !important]客户端
/ C8 A* U: Q+ D, s5 Z
* G' `% H* q& j2 m& y$ e1 @* Z- 0 m0 S1 i; y3 ^- M$ f: A b# _
Linux: client/dns2tcpc windows:[color=#333333 !important]云盘直接下载windows版本,或者下载
9 i& Q- _7 U4 U% D) T
0 q% c( w* ?* g0 `( t
5 F. s) \8 p" q, L; C dns2tcpc.exe实验测试
- x+ K4 F' O" a/ z2 O. u# W/ }+ P |& ]+ ~' c4 N- [" s, o
[color=#333333 !important]服务器端
2 N i! `9 G3 T3 X[color=#333333 !important]1.创建配置文件
q# ]2 l" x" B% Y2 n! ]3 r1 F
4 h& v" H- A9 G2 W: c
' a" e, O, v: C) d 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.启动
[2 p& C: |0 @5 c; [$ d- c! I- `# B2 ?, X
- / S. F+ i2 G6 }7 b+ G
./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接
+ g( B9 z# x; y) d) O% ^[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务" J$ N- ?5 g/ `9 {" s
[color=#333333 !important]  & C/ ?. i" T0 `8 @
[color=#333333 !important]客户端) D% [2 v: V( E- S( P
[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 2
7 z, B' i; i- F/ a7 i[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源
# z& X/ f/ N; a. C' k/ w[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP
8 b6 G$ _5 N4 q[color=#333333 !important]-l:端口
$ z7 H* b* g- o/ ]: n[color=#333333 !important]-d:是否为调试模式 2 等级可以省略0 H9 n& j( ?6 t* n E7 S) \( S/ e5 `
[color=#333333 !important] ( q! D1 N" ^. O a4 F2 D
[color=#333333 !important]客户端使用访问服务器
( ^2 J& M- Y, c% I) v8 y9 f2 ^[color=#333333 !important]
2 V: o$ n3 p. r! j: ]流量包分析( ]2 ^. n2 Q# ?4 d( R* J
, p; F* t$ K8 j% t: ~ L$ t) _
[color=#333333 !important]建立链接并未产生通信包
3 L9 q. U2 b( O/ H! U$ I7 u[color=#333333 !important]
& R: r: G5 ~/ ~3 ]0 r6 Z[color=#333333 !important]使用ssh访问时,才会产生数据包2 a$ Z# x; w6 }9 m& ?( o
[color=#333333 !important]
/ E4 o& ]0 i, H" ~. {, s[color=#333333 !important]数据包分析3 h. x. @+ n' ^+ s! Y" |
[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中* Q3 {( O5 j! ^: g3 \
[color=#333333 !important] 5 [( F+ ?- H6 e/ L1 C# ?0 n! J
[color=#333333 !important] 1 m5 s1 c4 D& L% X
[color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。$ R1 ~* Y* Q; ]$ U6 N
Suricata规则检测(并未测试,仅共参考)
+ U$ V! d, x. T+ H' |% Q6 ^
* N( W5 K0 m8 d* g[color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测
, `. Z. x! a2 G1 N* Y0 \4 M p" }5 `7 i- Z3 y4 \) ~& I
0 [4 r) W5 {1 G' O) A* f- s) ~4 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]结尾
0 Q, ]. {# x4 L) L; Y[color=#333333 !important]小白水文,求大神放过1 W4 u n: f1 E' S: B9 C* E
[color=#333333 !important]pcap包下载地址:
' `- U( i3 W/ ]1 S[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw
9 Y c: C$ S$ o* l [color=#333333 !important]提取码:n5ha
1 K( e1 V( q+ _3 L+ s9 T6 L0 r3 i+ e# {[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载9 h4 \( J3 t1 {+ k' j' |- E, {3 L
6 V+ C+ I* j9 [* }
精彩推荐$ @0 U& n; V2 r: e3 U% |

' v2 H) M1 \/ p2 y5 A0 _% c' ]* @
; b ^0 t( }+ I* B6 h3 F

& _' _+ V! D2 g# o' B8 q  
& J& T$ {% y+ I* _8 v" r3 W9 ^5 R/ U* Z1 y6 Y+ {
来源:http://mp.weixin.qq.com/s?src=11×tamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=1
# `% k# i% j1 R免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|