|
|
DNS隧道( i: q4 c9 N5 C% t/ g0 G. n+ `
0 ^$ l) Z3 F5 K9 f/ n, T% H[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。
. [( m/ I8 f7 \# N实验环境/ \$ L5 V1 r. e/ ?0 D
K- v5 l3 \0 r1 O1 W4 N4 T[color=#333333 !important]CentOS Linux 两台2 _& T( }, h: k6 a* D) a$ N3 h
创建DNS服务器
. P/ K* {6 A. P' {- o$ [) s8 v
1 f8 F& v. |2 g2 s1.安装bind- u( v! V6 G; k7 R2 ~
8 Z+ E' x4 D$ {' R: n; V0 G[color=#333333 !important]yum install bind*
0 M& g/ K7 r, ~7 F a 2.配置named文件
K7 O4 r. I" @) D* }. T% o8 X( ^
2 ]5 L# E, b+ W5 [3 g: t7 j[color=#333333 !important]修改/etc/named.conf
" A, D1 ]5 W! a- B& T [color=#333333 !important]将下图中选中的地方改为any+ J0 X0 F$ C: @% C$ B: M
[color=#333333 !important]
: s) W9 E2 q: K9 [3. 设置NS记录,A记录# O8 M" }0 ]# n4 @. w) S
" S/ q9 g' P5 Y9 X" `4 j
[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件
t- q& V$ @8 B- t I9 c[color=#333333 !important]  9 @) ]& E3 X; f# r7 w1 Z
[color=#333333 !important]增加正向解析记录
1 i% d7 }: a1 m[color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字
( j# K1 @( [/ I* C( c$ S0 h[color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel" f7 a2 Z' Q/ A9 p- v
[color=#333333 !important]修改文件如下
- Q% Y* w5 ^/ x[color=#333333 !important]添加NS记录,A记录+ J( r% e1 j c+ V8 i/ m& o
[color=#333333 !important]
r X s( y X5 r* X: K[color=#333333 !important]添加bind为自启动服务
' G2 z' L9 B8 P, P, Z[color=#333333 !important]systemctl enablenamed.service6 t0 ?! J0 w! q5 u' M( ]5 q& y
[color=#333333 !important]systemctl restartnamed.service
7 ]1 n2 y5 z; i1 H6 v [color=#333333 !important]查看启动状态
6 T5 G) r: D0 a* N- {2 b[color=#333333 !important]systemctl statusnamed.service
- g4 u' Z3 Z* [; N! t [color=#333333 !important]
7 }0 L3 C) x. z% b8 I7 Z[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F)
; H/ @0 O+ o3 o, KIodine& ^ `0 Y0 s+ d" S- \. K6 x1 f4 a
$ \/ {# q5 h1 Y8 |[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。5 j; b% K. a. m* z+ @7 i
安装
7 C0 y' l4 a- z. V6 `
$ v+ X# k# R0 ~: U( O0 k[color=#333333 !important]下载地址:
3 H9 p2 ?( U- ?# n c" Y- Q[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip: j! i; h; ~# \; |2 B* V; w' a
[color=#333333 !important]unzip 解压6 ^3 M- T9 \- f u- k
[color=#333333 !important]cd iodine-master
( P2 u3 ^+ n& l[color=#333333 !important]make7 _- J6 l" U" [5 c5 e
[color=#333333 !important]出现报错' a4 [' i2 O" B+ ?. t2 \; V2 B; C
[color=#333333 !important]
, M5 G: O( s4 q( q& z2 W[color=#333333 !important]yum -y install zlib-devel
8 g) b1 _- H/ Q( ^[color=#333333 !important]make;make install
, b/ p# { f. [# H8 L[color=#333333 !important]安装完成
# J, P: q( u3 N2 ~ V[color=#333333 !important]进入 bin
: Y) S; ^% W8 U4 A' o v- q: U( c/ L[color=#333333 !important]iodined 服务器- `! s0 y- c- @5 f: [
[color=#333333 !important]iodine 客户端
& A( M T/ R s实验测试" f: j$ ~9 n; `2 J! b
+ ]( m, F7 ?& c* v/ g5 I[color=#333333 !important]服务器
t6 e8 |% J- U; ^9 n+ f[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com
; F6 y3 s6 l; S/ A& W4 V9 ~[color=#333333 !important]-f 前台显示,运行后一直在命令行等待
4 ^5 f2 o$ H5 @4 m% ~& }[color=#333333 !important]-c 中继模式|直连模式
/ ~& O8 j5 r, m1 Z. V0 v[color=#333333 !important]-P 认证密码8 }. w5 R4 W( T" r6 b
[color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。& g3 p: n- o; E9 {# }. I1 H- [6 K
[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。
% y' _1 z2 B- E; R) f% h) i[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡
$ H" q- J) Q2 [3 c2 ^[color=#333333 !important] 5 Z+ `8 a; w! A' Y
[color=#333333 !important]
& @2 p4 L0 j+ H+ p( Z6 @ k/ f7 X[color=#333333 !important]客户端$ ^- m8 T( K7 G1 T+ m" H
[color=#333333 !important]./iodine -f -P 123456 192.168.1.7 ns.dnstuneltest.com1 T, r# N e3 }* N0 ?
[color=#333333 !important]-f 前台显示- j( k' M: f9 _# H
[color=#333333 !important]-P 认证密码
! D8 \- _) f1 ?* s) l/ z* l( Z[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析# ] A7 P2 H5 ]4 `' ?+ @. c
[color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。
+ P5 A4 B( m# M: c& U" y; m3 n[color=#333333 !important]
3 U' [- l2 r+ ^9 }. D- z流量包分析9 O) Y0 n0 @; f" E6 q. x& j1 R
( [: f) U" G7 m) ^) y1 E# O9 Y
[color=#333333 !important]抓包
6 n- Q0 t1 b9 ]8 k8 f8 A[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap
3 T0 O( o' r2 T 建立链接的包分析9 C L' B& B- b8 ~/ i2 c
7 Y+ L% p: N! @% {* M, T2 j- p4 |
[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包9 z b; Q* Y+ ]2 U! R, a
[color=#333333 !important]
- X5 N0 y$ A; W& {' H. g3 d! w[color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀& h) B+ v9 } h" k" ]
[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据( o: }7 Q$ u) N+ e
[color=#333333 !important] 9 ?% r, V9 u- b$ m ]
[color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)
3 e o) N' o+ ^' n[color=#333333 !important] " P8 i) |8 e d2 ~ i1 o0 j' N' o! ]
[color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。
, e2 i0 G! E; [1 ?" `8 f通信流量包分析
# U( J- u9 n) i% E ~2 D3 S, G6 f* Y
* U' i( y2 v5 e% T' m+ x% F+ E[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析% \9 a' w* E0 z7 _: K0 I
[color=#333333 !important] ! l6 O: J& O& Q, F" {# z
[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。+ |. B/ j" @ t0 Z
[color=#333333 !important]05fanyi05baidu03com
+ s4 O' v0 p8 {[color=#333333 !important] : {6 C& \9 C0 F: J
[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。
' C' H% u/ P9 e! y! z[color=#333333 !important] 1 T4 ?$ @* ]" [1 f" U) c7 G' }
suricata检测规则(并未测试,仅共参考)
: \# f- X7 @( [ D0 v( A+ t( ]# `* N& K' G% H, i
+ [1 c1 _& G3 q5 P
/ U4 U3 H. L0 q! j) v2 W/ \ 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: t( U; Y. z% [( w" _
4 E5 Y. v0 x# j7 j# @4 } x' {$ D安装
7 H" w: ^! W- i+ Z' ]2 S m* Y$ X3 V7 B) L8 A3 `
[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell4 D: T4 O+ \0 J
[color=#333333 !important]下载链接) i3 @! i- h/ t2 }. v4 n; y3 t% i
[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag/ B9 D) a& c# t7 S3 `& w% W
[color=#333333 !important]提取码:t1rw* \. D& ]0 z8 |# p3 U$ T9 ~/ w3 d
[color=#333333 !important]安装编译
& _' W/ R T, r6 A0 M+ Y
! ?" m& x8 r3 S$ {% T
3 J! ^: }0 F' Z F- @$ h& ~1 r! A ./configure make;make install[color=#333333 !important]服务器端$ B* U% |; [( o, R; ~3 @
- _) i5 O9 H. U8 D$ [
- 7 S- o6 a% ? ^/ s
server/dns2tcpd[color=#333333 !important]客户端
" {) k# v' D9 b3 R' a! x
: r& x( S7 b, M3 j9 S
! L% Y! C3 H/ t% i& ^2 z Linux: client/dns2tcpc windows:[color=#333333 !important]云盘直接下载windows版本,或者下载1 g7 q* y1 K( G/ O5 [& z
. c% @' c3 k! B( v- r7 v9 R2 S
! z' [ s4 n3 Y% e* |2 s& F+ J dns2tcpc.exe实验测试7 {6 K7 U+ o0 j
- Z5 [/ N* O) {0 K[color=#333333 !important]服务器端
, Y4 r6 F. p* b ?2 ^1 K[color=#333333 !important]1.创建配置文件4 J. m! ^ [4 f" j* t; _
7 ~+ W; K2 J( d+ U5 \' K
3 @3 Y+ }2 m% o | 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.启动
' q! n5 a; Q0 `: R2 r8 n# m5 m/ @" O! f) E! l7 d8 K
- / L2 Z0 q! Z7 t% T P2 C/ U. D
./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接
6 g7 K4 U: ~4 q# H[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务3 [5 K6 L9 e1 _
[color=#333333 !important]  $ X; Q) T8 R, h! `
[color=#333333 !important]客户端
/ a4 z9 R! S/ X8 m- P# b* X+ ]: C3 P[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 2
& q% y/ w- j2 A, @8 @[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源
0 M* e% J, v( n7 Q; @[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP0 N1 a8 r7 i5 B* y4 ~0 Q3 Z4 I
[color=#333333 !important]-l:端口
* U6 ]; F$ |7 B6 f[color=#333333 !important]-d:是否为调试模式 2 等级可以省略
9 O1 `' K5 `( |2 E, h' i [color=#333333 !important]
) l7 E7 _! p4 l# Y8 [" F* m[color=#333333 !important]客户端使用访问服务器6 Q6 }4 R4 i' @* @$ B
[color=#333333 !important]
- U- V: [% c, T( D; d% ~+ ~- @流量包分析
; B% o5 X2 Y6 }5 k3 w0 P" K3 X* i( P# U
[color=#333333 !important]建立链接并未产生通信包
# b( B1 G7 Y4 J, ~% ?0 n, h$ N[color=#333333 !important]
e1 S/ e0 ^7 R3 {[color=#333333 !important]使用ssh访问时,才会产生数据包
" O: @! q- [& N5 a% Z5 [4 Y$ j[color=#333333 !important] : z3 n! P3 E. I0 b
[color=#333333 !important]数据包分析
( e3 g3 L' B+ P( j" G) x, U[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中
- d6 H5 ]! t4 r% G% ^* j; w% ]4 S9 A[color=#333333 !important]
* ^: `9 P$ }$ h4 x5 N[color=#333333 !important]
8 @& g% G: d& I# T% J- h5 _% u3 _[color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。
' l6 V2 T6 V5 R1 @Suricata规则检测(并未测试,仅共参考)5 H1 o7 Z6 s1 F) q" G
0 X" J( Y- r/ d5 U8 n' O
[color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测
( N$ j0 ?* D2 g) \ ]( J
+ R9 i" R4 f! H- W9 Y
2 C) ]' C* F' } 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]结尾4 K% k6 P* p. D& _8 o# {( ^! O
[color=#333333 !important]小白水文,求大神放过$ c9 A% B S# a+ w
[color=#333333 !important]pcap包下载地址:! h1 S7 T( V) I5 U W- Y" i6 c( ]0 w
[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw' c8 t }' ? k3 I# @& d
[color=#333333 !important]提取码:n5ha1 H. u$ D9 d# u% @
[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载
4 y n1 ~2 e9 }& q' ` ! B5 [3 p1 Y$ C# T( ?
精彩推荐$ y6 \* ^) }& }' K, Q

0 M S1 f$ J3 r! ]6 K
2 g/ b( p _! t. R9 p
) h2 W: T% J* ^6 T% t( ~& F8 E1 {; [
2 f% Y9 V: n' e, c! W7 Z* [  6 N. W7 \# k5 F# A- ?
3 \- D& `# i) \" R4 W来源:http://mp.weixin.qq.com/s?src=11×tamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=1. w3 T; |0 O, J4 C P
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|