|
DNS隧道
- g! m& `! [/ S1 U9 v$ S+ L
- \, U7 R' K0 R[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。7 |4 ^5 q [9 U( ~7 T( `4 J
实验环境6 v, b8 I2 S/ W3 b2 }* Y
8 p2 L' Q: e: x9 T8 q& g
[color=#333333 !important]CentOS Linux 两台
' A, X) \2 S' n+ e( k; U! d2 G5 m 创建DNS服务器5 `4 ?7 g2 O# H! q. w
( L$ f2 l1 w" [+ Y: X3 \1.安装bind
8 F4 [. L* a, D3 N% p$ A$ L, J0 Z' | Q, i# I3 ? R9 P0 T4 F6 `. b
[color=#333333 !important]yum install bind*
& L) @6 }" {- l6 ] 2.配置named文件+ u8 C& N2 ]! M, b, k) N
0 w! x0 l9 ~) ^' m7 x y
[color=#333333 !important]修改/etc/named.conf5 @. c' ]( v* J& `8 `5 Q3 y0 f
[color=#333333 !important]将下图中选中的地方改为any
+ ?0 z4 K! `& z7 Q9 D1 i$ M[color=#333333 !important]
q6 j; ^6 @: `) u: v8 e) j3. 设置NS记录,A记录: P$ U0 r/ a: y" ?0 z& t. G
+ ^( h* s9 {* O i' ~' D+ ^# S8 ?
[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件; f8 x8 F. a4 m. X: f+ k
[color=#333333 !important] 
6 j- D+ h% ?. F! {) ?( G[color=#333333 !important]增加正向解析记录
- Q- Q4 x0 e2 B8 G+ y[color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字
8 K" H$ y U, G' s: D[color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel
3 _9 |7 R; d7 O0 m& o) r. P( F [color=#333333 !important]修改文件如下
5 J! ?! e6 z0 g, T5 A x# p[color=#333333 !important]添加NS记录,A记录
4 P0 h0 I2 K3 R6 O0 D' X[color=#333333 !important]
* v/ ]; q" D& P" y[color=#333333 !important]添加bind为自启动服务! m( `& ]3 U' I3 K. {' y: y
[color=#333333 !important]systemctl enablenamed.service6 a; A1 m) J& F
[color=#333333 !important]systemctl restartnamed.service
8 ]0 R( z! Z" v) k: d( l8 M [color=#333333 !important]查看启动状态. s$ g# x/ S+ p# F7 h# a
[color=#333333 !important]systemctl statusnamed.service, F0 E0 W- q+ X; ?/ I5 K
[color=#333333 !important]
' @6 Q n, r" G5 ^4 G[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F); R1 L; O, K4 e8 _" n/ l% `5 \
Iodine; C9 L0 f# _; g* Y
3 M1 N v# m3 _3 ?& ?
[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。: g( ?/ Y2 Q1 X9 S* T
安装4 c8 B! G3 q+ J9 D
7 l8 H" _( |$ S6 x[color=#333333 !important]下载地址:
) `) b7 g# a9 [" [, X[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip
" Y! U% u# H; f4 j W: T [color=#333333 !important]unzip 解压
! |9 b- w1 @4 L7 L* d$ k9 S& }[color=#333333 !important]cd iodine-master- f8 e: e9 q7 }" ?0 p- U6 t
[color=#333333 !important]make+ N/ f7 \ r6 a: l( I# ^/ k
[color=#333333 !important]出现报错6 n; q8 M; z% j5 M) i% m) y) F- a
[color=#333333 !important] : ~+ [3 C; N& w9 x
[color=#333333 !important]yum -y install zlib-devel
, o7 J+ W0 u$ j6 S[color=#333333 !important]make;make install3 Y! p* U0 {0 g9 M( M2 |
[color=#333333 !important]安装完成
" m" l0 U) c. ]* Q, d[color=#333333 !important]进入 bin
9 f' k2 L+ U2 N& w" [; _: U[color=#333333 !important]iodined 服务器
: n- L' n2 J0 v1 a( p[color=#333333 !important]iodine 客户端
/ z& Q/ W, A3 K$ ~实验测试
& t3 N2 M& d4 q% {) |$ Z, n
' A8 \! t+ A4 c1 D- b: Q[color=#333333 !important]服务器- b& F" y1 |# e ^2 b
[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com; r% s- {, V8 G7 o5 H$ D' A
[color=#333333 !important]-f 前台显示,运行后一直在命令行等待
' ^/ P2 U, u K( b[color=#333333 !important]-c 中继模式|直连模式, b) W( y [, H5 b* B2 w
[color=#333333 !important]-P 认证密码
" G2 c1 f& W- {5 R [color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。
3 [9 o5 ?5 K {& e3 k3 C' \& c[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。
5 m1 U4 s$ g, o" c& z[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡! @: ^) Y7 v# F9 U) R
[color=#333333 !important] ) I6 j( Y4 E. h. k4 I
[color=#333333 !important] % s3 u& \$ k# Y3 x% m4 d5 T2 c
[color=#333333 !important]客户端, \% o# X" V# K5 D8 X7 b8 x h
[color=#333333 !important]./iodine -f -P 123456 192.168.1.7 ns.dnstuneltest.com! \7 D/ Q0 S$ J
[color=#333333 !important]-f 前台显示
( \% V2 O. u/ H9 w" m# V# j6 ?9 E+ S[color=#333333 !important]-P 认证密码
' J4 @6 n' ]3 n, R. O9 A3 x[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析
' i4 X! z# V) w5 W% s/ M, ]) E [color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。
- k# ^+ O$ x& W, O, d/ q: P; Q3 [, Z[color=#333333 !important] ' _7 _6 {' f3 z4 |- r& @
流量包分析
+ x6 Y% `% K' l; k6 Z/ U6 j$ \/ g8 d3 I4 K; ]+ F$ t. E
[color=#333333 !important]抓包
+ P- M6 @' @- Z+ g. r1 |0 n[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap* @! b( C7 X, f6 q
建立链接的包分析
) f$ t4 ]9 A* r' b; _8 y+ w5 ?% A* O; N% |% j, I8 y7 T6 I, w4 b
[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包* G: b" e7 o1 H9 ]
[color=#333333 !important] 6 E" e5 Q( _0 F) ^; `" }) z& w2 ^
[color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀
Q& B: O5 v+ Y9 u( Y$ }1 }: }[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据
) W& x3 D! V/ ]* K) a0 S! M[color=#333333 !important] ( A' e( Y, l/ P: x: k9 Q4 T, y
[color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)
4 f, |0 I; b6 [. ?( V[color=#333333 !important] 3 D$ W& C2 T$ j) r( P; K
[color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。
$ @& ~( t# \ J( P# Q4 x2 { n通信流量包分析5 H2 g; ?4 E! c+ X
& g# }8 \, w: Z; R. [7 l[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析' w# k* L7 L$ Z. l
[color=#333333 !important]
- i2 T- M; h' v! Z$ ]' i9 z. w. G7 d- M[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。
- V& T& h; h& O[color=#333333 !important]05fanyi05baidu03com" ]2 @7 m8 f6 B1 u) c( Q4 E, S
[color=#333333 !important] 8 C8 B& }3 n8 J5 p+ _; z
[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。$ ?" j) U/ _) q# Q/ _
[color=#333333 !important]
8 Z6 y' a: k; R; H9 qsuricata检测规则(并未测试,仅共参考)" @0 Q; |6 B, P6 ?& T# r3 ?
$ E3 H& J5 ?0 s. E) L
8 l. b% V/ i$ D0 c1 a
' N2 K! Q) ?: c. h 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
( g7 x( r, ^* S& a- X/ ]+ T# Y* ^% f4 ?9 k ^+ @
安装
" b5 S. X( @ v9 @1 B a9 l$ ^
+ o) e6 m2 x) o+ f, {[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell
6 c9 A' y7 h$ X" x( A2 I[color=#333333 !important]下载链接% i1 S% B- p- F5 B
[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag# R9 n( l! s7 q3 L! e
[color=#333333 !important]提取码:t1rw
" v" Q% }# n A8 E[color=#333333 !important]安装编译
# O" L* C3 F: V% T/ y6 w D; q5 {6 l: p& N, v
8 |& ^ Y/ D& c0 ~, r7 ? ./configure make;make install[color=#333333 !important]服务器端
1 O4 _1 F. b4 e/ Z+ `& W! Y$ d6 v9 w& Y4 X
- 3 ~/ _1 i1 a, Z5 c8 P
server/dns2tcpd[color=#333333 !important]客户端/ p2 U/ L- S$ U' n) `! t7 k
: D! d% k F' P- k& t4 e& Y4 _
Linux: client/dns2tcpc windows:[color=#333333 !important]云盘直接下载windows版本,或者下载1 ?0 H7 n' y0 V
8 A5 F( Y8 T) m% E
) G& |8 ]: v1 F* X4 T# P dns2tcpc.exe实验测试1 H H G5 g5 C" d# q7 t5 k- _. n
1 q X R. C- ~3 s9 A1 {* G[color=#333333 !important]服务器端
& W: |& @; }6 U* F[color=#333333 !important]1.创建配置文件
. n+ S% G' U3 T4 P ?0 @* n+ s) m. P$ G7 I, |& J; L2 h3 l
' Z! H/ K8 \8 Q 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.启动1 D7 z9 M9 q$ D, a9 _" t
7 u" v( l6 m1 V* a! K- ; b0 x6 Z% O/ }% [
./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接
) D5 w* O. @& i: w[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务2 R. {1 }8 r0 ]' y" ^' m7 Z
[color=#333333 !important] 
5 w$ y% |% g5 |7 s+ n' z[color=#333333 !important]客户端; X4 q2 b/ H" G" l9 d' Y& @
[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 2- q4 I/ s6 p, ?# N" N: o
[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源: o2 v6 a' s! ^1 W y' H, Y) Q
[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP
- x4 u' B# e9 e, Y: x6 \' a' m0 g[color=#333333 !important]-l:端口
! |" q: o* c1 s, U! s[color=#333333 !important]-d:是否为调试模式 2 等级可以省略
_% p0 A# u+ X" m, P+ I [color=#333333 !important]
9 G/ H1 X) C' j" p[color=#333333 !important]客户端使用访问服务器 J0 A0 O" ^8 u, m* f/ @) @% S' _( W
[color=#333333 !important] i* I2 A% s, G7 N$ I6 u
流量包分析
' J1 l. r1 J. Y, z6 j! R4 B! c c) B; y, S
[color=#333333 !important]建立链接并未产生通信包+ Y4 [$ t" A* R- u8 j5 H5 Z
[color=#333333 !important]
+ R. l4 y8 P" a, P[color=#333333 !important]使用ssh访问时,才会产生数据包
$ s) J$ H0 }* f1 E- J. L4 E) ^[color=#333333 !important] " W v! y0 m" Z6 T4 p2 N
[color=#333333 !important]数据包分析
F3 H/ ?5 P4 N! B! d: a$ r[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中( _$ p# C3 d7 y
[color=#333333 !important]
' ]& g1 C4 x S$ w[color=#333333 !important] 8 Y! e( M* |% V2 B( a
[color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。
0 e3 Q- \9 t4 x/ F3 T# A1 qSuricata规则检测(并未测试,仅共参考)! _% R* s' D: D/ V1 ^1 d5 |) J
1 C$ L2 q; b+ J8 ~% V7 q[color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测
' p% ^( P1 W( x K' H+ B N$ k9 N. s( W$ Q
- 8 ~/ u/ V0 n' D2 V
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% j4 I) W9 N& v5 F9 N4 D[color=#333333 !important]小白水文,求大神放过
$ u: h# d( A7 l5 w( _+ w[color=#333333 !important]pcap包下载地址:
' k: r3 i! B9 E2 ?7 F. U# G[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw/ a$ F- w9 n4 x3 q
[color=#333333 !important]提取码:n5ha* a [; M, Z: R- W3 t' f
[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载
8 K$ U3 E- r5 u7 ]6 e" \. i1 Y! z+ ^4 ~ 1 U" |6 y3 K7 m; s% a
精彩推荐( r! [% S0 V2 G1 d
! R, g; z* S# J) V& U8 e* K2 \+ N. i& o# A3 c
. r% a: s4 k- c4 g- ~) a
- n, o8 H' i; f3 r( l
  
4 f$ |: {5 V, @; p2 X% M
# f' B% v: }( B来源:http://mp.weixin.qq.com/s?src=11×tamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=1! s/ H. E* Y! i4 M0 K8 r
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|