|
DNS隧道
+ c! |. ~9 [. ]& _
* _" x! K1 ~" t a' j1 S q* V w[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。
- r2 C6 t+ x; I实验环境0 \$ ^. q0 \# I' s
4 C. T$ u/ e7 y$ p3 }3 b6 J, @( g& r9 q- h
[color=#333333 !important]CentOS Linux 两台) g u0 C1 P7 a' F3 p
创建DNS服务器0 | _1 V' e$ _" K% m
9 B& R' I4 m; {; n# F
1.安装bind* Y, ^9 D7 R& Z- f6 r, _9 s, K
7 v! A5 @1 y+ F& U: A8 z9 S
[color=#333333 !important]yum install bind*
- A5 H9 a q- R0 p9 C 2.配置named文件6 K0 @6 c" ]$ o+ F
9 H3 k6 i1 i$ V( g1 S
[color=#333333 !important]修改/etc/named.conf* F/ d4 e, O5 d" M N$ T
[color=#333333 !important]将下图中选中的地方改为any
8 A# f2 }: H+ B% z4 k; K6 z[color=#333333 !important] ( ?; `2 k- c9 @, `
3. 设置NS记录,A记录7 Y( e2 W5 S, b
9 X2 c6 A* s, ]' r7 V8 ^, g[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件* J% k* @5 s, g. {# }$ {$ t
[color=#333333 !important]  + Y# g8 W/ v" H5 \
[color=#333333 !important]增加正向解析记录: [) I" k A/ E; G% [1 m2 i
[color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字/ @* b* Q8 k6 A- U3 F. }
[color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel
! d; ]* n; o2 T( B! B9 ]; t [color=#333333 !important]修改文件如下
! |9 d3 k* i' U6 I) h[color=#333333 !important]添加NS记录,A记录" K1 i9 t# [) h* G8 w* A& Q H
[color=#333333 !important] 0 g0 p# b, L' ^, f$ k
[color=#333333 !important]添加bind为自启动服务0 m+ A. U. H( ~( b, k/ Y; S5 N- _
[color=#333333 !important]systemctl enablenamed.service4 p! j% h8 D7 O9 H, J. ?1 H
[color=#333333 !important]systemctl restartnamed.service
8 d$ q9 d+ n1 r; P [color=#333333 !important]查看启动状态
5 y- j. v9 m1 o$ u6 f[color=#333333 !important]systemctl statusnamed.service0 r) W5 M# T2 ~* A' ~* C0 O, N
[color=#333333 !important] * l1 n* A/ I4 S d* e3 G2 ?' {
[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F)" x$ o% `/ u9 D; y/ n
Iodine6 e- H/ @ m' v! n+ {, I" m
% C- Q' o7 t, c
[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。
# \4 A" e" d% _安装- u% Y& `+ P3 y1 b
- r+ C& D: k2 s, w3 @7 W( H6 z6 q( R$ {4 s[color=#333333 !important]下载地址:
9 ~+ t, W0 m5 W2 s- T: o[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip1 Z' I; J+ z# F1 D, @; S
[color=#333333 !important]unzip 解压' i8 p( f5 O* I, B- y' o
[color=#333333 !important]cd iodine-master
, Y4 {. |# E& V4 S[color=#333333 !important]make5 B. X5 ^9 n/ c/ w$ B, ?
[color=#333333 !important]出现报错
F! _2 {5 O5 y1 K[color=#333333 !important]
+ R P) {: F6 z9 D* v/ s[color=#333333 !important]yum -y install zlib-devel7 x% ]$ s7 n3 s& G6 n
[color=#333333 !important]make;make install
' z( F" F o p3 Z, K0 a[color=#333333 !important]安装完成
# ^0 p9 B* b! E/ K3 f+ J) |[color=#333333 !important]进入 bin
7 z. u3 a7 p& g6 |( R. A[color=#333333 !important]iodined 服务器, p8 q, Q- X! f0 Z1 H R' s, t; e
[color=#333333 !important]iodine 客户端
j# Y+ ~/ w+ ~/ a. Z8 y. N实验测试
+ Y1 v: J- C1 D: Y3 K; Z" V
! C% _: C, \+ t/ L8 x# }3 ][color=#333333 !important]服务器
& q7 o" Q' {$ F" m. b[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com# z7 d1 O8 r1 z5 F
[color=#333333 !important]-f 前台显示,运行后一直在命令行等待0 S5 m- ?/ z8 s* k
[color=#333333 !important]-c 中继模式|直连模式" }9 M. R' `# e! i% v/ O
[color=#333333 !important]-P 认证密码. r- t& U6 f$ S1 T" \$ [
[color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。: ?9 i) ]4 O# ]+ s; ]
[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。
# `# \! _% a( k; [" V/ Y+ e[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡/ F, c! _* ^! I W* x
[color=#333333 !important] ) S/ ] e7 y% Q8 n
[color=#333333 !important]
+ |$ ^2 T$ f0 K7 I( M[color=#333333 !important]客户端
2 p& N+ l/ w+ c9 S; m, \4 w[color=#333333 !important]./iodine -f -P 123456 192.168.1.7 ns.dnstuneltest.com
8 b- h) V; ~/ B& `[color=#333333 !important]-f 前台显示
4 b! r( s* ^( z$ S[color=#333333 !important]-P 认证密码
9 S* J8 \8 h3 D) v8 X- z* \. n% b[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析
/ k3 n( F& k3 b6 S, ` [color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。
* q* X" T1 [; e& v! k[color=#333333 !important]
1 V' E* Y9 x6 l9 j; D f3 S/ o* E/ J流量包分析6 y6 E8 V; P% }! r& H
$ T8 e) G! O9 Q% L
[color=#333333 !important]抓包
8 r: R8 `, n# t[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap! t2 [. U. S) d8 j2 c2 u" L% c
建立链接的包分析
|, s: ?9 T' @. N- w0 W, Z8 D4 T7 y( v0 f
[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包& h) m* |) C/ u% l$ x& P- V
[color=#333333 !important] . l# d0 T/ m& C6 M! Y
[color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀- y6 |, `) W7 E* g7 ]
[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据7 ~: E ^, h/ d9 [; e {
[color=#333333 !important]
9 W0 V# v' E) v; M: e5 U[color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)
( U7 @0 c8 A# a[color=#333333 !important] * W4 P2 Q4 K* R4 R3 T
[color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。 i9 d, J! r5 |9 U- s/ |- o
通信流量包分析
. f* n5 T( N( j( e% Q5 D3 ]0 K$ e; F6 e$ u! X- E
[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析2 c; q/ u6 G' `1 K
[color=#333333 !important]
; v) @0 Y, a8 J! \1 b! G" @[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。
3 B9 B) q. m- u# U' k2 n[color=#333333 !important]05fanyi05baidu03com7 C& q3 Q' r6 s, |* ]3 P9 @
[color=#333333 !important] + H, x; s1 i" T6 D% c/ q) A9 z
[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。
5 J j4 n y. C6 R2 V[color=#333333 !important] ( x, w/ R r: A7 {7 S) i7 j
suricata检测规则(并未测试,仅共参考)
$ \* q7 }) v0 q/ q' z2 A+ ^
+ O- q' Y. J/ q5 i" `5 T. Q
4 P* i7 w7 C+ I; g1 v
- p J1 ]/ Z. A6 U3 Y" i# \! t4 n5 z 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! `4 D' N/ I$ H" p" Q- q; Y
, `# o' ], i' S9 _0 y- c
安装3 J5 |/ }7 f# p5 C
2 e+ c% P5 F& r1 W2 X[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell
9 R7 E0 b( s, v) r$ B, @' Y[color=#333333 !important]下载链接9 L: |, R9 p9 J& P
[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag
4 y D$ }$ J3 W2 s( C9 ? ^) F3 f [color=#333333 !important]提取码:t1rw
N9 K4 I* U' C3 Y3 _[color=#333333 !important]安装编译
/ m6 Z2 T! Z1 g5 b: y1 O) e n; }; f! J" o' u2 Q
( ~% Z, t f. u0 t) {4 C2 Z" g- W$ K ./configure make;make install[color=#333333 !important]服务器端
, e' ]) W+ q v' Y. j; [. r2 L, \) u9 B; {1 n, f5 _
- ; p& Q3 t3 _( Z7 b: N8 X3 c
server/dns2tcpd[color=#333333 !important]客户端
$ I# a1 ^( \) x, ^6 p6 h$ z8 l$ q5 c; y9 }2 I
- 8 ]1 D) H" h& ]) c
Linux: client/dns2tcpc windows:[color=#333333 !important]云盘直接下载windows版本,或者下载# ^5 d' J! A& f K8 T! |6 l n# U
/ n2 \7 W+ q, q, Q \3 P& l( ^( B: S
- " y/ q( L3 [0 A- R" `
dns2tcpc.exe实验测试
: {; ]$ h3 C; k' Q- |/ j, X3 z! @" I6 S6 x7 D, t" a2 z& ]
[color=#333333 !important]服务器端
% }, l' I7 l5 G[color=#333333 !important]1.创建配置文件% y/ J- [2 J" e) b d3 Y
$ x( Y8 D5 S6 @: o, ]* q6 P
+ X; Q% p3 \6 Z1 ?7 m& H 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.启动
& I3 r% h' q: Z* p
2 ]* R0 V- t Z5 d c6 Y( P- ! Z$ @+ U, G& S& T6 G! E
./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接9 v- I" E; o4 |) H* I
[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务
+ ^' Y E6 o5 k( r: \[color=#333333 !important]  " Y: w" p6 d2 z: ]
[color=#333333 !important]客户端9 H6 V6 f2 q5 \9 p- w$ U0 I5 X/ |
[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 2! T' n! K( S2 w, N3 M' F
[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源
! ?6 d' t0 a3 c[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP
1 o# G& j! Q. _& B3 {6 p( ?/ e[color=#333333 !important]-l:端口
9 [. E& X0 j8 _8 v0 E* \; g[color=#333333 !important]-d:是否为调试模式 2 等级可以省略
9 V7 y( L& B. J5 B/ P3 w. U [color=#333333 !important]
# K7 S; N0 a- }8 u# S, K! Y8 M; b[color=#333333 !important]客户端使用访问服务器* l* \4 i+ r9 H
[color=#333333 !important] & W0 Q Y- p d
流量包分析
6 A h4 D0 ~. _, J) O, \2 m, A$ i- {9 c
[color=#333333 !important]建立链接并未产生通信包/ F) e6 s$ F' U0 r7 |
[color=#333333 !important]
& `5 a& j1 q8 s1 @9 c2 K0 X[color=#333333 !important]使用ssh访问时,才会产生数据包
Z! u9 d# m7 v* j( u[color=#333333 !important]
8 f6 I7 u4 T. i8 ~$ A[color=#333333 !important]数据包分析: h0 H: @- l0 K/ A8 m+ R# [
[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中8 o6 \! E6 e* E& c6 x
[color=#333333 !important] ) q! P: h) t. h/ I+ ~6 ?% x; E
[color=#333333 !important]
" Y n E5 Q2 D% ?3 f$ S/ }9 _[color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。' U# k) S7 J- U( R& W5 d% `
Suricata规则检测(并未测试,仅共参考)
$ g1 z2 i% ?8 `& |$ ?8 Q% I; H- J# v5 b) x
[color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测1 D( E+ {! o4 Z0 ~7 O2 F5 K
- W& l1 Z$ A" ^! |* B0 x! C. ~# i5 |
# ^' P6 M- V! _* g8 {/ K( 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]结尾
' R. W& Q4 V6 b6 I; K: i[color=#333333 !important]小白水文,求大神放过
4 `& ^) w! U+ i7 Z( c7 i[color=#333333 !important]pcap包下载地址:: j$ L5 r. n y8 H
[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw9 q' `' o* e, m8 Y
[color=#333333 !important]提取码:n5ha
( N7 \/ y2 M+ B7 O' B, O: m[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载1 `% k# F3 ^. P5 V+ v6 s+ U7 L

8 o% E/ C0 D$ F; I) k精彩推荐
" g& f* y7 r5 \# ^0 l% v. t w" I
# D" F& T( h! l
W p$ t) k' X$ t! M2 m. q
2 q$ b. S( ~' p, y% X
6 y# a8 w' t4 ^1 \+ z; ]. S6 O  8 F6 a1 H. k7 v C' w- q9 O
% D9 o% ?9 b4 ?* d% D$ n- w. m来源:http://mp.weixin.qq.com/s?src=11×tamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=1
7 f3 K+ V, r z! X# o' b免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|