|
DNS隧道$ Y+ K" t% a5 p: }' g
/ M. m1 r; O6 R9 w% {+ {
[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。/ z4 {5 R3 Y0 x& @9 `. v
实验环境
0 S$ H+ Q+ i3 p/ W% b' z
) m% U4 ^; V$ e/ s[color=#333333 !important]CentOS Linux 两台
- N6 q% ^) P1 w* y" ?5 ] 创建DNS服务器
- ?5 y( G: i; _5 O0 l) H# a( d! P5 x7 E. T8 E' M @6 `0 l4 F5 S B
1.安装bind
! O5 }. C2 J) ?$ }: p2 |( Q# W8 q1 O/ h
[color=#333333 !important]yum install bind*
4 E' P4 z& M( \6 I6 U3 m3 i 2.配置named文件- O) ?6 r/ y; E" Y* x9 u7 B
2 x# z. D/ n: q, ?- K+ y2 g3 U[color=#333333 !important]修改/etc/named.conf
+ n5 e/ w) L1 a3 U5 Y, F/ c [color=#333333 !important]将下图中选中的地方改为any
( ~$ x9 S* `5 ^. }[color=#333333 !important]
% _; _: f! I( u2 H: q- ]3. 设置NS记录,A记录
# |4 n. s# h ^8 S- O7 I. L) E( _; S8 [& a# c8 ^. t1 [
[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件4 W7 W( c. z+ l! {9 [9 N% o
[color=#333333 !important]  ) ~* l' l; `4 ?+ H$ O
[color=#333333 !important]增加正向解析记录9 c8 Z0 v# x1 x/ [' \$ r
[color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字9 ?9 g$ Y) y+ F8 M$ b# S% c
[color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel5 _1 ?8 u3 [) ^6 n+ A: j: h
[color=#333333 !important]修改文件如下
: j" ~/ R) H% d# T$ p[color=#333333 !important]添加NS记录,A记录
% [2 _; y+ Y, D# W& Z. _ V2 W) N4 h[color=#333333 !important]
: b) `8 R. `+ d, k7 S[color=#333333 !important]添加bind为自启动服务 p$ x# T( q) C1 _( Q
[color=#333333 !important]systemctl enablenamed.service
5 y) ?5 [$ @3 L+ O1 Q# S[color=#333333 !important]systemctl restartnamed.service$ O8 G7 @3 Y* F* U R6 E4 u
[color=#333333 !important]查看启动状态. X9 S% f; C, C+ [# B
[color=#333333 !important]systemctl statusnamed.service T# A3 W. h7 g/ h& n9 h! X4 q% e
[color=#333333 !important] - F& G$ E" |8 X# g
[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F)
9 I* J; f) ]* G. r3 u- BIodine L9 |3 I6 }* g: U& f
! o8 |+ x u2 F3 f[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。
$ h' X9 ~" R$ N9 {安装3 D: n+ y3 `2 z. b, T# f' C
8 o3 x, M' Q( `. x' w
[color=#333333 !important]下载地址:7 S$ Q6 L" z, @' M! L" |
[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip
: k/ Q# Z3 f: |2 j Q g [color=#333333 !important]unzip 解压9 |& T1 b1 W/ k) K/ j# K3 n
[color=#333333 !important]cd iodine-master; X0 s+ B( B6 ~- l
[color=#333333 !important]make* Y3 V3 h0 R: {
[color=#333333 !important]出现报错1 J( v' d. _6 P
[color=#333333 !important]
k7 x% G8 C6 w) z! J[color=#333333 !important]yum -y install zlib-devel- \: v" {, s4 h
[color=#333333 !important]make;make install
% _0 O$ V- T# F. q7 B[color=#333333 !important]安装完成
f2 e8 f2 e3 } [! r. W6 g[color=#333333 !important]进入 bin
2 `- H* Q( m7 A6 \; F3 d, C( r4 z[color=#333333 !important]iodined 服务器4 l+ n5 e/ E! X" A
[color=#333333 !important]iodine 客户端6 k6 q6 W0 a: B$ O
实验测试: Z# l+ w* }$ H5 D
5 J5 t) F2 O, I- v! m9 t6 P[color=#333333 !important]服务器' W$ ]0 c1 g. D) C
[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com
3 d% w: D) @8 o+ J# p# u[color=#333333 !important]-f 前台显示,运行后一直在命令行等待, Z0 d3 ]/ v- r; n5 j
[color=#333333 !important]-c 中继模式|直连模式) r8 q+ l- I! s# M8 |" s3 d7 M
[color=#333333 !important]-P 认证密码# S3 F6 K# y/ `" k7 q' b
[color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。! `, Y S, \7 \/ z; |1 f, O
[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。
6 o3 r" m; D1 ] x) E[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡+ {9 ^; d- K. m& b6 u: ]
[color=#333333 !important]
: y& n) y+ T9 m& y% I/ I1 p[color=#333333 !important]
: k8 Q! {# }) c5 i* c7 Q! i[color=#333333 !important]客户端
' n/ c, a8 R9 x% l[color=#333333 !important]./iodine -f -P 123456 192.168.1.7 ns.dnstuneltest.com; E; w$ X) r5 v# ?; n% H
[color=#333333 !important]-f 前台显示
! g/ X, u' B3 D7 a[color=#333333 !important]-P 认证密码7 z4 ^2 g T* S- _8 D: c) Y
[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析
5 Y2 D- x+ B" n7 d, g: q+ F [color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。" N) H6 j0 |' _/ \! w
[color=#333333 !important]
; p1 ?) P" {) r/ P B8 f! X" W流量包分析3 ?- k5 a6 R) P: O
' ^9 {+ h: u7 v ?[color=#333333 !important]抓包( q1 ~5 c C6 f/ F% e/ [3 ^5 m
[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap; }" q/ Y2 s6 f7 Q
建立链接的包分析
; b7 M7 D- \; c, j3 ^
. Q5 g7 s" [( V[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包
4 `- _ B! U9 x$ \5 {. z[color=#333333 !important]
4 e% |" P' v; O+ M7 p3 C5 u7 ][color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀
& i" O2 ~1 P7 v4 o; }6 C[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据3 c3 X+ R5 G& j% w
[color=#333333 !important] n% S7 [! ]: `) R/ `
[color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)
* i6 f" W0 l, b' e/ Q& i8 w[color=#333333 !important] 0 I1 w( T: U1 W( l
[color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。" q% W, v: a! K7 g5 z. M
通信流量包分析
5 c" o. z4 A/ e$ z2 z1 f- E/ }- x5 b4 J$ O% _: m; d1 W
[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析4 p$ k" M. j0 D0 ? ~
[color=#333333 !important] 7 [& a* c, Z( y. \) _0 ^$ J5 r
[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。
8 ^. W9 b/ O: [: k[color=#333333 !important]05fanyi05baidu03com1 v7 M* U0 R, p2 S- ?
[color=#333333 !important] . ^& ]+ u4 u0 ~- m6 c
[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。; j, I- d8 f5 C9 T
[color=#333333 !important]
# X9 g8 B) b9 T2 U9 {# G8 ]suricata检测规则(并未测试,仅共参考)
% i5 ~/ c' F! }3 k( Q/ @8 \* M- U0 k
0 ~) `* ]$ s' q5 |! K- p
- / d6 }: _7 s" M) k& I
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$ O6 M% T" T9 U5 ?, F, C7 \
+ V3 i- x; T3 Q0 m, D4 _# Q
安装( l5 P7 Z% e- J
1 y- t6 j, {; X* N9 u- t( x3 u
[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell
& B! X: x J8 Z9 M/ |[color=#333333 !important]下载链接
1 X" [+ _4 f/ ^1 g% m4 d[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag
- o8 s1 I. e8 z" C [color=#333333 !important]提取码:t1rw
, D7 J# \* Q+ W[color=#333333 !important]安装编译
6 M& W; O9 x" f! {
# Y( Z# n/ _, B# i8 e' w- , M- [( z: F, Y: j4 i! p
./configure make;make install[color=#333333 !important]服务器端' r( j0 l* D" @! k
4 h8 n# j t! I5 W- 4 D$ ^- j! b+ Z0 e3 W
server/dns2tcpd[color=#333333 !important]客户端
8 ^; f' _* W" b
H8 @ D8 t' t. A# W- ( a3 a7 i' X* m& Y3 b& {: J
Linux: client/dns2tcpc windows:[color=#333333 !important]云盘直接下载windows版本,或者下载
0 s, E1 C! p) ?% U# j* o# B. G e( a' p! b
" q2 }) U, T! C4 s/ W, e; ^ dns2tcpc.exe实验测试) J6 B8 X& h5 W2 w. d$ U& W
1 |2 I- c5 X9 d6 @2 k; p[color=#333333 !important]服务器端
" D! n/ g: [' _2 R0 J; r8 S/ S, f, g[color=#333333 !important]1.创建配置文件+ A! {! I6 Y6 v- q* U
- ?$ I9 S U5 k0 E* o8 G8 D6 J; K- ' V3 ]. m6 T: v( `) Q% j
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.启动" l; L- H) e; C# y8 D
8 l7 H$ b. A7 y" W
0 Q2 Q3 u. P. o# L8 X3 n/ | ./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接' D- q3 b( ^# [. U0 g' @' k* {
[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务/ Z$ u7 `+ P$ F
[color=#333333 !important] 
7 r7 T6 E8 @) L6 M0 ^5 K# a[color=#333333 !important]客户端
4 z/ u+ u( Q) F8 ~8 Q0 u[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 2
1 I" W2 i2 `9 V1 R[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源
/ H. H' U! T" G) Q# L- Z% K) W[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP J- |9 j4 V1 J6 D
[color=#333333 !important]-l:端口
" `, \8 e3 f6 B0 a h2 T[color=#333333 !important]-d:是否为调试模式 2 等级可以省略
: U4 F2 T4 Z/ y5 o! ^ [color=#333333 !important] 6 D% Q* D, F& c+ w
[color=#333333 !important]客户端使用访问服务器2 K0 }1 K; q; O# C
[color=#333333 !important]
7 P7 _5 a. ~( _( y. {( `3 Q流量包分析
- U8 K5 Y. F' D, W/ ~- y5 W
- T6 X5 z0 d; C- l+ k[color=#333333 !important]建立链接并未产生通信包$ w* K; ]/ f) m" V! e( ]& P
[color=#333333 !important]
. e& D/ s9 `* s8 _; D[color=#333333 !important]使用ssh访问时,才会产生数据包
7 k: d: a9 c) U \3 z[color=#333333 !important] 3 l& {( P! v, h# B" i% O
[color=#333333 !important]数据包分析
% c, c3 G4 v. x. W; k2 c[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中8 ?. c: m4 L" ?5 M$ k8 l/ a
[color=#333333 !important]
. O0 J: a) ?* D& a0 t" _ T& o[color=#333333 !important] ' x. C! s7 y9 S$ g, S4 k `
[color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。8 G7 x7 L) {6 i3 c3 i
Suricata规则检测(并未测试,仅共参考)
) F! M- ^' k3 Z4 l" D
7 X9 P3 z* p* _; V[color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测( w0 X' e! F; L5 U
( q `) ~1 z- p! \
W1 z( {/ N! U Z- R3 c 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]结尾5 V0 h6 A; r$ ^: c; ~
[color=#333333 !important]小白水文,求大神放过' f2 }/ j. l* r4 P
[color=#333333 !important]pcap包下载地址:& k. S; V( Y9 m, b- h6 N1 q7 L
[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw0 E; A; u( T1 t+ }& N" d/ c0 [
[color=#333333 !important]提取码:n5ha' R& V5 g" e5 l- k* a
[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载2 ] M4 {& g% |2 Z
& ?+ k5 s. A7 f( j8 O9 R: ?
精彩推荐 @( p7 N" W* j
: S- r% e- C1 D
+ o, Q6 [* p& A/ e& q) X) m
% c* S. H. o# r8 d6 L! x! f ) E/ c5 O# i# p) ^, I7 X& h
  
2 e* G3 I2 J1 J' c, X) H/ |0 f v; N @* I I
来源:http://mp.weixin.qq.com/s?src=11×tamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=10 g [, z j. X( }8 u' K" y O
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|