|
|
DNS隧道
6 X' R5 b) `9 K, i
! s! O7 x9 }; I1 C[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。- A# [" I8 C5 R6 K4 c. ~
实验环境3 |# s s0 {- G F3 V0 P
7 q* n3 g2 R+ l7 W
[color=#333333 !important]CentOS Linux 两台
: V9 c; G* K* m. I% d 创建DNS服务器
# h5 Y! i4 Z/ M5 c! }' }
2 ~: a" z7 l4 g7 s1.安装bind
# @+ c; w/ I1 v
$ N0 l- F+ d/ J' v, K$ S3 W[color=#333333 !important]yum install bind*
0 e( a* C* |6 {2 `: N, x 2.配置named文件" A8 W4 _1 _ G( w: v, G" j
0 Y0 q! x$ Y/ K# G, w[color=#333333 !important]修改/etc/named.conf
) b9 b6 Y4 v( r( Q+ H6 J [color=#333333 !important]将下图中选中的地方改为any
7 ~, v6 U, Y J3 i, \[color=#333333 !important]
* _) L' W1 b$ |; d' b1 f3. 设置NS记录,A记录' Z" @# d) s- X9 r
) s( [; R0 K% o- o7 ^3 E[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件
4 D2 } _, \+ b- [ i C[color=#333333 !important] 
, ~+ H a$ ^- a' ~- B( Q- C6 A- o[color=#333333 !important]增加正向解析记录
6 U. k" j" l! c0 s0 X+ Z; Y[color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字% |$ x) ?1 K! l* L7 T
[color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel
8 E4 t: n- j H# b/ `- w6 ^9 _ [color=#333333 !important]修改文件如下# w* k c' {( m' j4 D, ?
[color=#333333 !important]添加NS记录,A记录* Z! _* a: J7 N
[color=#333333 !important]
( W. `% i b9 p `: J8 A k[color=#333333 !important]添加bind为自启动服务# j1 c( k( M/ B* a/ s3 `8 z
[color=#333333 !important]systemctl enablenamed.service& v2 r6 _' l8 Y% D3 r: D0 G6 k" K
[color=#333333 !important]systemctl restartnamed.service! i7 H, m5 g* I3 T. ]6 H9 b/ {& n
[color=#333333 !important]查看启动状态4 Z4 C7 J7 O# M. @, N5 O j+ Y2 _2 c
[color=#333333 !important]systemctl statusnamed.service
3 H1 O! h4 g* |# K A1 W [color=#333333 !important]
3 ~1 O8 b. T& ]$ Z2 a[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F)# y% A3 S0 [3 L, W+ k: j+ j
Iodine; `" ] u+ g; F
0 o; L6 x6 x u$ i5 z[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。$ b# J! Y1 A8 [, i
安装
* j: `% p- q+ G2 N4 N0 x. Q3 I( u+ \; u4 l& u
[color=#333333 !important]下载地址:7 W! O/ m' I0 v( U' `# v
[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip: R& _ O; S3 t2 L( Y, J/ N( _' P
[color=#333333 !important]unzip 解压
8 \) `8 i; z' L# M5 Z0 x[color=#333333 !important]cd iodine-master
& Q. x. r6 F9 ` w[color=#333333 !important]make- T: X1 L g7 X b" O
[color=#333333 !important]出现报错
* k8 u& y5 l% O7 C5 q+ \" `! E6 z[color=#333333 !important] 7 i# e% J& F; W
[color=#333333 !important]yum -y install zlib-devel( l# I8 c; e1 S9 d( U
[color=#333333 !important]make;make install
0 j7 _. m" b( a9 L1 R9 u8 o7 u[color=#333333 !important]安装完成: w, x) J) I% m
[color=#333333 !important]进入 bin
1 k. k0 `* T2 W/ g$ }/ t; B5 f[color=#333333 !important]iodined 服务器
r( J3 F( |/ E& @: _% `[color=#333333 !important]iodine 客户端( q# L. b, u+ w7 y
实验测试
7 o8 R- i, G, V9 p
! x: F6 M" d& H[color=#333333 !important]服务器/ a4 i# S2 p0 l$ T! g
[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com
8 K+ j/ ^" y6 y3 [4 X[color=#333333 !important]-f 前台显示,运行后一直在命令行等待4 i, }' Y4 _9 f1 q8 j3 Y
[color=#333333 !important]-c 中继模式|直连模式
& `3 ]4 Q5 J. v3 ~! q4 q9 I! H[color=#333333 !important]-P 认证密码
) R' C- H- G7 Y- M. t& ? [color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。$ S1 p2 J V/ B8 X$ ]7 w( \8 Y) L
[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。/ C7 E# d7 d5 K2 O7 L4 U
[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡# d1 i% z$ |0 G" L* Z
[color=#333333 !important] ( I) w" X* L; S: P
[color=#333333 !important]
7 A! a: y& g( X% d" x8 i8 m[color=#333333 !important]客户端% z' j7 F! H& E8 t' }. c1 z; _9 U& P1 }
[color=#333333 !important]./iodine -f -P 123456 192.168.1.7 ns.dnstuneltest.com
4 | m3 q3 l- {3 v# R[color=#333333 !important]-f 前台显示, z1 r9 H6 C2 C+ C
[color=#333333 !important]-P 认证密码6 t6 ^( {" e7 D$ J& p% y
[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析2 p9 m9 }1 ^& L& X; u
[color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。8 s, O/ Q" A9 r4 |* I5 j
[color=#333333 !important]
2 N | d% W# d f0 ^1 D流量包分析( o' m5 R) ?2 O( y7 d% U
9 O* e" t0 G! N" n- B
[color=#333333 !important]抓包
$ h `" C0 A. d( i[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap
/ ]* }4 n+ X' _) d4 ^7 f% D2 K 建立链接的包分析0 Q3 ~1 n( O& A; j" |5 q( ~/ ^) P8 k
7 Y( M9 z2 _/ U4 t* y% j1 N0 l
[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包# E5 H, ]8 i! g9 G1 X! [ e, G
[color=#333333 !important] + m; \' m! B( o5 T0 `( \
[color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀! w; F# a" o6 H7 E
[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据
2 `9 s' G. d/ |5 F! D, \9 a[color=#333333 !important]
1 _5 s7 t( c' u, N[color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)
( T8 }% J4 m" c" O6 e7 f; U2 Q9 y[color=#333333 !important] 2 V- G9 R7 }2 X, P5 N+ _7 f
[color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。
! L& }. L2 T! p; K# }# X通信流量包分析5 g! |5 H9 X; X! B1 O w1 ?
% f3 ^$ @& }2 e7 O0 `: m3 ]3 i[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析$ o" Z$ x/ i( o/ R {, _( F
[color=#333333 !important] & R/ M3 g' C: ]+ q6 ?5 C$ @$ n$ Q9 H: T
[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。
) _; b- o, I4 _; G2 J% d8 Q[color=#333333 !important]05fanyi05baidu03com
1 |. h3 Z1 U0 [& X1 m5 X1 Z5 B! t! U[color=#333333 !important] 3 b5 r) r" r, x, |, H# Y
[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。
! V' m ~6 C, S" B) q+ \$ Y$ p1 {* t[color=#333333 !important] % ?1 N! G5 b6 ~- U: B
suricata检测规则(并未测试,仅共参考)
5 c) L; e3 K' K+ l( B* h9 B: i; E8 }- A m8 V8 c/ l3 e
, H, o0 |* T9 d! ^* y8 R. j/ X m
& a! P+ J0 S+ j/ | 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
l1 w' x, c) u9 a/ B* t; g* r
- s. f9 u) ~4 [' z3 Y; u! l安装
0 {7 b; s( ^( l4 `. N4 A7 J# ~2 g$ }! k5 {
[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell8 \9 o" D0 P3 I) m% e: O9 T& k) o
[color=#333333 !important]下载链接# V+ |+ `- f; l6 S& Y
[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag
2 I. r1 |; X0 k" A t [color=#333333 !important]提取码:t1rw
+ y$ r6 h# }! Q. Y" e4 U! U1 ^& J& [[color=#333333 !important]安装编译: U# o- R! f( A0 ?
' I- @; W* `: J
. {; L; Y R/ n6 Q, q# V ./configure make;make install[color=#333333 !important]服务器端
8 s, {) M9 L- W, _1 _& S# Q4 K- ~/ c! L" m6 {
- 8 |1 w! A- H) o7 N! w9 S: \9 s* r6 q
server/dns2tcpd[color=#333333 !important]客户端* U( Z5 S1 I0 |! v' l( _# b
/ ?1 I5 n6 m, E0 x7 d6 t% a- . P2 c! y6 S5 @' M( y
Linux: client/dns2tcpc windows:[color=#333333 !important]云盘直接下载windows版本,或者下载
& l1 T9 q- W# o' a5 S# y- }0 Q- a9 v5 Q$ k/ n1 E7 i5 c
- - ~- a9 d- q1 f. U1 j N7 I) r
dns2tcpc.exe实验测试
% Z9 C$ l& m2 \) U/ n* E# I: N* D
9 H% O4 n$ Q7 g[color=#333333 !important]服务器端( }$ G* e1 k$ A# c7 H$ n% [6 Z
[color=#333333 !important]1.创建配置文件# r0 b7 L6 {5 u; l; Q0 s
0 q: |( I3 T( q; K; E
- + D( U) y! V- m) S3 z
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.启动" e: H1 `! `' p. c. `* h
/ U+ h- ]: N# |$ W& P
- _' P7 R u2 m; Q1 ^$ t
./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接
' E5 J! ]5 x" e( A[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务
0 z' |7 x9 I! H% O) O; r9 }[color=#333333 !important]  , c4 V. t% x& ]6 F% X
[color=#333333 !important]客户端; g& |3 q6 M' F6 d
[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 2+ g5 K: W( c* d, J* Z) w
[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源
! o2 ?7 A: b; S' a& c3 n[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP
2 r# k3 t( Q1 z5 o8 D7 L[color=#333333 !important]-l:端口
' a# u& Y$ i% o0 G* B9 k8 E[color=#333333 !important]-d:是否为调试模式 2 等级可以省略5 B/ n1 x) S/ ?
[color=#333333 !important] 6 M% X9 h2 d# c/ A# p5 |( i7 r! U
[color=#333333 !important]客户端使用访问服务器
- c7 V9 @/ ~8 w& A4 j( P4 F: R0 j" x[color=#333333 !important] / n- Q8 `( O* x4 m
流量包分析& z. n' g I" K
' W! o2 z( Y5 x/ |2 N1 c, L
[color=#333333 !important]建立链接并未产生通信包
7 g' N0 C" M8 K( D: t/ L[color=#333333 !important]
W( G- d. x& A5 l8 ][color=#333333 !important]使用ssh访问时,才会产生数据包
1 ]5 x: t; e2 |% d3 `$ A! Q3 n[color=#333333 !important] 9 ~+ }# q: {7 w# {
[color=#333333 !important]数据包分析
5 M* P# q* |% z y0 o' C, \. |[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中
4 v! ^- ^# z2 w, i( _[color=#333333 !important]
% H8 m3 e* M( K- h, H$ O% f. b" _[color=#333333 !important] 1 Z6 j: }2 w2 W9 [
[color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。
/ ?2 c1 q. p( xSuricata规则检测(并未测试,仅共参考)) o3 g7 z# e. t# E2 y+ T, w( k
; o) i3 S/ h" r2 s$ _9 g: E
[color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测
: G) U3 i' A/ {3 d- M+ S0 h
+ \9 b$ S1 o) F5 E- $ \1 V, Q, s n) y3 u
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]结尾
, C; z+ q) Q. P. {& y[color=#333333 !important]小白水文,求大神放过
1 g. @: D" x; W" p+ J3 j+ }) Z[color=#333333 !important]pcap包下载地址:! j2 u" N& D' V9 ^# V! g. {
[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw0 B7 R! N& b4 u8 L
[color=#333333 !important]提取码:n5ha
- @8 W) U T6 A* ]6 A3 D[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载8 K0 L. Y6 B' E- g9 q+ F) `

# V" B, w! W/ Y/ A5 ^精彩推荐' r9 L% y6 m% w7 W T3 z4 M

- u# i0 `/ N7 `* S* l8 x
& D8 p1 R5 U% e/ N! k $ q/ |( C+ ]" T! `! v Z
9 L$ ^5 K4 \4 f: P
  
- H3 W8 F- f* N0 H- u+ b4 Q4 m& U+ w; {5 Q4 h8 H7 K7 C
来源:http://mp.weixin.qq.com/s?src=11×tamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=1
" x% Z; g- Y9 ^7 e免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|