|
DNS隧道
Q( P6 R# z2 Y$ t' \! J- E" f' k f
[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。
, ?9 m6 M4 d' ?+ Z2 o* k8 I实验环境) Q' }1 I( D: _' V
! g1 i% C" a6 o) x1 D1 K
[color=#333333 !important]CentOS Linux 两台
( Z7 b0 h2 ~/ m- O$ `$ f 创建DNS服务器
9 y. _( o% G5 W% T5 L& j6 {+ E, y# I( |5 a5 r- E& a
1.安装bind* T1 Q/ R7 ^5 a" Y, O/ J
% B, m' d' s4 h+ t7 f[color=#333333 !important]yum install bind*3 Q) F: d" S% ^7 D. X: V1 L
2.配置named文件: Z; a+ G/ u0 y' d q. O1 M
9 {1 l) M4 v7 r, P
[color=#333333 !important]修改/etc/named.conf
. Y% n/ Z2 T- H7 T; y7 h [color=#333333 !important]将下图中选中的地方改为any
0 _/ G3 u) h" \6 {( R0 i- Z[color=#333333 !important]
) I- Z$ J! Y: V$ u; ?3. 设置NS记录,A记录7 F3 p% z; |4 c, y: S
% H8 p" |9 @- N
[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件* P7 t9 p! q f, K0 `
[color=#333333 !important]  7 f/ D! [2 X( p( t' K% \
[color=#333333 !important]增加正向解析记录
7 b k& R4 s' z+ j) n; M) x[color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字4 ^+ Y, e5 d( A7 I* @0 b
[color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel
' b! p. Y4 @5 U% M5 j5 X [color=#333333 !important]修改文件如下4 [( A5 W0 r1 j( d$ w
[color=#333333 !important]添加NS记录,A记录
- p4 `3 i9 e! k[color=#333333 !important] / {0 {$ L' m+ J5 b" Q+ B- }
[color=#333333 !important]添加bind为自启动服务% t. d+ R0 K; T+ g
[color=#333333 !important]systemctl enablenamed.service
5 q/ G J/ N: E. I( o" e) c+ W[color=#333333 !important]systemctl restartnamed.service
U5 y \# Y5 x z [color=#333333 !important]查看启动状态7 C% v& r0 H$ }/ |. A8 [ F% G
[color=#333333 !important]systemctl statusnamed.service
2 V- B1 D. h) T7 O# z2 ?. A [color=#333333 !important] ) `$ ]8 W0 j* e
[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F)& T. e) {: T8 `7 [
Iodine
. t7 z: H* s# h4 L1 O; n- B5 t! v9 l6 I) o! }
[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。
4 V Z- }* w4 `9 Q安装
0 Y/ ^ S2 O* J. b A# C# i1 z0 V f: ^0 v ?3 M2 }! J! N# R
[color=#333333 !important]下载地址:$ U7 K0 J% r4 p& g/ |! y# A
[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip/ S5 n* c' Q% W$ J; q8 l
[color=#333333 !important]unzip 解压/ p5 p: g3 e7 n7 ^
[color=#333333 !important]cd iodine-master, C5 G/ \9 Y: ^
[color=#333333 !important]make
/ ^1 z4 \4 h) ?. o/ [1 n[color=#333333 !important]出现报错( J) Q$ y1 _( G; ]6 V/ k8 C! n
[color=#333333 !important] % B |8 Y; e2 a* w0 `$ V. K- r
[color=#333333 !important]yum -y install zlib-devel D& H7 p2 k% S8 P0 }3 n0 l
[color=#333333 !important]make;make install
1 |6 {$ H d# I) U[color=#333333 !important]安装完成
5 Z) U) q/ ^7 A0 Q. c1 m[color=#333333 !important]进入 bin
2 t3 \, A: K$ f: M( c+ w[color=#333333 !important]iodined 服务器- t; j: n [8 P) n4 ~! {
[color=#333333 !important]iodine 客户端
# r( C5 K- X0 Q/ _ ?( z实验测试* }5 c: q! k0 e! B+ K2 L
0 c" g3 A" q% K[color=#333333 !important]服务器+ n( _0 J; H) M7 h4 U% ]6 a
[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com
8 { O% I3 i, ]* j. w/ }[color=#333333 !important]-f 前台显示,运行后一直在命令行等待; ~. ]5 a! {# e$ t/ D
[color=#333333 !important]-c 中继模式|直连模式
9 y$ `2 h0 I7 {7 W4 u( T[color=#333333 !important]-P 认证密码% q: J: ]" M- G4 P2 k8 l, K8 o
[color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。/ ?6 w8 e5 k4 M3 u0 D, |( s
[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。8 j: U* v% ]2 P8 I
[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡
6 T5 c4 d$ J; }6 P; x[color=#333333 !important]
& h5 Z/ Z6 i0 S2 y" X[color=#333333 !important]
5 N% d, U' }- f) G+ N; M6 e- ][color=#333333 !important]客户端0 Y! ~, F) H& F; C6 F7 [
[color=#333333 !important]./iodine -f -P 123456 192.168.1.7 ns.dnstuneltest.com
8 w1 x& J W9 F$ _[color=#333333 !important]-f 前台显示
# Q/ H$ ?! ^7 H$ _6 f8 n[color=#333333 !important]-P 认证密码
* v( b7 Z( V g7 O0 W6 b1 Z8 x[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析
* i" l& z! c: V3 S9 `& Z [color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。
$ M/ _ r& h; y1 W+ [0 {[color=#333333 !important] 0 K- P: l ]* E0 y
流量包分析 f, X. Z+ ^* e
# W# ~1 z# g5 D- B
[color=#333333 !important]抓包
$ [1 P) o. U3 ~5 r; d$ j {[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap
( U6 E; m3 m2 t& [9 w3 C+ w# G: J 建立链接的包分析
# c. P+ R7 r |' x
7 A% c8 C. c, N! W[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包
: f" c- N$ Z! E; _9 c[color=#333333 !important]
) _3 w [# ?5 \[color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀
V, [" H: ~4 o# \3 n8 Q[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据1 M5 O. R7 k1 E1 n5 C% T+ j
[color=#333333 !important]
! U* _6 m8 n' i, a4 ][color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)
9 y5 j$ b0 l8 ~" ^3 c[color=#333333 !important]
, K% z$ F& A2 U; S! Q8 z3 o8 w[color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。
( m- i$ i6 D9 x0 v通信流量包分析
. d+ Y. O4 {* |
: J% ?, Q* N) w/ [( X& \[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析
7 s$ W9 V" T1 w- u+ }[color=#333333 !important] 7 s4 l7 n Q' @/ ^
[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。% \2 i" ?% M( ^9 L
[color=#333333 !important]05fanyi05baidu03com5 l' P, n4 V% i! b
[color=#333333 !important] : e& W, W# [) f3 M! T. T: D
[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。' k* h3 H. }: [) b f: `5 {
[color=#333333 !important] ' G- c n. d; A; _
suricata检测规则(并未测试,仅共参考)
w/ r" M. s% a( ]# L6 e# P7 n
0 C Y$ R1 H! j& `6 L7 x6 x R7 e3 @' e& f! b. W
- ! O8 r# ~% C9 H/ n
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
& D! x4 |3 H3 C7 t- Z
& S* ~5 U3 d9 M安装. Q- @0 V! l5 I. R) g4 x* w5 _
" h+ B0 |7 K' Q[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell$ q( Y, Q5 [! [. ~# E z7 }2 L+ L+ Z
[color=#333333 !important]下载链接' }$ c) q: z8 L8 I$ J
[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag {* w7 c' X7 p$ p. t9 B1 V
[color=#333333 !important]提取码:t1rw9 p) k3 Z! B; g( `% m5 I* _
[color=#333333 !important]安装编译
: r) a4 K9 e$ [/ E
- S0 Q# x8 y. x; a+ W+ }2 p8 v; S+ h- 9 A4 I+ a+ H$ T2 ]( U
./configure make;make install[color=#333333 !important]服务器端6 \/ z- H9 o1 Q& x+ g
& t: J* P. U) _4 ]# {' c
1 k2 j# }* ?$ {. e, L1 H server/dns2tcpd[color=#333333 !important]客户端9 B! Q# z- f5 C9 V: z
( E: z; w; ?& P, T8 x
! t; y, @0 i3 s( F' G. Y% D Linux: client/dns2tcpc windows:[color=#333333 !important]云盘直接下载windows版本,或者下载
# N. E% u$ n; c6 g" B
, E6 Q: P3 A2 a+ J S, D& {
' E3 D" U' t, \. g' `7 T1 f dns2tcpc.exe实验测试
' |* E) l9 `' f U! f$ B& d; Y8 _3 S
[color=#333333 !important]服务器端
0 ^5 Q ?4 X# @) @6 o$ |[color=#333333 !important]1.创建配置文件
1 n9 [; e7 `7 b' j
& i& M: a! E+ P- 3 S4 }. @2 ~% K
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.启动
- p& G% p$ V4 P/ s/ {; k2 e6 k1 N9 d9 U7 [ y4 [" Z" U8 R
k: z+ b% s$ x+ z4 e8 N2 |% [. H: w ./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接
- |" J) V6 _2 l% e# V[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务# |8 `0 }7 `/ ]1 m! i4 y# G! _! w e
[color=#333333 !important]  + a# |3 f- H6 ]5 ]9 a% |# J1 x$ Z
[color=#333333 !important]客户端: q2 s Q2 o) I- m/ f+ Q
[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 20 Z* @4 v. I, e* a; C: {
[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源
$ u) w4 e3 c* S% q5 h2 d[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP
9 W8 s# \% ]" S% x% V[color=#333333 !important]-l:端口5 F% f) l. R; Y' f$ R$ x6 u
[color=#333333 !important]-d:是否为调试模式 2 等级可以省略
3 M6 T+ X7 F! G: c* B3 e [color=#333333 !important] 6 w; a+ q G, @ Q: r# E/ V
[color=#333333 !important]客户端使用访问服务器* {3 H# n0 O& x' t7 d( Y0 n
[color=#333333 !important]
3 I0 i7 O n5 l# u% I流量包分析0 T7 L+ B0 k9 p% o3 W
0 |+ S7 e3 x" C' [# k. C
[color=#333333 !important]建立链接并未产生通信包( c2 A+ g4 V' M7 C* {. d
[color=#333333 !important]
% _ y% J2 U0 Z# R# s1 Q[color=#333333 !important]使用ssh访问时,才会产生数据包
1 J2 e4 U8 ~9 q4 U$ b9 ?' \[color=#333333 !important]
! u- F: V4 e+ f( o1 s9 {# ?[color=#333333 !important]数据包分析
) o% H. o+ s5 F) ]7 L8 R9 `[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中. s) [$ z5 G( K: n
[color=#333333 !important]
, ^* D& c3 |* _4 i: R9 k. S. J$ l[color=#333333 !important]
}* D& ~0 N/ p) l! }[color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。- H" i9 X9 z( w( N! S% O; v
Suricata规则检测(并未测试,仅共参考)
: c0 A* a6 U3 o( v6 k
3 Q! |4 @; |5 L: w& z( H[color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测; a; z1 S/ T+ x4 H+ q5 ]
4 q; a2 C" G2 z: q( `6 {
- 8 e% x4 A7 u1 L6 R; d/ @
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]结尾
% {& q2 Y' e1 [) z! D[color=#333333 !important]小白水文,求大神放过% V. r/ K; Q/ W) c
[color=#333333 !important]pcap包下载地址:. E+ r. t$ T* c- R- T& |
[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw
4 Z/ s. c' `% G7 _% [- d% y [color=#333333 !important]提取码:n5ha
7 m# \0 W% i$ M& q \[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载
2 |8 Q3 y4 G0 s# R$ y ! x$ h: h. `( k5 l q. G
精彩推荐' g5 R1 f' `* x- l$ [
0 | Z" s8 {9 O; m* R0 {
$ R# |9 _9 k8 N' J% d I$ Y* x- {
' _$ @/ q! c( |; f9 r w) ?

# }* Y+ V! L- D  
t5 R- }: L: U; [6 _/ z
' e, X3 {8 T$ s5 Y. E1 m; B2 n m2 \来源:http://mp.weixin.qq.com/s?src=11×tamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=13 x! j" A' r/ ^! y* Q
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|