|
|
DNS隧道9 m) v% P* l9 ^+ ^
9 y( l4 _8 s( _[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。
+ H! {" J' |) c实验环境
$ p( n5 |$ p' A" o- j( h
0 b3 _* i: F. q[color=#333333 !important]CentOS Linux 两台( b9 M5 F6 _1 C1 S
创建DNS服务器& r, X+ {( i5 l1 J; K" N
* r- F$ a0 c o( R9 }1.安装bind
. T1 N! y. o6 ~7 l/ ]0 q
8 e, m6 v* V+ d2 m[color=#333333 !important]yum install bind*( Q! ~! l r/ M+ f2 X2 b8 |
2.配置named文件+ L- Z/ v3 W( w" G+ D
5 i% |; @; s" \& p0 k4 T% I[color=#333333 !important]修改/etc/named.conf4 ?7 a' s" K3 x6 s7 R& n0 n
[color=#333333 !important]将下图中选中的地方改为any
. O- G. v+ \. X1 Q3 h1 [[color=#333333 !important] 7 i ]; ~5 r) B7 D* H
3. 设置NS记录,A记录) ]/ I5 O- j1 E& M1 \# Z
7 S" H8 a$ Z: u! x5 ]1 R[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件
" b o j6 z, }1 N: |3 [8 \[color=#333333 !important] 
3 q8 t( C4 O; c[color=#333333 !important]增加正向解析记录
: p) O9 `8 n3 A/ P3 s[color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字1 H* X. T8 w+ |! \$ \4 b+ B
[color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel
% N+ ~: R6 K) M& y# a0 w [color=#333333 !important]修改文件如下
& G' B( A b: Y6 J* E[color=#333333 !important]添加NS记录,A记录
8 {. t. }8 w8 M; M[color=#333333 !important]
" N: V+ k* ~+ X" V. I$ F; o- I8 v[color=#333333 !important]添加bind为自启动服务
* B; N4 L5 E& m4 G- k# H/ L/ h* c$ d3 q[color=#333333 !important]systemctl enablenamed.service
7 X9 B$ f1 e8 m6 l. h# N[color=#333333 !important]systemctl restartnamed.service
: X9 y9 ?, E8 R6 A' H: H [color=#333333 !important]查看启动状态2 B! n7 Q" \: L% Q' w
[color=#333333 !important]systemctl statusnamed.service
( a- G/ g: `) A ^7 b [color=#333333 !important]
3 M. g! ?. D" ?. ~* L[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F)$ _# ]3 D0 s& J: \& v8 }
Iodine! U s" L7 w) K2 |* g& s4 y
+ S4 _3 w( E; z3 F. a
[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。) q1 N; X" h& g3 V9 Q. U
安装
: N; z) s6 R$ h1 v3 G$ X0 X1 q0 q7 [) B: j) V1 Q% J
[color=#333333 !important]下载地址:- K t& l& o4 I( B# @8 _! x
[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip
% r9 s# E2 ]9 J* S( i [color=#333333 !important]unzip 解压4 A3 Y3 \9 M/ l+ F. t$ Q. F% c9 ~5 \
[color=#333333 !important]cd iodine-master
" D5 B% v# S! a6 p6 q3 A[color=#333333 !important]make
f- N8 w( c; |8 L8 R1 f' D: F[color=#333333 !important]出现报错7 f' Z. l) c% h: L; ?% @8 X7 X
[color=#333333 !important]
5 o6 [5 C, Q4 s, U[color=#333333 !important]yum -y install zlib-devel
7 e* [7 j7 m) w& y: Q7 [[color=#333333 !important]make;make install" b& c% _; u- d6 o$ j- q
[color=#333333 !important]安装完成 i0 @3 ^; b9 T$ I' A6 {: c
[color=#333333 !important]进入 bin
; w1 g6 n. }1 t/ u/ v# o[color=#333333 !important]iodined 服务器
8 k' L( M" \! R; }" T. k[color=#333333 !important]iodine 客户端& Z5 n6 \1 `" ]- j" d
实验测试
) _/ G( o7 n+ C2 x* ~5 r! ^3 _9 T* E
[color=#333333 !important]服务器
( H7 r) h5 t- C5 ?[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com
& N G2 H3 V- H! b$ |/ A[color=#333333 !important]-f 前台显示,运行后一直在命令行等待
, Y4 D* ]2 ` p' t" |[color=#333333 !important]-c 中继模式|直连模式
& Z/ v* E" |% i* L' A& K4 d[color=#333333 !important]-P 认证密码
0 M3 m1 `' `6 i4 t" Z" L; \2 j [color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。* o1 R- E: d0 k6 d; s* w6 x. X
[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。
. K0 Z9 O( t; [6 r2 K[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡: g- l0 F' y4 ?; r9 [6 d
[color=#333333 !important] , o1 M( Q- ?9 I( i1 b
[color=#333333 !important] % [" V( H* c+ H T& O G7 J3 |
[color=#333333 !important]客户端4 ?+ i, a" Q! {4 n
[color=#333333 !important]./iodine -f -P 123456 192.168.1.7 ns.dnstuneltest.com
" N; a8 s) E+ q" G- }[color=#333333 !important]-f 前台显示
3 a; R6 c7 M$ `% Q[color=#333333 !important]-P 认证密码! m: ?! F5 E" L% U7 D# J5 X" S
[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析2 o0 q* P* j# s; r' b# g* y& H$ z
[color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。; d* d3 y0 d3 J% D" p
[color=#333333 !important] - R( N6 N' F: K0 ?, H. \$ F
流量包分析
$ w8 R" I2 \! j/ \
{8 Z% B& o5 o$ c2 r[color=#333333 !important]抓包
( G0 t6 Z3 s: g) v: d$ e( l2 d5 [[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap9 F- k1 j8 Y' H4 Y2 H0 B) m
建立链接的包分析4 x' |! X% c; o9 t; R
( z; X% l7 X8 D. u! N5 G! t" ~6 p
[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包* ^: L/ v5 {3 F/ G4 M+ t
[color=#333333 !important] " e+ J l0 M5 M' e! k
[color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀8 o" {1 r$ b6 A; y# `
[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据
& X! v( h' w6 `5 w' [% B[color=#333333 !important] 9 Y" Y; f# X) d5 O8 |
[color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)
( m0 \* V7 ~% b6 d( B) p9 I[color=#333333 !important]
! L: Q i4 l- G# F( V: t5 w[color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。
% P4 l$ ~, I" H$ y通信流量包分析3 e$ g9 K* S5 v1 @* S9 F) u9 t
2 a9 Z D4 |0 r8 }$ a% i
[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析
3 r5 ?$ V. V, r6 K* m[color=#333333 !important] Z3 S: w) z c9 Q7 C4 H# Y
[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。+ x! F: `$ A5 m
[color=#333333 !important]05fanyi05baidu03com5 q" i6 I' {5 z
[color=#333333 !important] + C( @( Q; V# N3 a0 n
[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。
8 y8 R* u% O" l: V[color=#333333 !important] K4 l* L0 b3 ?
suricata检测规则(并未测试,仅共参考)
" }6 s8 p; n1 M* |8 z( t' Z$ j
, A% j* |1 @! F3 X$ L
& G" q/ m3 c2 U6 m& A' _0 B- 7 I. w. Z- B, v
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
o7 V9 |" u3 }% t' N, U5 i6 g! j" J4 k' ~0 M4 v7 F# ?5 V9 W
安装& w: W4 b5 d, B7 a
4 B2 d/ ?, @; p9 A: k
[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell
, F% I( Z# Z7 ^( |- \8 o[color=#333333 !important]下载链接
% W1 Y2 B/ I$ G) Q( r. n[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag& ]3 {6 g0 Y: R7 j, d( ^% h/ b
[color=#333333 !important]提取码:t1rw
6 \1 M. B) ~& s E[color=#333333 !important]安装编译* p7 N8 _& s- l- k9 {: H
' b7 V' a- }; O, m
+ X2 }6 `$ e# t# V0 d ./configure make;make install[color=#333333 !important]服务器端8 T* M. d O2 r9 z1 z `
. Y6 Y9 b$ u! d2 r- F# o/ k- `7 C
server/dns2tcpd[color=#333333 !important]客户端
8 n) z) b) d! Z# F5 c; l9 q5 ]) g+ A, u$ q
- L/ d* X1 C6 u+ [1 `
Linux: client/dns2tcpc windows:[color=#333333 !important]云盘直接下载windows版本,或者下载
- x) s. t* x! @( I- I& G* f) m$ V0 X" m+ D( m8 q- P
5 d N5 ~! n; K( \. E* J) i dns2tcpc.exe实验测试
# D3 Q. l. e. r, W$ l- p
- n6 x0 I, B: e+ z& ?, m# A7 \[color=#333333 !important]服务器端
2 g" q/ i; n1 H$ ~) P9 O[color=#333333 !important]1.创建配置文件
+ N4 M$ a; E# e
, y, d' E5 `) W) v1 @# Y' K
4 [4 c' T+ p) C: Y* ~1 m 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.启动
7 N/ d8 z+ z2 |5 L, {5 \4 B; b) h5 X/ y7 B$ g
]# \7 Z, {) @: I# x4 r ./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接$ Z6 ?: p4 Z' _3 c9 I: B# z+ N( P
[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务9 c8 B5 u4 n: r# s( [( V
[color=#333333 !important]  ( b+ G4 g6 F: A% [; I
[color=#333333 !important]客户端
# P# y; b- J- ]/ p* r% h& A[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 2
6 S6 s5 |+ U! U+ L6 M) W0 N" s[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源* p) V) R) e/ b. g \4 \5 J# l0 ~9 f$ x& M
[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP; e5 }6 }4 c! L4 A
[color=#333333 !important]-l:端口! j5 g' |, M: x* w- _9 m
[color=#333333 !important]-d:是否为调试模式 2 等级可以省略
: U: U" J; K0 M1 j; k1 X: V [color=#333333 !important] # i+ b6 l* F" ]% @! `
[color=#333333 !important]客户端使用访问服务器5 A% b9 w) R4 Q( V2 y
[color=#333333 !important]
/ b9 \$ Q% ^6 H& b; {- [7 C* d$ [流量包分析
% ^: t* ?) T" z: i/ R7 Z
; r% J, W7 T( ~* Y- H, c D[color=#333333 !important]建立链接并未产生通信包! c3 l7 c1 M$ q! {
[color=#333333 !important] 8 Z: n5 N+ p9 i5 M4 G
[color=#333333 !important]使用ssh访问时,才会产生数据包
5 v* }5 O, Y( M5 x6 Z[color=#333333 !important]
4 [+ I, Z8 u7 F[color=#333333 !important]数据包分析4 |6 ~0 U4 i) G, R; [# C
[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中* O1 O7 O1 e1 Y; ]) T# u
[color=#333333 !important] 2 s3 X, Z: P# M! h8 T
[color=#333333 !important]
& ~7 D5 ?! _5 E z[color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。4 I+ q! y* A8 [: ]" O
Suricata规则检测(并未测试,仅共参考)
" L( m$ v! o; f; [5 u: N4 i" u6 s
4 G% k3 Z' Y3 l/ d8 }, d% D[color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测
9 w1 J$ k& l+ H9 V
0 L1 Q/ T$ `* N7 u. O( \- , E' L3 A q7 p& |
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 e2 Q$ k& k; }& X
[color=#333333 !important]小白水文,求大神放过& n$ t& B9 o4 x; n+ K5 G
[color=#333333 !important]pcap包下载地址:
( G# T2 V9 @0 Z9 B* m: ~[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw) z$ A9 N2 V9 @( V
[color=#333333 !important]提取码:n5ha
- p7 k2 e; o0 H( G# A[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载
) {( n v: |1 \7 [ 2 ~: o" V1 g6 W4 O$ r, L# X+ R
精彩推荐
* C/ t. y% Z2 J$ m 6 @; f( ^. @. Z+ W* j% }" R
( n% b+ c! s7 D: o6 D9 |
9 D! o- y2 j! K . k- G5 N) \9 ~5 V1 y8 Q
  * Y- { H" [6 R2 k7 _% x
+ k0 R( Z; n. X5 Y来源:http://mp.weixin.qq.com/s?src=11×tamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=1: Q- K% I: Y D2 j$ ]* `) e
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|