京东6.18大促主会场领京享红包更优惠

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7567|回复: 0

DNS隧道流量分析

[复制链接]

13

主题

0

回帖

10

积分

新手上路

积分
10
发表于 2019-10-9 23:15:32 | 显示全部楼层 |阅读模式 来自 中国
DNS隧道5 R6 _9 G  d) {1 _* H9 c

" c0 O( l. D. {! M  Z0 \[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。
7 o# _! u- V4 k* \8 E实验环境$ _1 d- |4 p0 n  n

# l% H+ q% U! r3 y3 i
[color=#333333 !important]CentOS Linux 两台# ]: p7 O* V9 B/ P5 v/ k* l
创建DNS服务器3 s) p+ N' O5 Y6 l8 q5 o  n

7 ^: x0 ^* U( n3 H/ W. P1.安装bind2 o3 y, q- I6 C0 j4 l# N- [* ^+ {) i

0 h" X3 \" E2 O6 t/ S7 R# X: R
[color=#333333 !important]yum install bind*
! o0 b- F: B% J3 f& V3 c& [
2.配置named文件7 \+ I/ q9 [1 r" g

2 B  g- W1 }" Q% r7 w: c
[color=#333333 !important]修改/etc/named.conf' p3 s/ d3 f+ Z3 M. F9 b* ?3 @
[color=#333333 !important]将下图中选中的地方改为any' s' ^8 Y  k+ |( J
[color=#333333 !important]/ c% n# D& z  G" G6 `
3. 设置NS记录,A记录
6 y; T6 d0 w' Y# u. L$ |0 q  c$ T! [& e* k! ~, R: O% {
[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件' {  S+ g* V: a
[color=#333333 !important]
# b7 m/ i! X$ _; o( O
[color=#333333 !important]增加正向解析记录
0 p, d; u' E- l! F4 @6 P[color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字
' z3 _! w( g$ z+ S" @! R7 \
[color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel% U( y8 d2 h+ |% u7 d, @7 l5 N" j' b
[color=#333333 !important]修改文件如下9 d! Z9 `7 U- m- s) l6 c* C4 ~
[color=#333333 !important]添加NS记录,A记录: H( O/ i; Y% A% u
[color=#333333 !important]
7 Z: o& h" }1 M[color=#333333 !important]添加bind为自启动服务
5 ~8 D# H4 N- a5 k" m2 I
[color=#333333 !important]systemctl enablenamed.service! V! T8 U* N. [) B) x
[color=#333333 !important]systemctl restartnamed.service
8 c7 \2 a7 P! r# c0 p  ^5 \: |
[color=#333333 !important]查看启动状态
8 N7 v  x. _, `/ z0 q& R+ c' S# R* M7 }
[color=#333333 !important]systemctl statusnamed.service, B4 P2 B7 D0 u- B0 o" g
[color=#333333 !important]
' }9 F; k& s+ [9 e+ B4 P! j' _6 O[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F)
7 T% W- Y6 e8 z' j- z% f2 @5 kIodine% a$ A9 d) k8 H3 Y8 Z- O
( F  W: ^! V; ?0 I
[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。' d) V# ]9 o+ U  z
安装
( N- a* t! b+ [! w+ ~; ^# e: G! U5 a. {! Z' O& F* O
[color=#333333 !important]下载地址:
4 ~+ n- c( ^# ~7 g/ _' _
[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip
+ x9 ~6 s6 i% B
[color=#333333 !important]unzip 解压
( O" z* h% Y3 J7 X[color=#333333 !important]cd iodine-master2 E% g8 a: d$ ]( q* B- a
[color=#333333 !important]make
, |) b# e. X& v6 t& J) P% E[color=#333333 !important]出现报错* \4 S4 y0 f$ [. B9 e; d6 ?2 v
[color=#333333 !important], u( ~# A; J8 H" G: \, L" s2 {
[color=#333333 !important]yum -y install zlib-devel
& n2 l- I) C7 J; j3 c  |5 y[color=#333333 !important]make;make install, }" O5 Z. Y7 @- s& _4 P, ?2 d, @
[color=#333333 !important]安装完成9 O0 k5 ]) b0 D  \0 C# i9 d% w4 D
[color=#333333 !important]进入 bin4 @$ w/ M3 L: S) H
[color=#333333 !important]iodined 服务器/ K% P( Y$ n" `
[color=#333333 !important]iodine 客户端
. ?  G' W- C! D实验测试
0 j: }: u- f% N; u6 G2 c: l6 i. m+ k7 Q0 z( c
[color=#333333 !important]服务器0 r$ m: J2 H+ A9 Q
[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com
% f: t3 ]: X. D- X4 ?" w[color=#333333 !important]-f 前台显示,运行后一直在命令行等待) ]' d, E  t, E/ P2 E
[color=#333333 !important]-c 中继模式|直连模式
) [3 I% Q* l- I/ L$ {) Q# }' r# @' J[color=#333333 !important]-P 认证密码/ L1 _+ B( ]3 \- [& _
[color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。
2 y$ W  s$ b& N7 N) d3 X[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。. E0 a; g2 {% Z5 [' y8 P
[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡) z& f; ^1 |1 \; _
[color=#333333 !important]2 t* Q5 l. y3 V+ b7 f  R. D8 V
[color=#333333 !important]
+ `4 r6 z- X7 q3 H1 w# g7 ?. q4 P[color=#333333 !important]客户端/ F. p/ i0 ^6 G' O2 E
[color=#333333 !important]./iodine -f -P  123456 192.168.1.7 ns.dnstuneltest.com
% ~! T$ J4 j/ Y: F. V' u; V3 o[color=#333333 !important]-f 前台显示- P$ k- G% l0 L) W( Z
[color=#333333 !important]-P 认证密码! s; C/ l1 i2 w" p( V
[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析( ~: L7 D  d  T& n  _" K3 L
[color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。3 m8 u  c% S" c7 Y1 B
[color=#333333 !important]
1 Q, ?8 ^$ Y5 l- p2 p) D2 k流量包分析9 F4 i6 @1 W8 H5 z

: ]- Q0 Z- Q! b; Y$ b
[color=#333333 !important]抓包
, t, O5 p3 {- d[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap. R9 n9 e2 X$ S9 a) m0 [' k
建立链接的包分析0 R( R: a) {* P

$ P8 y7 O+ m+ J6 w$ U[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包
7 a6 y+ Z2 ?" o+ }" B, K* L( J[color=#333333 !important]
( O- ~$ D7 Y7 V[color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀
) |1 }$ {1 q3 r, O' r[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据
* n$ A1 B# r( b  B! D% ][color=#333333 !important]9 _. V* M  ~8 U& E8 U4 m+ m
[color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)
# a$ {) ?' g1 v) s6 h' e$ I4 c[color=#333333 !important]  q" T" n, Q+ }2 F! d- f
[color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。" _' J; [" e& O+ I- j% l: D& O. T
通信流量包分析
1 w. v0 A/ W8 b& I/ e" E$ F
% T! M8 Z, I) b) I* O2 K[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析
4 U; Q8 K& k: ^[color=#333333 !important]3 W' a4 V  q4 W) P2 W* ?
[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。
/ |9 p' T: ^( i) O: r8 |[color=#333333 !important]05fanyi05baidu03com1 q5 V; G! C2 g8 q, x5 r( J
[color=#333333 !important]7 p- C" S7 B4 R3 c, M4 x) Z
[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。
2 r5 S  A9 m! k& D3 H[color=#333333 !important]
1 v  X- s5 Y- b7 g! Bsuricata检测规则(并未测试,仅共参考)2 G5 B, D+ e9 W

* {) _; |: k# q" K/ B5 w9 N. o
    & e5 }' E8 d" r. A, Z" o
  • & R; \* c; q6 P2 a9 E: c. w$ G& a% K
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! O, p& R2 L) v2 q' M) j
2 p+ ?2 w: o( V9 S# J2 E% P$ d
安装
+ A5 l# z, p. z' M, b/ q
# U& {- a# F' S# d[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell
; ^) [& O$ i/ t[color=#333333 !important]下载链接
2 _' ?/ G2 \( m  w& Y& B
[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag# S* }$ ^/ f& @! f: a
[color=#333333 !important]提取码:t1rw( q" h% K4 F0 }8 {! B
[color=#333333 !important]安装编译
' f8 f' Q; B4 a

    ' p: _* F( r- f6 O4 u+ U- ~
  • ' }) W* Z, Z$ o1 e1 `
./configure    make;make install[color=#333333 !important]服务器端% Y0 D) _' z8 l# X) H$ J5 e* A% k
    : F7 R; \& N( G, i- M

  • 8 c$ Q3 D5 E' h$ [0 @1 y3 \. U
server/dns2tcpd[color=#333333 !important]客户端
/ G3 L! w8 b0 M) Z# l& q

    - ^, v6 ^- p! g) i* P
  • ! j) @7 `6 n/ |# h0 ^8 b2 v* K7 X- C
Linux:    client/dns2tcpc     windows:[color=#333333 !important]云盘直接下载windows版本,或者下载
9 m& E) E: z* F9 f, g
    4 o( {5 R. F: H) E0 o. Z' m* e
  • 4 T* q9 j* N, I% f: m2 V# o3 \6 c
dns2tcpc.exe实验测试, a8 ?: k) u% Z4 e' U
! l2 g' Y8 Y+ J: U( S# a
[color=#333333 !important]服务器端
0 l) L0 [2 T3 U! A. m3 T1 o' ~[color=#333333 !important]1.创建配置文件
: ]: |* m" H1 ]& `
    # s/ f; t/ W1 ^3 ~" @
  • 4 x- B3 j* S6 X
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.启动
, a+ D0 {. |% D3 P2 G
      a1 L5 g9 G* g

  •   ~) b- T9 v. U/ Y. H7 x7 |
./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接3 `* i% z$ y$ H% n
[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务
/ k: n: L: J* m& A
[color=#333333 !important]

8 Q" T* D, S( p[color=#333333 !important]客户端9 n4 P7 e" ^; \) F1 H
[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 2% i0 M4 ?! [: S2 N9 z/ \. n( l
[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源* V' O' S% Y2 y8 G" `
[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP, i2 w2 D. B5 w. s' L; ^
[color=#333333 !important]-l:端口
) L7 r5 M4 \) |+ j5 k! B- _% U1 m[color=#333333 !important]-d:是否为调试模式 2 等级可以省略1 m' L! j! I$ ?# g5 b
[color=#333333 !important]5 u  h$ c' ~! {9 g1 t7 m) h
[color=#333333 !important]客户端使用访问服务器$ e5 Y( E! X  o! z  L* B( r: b
[color=#333333 !important]
& {6 R) ?! b" L2 H流量包分析) a, S. f; N# r$ ]. t& {# z+ H

# i4 ]  K# m% `" \" p[color=#333333 !important]建立链接并未产生通信包, e% K; a5 m( y. V$ u) x- S0 G" [
[color=#333333 !important]3 y/ J. O/ k6 j8 E) n4 y9 q
[color=#333333 !important]使用ssh访问时,才会产生数据包
  ?) m7 o1 g& Z6 R* V% L[color=#333333 !important]7 G6 V0 o+ X( n
[color=#333333 !important]数据包分析
8 a1 t: m' T) s; e: D[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中
+ }6 X) _7 ^! ?: f[color=#333333 !important]
! ~5 H, D7 _" d[color=#333333 !important]
$ ~$ H' S7 w$ f0 P- O' \[color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。
+ Z1 ?- r8 j7 S! Q: uSuricata规则检测(并未测试,仅共参考)6 O# H$ ~1 O' _( |( G1 G

4 r$ e5 E4 J# p' D# V[color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测5 e; E6 B6 Q5 C+ c6 {* I

    4 T. r$ {  u% H" T

  • 7 g" X( T% W- Y; @$ A) h( g" ]
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]结尾, I& [. h0 X! Z( ?* P
[color=#333333 !important]小白水文,求大神放过
6 L$ [3 C, r) W6 m2 p# {[color=#333333 !important]pcap包下载地址:
' L9 n: {9 u7 a' z8 I
[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw
4 D0 [4 `3 m. O5 S: f1 H5 d3 k
[color=#333333 !important]提取码:n5ha9 p2 V% U; T5 x0 i$ o# m
[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载
8 @/ _% y5 Z- {, ?! S- L% K( s4 u$ O
精彩推荐
( y) \6 _8 }8 n- h5 S, }/ }
( O! f0 U, O3 P

& F5 A' x  M( Z5 P7 R8 m; B4 w' s- M" n+ a- j8 ~% h( O% o
" H0 c. a. |4 b" b2 G8 q' z
8 N9 ^$ ?' z- E2 ~. Z8 e# \% h
4 K' ]: u0 t- U3 @4 l& R8 @. z, U
来源:http://mp.weixin.qq.com/s?src=11&timestamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=1# W3 w/ z; o; ~2 C. C  E7 ?$ N
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

帖子地址: 

梦想之都-俊月星空 优酷自频道欢迎您 http://i.youku.com/zhaojun917
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /6 下一条

QQ|手机版|小黑屋|梦想之都-俊月星空 ( 粤ICP备18056059号 )|网站地图

GMT+8, 2025-7-7 16:41 , Processed in 0.054507 second(s), 28 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表