|
|
DNS隧道
4 \( m* c. Z2 M9 b$ N; t. G: o! X( w8 \# f6 x
[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。7 |2 C/ a* V8 O1 G: x+ z; _+ }8 y8 v# s
实验环境% `( q- c9 l7 [
7 Q1 r& ^) k9 I9 P5 B[color=#333333 !important]CentOS Linux 两台% j3 N* y* c9 O, j$ u( I) s; E* o$ j
创建DNS服务器
' L. B t' s9 l) c0 O+ D+ W3 Q2 h7 O+ r2 E1 d# f8 M, T" ^# H6 ?: P
1.安装bind
5 |' m8 f. Z, ?$ b" J Y
# P& w3 p4 g, T. K[color=#333333 !important]yum install bind*) E* J B" e& G
2.配置named文件; }; N! `; X5 {
* u9 D" \4 Z1 P8 P: B[color=#333333 !important]修改/etc/named.conf
p8 t# Z. g6 j; ?$ o1 A [color=#333333 !important]将下图中选中的地方改为any2 E& z) U) i$ W) Q2 g
[color=#333333 !important] " `+ t0 B' R: m) h
3. 设置NS记录,A记录
+ R' w/ d% A* k/ Y5 \ s8 j! e2 |/ A, j
[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件
1 u" o1 S7 [: V, B* v: q[color=#333333 !important] 
1 H5 R3 {: m# c A[color=#333333 !important]增加正向解析记录
# f3 ^# M. ~3 o. w$ [[color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字
* w9 L* E; M+ U6 I8 z- H8 S[color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel
9 t' \* I; G( N' e [color=#333333 !important]修改文件如下
1 U1 s3 Q. y) i6 F' t[color=#333333 !important]添加NS记录,A记录
' H- G$ ~: m& W6 w[color=#333333 !important]
8 f8 }3 z( r- ^4 C7 F- V7 J; v[color=#333333 !important]添加bind为自启动服务
# \1 }) Z: j/ ]2 |4 N2 v[color=#333333 !important]systemctl enablenamed.service
+ H% D. E( k% `% r" {% F[color=#333333 !important]systemctl restartnamed.service
9 v4 o8 V L- v1 y9 X/ C7 X [color=#333333 !important]查看启动状态
$ R V+ e2 z. c: u) X5 x+ }[color=#333333 !important]systemctl statusnamed.service
; }4 t P9 Z9 `8 M [color=#333333 !important]
" S" @; [3 f" Y# S. H- F+ S. R[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F)
: C5 u9 C3 O }Iodine
' U0 A+ ?# }' J2 q' N7 o i" k% V! r# u3 k( a
[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。
. e& D& k7 P+ E+ p+ t& U7 T安装
2 O# W1 [8 Z; P; w# ^5 v
u" F9 ~6 ~, j1 q# V7 r; J[color=#333333 !important]下载地址:
6 j' J$ e1 F4 ^" C[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip+ I# P7 k# ]1 l% u2 I
[color=#333333 !important]unzip 解压
/ ~ Z2 S$ l2 U4 B& W3 C[color=#333333 !important]cd iodine-master1 [, r+ v5 U; @6 d
[color=#333333 !important]make
2 { T/ j# Q- {9 x5 z; E[color=#333333 !important]出现报错& x/ j2 ?' [* @# M
[color=#333333 !important] 8 M# r @, ?# g8 u# e, x; P/ k
[color=#333333 !important]yum -y install zlib-devel) n% t7 i9 h. u, d3 W
[color=#333333 !important]make;make install
! O: f$ V' f7 g( E, k2 y; d) ^[color=#333333 !important]安装完成
, t K# ~# J4 B3 T# R4 w& m4 O[color=#333333 !important]进入 bin
8 w" E% m; [/ L) _- C[color=#333333 !important]iodined 服务器& y) b; v$ i1 p4 g
[color=#333333 !important]iodine 客户端; l6 ~* @* @2 L! B( K
实验测试
& t, t+ i. G8 K0 O; p3 E3 c2 u6 l* S9 m$ B2 g( @4 h
[color=#333333 !important]服务器
) I6 x! V, L) R[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com. B$ |3 `' L, i* h" S
[color=#333333 !important]-f 前台显示,运行后一直在命令行等待
/ r2 V( h4 ~9 P+ E8 N) E[color=#333333 !important]-c 中继模式|直连模式
/ V3 P- O3 \4 M- ^( R: J- s3 u! x[color=#333333 !important]-P 认证密码
- _" B; n9 r9 h7 a7 a& ^ [color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。
0 u. h# Y0 z' D! [$ k8 x8 _/ F[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。' b& U2 K6 `& q0 q/ C R
[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡8 V6 o3 y+ K; g1 h$ c3 B6 w
[color=#333333 !important]
* I9 ^" E. b3 D8 t! k! Z[color=#333333 !important] 9 M0 V) w. J1 @ r
[color=#333333 !important]客户端
3 }4 ]0 ]9 y6 k* N[color=#333333 !important]./iodine -f -P 123456 192.168.1.7 ns.dnstuneltest.com# n, ^) Y! l6 k
[color=#333333 !important]-f 前台显示
! T2 N3 M* L. K[color=#333333 !important]-P 认证密码
6 p3 L3 s6 ?# Z: ?" j[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析
; R* ^( X- r# q' f [color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。% Y9 m9 L W. {- y J3 y" X5 D
[color=#333333 !important]
5 h+ ?- p" i, g4 A s" L# f流量包分析
" X" \7 ~7 s7 }% }$ R) S: f6 C1 m& S
[color=#333333 !important]抓包
( d. J1 {; T `; h! S* c[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap
; _1 `1 F& F1 A! f" c* c0 n* v 建立链接的包分析
& H, L1 I& g7 y; x7 |; X0 I5 K, k ^7 y4 I
[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包8 `0 G1 E8 X* D2 V3 S
[color=#333333 !important]
' u {2 Q/ E5 u4 Z; ]% B. Y[color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀
* C. }' ~ I5 v u$ A* A[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据2 L% a" d! f2 Z; V; |% V( |5 \
[color=#333333 !important]
6 ^# s# e: B+ \4 M! v, D5 k[color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)- [6 M: Q8 A% s# m1 l
[color=#333333 !important] * s' K! g2 d& O4 p! V
[color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。
" I4 W' ]3 t) Y [6 g1 t; V通信流量包分析; Q8 ^" L$ f O/ A8 S% Y
' X" q6 [8 a, l2 [9 K& C
[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析
& c% U! t$ L2 a1 p7 h6 {[color=#333333 !important]
- L# z; j4 i+ \7 V0 i1 a; |- D[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。: }3 W& y: _ ?9 e. _ I
[color=#333333 !important]05fanyi05baidu03com* a# R/ [$ _- r( o* ]5 K
[color=#333333 !important] 9 `, f8 E$ a, P8 R
[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。( a& G3 G/ F" T: U: N
[color=#333333 !important]
% ~. @ j* X' ~+ U" a1 `suricata检测规则(并未测试,仅共参考)" T3 m6 X0 W e3 j" G7 G' V, X
$ d0 k+ t; w! y# O7 M. w8 b7 m, K) d+ F
/ i/ A- p: K2 Y, Y+ S9 |0 C 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
) b. w" |) B* N3 \ S- w A; h
2 c" F0 H) T; d8 |) L3 h5 f5 J安装
, Q5 W) }# S! J
7 e! t; k( H9 _# D[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell
. U0 I# v: Z! l# M& ~+ M3 m2 C[color=#333333 !important]下载链接8 l( C2 l( y. d$ @
[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag* E" \3 j/ ?2 A: s! t* q* k
[color=#333333 !important]提取码:t1rw; a+ D8 s' t( r
[color=#333333 !important]安装编译+ b: A3 T! y% R1 [5 f! ], f) D8 G
$ c3 a9 L6 ]6 i3 Q) ^7 z- 1 i5 b- X0 j) {. U
./configure make;make install[color=#333333 !important]服务器端
# F1 o6 p1 V- c9 u
* O) _- Q9 l( }% a% z
6 x+ M% e1 C# [/ f, l( |9 N) p server/dns2tcpd[color=#333333 !important]客户端
5 s' t. i7 O9 i- U# X# b* o. p; p v
6 t( T; h; S4 p( m; J/ U& g' N Linux: client/dns2tcpc windows:[color=#333333 !important]云盘直接下载windows版本,或者下载
2 L6 [ g! h4 Z5 r1 V
: |+ s+ Q& {4 j6 y5 X0 \+ [5 s0 p
9 _! s) t- i* s dns2tcpc.exe实验测试
4 s( v$ o/ q! V# Y: P
: V* ]- M. v' g7 \[color=#333333 !important]服务器端
8 |; V# ]% P/ B1 H- I/ o+ {+ q2 j[color=#333333 !important]1.创建配置文件( |8 X. \; [/ n$ J, m1 k8 t% ` o
7 G* s7 N7 f. j. i5 W E7 V/ s
; h6 R' [* |8 I J- U9 d2 e 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.启动
1 n' u6 g& Y! o' Z9 c
2 V, i5 {) D B: B& A" N$ E& J
: F$ x' D7 q5 w; ~- L! _ ./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接
) E! G6 D; ~0 c[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务- t5 [9 o4 h0 @2 r/ \
[color=#333333 !important]  * M( h. i2 x1 \
[color=#333333 !important]客户端9 d7 U+ S3 _* R* ?" T( L
[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 2
; h/ k; g2 {- T0 h4 x6 y g/ P% B& v[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源6 X: O1 B4 V P8 [. j! b
[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP
# J/ U9 Q, G: b5 r+ ?8 g9 X; I/ c[color=#333333 !important]-l:端口2 B2 |$ ~3 F& k7 C
[color=#333333 !important]-d:是否为调试模式 2 等级可以省略
$ ?' Y# f# `' {+ H [color=#333333 !important] 9 }8 l) W- L" ?# E0 u
[color=#333333 !important]客户端使用访问服务器1 z( R4 |! u2 \' l6 }' t- Z5 O! N
[color=#333333 !important] ; v, Q' D0 c2 g, W5 S
流量包分析
) L3 M# W' P1 J- b
% h Q( h& {* q[color=#333333 !important]建立链接并未产生通信包* o8 t5 M9 G" s' p
[color=#333333 !important] 8 p2 Z9 r& p: q
[color=#333333 !important]使用ssh访问时,才会产生数据包- {+ d2 B7 I$ G$ `! B, V' _* U) O: O
[color=#333333 !important] 8 G; l0 M! E5 ]! w
[color=#333333 !important]数据包分析) l+ w. ?7 J+ z5 p- L" S
[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中
! S6 h5 J( E3 B0 T0 ?[color=#333333 !important] ; _+ q8 _9 W1 C: |
[color=#333333 !important] 9 n9 t4 ^5 h) k D1 Y8 R
[color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。
3 A6 r+ O8 A) O8 I3 {Suricata规则检测(并未测试,仅共参考)3 Z- i4 z; Z8 S8 G# \' q6 ~" W* C
" r2 s8 _0 b+ {: ?! M. I( a; B' O
[color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测
# r+ J8 _! D7 |! J* w) I. w0 F3 q. F! I4 ~4 u- _9 w
- # X% k5 o5 ^" t& i- Q$ O
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]结尾
1 ]7 M: G2 {$ x& v, W. M# @; W ]% F[color=#333333 !important]小白水文,求大神放过6 p% \& A% g4 Q* G8 |6 L
[color=#333333 !important]pcap包下载地址:
0 b7 E5 p) [# g: J* T- Y[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw3 D& S/ D' n; u) j
[color=#333333 !important]提取码:n5ha/ W! g3 Z" S& N4 ?0 a; S# q4 S) I$ v
[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载0 w! Y1 ~. P5 h: R! E. }1 K4 ^8 y7 _
& C8 S2 u- Y, F' i
精彩推荐
3 {6 h& R$ V) t9 v. a H( q$ ` $ q8 B/ n; B& c5 [* n( C
: R% P, L9 A" c1 h' p! w
7 V. ~* @) J. M& R+ x" D 1 I+ v- l. l$ b' s% a5 Q
  . o$ H- ]! o$ F
r2 V+ u- ?+ @; ~6 D& }$ g) d2 S来源:http://mp.weixin.qq.com/s?src=11×tamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=1
6 P, k0 ?6 R S5 ~. T+ I免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|