|
|
DNS隧道* n# K; ?3 L2 ]3 H
" Y% J* v2 \' ]# Y6 W- x$ v7 ?. ?[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。
5 |/ e4 [" W) g8 J% C实验环境; K v/ K u) w0 d
1 W% z! ?4 D T[color=#333333 !important]CentOS Linux 两台. U9 u% k8 t2 C% O( [
创建DNS服务器
& e% E# U; |1 R" f7 j5 N) u+ n
: o$ J2 e- R% u0 K1.安装bind3 ]! y# ^+ O; q2 a8 |/ q
$ Z$ A* \3 P) `+ Z4 @: @% s; v
[color=#333333 !important]yum install bind*0 i' e( ^" z/ S
2.配置named文件. N. M0 Q& H) W |1 D3 }. T5 l
9 P1 ~! k) ^ l, a5 H[color=#333333 !important]修改/etc/named.conf" e7 f, V/ D+ ?* h
[color=#333333 !important]将下图中选中的地方改为any- Q3 A# E. D( [* b$ p, \6 _; O
[color=#333333 !important] v( \* b* e; s5 B/ i
3. 设置NS记录,A记录
) M0 ^# z: ^: M( y' t- S9 d
$ H' a# ^* X( F5 v; d0 A[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件* Z' Z" q' D& U6 c: t" I, P, W. ^
[color=#333333 !important]  ! S3 _) l N$ ^/ ]' `$ _- e
[color=#333333 !important]增加正向解析记录
6 ]0 q) @' K; j8 b G" K# }- m[color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字
. l7 M j, n( F9 t& h" T Y m[color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel6 H. @2 X6 Y, }+ \( Q( ?# I
[color=#333333 !important]修改文件如下8 \& Q; O: h' B) B- }
[color=#333333 !important]添加NS记录,A记录: `/ d) z ~0 n% s9 _9 u
[color=#333333 !important]
- e2 V8 |; P% L1 y% b[color=#333333 !important]添加bind为自启动服务
8 ~) }1 c0 d% O[color=#333333 !important]systemctl enablenamed.service7 B; T3 Q0 f3 I) E( R |5 K, P
[color=#333333 !important]systemctl restartnamed.service+ }$ f" N. [5 ^9 @, |) q4 q2 ^
[color=#333333 !important]查看启动状态) [5 T3 p. L. e$ u
[color=#333333 !important]systemctl statusnamed.service/ \9 G: p/ c/ J' A9 C: T& B
[color=#333333 !important] # J* _8 @9 c9 X, F* \! E) Q
[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F)5 @* b/ j2 c9 G1 _. p& \9 m$ {6 G
Iodine1 n# \4 ^: S7 U; Q
8 J1 h2 O: @6 x% o9 ?[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。 N' [6 s. x9 i3 U& Y
安装
8 X3 [; Z4 S5 ~% d# V! m* o( p9 h- t5 [2 S* d, X3 ~% H+ a
[color=#333333 !important]下载地址:% v9 K* V( k3 O
[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip
! P; x/ n! U; ]& _ [color=#333333 !important]unzip 解压' R2 U5 t6 t8 W6 C
[color=#333333 !important]cd iodine-master+ l$ D/ o/ J# v N+ J1 L9 V9 A
[color=#333333 !important]make
, ^! t2 a# B% M) W9 [[color=#333333 !important]出现报错( P3 ?2 C5 ]7 z0 P# C
[color=#333333 !important]
) Q3 ^6 U. }! V& J[color=#333333 !important]yum -y install zlib-devel- Y/ q- F) U9 ]
[color=#333333 !important]make;make install
" N3 s, W- J# H4 U) b6 i% ?" |6 X[color=#333333 !important]安装完成) J- _, ]' d: P- O
[color=#333333 !important]进入 bin; d0 }. R$ c1 P2 c" z! g: p8 m% P {
[color=#333333 !important]iodined 服务器
* m% E# M2 s4 R5 @1 G[color=#333333 !important]iodine 客户端. U9 O3 y% S6 j0 \3 Q! {" R
实验测试; x+ U4 b0 z* \0 w6 o; E1 n! f
9 Y; h6 j" M- e/ g2 ?/ N
[color=#333333 !important]服务器
8 w( ^4 ?6 t- t }* q[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com
( r. V: I) U9 j! W7 V6 S[color=#333333 !important]-f 前台显示,运行后一直在命令行等待( ?8 q1 S1 w- P
[color=#333333 !important]-c 中继模式|直连模式" \4 S3 t" M7 C) ~& I* ^7 b1 p2 {" C9 f
[color=#333333 !important]-P 认证密码
5 U4 W7 d$ v: s# }6 U [color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。
: H O& P2 W, Q) M2 z# B[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。
7 x* i9 g/ c! V" l; q! @& P[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡* H+ A: b/ g0 o5 l b, k+ b$ L
[color=#333333 !important]
" t' G# |6 p b$ V" u7 R* E( Q[color=#333333 !important]
8 d3 x$ o U" j4 A[color=#333333 !important]客户端9 C# o- m, _8 d
[color=#333333 !important]./iodine -f -P 123456 192.168.1.7 ns.dnstuneltest.com& c; K/ p* q2 H4 D0 f
[color=#333333 !important]-f 前台显示2 c y) y0 V e5 ]
[color=#333333 !important]-P 认证密码6 B/ g1 E2 i, e2 u3 M0 A6 l
[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析
$ r: @& `$ K! L [color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。- H3 O) g3 ?* a5 p5 S) }% @- ?
[color=#333333 !important] 7 h8 v) a$ O5 B* v e9 H
流量包分析
, I" y, K% {0 |, M
/ A. z" k3 S, E5 s[color=#333333 !important]抓包
0 p9 C1 ?" H: X* ` K, k. `; Z* V& U[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap
0 _: ^# G) A: [/ X$ x) P; T 建立链接的包分析0 z6 Z8 _. ~' o9 L/ X4 X; w; Y
# W4 N; a) V) B: ^7 `# ?
[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包
% z, r0 A$ r9 M, E, y% U6 ^; {6 F[color=#333333 !important]
3 a/ Z0 T& y1 c9 a[color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀
/ o/ a9 f, f9 _) D[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据
2 K2 h( @ w" p3 \) D[color=#333333 !important] & B7 X- i6 k) p! l
[color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)$ v& d' f% J" z9 \, ~: I7 x
[color=#333333 !important]
3 D# ?1 m X! ~, N9 Q0 G/ e[color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。2 d' ^. |/ s' ]# I/ X
通信流量包分析; x, l9 }& Q& l* o, c0 ]4 m) H
# r' m a# _$ S: R5 `
[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析# f9 L. b* G# B! c
[color=#333333 !important] / P \8 i1 n+ u
[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。9 A/ c' ~6 z/ C9 I' U3 k( H
[color=#333333 !important]05fanyi05baidu03com
5 o" l8 _) k* N5 M[color=#333333 !important] 6 `7 d1 p# ^) Q$ Q
[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。
6 |, i' K5 A6 |+ j8 A[color=#333333 !important] . `1 E4 R, H* s. {& ]4 R# u# Y
suricata检测规则(并未测试,仅共参考)4 i4 U! o* J g) e, q( L7 ^
" d. H1 Q6 A' U2 s* T% f! L
2 N# E" ^* w8 D" m
' X1 Z0 G0 _. ]6 m" H4 G5 c 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; `* X! a9 I5 N3 Y2 f
8 F5 v% G+ j, g2 n' s _安装6 g7 Z1 G$ @1 H; S* D) h
; ^' Z/ p( @1 w7 t& I[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell
0 f0 }" ]2 ?2 a# t5 @9 U[color=#333333 !important]下载链接2 b1 \+ E. d9 U) X; o3 {
[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag% W S! c- T) y2 F* d* @) B
[color=#333333 !important]提取码:t1rw
) m9 f9 K- n/ i; P& Q[color=#333333 !important]安装编译1 h& Q; S0 L* `1 ~, c
' f" p5 l* w* O; T; K* H/ \
0 Y% x/ u4 h4 s- S( N! [: ` ./configure make;make install[color=#333333 !important]服务器端: X. B6 x7 D X6 E, P' Z; V
; J3 \0 }+ C( P! p4 D. \/ n
/ _' Z5 V- ^; M2 F! \( \2 r server/dns2tcpd[color=#333333 !important]客户端
3 ^! M. q8 J W; G! V) a) z; Q" t8 k
! A4 S7 N& ^# H0 V/ y7 d Linux: client/dns2tcpc windows:[color=#333333 !important]云盘直接下载windows版本,或者下载
5 l7 I, f0 }& g5 @* t+ B& _) u% \' ~6 N+ ^8 R/ Q
. A8 D% R% L0 R6 r: C! b5 o T dns2tcpc.exe实验测试
8 Q) Q, b: d I% L& ]" m" Y5 V
' q f" c& O2 l# K. W' t[color=#333333 !important]服务器端( p. o8 P: N4 a
[color=#333333 !important]1.创建配置文件
/ a% [8 y) R7 l* T
: _) }! p/ ?# N5 v
/ Y7 b# t% p2 c% ~& D* j4 l 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.启动* g P: k0 r2 e6 O; y( |
$ z; ]! d3 [: ]8 V+ H3 w$ J
6 B3 _% N; r& N* ^ ./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接! @+ ^7 v+ Q' n( V
[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务
7 C/ a9 ^7 ` ], K0 k6 a- L& m$ y[color=#333333 !important] 
9 \6 N1 n7 I; L3 Z[color=#333333 !important]客户端
4 g4 E2 X5 F2 O+ `[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 2# N' Q8 z* i. G4 `
[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源
0 J V/ n6 }' _) k( g[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP6 k5 l2 p0 {% i# @' ?, M' V& l
[color=#333333 !important]-l:端口
5 I- q/ b# g% ~. h; k2 {[color=#333333 !important]-d:是否为调试模式 2 等级可以省略
' D0 v, J8 b* A( ^' ~" \ [color=#333333 !important]
" S( |; e; n. Q' \[color=#333333 !important]客户端使用访问服务器2 Y/ C8 u* t5 Q
[color=#333333 !important] " E, n1 S- n! D* A
流量包分析 [! ?/ y4 Y. D$ y
) E* t# T+ b! H% |[color=#333333 !important]建立链接并未产生通信包
3 a+ f5 Q7 D! p/ @1 K[color=#333333 !important]
- Y4 `6 v+ D6 l! ~$ l2 O[color=#333333 !important]使用ssh访问时,才会产生数据包
3 q5 v$ x* H1 k/ \7 ^6 |3 Z7 M[color=#333333 !important]
* o9 ]4 Z" B& O3 K2 ?/ J2 y% E[color=#333333 !important]数据包分析/ Y8 e+ @5 g( N$ a) d- T% K$ F
[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中* s8 F1 c% d( x; a7 i/ L
[color=#333333 !important] . ]! b; P" Z9 D
[color=#333333 !important]
* y, T3 V) N# B9 r. L[color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。( t5 f0 p: h- y
Suricata规则检测(并未测试,仅共参考)
' a* [6 z. d( |
* u% x5 E$ |8 w[color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测, e* J. N4 Q8 M L c* O3 G
3 s: W$ ]) { S: T i( v! i- 9 M$ j! T+ S4 j9 K# 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]结尾+ l8 I* q9 u' ^, Y
[color=#333333 !important]小白水文,求大神放过- G# v8 J6 |2 T9 z" l
[color=#333333 !important]pcap包下载地址:1 l @ h6 g# O* d2 r
[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw
& b0 D- h% f& N1 ~3 \/ J3 @3 S [color=#333333 !important]提取码:n5ha
9 @1 ^5 k: D) g9 @[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载
% }, N" d* G2 P- W: q+ j
6 [ v: X" H, H精彩推荐) E& C: j- H+ r! k/ {. m n

) e. M: T* v; D! Y1 b
9 U! I1 Q( O" K( Q
7 v/ Q( A: [# j @2 p: j# T , }3 G, }6 |) n, L/ v; a9 i- R
  
3 K) P. [: z4 [9 z* ?9 }) H
$ l" z- E* B1 ]8 p1 V5 a来源:http://mp.weixin.qq.com/s?src=11×tamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=17 M. q, ]; U0 c3 \9 U% D
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|