|
|
DNS隧道: E5 o% N* c* p8 B2 s* j+ o
6 e: g5 K1 ^0 X& f, z4 e! ]( {[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。4 |: ~0 B$ c! d
实验环境
7 }5 s; g1 P- E* Y8 w) q* p3 Q# k/ X% }: u2 F
[color=#333333 !important]CentOS Linux 两台
" w4 W4 ?; i B, b 创建DNS服务器
) L. @$ q+ {+ F5 t4 c4 |$ V Q% ^
1.安装bind4 X3 ~% K8 Z# K! ? Y$ U6 K1 }0 m
O- i7 f- r/ p/ i" M% f! C
[color=#333333 !important]yum install bind*
+ h9 O( C- d" r/ j5 F 2.配置named文件. Q+ {5 `: \2 W- a2 ?
; N2 p) a6 O' D Q' \5 x[color=#333333 !important]修改/etc/named.conf
& \0 {# Z1 ~' K, f2 s) @1 l x [color=#333333 !important]将下图中选中的地方改为any
3 L; c0 E# `2 b& G[color=#333333 !important]
# f! X( Y. V6 W7 q7 E V( B: D! e3. 设置NS记录,A记录2 R- y7 Q4 y: g& D0 a* U) Z
* c: s2 G" `! P" U: m8 g/ N
[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件6 X$ ~9 {( _+ ~3 U* G
[color=#333333 !important]  $ _/ W, U- M" Z- P' A4 f
[color=#333333 !important]增加正向解析记录% k) a9 G! \% F- L1 q$ l1 v, d
[color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字- ^( t1 ~; |$ |( U4 }& G4 g
[color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel4 O; L$ ?6 B3 C
[color=#333333 !important]修改文件如下
1 c0 d' f8 I, s6 P! V+ B% B[color=#333333 !important]添加NS记录,A记录
( r2 r, S' p% c& X3 Y( X[color=#333333 !important] . L1 f4 ^- s" G7 s
[color=#333333 !important]添加bind为自启动服务. w" l+ L; x/ M' C& ]
[color=#333333 !important]systemctl enablenamed.service
) U' I, C2 u, l& N+ r[color=#333333 !important]systemctl restartnamed.service" l5 d, K2 A! k3 o9 x
[color=#333333 !important]查看启动状态
; ~5 g# r* Z, L2 G) @4 x[color=#333333 !important]systemctl statusnamed.service2 J# f2 H! M/ m8 M1 H8 `& q
[color=#333333 !important]
' G( J+ n( K% r/ F$ }) U1 A[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F)8 M" q! F, j+ E3 x, s/ h
Iodine
$ D A- \- L; O7 _9 ]1 o8 b7 T
! \# E" \, Q7 y" M+ P' w/ d[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。
$ E! T+ V9 O9 M, O# w, e& L安装/ ^; u/ S* ~$ G& _" i- I
# W/ u2 x7 ]) y- v, x: E6 c$ A[color=#333333 !important]下载地址:4 h- H* G9 _: S& V: U0 k$ m9 R" I- H
[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip5 M( ]+ u1 @3 A* {4 [
[color=#333333 !important]unzip 解压
P: w# x) b2 F, T[color=#333333 !important]cd iodine-master' m7 [3 y* m* D1 ?2 i+ L7 k9 m
[color=#333333 !important]make
# E: e7 _. r1 V[color=#333333 !important]出现报错
9 B% V' L* i8 `1 }" u. _3 S4 G[color=#333333 !important] + D0 _* f; c9 e7 g2 |
[color=#333333 !important]yum -y install zlib-devel. a" o. z, Q5 ?8 Y
[color=#333333 !important]make;make install
' L' ^( b" i D[color=#333333 !important]安装完成
" I* W) j' r" z- {/ O: k[color=#333333 !important]进入 bin2 H+ {* h. u; p! D0 t
[color=#333333 !important]iodined 服务器
1 }. m+ Z! G8 a S# g4 @[color=#333333 !important]iodine 客户端2 A3 {8 U% |! D3 g0 t# h+ [' k
实验测试: A3 @8 ]) F, C: t* f8 Y
# R# c8 x* u# }/ j0 M[color=#333333 !important]服务器# l) X# [. p, W
[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com7 J4 h W# S! m" k" l
[color=#333333 !important]-f 前台显示,运行后一直在命令行等待, D" Q, N" N& x# {$ u; e
[color=#333333 !important]-c 中继模式|直连模式
# P) T* @/ E# a9 E! ^/ c[color=#333333 !important]-P 认证密码6 w" D" ]! |% B
[color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。
8 p: H ~' |3 M) U& Q[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。
. Y5 X$ u. ~! o[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡5 ]1 L1 z- x7 c2 K: u0 ~
[color=#333333 !important]
, z7 O/ C/ c5 o- w[color=#333333 !important] - a1 J, ]7 \8 s9 P: ^
[color=#333333 !important]客户端- c8 X: O) ^+ H. R U7 o9 ]: |
[color=#333333 !important]./iodine -f -P 123456 192.168.1.7 ns.dnstuneltest.com
t* W$ B9 [+ j+ y[color=#333333 !important]-f 前台显示' Q, G7 i. L! g$ M
[color=#333333 !important]-P 认证密码
0 ^ U. Q* U: {6 U[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析
/ @+ m- W1 _6 t [color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。
1 i* A4 D* R% P- x3 n3 A8 d3 m[color=#333333 !important]
% B- A2 q0 b4 H. T( }/ z流量包分析" A. z' E# N$ C! b* ]
+ j; C8 c! j/ w1 z1 k[color=#333333 !important]抓包7 m; p2 q0 j9 K4 F' E4 t
[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap
" W+ J0 x7 c' K, B! }& @ 建立链接的包分析
$ K6 q5 P! l; h2 v( B; [2 U% A( Z1 V0 ?
[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包
0 l: g4 `4 m9 t[color=#333333 !important]
9 c W+ U e) w4 q& V! x4 x$ R[color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀4 }6 {- v, w. W4 {' o9 R3 {4 e4 Z
[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据
! m4 b) R8 K/ L* \8 ~[color=#333333 !important]
$ B* r" }( c x& Z[color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)% G6 W* o$ W- Y% {4 s* |
[color=#333333 !important]
, H! b# b5 Z; Q/ G- f0 o[color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。1 {# U5 `" X& M
通信流量包分析* o5 \3 D8 c. ~( F( `
V3 f* Z4 Z8 M9 i: _
[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析
* c r9 S2 n: p; U- X) Z[color=#333333 !important] 0 y; G; p4 r6 C) F# v' _% R
[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。
5 F6 v+ P4 q7 Q }[color=#333333 !important]05fanyi05baidu03com
" P0 e9 r( S2 X* z8 ^7 U[color=#333333 !important] # s9 j- O" U% A
[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。" m& U- l9 f7 l7 u
[color=#333333 !important] : n3 ~. {: f; _' }- ]/ k) z
suricata检测规则(并未测试,仅共参考)
6 t7 ^* o2 z, L; |0 n! ?/ Q% c2 d! W5 P9 R, c( Q
4 `0 [7 x( @. |# V. z+ O
. h l% V( D% b3 Z 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; a; h! k0 \. E4 N
! u; n. v7 G- p8 G/ w
安装: [# D9 s) W- Q# U" E7 Y
2 X( V( Q, R" e9 S+ u0 J/ X[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell! j; i% L K/ E0 j; s' U, d: c2 m1 L
[color=#333333 !important]下载链接! N: w# n. N C1 B* q
[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag- D6 e* `5 ~* c P
[color=#333333 !important]提取码:t1rw3 g! O3 c2 i4 [6 p0 \- u; k
[color=#333333 !important]安装编译
$ W6 y( \/ d6 _) } e. F% Y. U
' y4 j+ u7 `( v7 f7 o0 ~- * n6 ~1 p/ L* [
./configure make;make install[color=#333333 !important]服务器端: K* I( _/ ]2 y1 g
& j( B3 J4 c, `7 G2 [4 s. n# }
* r2 \% J; s7 | C4 S$ Z server/dns2tcpd[color=#333333 !important]客户端
) C: Q3 ?$ y) D' y/ y# w* X
2 J' x9 L. N1 C4 ?9 K- 9 f0 b1 X, G% N6 y) M6 j
Linux: client/dns2tcpc windows:[color=#333333 !important]云盘直接下载windows版本,或者下载
' c3 R& m+ [+ x5 t. M6 e
i3 X3 h, `- E* {% x
( t8 F* [2 a6 m7 H' w7 a dns2tcpc.exe实验测试
( k2 e4 N8 a! Y, u" j# u+ _( a5 N; E% b! G+ n
[color=#333333 !important]服务器端
- L& N! t. ~3 p6 R$ O z) c[color=#333333 !important]1.创建配置文件
6 g8 h1 A/ P' E0 ~9 X# N3 K3 A+ Y9 o u- `7 d1 g
- : _$ Z" I9 W4 t: X% T$ w( {
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.启动
5 D- v% t5 v6 K" M4 y. c
/ v. K* v# s }! {4 k: k! z
1 }6 w! r/ p; V0 D& ]$ d! _ ./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接
9 U/ R6 N) u8 X+ | I* q2 f" k) T[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务& F2 n2 y) H2 _6 R' z
[color=#333333 !important]  1 z; ?! ~: Z6 |( o- i+ z
[color=#333333 !important]客户端
0 ^& i% Y8 }1 N% P V! c0 v[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 2
: b+ Z4 c9 I4 |- d+ u[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源" Q2 s" X/ R* Y" n. V
[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP
. A5 {) e6 |6 j6 U! g[color=#333333 !important]-l:端口
1 T% ?% G% m4 Z' {! z[color=#333333 !important]-d:是否为调试模式 2 等级可以省略* x% V5 E/ m! k
[color=#333333 !important]
7 ?; P2 i$ E: g9 Y3 j3 S7 Q[color=#333333 !important]客户端使用访问服务器( s8 Z* i; k' `7 ^ g: ]3 ]' \) y' }
[color=#333333 !important]
) c# ` e( a) [6 z( U6 [9 _9 [流量包分析
6 F7 q- q% k7 u: W& }; V1 [# w2 m- }: I w& K x
[color=#333333 !important]建立链接并未产生通信包
6 y3 q+ u3 B# p8 i8 B[color=#333333 !important]
$ @5 x" n# C) I" h& P[color=#333333 !important]使用ssh访问时,才会产生数据包, Y1 M: z u; R3 W% f) C) r' e
[color=#333333 !important] 5 ~$ ]( M8 t7 `
[color=#333333 !important]数据包分析) ?* |' \+ {, }$ F* m/ p, l1 u
[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中* [1 [' i* ~' E3 M2 _
[color=#333333 !important]
$ S* ^; |& T8 o4 r f! _[color=#333333 !important]
- t" E: s6 _- n* B& ?* j[color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。( z* b, a5 p5 D% c* x
Suricata规则检测(并未测试,仅共参考)' q4 S! a/ l9 |6 M( W
$ D7 N5 T: a# C$ F9 |5 s7 w[color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测4 C5 d( n. l M) f7 @/ E8 s
. r8 K1 x# x$ D6 K$ Q+ r: b. B. K1 [
- 7 Z1 L) [8 ~% 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]结尾6 W; U* E2 `; Y" B1 C) N
[color=#333333 !important]小白水文,求大神放过
. C$ [% y; F5 f3 q- l. |. E" L[color=#333333 !important]pcap包下载地址:
7 b/ t* {$ C& K1 A' v9 w! z[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw& K8 q# {; h9 ]+ Q$ p
[color=#333333 !important]提取码:n5ha3 _3 O( }/ r" X. r
[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载
0 I' y8 }% R2 {* u$ [
; R% S! ~: @: e2 O6 P* z o精彩推荐
0 E/ T& x f3 |( O/ o1 g
9 |6 [$ w( o! f' D+ T) \8 z; j* d; n( T5 M

7 I. d1 m+ s1 x' { 7 y" ?2 V, h8 x2 S
  
% e- G, J& a+ L [( `: |8 s2 z! K- s) [5 O3 X/ m
来源:http://mp.weixin.qq.com/s?src=11×tamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=1
* m! q9 ^* p2 v( o& X免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|