|
|
DNS隧道. a1 q' F# o& u; e3 v5 `
4 ]0 @2 t m9 G7 ]. ^
[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。
+ Y! F9 E& L) \8 J- d实验环境
' N* f9 m' g0 \9 B% }7 D: |0 C6 o9 [7 q7 A+ H; |! S% \
[color=#333333 !important]CentOS Linux 两台' \; b3 C+ A% D( d
创建DNS服务器
2 }8 B3 T5 b% d/ z* f# H2 c s+ A2 v$ p* H" ?" T
1.安装bind5 M) _: g: B7 W3 G" n- a u
+ P+ T* u W" ?7 U! x( H" P[color=#333333 !important]yum install bind*
5 _1 @0 V3 P2 o1 r+ H$ {, Q 2.配置named文件+ C1 N. w& s& O4 Y2 c6 {1 K6 u
7 Q7 z4 ?+ }0 h1 m+ {1 c" K# _[color=#333333 !important]修改/etc/named.conf
3 L: A( x( @% _9 m. q ~; [ [color=#333333 !important]将下图中选中的地方改为any
1 I( `! _4 h0 M! M; `! L& p[color=#333333 !important] 3 f6 y" \$ A/ Y1 a" H
3. 设置NS记录,A记录
/ m9 Q3 k3 ~+ S0 [, o- {
. e0 S: d- A: [[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件! q8 i6 ^) c$ m2 q
[color=#333333 !important]  / `' b3 T5 T |
[color=#333333 !important]增加正向解析记录
; U; n# K# B" ~/ ][color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字# N e% }3 _$ K
[color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel& \+ @, P. L6 M l
[color=#333333 !important]修改文件如下
9 W f, F0 e$ t1 x+ r5 v. r[color=#333333 !important]添加NS记录,A记录
6 A t1 C( A" O: q9 m[color=#333333 !important] 1 u& Y. U! x n& E7 u
[color=#333333 !important]添加bind为自启动服务
( R: q8 _( J) e$ f; ] |7 J* d[color=#333333 !important]systemctl enablenamed.service" g- X/ D1 D4 W* k, Y! l$ z
[color=#333333 !important]systemctl restartnamed.service9 [/ p! u) | k4 M7 ` z$ q
[color=#333333 !important]查看启动状态/ ?4 I! b" p- s% g, S
[color=#333333 !important]systemctl statusnamed.service
1 m' ~+ h( q# |, G7 Z [color=#333333 !important] ' A; ~) [0 |4 u% r
[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F); b" E D* e. ~; C0 }" C( d
Iodine
8 Q" A7 l0 w6 u. D$ _- p& L! ?3 v) s8 g8 x! l) [) ^ ~
[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。/ N7 i: J0 F- z9 n) D
安装
& p/ g5 b, c0 x; b5 ]$ d1 `, E- ^! |( _/ [4 ?7 w
[color=#333333 !important]下载地址:
$ c: v- L8 Y" a$ G9 Q' M8 o3 S4 O" ?[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip
. @4 R, \$ P( H6 m( |5 y1 h9 S8 N [color=#333333 !important]unzip 解压
+ _' o& \& c7 x) m w[color=#333333 !important]cd iodine-master8 X R: |9 A- v1 P" ` b7 b! {
[color=#333333 !important]make
8 X( ]4 O6 t; J( m' ]$ z o) k" R[color=#333333 !important]出现报错2 w. f* J9 |- C* N
[color=#333333 !important]
0 I. |$ Y) c$ b% l- J. o. r1 |[color=#333333 !important]yum -y install zlib-devel1 j- }6 Y! u: P8 h1 f% ]
[color=#333333 !important]make;make install* D1 Y2 \ J2 c; ]/ _) A+ G* I
[color=#333333 !important]安装完成
. J! k) K0 [! N4 F' Z' @[color=#333333 !important]进入 bin
$ t8 v b/ V+ p: w& W/ _[color=#333333 !important]iodined 服务器
: r- L% }- s$ C. g, e1 @: p[color=#333333 !important]iodine 客户端
( E* b+ n: @' C1 u) y8 ~. K1 d实验测试+ l0 I/ K1 j5 `6 }' E' a3 [7 k
, C' p' ?# c& W0 F+ |
[color=#333333 !important]服务器
! p8 ]2 V% d- k$ h9 `: X[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com* w/ ]* ]. F% z" q* W% z2 ~
[color=#333333 !important]-f 前台显示,运行后一直在命令行等待6 A0 t) ?1 e, l3 ^5 _* i, y3 Y! @4 x
[color=#333333 !important]-c 中继模式|直连模式
0 D5 L; ], c% o$ B3 y1 x- L( @[color=#333333 !important]-P 认证密码
4 n4 C/ g( g( j# z8 G, Y+ f [color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。2 ^+ u1 M x# S& j" g9 D
[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。
8 r5 c" K' b- B ^& r7 c[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡8 v( t8 q7 c8 |& c5 x; j
[color=#333333 !important] 8 E s `9 d9 a1 x# _5 R
[color=#333333 !important]
& s3 H8 D$ s0 E% Y; P; I! ^( x[color=#333333 !important]客户端. [. e. N" h4 K3 a9 d, D" w
[color=#333333 !important]./iodine -f -P 123456 192.168.1.7 ns.dnstuneltest.com
! S$ W- f$ G) @7 Y0 @- x[color=#333333 !important]-f 前台显示+ p5 @ {! f; h
[color=#333333 !important]-P 认证密码( x2 j5 P2 \' b* z; b0 U5 n2 W6 ]
[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析
$ o/ V4 z- ?$ Y- u. V9 b$ w! H [color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。
* h# N% ` Y! q) `) m: @[color=#333333 !important] $ j5 u- {) a9 ]! S
流量包分析
+ k8 W9 v/ @! t- ]4 ]! o' B- n- o
[color=#333333 !important]抓包
% j' h9 `8 m1 I7 J' N5 U[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap
9 D' i8 Z- a5 W7 X9 J% z 建立链接的包分析9 m0 _5 ` i% |4 \
- b+ R; l% I. k9 B- {[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包4 c9 }% v. p) a! ] a( D5 I3 u
[color=#333333 !important]
; C4 T. M4 a1 Z) Q9 H$ Y/ G[color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀9 E* e0 [) n5 B9 D7 }
[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据4 G' ^; T2 d- \( {6 F- B
[color=#333333 !important] , T6 J1 @ A9 s; A) J- N' G
[color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)
. _8 `0 D" K* F! d5 w[color=#333333 !important]
5 \! M9 Y5 h. m: v, k6 a[color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。% p, x/ V# i7 h9 l; x2 O0 j N
通信流量包分析 S! w8 |' f4 b4 @0 }
! t% J- g, i; b% h2 f[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析
- O1 \' ^6 b* I, g. X- j! ~[color=#333333 !important]
4 b$ V6 g# j! x. d* }2 F+ X; U[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。
0 d- j! I' D1 Y! i; R5 r1 E) C" t- f. Q[color=#333333 !important]05fanyi05baidu03com
$ {9 L. M* {3 D5 R7 g! K9 I[color=#333333 !important] * b4 J) c; q+ u2 }( ?
[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。/ e$ J6 t: ~2 B% E
[color=#333333 !important]
6 _" @& u8 O7 k- l, K7 {- Asuricata检测规则(并未测试,仅共参考)
% M- ]' o$ s" B; C& }$ A k5 ~8 C, g$ `) z
: M! J7 D) R, s7 T
. f- b+ K4 y4 b/ ^5 w3 s 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
/ N* R& @3 t1 H
+ a% C8 ~' w) _6 ~9 V9 ^) V安装* F& X3 V3 N9 W& q7 E+ }
8 d8 `2 l, m( @ ~% B& M
[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell1 O/ [9 P% {* X) P
[color=#333333 !important]下载链接
& v, l, i8 e8 F" v; p[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag) ~# V$ T/ @, z+ N( @
[color=#333333 !important]提取码:t1rw
9 @% N( p$ m$ @5 }9 l[color=#333333 !important]安装编译, Y/ ]- c+ m9 n0 E4 W
0 I7 q# ~7 }# I. x" ? e- : G7 n9 M% O3 l4 m5 I% g
./configure make;make install[color=#333333 !important]服务器端' f$ _/ v- \& o
2 {: \8 W+ x- M
- + w7 q4 ~5 G4 q9 R/ `3 g
server/dns2tcpd[color=#333333 !important]客户端- t' Z1 H% k) {
$ F% H8 v, I9 {7 {1 y
' Y% ?2 C0 [' _% |1 H A" w Linux: client/dns2tcpc windows:[color=#333333 !important]云盘直接下载windows版本,或者下载
/ G0 G' ^- ~) T b. W! W: \: q, A1 J
/ B1 N; v0 x+ D9 ?2 l dns2tcpc.exe实验测试, L6 i+ g' c0 f1 k
8 |5 p, p$ i Q9 ?/ `! K
[color=#333333 !important]服务器端( @& | W$ {" v4 J8 K2 i
[color=#333333 !important]1.创建配置文件
2 A4 c. _6 z2 c6 F1 H; i+ m( w! ?3 c4 g
- 0 Y5 K) h. b6 r9 w+ [0 x
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) _5 p' s8 t
) j I z; }5 @/ o6 B9 C% y. x
( E3 }$ C8 P' H* J ./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接4 r7 z: S! G/ p# z5 n5 E! d- y
[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务 |3 n: s5 E9 D! w2 e' |
[color=#333333 !important]  + Y/ h# ?% x1 _
[color=#333333 !important]客户端
}/ L0 t% d2 _+ U$ y# m4 V6 K[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 29 H5 a9 A# S! z# r4 B+ G; B
[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源; |4 R2 b2 \+ k T" F, E
[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP) B) |" V/ L2 `" `8 K y2 V
[color=#333333 !important]-l:端口
8 |) R3 {# W0 B4 |! G[color=#333333 !important]-d:是否为调试模式 2 等级可以省略4 I4 t1 r K- P/ `
[color=#333333 !important]
1 c( I8 _. I6 B7 H, k% _: S1 Q[color=#333333 !important]客户端使用访问服务器2 t9 l" R# Q+ X3 k4 f! E4 {1 ?4 L1 r- q
[color=#333333 !important]
2 N, }3 r7 l$ f4 J# n9 Y4 @) v, j流量包分析
. K9 z: f" ]0 G( F/ m) k2 `7 g8 ?0 M
[color=#333333 !important]建立链接并未产生通信包' d/ C) u0 ]6 j% g8 f
[color=#333333 !important]
y$ H! s/ v3 z# Z! p0 p- q1 m* p+ |[color=#333333 !important]使用ssh访问时,才会产生数据包
; y" K* S# z J[color=#333333 !important] 6 m! J l5 h, n1 I |2 R
[color=#333333 !important]数据包分析- y: v; Y2 l- R: {( P, r
[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中0 b$ B( g5 m* X# ]6 w4 S6 s- x, u
[color=#333333 !important]
; R/ j8 c! [# m W; ] Y2 Z[color=#333333 !important] 2 r7 t. z$ q2 u7 e- h
[color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。" i7 ]0 A( j, N( P
Suricata规则检测(并未测试,仅共参考)* E! Q( \! w N4 N) a" }0 Z7 z
7 |7 @0 c; p- _ p* \9 a. M# B
[color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测
4 _4 F( r h/ l Y8 L9 F
* m- L' k. ] z! O7 Y
! Y( I' v' N1 X' K 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 _3 i4 f0 S; n" i8 w; N& h[color=#333333 !important]小白水文,求大神放过9 P4 Y7 E$ i6 I3 k
[color=#333333 !important]pcap包下载地址:. f B0 e) w7 v9 r4 ~! `# M0 k1 }* P
[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw
* z% i) g# c$ W7 l- s" b! K5 h [color=#333333 !important]提取码:n5ha
& z$ |0 N, [5 e[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载! Y) J o) m, z2 `0 i* \1 h2 O
9 ^3 t2 `- ^7 C3 O8 ?
精彩推荐
2 ]# F: D- ?; V- t. D2 Q
5 o0 l3 J% S1 s4 ^" O$ y/ G- D0 |9 V8 F

3 J4 m J8 K) m2 x' k$ P' D+ ]1 _ ' r- r6 E1 @! w5 S! m
  
3 w* J& c6 _- R& B/ W4 K1 z5 r& h; ]5 p
来源:http://mp.weixin.qq.com/s?src=11×tamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=1
' A# V8 m) ]( p) T& }免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|