|
|
DNS隧道% o9 i( \" \$ b- _. i
p) l1 n W& _4 C, ?[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。, ~; i' l' I( C9 b8 H2 t
实验环境
; @, r# j+ N. k7 B$ o. t$ f' C; ~' M. K4 x/ b" ^
[color=#333333 !important]CentOS Linux 两台
, z8 X1 U7 G. c- `! z 创建DNS服务器
0 q( \# E3 h: c" V
6 X7 l" b7 @% o$ u1.安装bind$ Y) S% N. ]$ [& f
' g! w; |% q6 s; h+ H
[color=#333333 !important]yum install bind*( d5 q+ l6 u* S$ T& U& l
2.配置named文件2 i& f7 w8 ?0 i3 u
& G# d+ |" _' ]" a2 v0 q5 H4 M
[color=#333333 !important]修改/etc/named.conf
6 ?+ ^- W$ S9 U0 U [color=#333333 !important]将下图中选中的地方改为any4 j9 U! n! @+ z( t I
[color=#333333 !important]
/ ]* A1 m! t9 p1 o, w, r5 E0 c3. 设置NS记录,A记录
7 O$ R0 K. A" ^# `% `+ L$ p# i+ b L/ {# ^; e" {8 \
[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件& F$ S3 y5 d/ N& Q, ]
[color=#333333 !important] 
9 Q" v4 n: g3 O7 t& S[color=#333333 !important]增加正向解析记录! m! y5 P3 y# \
[color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字
4 \/ P6 n, |( _6 M% n+ ^+ H5 j/ d0 ][color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel
1 x: f1 ^$ Y" [ [color=#333333 !important]修改文件如下4 v/ j3 v& q. z1 _/ G
[color=#333333 !important]添加NS记录,A记录
& Q0 l/ a% {+ P[color=#333333 !important]
/ F: T* o5 R/ w- V7 h[color=#333333 !important]添加bind为自启动服务% n9 ? m1 H+ l4 K: @
[color=#333333 !important]systemctl enablenamed.service
4 ]! S& G4 {, F+ T. t+ x[color=#333333 !important]systemctl restartnamed.service) j! g# Y$ Z8 G9 Y: _6 ?
[color=#333333 !important]查看启动状态7 I; i' ^7 R& U2 A+ {' N g
[color=#333333 !important]systemctl statusnamed.service" M# a% r3 y2 V$ A3 I) H+ g4 C
[color=#333333 !important]
* s" n, i- l0 G' j' Q9 x3 i[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F)8 Q; i6 ~3 W, W: x; f
Iodine1 }- v* |: O2 b, G
* G8 k; Q4 P0 S" \& o+ f[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。% I/ M. A5 u4 e* j) f
安装 t" I3 V8 r& U. J; \6 R$ Y; \
' ^# ~" M% Q, v& {* d& e$ o[color=#333333 !important]下载地址:
2 e9 s/ i9 ?/ O& \' z[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip/ N5 Q- `4 F$ ^
[color=#333333 !important]unzip 解压
* g; ^4 _* `+ U/ u) ]) {[color=#333333 !important]cd iodine-master; S0 ~3 r; ~5 K& C
[color=#333333 !important]make$ z* m- _5 s$ N
[color=#333333 !important]出现报错
$ D3 M1 N+ G& A" J ^( b* j3 y[color=#333333 !important] & F" D8 @2 C# i, m
[color=#333333 !important]yum -y install zlib-devel
$ b/ w4 ]+ R3 Q$ M) t4 N) Y[color=#333333 !important]make;make install! N, z* J* J- S* r* U- W
[color=#333333 !important]安装完成
5 v4 I# a' @# i[color=#333333 !important]进入 bin% a* o6 p$ z4 k! n# I& a
[color=#333333 !important]iodined 服务器
7 ], ~+ C4 F4 |[color=#333333 !important]iodine 客户端
3 ^5 ^' a/ F, z- P: w实验测试
! ~9 q8 G0 ~9 L
4 r2 C% ]8 z% Z[color=#333333 !important]服务器# s- {8 d! p; {. B3 ]' P
[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com" r1 R" {. s& Q: H5 H! y
[color=#333333 !important]-f 前台显示,运行后一直在命令行等待
6 o# @5 S8 r, V0 \8 J[color=#333333 !important]-c 中继模式|直连模式
* d0 K7 E: Q' F$ l! f. Q8 C% ]" W[color=#333333 !important]-P 认证密码
6 R4 T6 C7 ^2 e( h [color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。
# T" q* Z; y' S: i8 E/ ^[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。
' F8 r2 r9 l, `& q k[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡
U; u4 h) U- ?$ [. u6 P% p+ H[color=#333333 !important]
7 v+ f) |0 u, }' }4 J[color=#333333 !important]
' K! B& Z2 X( d; O[color=#333333 !important]客户端3 A/ }0 V/ ~, v2 T, Z' p
[color=#333333 !important]./iodine -f -P 123456 192.168.1.7 ns.dnstuneltest.com" c3 ^' A1 T+ M! c
[color=#333333 !important]-f 前台显示% G0 l3 U4 `2 b- v) l
[color=#333333 !important]-P 认证密码- ^6 ^" F+ {, N; \
[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析4 n% i& f! n- n8 P S, R) L
[color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。
5 z7 v$ m2 \; t" U& l[color=#333333 !important] / V% a" W% I3 b. H/ v5 Y
流量包分析4 Q; I" @* m" v& A% |" ?7 p5 V9 Z! @, q
: `, B% z, ?! U4 W4 a3 K[color=#333333 !important]抓包+ k! T- W3 J( M: ^' N" o4 P( E
[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap
- W) {# Q7 o/ q) s1 V 建立链接的包分析, n7 d( q* K3 W! v0 ~
( _, m$ r3 X" v6 b[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包
" a- R6 n/ Y3 p+ V1 l, d+ i3 n[color=#333333 !important]
' Q! v) _- i w/ b& s% m[color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀1 P- N# k7 \+ }
[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据# H3 J" G+ I$ ?" i! K$ t
[color=#333333 !important] , F2 V/ p6 A/ }5 g1 m6 ]: s
[color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)! U/ `0 s3 E$ r& N% r& [$ G
[color=#333333 !important]
6 e' V. ^6 w& e! m[color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。
* b0 C: X& ~, H, S2 [$ V通信流量包分析' r! ` t7 l3 C1 ~" A
3 t+ [! J; w6 v5 E6 V
[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析# v7 q. h: G% T4 M" H4 R$ O- k
[color=#333333 !important]
$ P0 K* ?, v6 `2 A[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。
; {% N$ {6 }9 u1 q) A! j, X3 H[color=#333333 !important]05fanyi05baidu03com
7 r8 j2 Z \" o" z5 |[color=#333333 !important] p4 u' N4 [9 ]) {9 R u7 M$ v% P6 C
[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。
- `9 c8 f1 C' X( J3 F% o# L; N[color=#333333 !important] . K* ?1 H- w$ L9 c: T
suricata检测规则(并未测试,仅共参考)
2 X( X( k. S' Q# G+ L) d7 J$ y/ `5 H1 w$ U8 d
2 y' ^2 o$ M5 C# x+ Z- * ~. g+ w: G$ J9 l
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
2 O" w+ i6 T+ T; l8 u8 v7 |" j; i+ f& ^! k& }! g( E$ B2 w/ k
安装
* N: H8 O0 R" E1 {$ H6 {" [% N: O+ r" Q/ n8 H) d- |) E3 l( T
[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell
( i' {' I: [- t* e[color=#333333 !important]下载链接. d e: l6 `6 {4 u
[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag, P5 Q9 a% Y% c9 O7 s
[color=#333333 !important]提取码:t1rw* e7 l ?; V1 l& e( b( @
[color=#333333 !important]安装编译
: f4 p- T1 _/ m* y
/ G* ?( q5 U' [& T a4 W& Z- ' E$ A) O4 h1 R% h8 ]7 i
./configure make;make install[color=#333333 !important]服务器端) ?$ p- G7 F W' A
# H! V" a" s& O8 d0 S, W1 ]- 1 G7 W9 _/ L2 k' M" `
server/dns2tcpd[color=#333333 !important]客户端
9 n- _# v4 N' d1 U
* A5 Z; n( n: t! A6 P- 5 b ~* l+ @- w2 B+ n, W
Linux: client/dns2tcpc windows:[color=#333333 !important]云盘直接下载windows版本,或者下载4 }: n; Z7 d+ i. ^6 x) ]
4 I7 C' ~+ {9 r6 x% A- : j j* x( D2 ~5 r8 V: S
dns2tcpc.exe实验测试7 c& Q# O6 {; G
" q* ~+ x4 l& ~) D6 v[color=#333333 !important]服务器端: f; U% n" o0 r) d5 @6 O$ B
[color=#333333 !important]1.创建配置文件7 B% |0 {4 F. f2 J( w9 ~; ^: o
' U z# P3 p& ]' i7 ?
% [1 m+ N: Q/ o( `( 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.启动
( k g* O V, V$ h8 }, V1 i7 Y/ M: D9 Z `( \# F$ x! j
- $ l- P3 L' }. R, L. A
./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接
4 }4 {9 T. H- G* ^4 j[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务
- C6 e, W' \: @# s[color=#333333 !important]  + n3 j% F# Y6 o" y1 R4 {+ q
[color=#333333 !important]客户端
9 ]0 y4 W# } A" E" u* P[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 27 a9 e" c) t$ L6 z
[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源7 O& g1 _1 S) X( C
[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP
" u: j: N% i' D1 Q) x }[color=#333333 !important]-l:端口1 K# U1 h$ Q* \* F* P# T3 K4 [
[color=#333333 !important]-d:是否为调试模式 2 等级可以省略
' f. N: z% m! M$ V$ K [color=#333333 !important] ; D9 G1 ?) G3 a! J
[color=#333333 !important]客户端使用访问服务器" d% R% w3 c' E7 P; t" x9 [
[color=#333333 !important]
. I' V2 x1 v0 e" h0 G流量包分析
! g" `7 n9 ]/ F7 G" {' I
0 L1 |" l9 ]3 }[color=#333333 !important]建立链接并未产生通信包4 w' }$ C4 S5 {7 q& T
[color=#333333 !important] . ~& b$ i3 Z$ s+ i: R
[color=#333333 !important]使用ssh访问时,才会产生数据包& m6 v5 T& Y4 l! s
[color=#333333 !important] : C& j0 c+ v9 b
[color=#333333 !important]数据包分析
) L% ^+ \9 W9 y[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中
" q* C4 ?' m8 y# K7 } r R[color=#333333 !important]
- t4 |' s, X8 l" C% m- w5 G4 a[color=#333333 !important] 3 b$ ~! K6 I, ^
[color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。
9 }- Y5 b. y* n+ ~7 vSuricata规则检测(并未测试,仅共参考)
. {; Y% Y2 M& S. h ]! \0 N
/ M" M t: g& `4 C' Y! k5 J( I[color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测2 a* Y- P8 _0 N; @
6 i8 w( x8 ~ B$ Y* y9 A" Y8 ~
7 x! q7 u0 m! m+ H 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]结尾
/ X; W5 t9 Q9 \+ a* p2 e[color=#333333 !important]小白水文,求大神放过' t7 T5 p: K; H+ }7 E! E y! E3 S
[color=#333333 !important]pcap包下载地址:/ n3 f& b7 Q7 e" C8 G5 Z
[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw6 H+ ~( d1 Q3 M+ @( _ A
[color=#333333 !important]提取码:n5ha7 Z2 c8 h$ t8 z7 j9 m# t" e; {
[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载9 M; B- t" _# p R6 n1 O5 _

+ s4 W9 x3 A* X1 P- {精彩推荐6 z( S: k" w& s% ? L- C

" a2 e& q; ^. u/ h. F0 C, D
4 ]* M* B% | R: M
: a/ E1 [2 W2 Q3 \9 `( ?- ~% _
; Y# G( _+ v& c" A4 O  * C+ V0 q# b3 J# W
6 ^3 j# S2 @+ H3 O来源:http://mp.weixin.qq.com/s?src=11×tamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=1. B' t4 c; N: M+ T' J# t
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|