|
|
DNS隧道
" O5 l u" z0 \) D o1 p. s6 q |- @; h3 i& X2 ^! y: P
[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。8 \" I$ }% Y* N; k3 |0 ]
实验环境
2 F& G) u; z# {% V/ r, G0 ~, U9 k" N9 f! v( N
[color=#333333 !important]CentOS Linux 两台
- |4 s" L% ? L. B2 u4 a 创建DNS服务器5 E% R7 O1 o! [; p
1 ~3 p# C& N- r) \, Z4 v1.安装bind
) E8 ]/ k) g# t6 p4 G
2 T4 {3 ?9 X9 t( }7 S/ U/ C7 T6 L[color=#333333 !important]yum install bind*6 j& @: ?7 \& t0 _/ ]
2.配置named文件1 Y: V8 e* \* M3 [, n+ k; u
1 {6 U* a4 l o2 D$ E[color=#333333 !important]修改/etc/named.conf5 Z; V- [# X, O: Z9 G8 N% ^
[color=#333333 !important]将下图中选中的地方改为any
, T9 M; C7 d1 n; V[color=#333333 !important] & e" ]3 _; m( q/ u9 n% M- w* K. Y* m8 L
3. 设置NS记录,A记录/ }4 |6 y: S8 l! u" s7 M! R. E
! w6 g2 E& x" H4 `1 R4 b[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件5 M2 t9 S3 t& M
[color=#333333 !important] 
& h+ m6 _8 l; o" F" i[color=#333333 !important]增加正向解析记录9 D4 i# A4 |. m. V6 J! S: m
[color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字5 R+ t5 }0 U, W) R
[color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel
/ M* Z* Y( p+ S. K: }! Y [color=#333333 !important]修改文件如下
; R% }& I3 {$ ~9 g# }8 v% a7 N[color=#333333 !important]添加NS记录,A记录* ~8 J& q" Z! \ J; |
[color=#333333 !important]
% e5 k0 r# Z# F. _ {[color=#333333 !important]添加bind为自启动服务
. n% G: Z+ _# p% h+ ^0 \0 w[color=#333333 !important]systemctl enablenamed.service0 s, I g! j1 _" ^' j% i" z
[color=#333333 !important]systemctl restartnamed.service
3 @1 Y |# \0 B4 _" { [color=#333333 !important]查看启动状态
. k3 R4 H" s5 k9 w[color=#333333 !important]systemctl statusnamed.service. } X2 a( \' Q
[color=#333333 !important] ) _3 F+ y7 D1 |. H0 V9 F; ^
[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F), w$ E g, h( S, D- P$ ]
Iodine* g0 n; r: h1 {3 Z% `# c
( C0 P5 @; J5 m( d! c' x# U
[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。7 `4 f4 Q- m4 j# N
安装
/ s" L) g, c5 ?& s4 N& J$ \' A& @
[color=#333333 !important]下载地址:
1 i0 T/ i9 ~; d, s" g6 G9 j+ y[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip
8 q' ?6 R6 c/ N! l4 t0 P' R [color=#333333 !important]unzip 解压
* T6 j Y9 X i[color=#333333 !important]cd iodine-master
X! S% L* w4 D[color=#333333 !important]make
. n* h6 I9 i# w[color=#333333 !important]出现报错1 ~$ m; d& ?4 P; ?
[color=#333333 !important]
% y# E! V$ c7 K7 p$ X[color=#333333 !important]yum -y install zlib-devel
8 S% ?4 Q8 _+ u) M! [[color=#333333 !important]make;make install
1 Y: E4 N' T2 p# Y/ l( H. W% k" D[color=#333333 !important]安装完成
$ P' C8 T" r7 L, _[color=#333333 !important]进入 bin
4 q. [- `; l! |3 d+ J[color=#333333 !important]iodined 服务器
4 g5 Y$ T; i4 q& R2 N[color=#333333 !important]iodine 客户端- O1 W+ ?( h+ p
实验测试
+ R) B+ y1 G- \6 q
8 M( i9 ^. \5 M" A[color=#333333 !important]服务器4 u6 x/ e- N2 z6 S
[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com
6 y m; a* c7 y. @! I6 E[color=#333333 !important]-f 前台显示,运行后一直在命令行等待
5 ]7 ` b, G: [1 [7 A[color=#333333 !important]-c 中继模式|直连模式
3 C0 p: n6 _8 `) Y[color=#333333 !important]-P 认证密码
/ d) D& u6 @, C6 u0 I [color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。, N# a7 {5 n6 s. M
[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。1 N( M, t' A+ m9 T/ R8 a2 m
[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡
0 [* u- P, C$ d' e4 x[color=#333333 !important] 7 C; `; j% {/ S" f( O4 P2 i
[color=#333333 !important] . y% O8 u, t: H
[color=#333333 !important]客户端
, y5 ?/ s4 Q; D1 D7 J[color=#333333 !important]./iodine -f -P 123456 192.168.1.7 ns.dnstuneltest.com# r9 w; o0 r5 o3 i$ i: I5 J
[color=#333333 !important]-f 前台显示- z) X" ~% m, _' v8 A# u
[color=#333333 !important]-P 认证密码
9 Z3 G; B& X) I5 k( `& a' I) |[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析
1 N; E+ R* n! B: C7 G( S [color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。 {2 S) W' L; K" T, t _0 j7 P+ \: F
[color=#333333 !important] 8 Q M+ ~; F5 F# s
流量包分析
3 x6 w$ g: ^+ x4 b6 A: [# `
- l8 f7 i, D& {+ f; m[color=#333333 !important]抓包
& r: I/ _9 |* B$ D; K[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap/ D$ C9 d1 h: _- R2 [* t1 R' Z
建立链接的包分析1 n5 V: ?8 S. S# }4 V' v
, \4 |+ {/ _9 M[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包, z8 O4 v8 j! x4 Z7 m
[color=#333333 !important]
$ h$ j: u$ f7 N7 ?[color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀# [8 H. m( f' T. K/ C& A+ ]
[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据
5 u: W/ S! g2 l7 U: [. c6 f% ~[color=#333333 !important]
V8 h' M% X+ `8 m n; b[color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)
+ x2 A% z) }0 o! g( T% O }- H[color=#333333 !important] # N0 q( c4 s& B9 Z
[color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。
# }6 K0 F( Z, T6 A( i通信流量包分析# @, P$ P) R* g4 D2 s9 h( J5 ]
) s6 Z! _3 C: y m0 B0 q7 A
[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析) ~; y6 _5 O3 Q. S, \, u
[color=#333333 !important] 2 I! y. l2 r# p$ B0 _. q
[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。
7 V) q. J5 _/ d) G; f/ ]/ f[color=#333333 !important]05fanyi05baidu03com
8 n% ?( s; H5 l0 b {, K0 t8 w/ L, T[color=#333333 !important] & u% O& k& s7 e" ~3 r- a
[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。" s/ ~% ?" a, W6 p1 a
[color=#333333 !important]
* B5 n' u8 ]' ?& J2 U1 a% v, D6 Y. g6 h/ V+ csuricata检测规则(并未测试,仅共参考)3 g( F8 V9 ~3 L$ G8 z; j
+ O# s8 `' _! N" I# H& e
6 V: y' }4 c) L9 a. r7 e- 6 i6 b$ C9 K: q% Z/ 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
. E) {4 j4 D7 s% E% x! ?, I
: y3 l; d7 {1 A5 t( `7 I7 {安装4 u" s9 Q7 a# ^! n) d S
* Y& ?& p) I4 ~6 D. J+ p. B! p% G[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell
; _8 J) T& {4 j! G[color=#333333 !important]下载链接" ]0 }6 _5 f& p9 b# Q$ h% n
[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag1 k- A) J5 p" b
[color=#333333 !important]提取码:t1rw
/ x# W! X [" q5 L3 r[color=#333333 !important]安装编译
! M- G, E/ O6 I R' P1 N" k: x5 |; k$ m, `" d
! ^: n) [. U2 x4 z7 J9 j8 k ./configure make;make install[color=#333333 !important]服务器端7 c0 V4 l/ c* @. ?. _8 J# J
$ A. D5 ~# e; E- G; a2 j8 e j' [
server/dns2tcpd[color=#333333 !important]客户端
' S# C; S/ S' |; J
0 l1 `3 B7 H& K- + X8 g( r& `% ~5 K
Linux: client/dns2tcpc windows:[color=#333333 !important]云盘直接下载windows版本,或者下载- Q# U7 e9 i. j8 y4 w: Z3 E
0 \; F5 k" A9 K& R$ n5 c# K- ) S/ m3 _$ M+ d) G
dns2tcpc.exe实验测试5 ]6 q4 d2 ~% B+ G2 j6 J
/ x, U7 p9 Q4 m( u2 ?2 u c: M9 a+ z[color=#333333 !important]服务器端
# y8 O; X6 v h/ Q[color=#333333 !important]1.创建配置文件
( j! }/ C2 M1 S' J; i' i* y
9 G; J8 u, i6 L
7 ^0 K) P, e. n( S5 I# \0 G 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.启动4 ] {# n2 A3 l* E8 ]! m: _! _2 C
2 J* V0 j$ {; ?. Y
1 L, K! C: [1 r ./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接7 Q2 N9 J( a# R+ A% p
[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务
, `+ R/ F& M- B, M, J: f[color=#333333 !important]  * k4 \3 ^: p* v; X- z
[color=#333333 !important]客户端
1 n+ w/ [ J/ _. c; d[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 2
% p+ E% U" k' R5 T" j) y6 O7 p G[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源. k7 d. ]& B' a
[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP) I( c7 o) X9 {, Y2 X N$ C O+ B
[color=#333333 !important]-l:端口
) u8 H( {8 j0 F# s2 t[color=#333333 !important]-d:是否为调试模式 2 等级可以省略1 Y3 i# T! l$ w, G0 `7 z0 e
[color=#333333 !important]
3 a6 L$ L7 N1 n[color=#333333 !important]客户端使用访问服务器1 t4 b' C$ N, T( Y% ?
[color=#333333 !important] ) M3 I5 b4 p V5 l: L
流量包分析
$ O7 Z. n" i4 k& N' K8 D6 T& t2 J. |- z3 O. z# g' ~3 T5 y2 l
[color=#333333 !important]建立链接并未产生通信包, q5 c3 A+ `( k: h! m
[color=#333333 !important] / ] r! r: a0 m. W4 @: ^+ A
[color=#333333 !important]使用ssh访问时,才会产生数据包+ L% H6 e# ~4 E
[color=#333333 !important]
5 ]! }% Q$ `( z) y( q[color=#333333 !important]数据包分析
* o# J; a# @- A* o[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中
, c/ a% Z K H[color=#333333 !important]
9 w5 l/ L ^& J5 k! q$ v$ y0 o[color=#333333 !important]
8 h. B# m5 ~: m. @[color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。
( N. q7 D/ `4 c4 n8 _" ISuricata规则检测(并未测试,仅共参考)
5 t4 i q7 z4 F' @. W, y. X# E" ~* c1 G
[color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测
2 {. y0 P M. {; f1 F: R% G" K: {: Z3 \/ a3 i+ C
& \ u& o, h7 I( m. H' s" ? 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]结尾
9 \7 q% K( ~) W9 E8 _1 a* s2 j[color=#333333 !important]小白水文,求大神放过
" ?8 d. w4 l* l, a[color=#333333 !important]pcap包下载地址:. ?! @2 p% u1 D# c/ H
[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw
( d `! A. o4 S/ K* k9 ] [color=#333333 !important]提取码:n5ha
' ]2 b- t3 A* H, E$ o[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载2 q) R, J0 @5 |, k! O7 c' \4 X
' t \0 j) B1 L1 d2 O$ e% c; P: u% H
精彩推荐
' d. L3 b/ R9 k* Y) x, Y& m8 M 0 J2 H! |$ {! r6 Z+ e
, m& ]( g) o4 Z. ^: x9 \7 ^

! T# Y6 P5 _2 { V, ?5 A" ]6 F $ \6 Q/ F c, C3 {5 D# p i1 h1 o
  q- Z7 Y* v0 m5 y
4 V( p `6 |: U& W% G' s. ^. g5 K来源:http://mp.weixin.qq.com/s?src=11×tamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=1; x1 c5 a2 d5 G$ M% y6 \' v: R
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|