|
|
DNS隧道5 Y, Z4 s4 K/ ~, @+ o7 O
n) Y+ ^# ~0 u- s[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。
( {: x$ T# h, T3 b实验环境
: f+ c, w; E- O9 e }( m+ @1 ^8 m" Q- B6 x
[color=#333333 !important]CentOS Linux 两台
7 g' J% X7 b5 v0 @ 创建DNS服务器' N) F1 O% Y. h; d, U" I4 V
1 B. H: U. t/ }
1.安装bind7 m7 S* m) U6 j, S0 ?. ~; [6 |4 [8 _
* D1 {! D4 s3 {3 J' A% F
[color=#333333 !important]yum install bind*
7 r3 |* x2 ]; A 2.配置named文件
; p8 J7 a# _" Y0 Z* P) ~( ]" |8 _- ^' C% C g8 w) i- d
[color=#333333 !important]修改/etc/named.conf
' u' k4 [5 `2 B) H/ P [color=#333333 !important]将下图中选中的地方改为any
4 R; _3 c! [" _1 Q0 s8 A[color=#333333 !important]
2 L" l Q4 g, d4 ^2 B3. 设置NS记录,A记录
3 N( J( T$ n; b+ K+ \0 k1 b6 q3 d
[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件
8 k8 a0 x7 c; n3 M1 s9 U7 W4 U E[color=#333333 !important]  ( ]$ p" K! }6 W% W. W
[color=#333333 !important]增加正向解析记录 B, f$ U# f' S1 F2 q
[color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字
w" L* B) c; D; C& o( T/ K[color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel, i, [' s/ e0 G/ d% i
[color=#333333 !important]修改文件如下* K k1 L. G, P- q5 ~8 S
[color=#333333 !important]添加NS记录,A记录 p3 J# o: L! V( n' I7 @
[color=#333333 !important]
0 j" f1 i; r& u j6 A7 ?[color=#333333 !important]添加bind为自启动服务
; i$ v% N# ]$ ^( F$ R, g. p" s! V[color=#333333 !important]systemctl enablenamed.service
6 A" N H, V/ a/ m+ ]' Q, W[color=#333333 !important]systemctl restartnamed.service+ t5 z4 M, ?2 H0 c3 o# x2 A
[color=#333333 !important]查看启动状态
3 t" F6 T' j6 ` Q[color=#333333 !important]systemctl statusnamed.service
! v! N; T. Q0 J) i. \ [color=#333333 !important]
4 V# c4 |0 {) h4 v/ N[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F)7 |/ Q) O! o$ r2 \2 ]
Iodine, m; V- |/ ~! x3 |" R
- a9 k. j& o+ d8 ]4 M[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。
" l4 f( p1 `# X& w0 y1 X5 B安装
- l. d5 V o8 p/ f$ s1 `$ u" c* b: U5 P( |/ y( `) M! m
[color=#333333 !important]下载地址:
# F; {5 `, J' V) T* Y0 Y8 M: Z[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip8 q+ t5 x4 r3 P4 G8 L' s& k4 H
[color=#333333 !important]unzip 解压
4 F6 W3 |: T6 d0 b3 z0 G[color=#333333 !important]cd iodine-master
5 v- R2 Z( D% U+ W" M[color=#333333 !important]make/ R4 G4 O& ~2 h+ x& q
[color=#333333 !important]出现报错8 P* S0 `) Z4 [3 f% _3 P
[color=#333333 !important]
) R0 Z1 M. g# l+ f0 K[color=#333333 !important]yum -y install zlib-devel/ r5 m. F* f7 q& S2 [) C- z
[color=#333333 !important]make;make install
! P& m8 x/ `: V9 a, u[color=#333333 !important]安装完成, |& u9 o2 J9 a! \
[color=#333333 !important]进入 bin. A% O8 H! @5 x! j1 G/ y, z3 A
[color=#333333 !important]iodined 服务器: k2 ~1 R5 j+ R Y' g( i1 |5 B; @$ K
[color=#333333 !important]iodine 客户端
# Q3 K; H0 C" E/ ~( J实验测试
+ ^0 j ]6 e6 b
' V* [8 }: `0 A$ `[color=#333333 !important]服务器
5 j1 q: Q9 M0 T9 `) ^1 x5 ` K[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com
% c8 u' V# M) L7 P8 K2 V[color=#333333 !important]-f 前台显示,运行后一直在命令行等待7 A* { O7 r; q/ \4 n! w
[color=#333333 !important]-c 中继模式|直连模式- s6 m1 f7 l/ S! {2 z1 ~7 u& F$ k
[color=#333333 !important]-P 认证密码
2 `: _, r3 @8 | [color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。& C2 g0 |3 T. m& j9 Y
[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。6 f+ P: M8 T4 R' P
[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡- {! \7 Y& c' d; U
[color=#333333 !important]
% K: t" @& O5 L5 m$ g, l8 c[color=#333333 !important] : g0 ?3 h, G) w/ H2 {5 |; P4 t
[color=#333333 !important]客户端9 C$ g+ V9 X( Y
[color=#333333 !important]./iodine -f -P 123456 192.168.1.7 ns.dnstuneltest.com
' q. W3 X- @4 g! Z* l[color=#333333 !important]-f 前台显示$ ^+ w: g& E$ f, j
[color=#333333 !important]-P 认证密码" M& k' X! g4 Y0 m+ Q) v9 m
[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析; l9 i9 K# x/ F" C+ x; o% D
[color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。
5 N" m1 X9 U% V- `( B4 |[color=#333333 !important] / H M# \6 v. P% C: z
流量包分析# ^, O7 l6 J' s' j5 x
6 _$ o& w# s# w: y+ x* b
[color=#333333 !important]抓包
1 H/ M1 D. S# I* U6 @1 d/ h9 \[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap6 X, D6 G* Y4 G3 p9 t6 n
建立链接的包分析
' e! m- D' V& |( `! S$ W' ]! j& ]# V; m5 O" M
[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包
1 _' U! ]% t% F" f[color=#333333 !important]
0 x `+ S2 s% o. Z, i[color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀% [+ S k5 i' e/ K2 S6 Q @9 z
[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据# s% g; b5 Q0 k: f; \, u8 S5 N
[color=#333333 !important]
9 {& j% Y) J s[color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)" n8 ]+ V8 \7 V5 J: o8 o; x
[color=#333333 !important] + j8 ]2 m/ D- q$ S7 t! a2 e. p
[color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。
# [8 F9 Y# j' ~) f通信流量包分析
+ L+ D, K) A/ m
0 v+ W" D7 a- W& v[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析# P' R/ O% m6 u
[color=#333333 !important]
) X8 D& d. [- e# B% E[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。/ f2 a4 b, {2 \( k* H, O4 P
[color=#333333 !important]05fanyi05baidu03com
) T9 {9 m: {; j% `* }5 Z$ c[color=#333333 !important] ; V0 c9 V2 f( ?" e- N5 I' ?
[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。
$ N6 `6 D' \- X% x[color=#333333 !important]
- w% i( M, c# D- W6 l: Dsuricata检测规则(并未测试,仅共参考)
4 X' v( H; C. E8 U5 B# F; C, y' u2 ~' l$ \
' K V0 a3 s6 b9 B
6 C/ F- `, `* t7 e" ^ 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/ L* \! y+ v0 \' R
& M, y! I$ S0 ?: u, ]9 M
安装
' g6 M; o) s3 w8 d4 m# D% @
8 J) u3 f2 b/ s+ \1 `[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell
( }- S" C# h$ v# b) e$ ]+ @! l[color=#333333 !important]下载链接
$ N7 w% e8 o, T: p/ q9 i( e: \) f[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag( W+ ]* G q" Z" [# N
[color=#333333 !important]提取码:t1rw
. h; u$ `! e! p' R1 x[color=#333333 !important]安装编译5 }9 X( O) h/ _; [+ Y. U3 V
4 R5 K& x# L0 ^7 g; \) _' w5 S# D# I
5 k& s f, O/ B1 g7 a, u( H ./configure make;make install[color=#333333 !important]服务器端, B( {- j) m* f' D e/ Y% W
' b* b" l6 d4 l' [4 e
" B e6 x7 s2 J$ g' r5 J server/dns2tcpd[color=#333333 !important]客户端
* C/ r n7 z$ W- n+ ^8 K& p+ w1 J' j4 g" _7 o( `/ ?" f
- 1 n( ` H+ L3 i; D# k
Linux: client/dns2tcpc windows:[color=#333333 !important]云盘直接下载windows版本,或者下载7 C7 p2 _) N: u; t
- d1 L0 Y( n% [# ~$ Q
, C; ?) Q; F9 p dns2tcpc.exe实验测试! c5 E( z8 W9 j9 `* @1 T
. h8 D( B; a( g1 C" U% a9 q3 N[color=#333333 !important]服务器端
* y* y: L- L3 q[color=#333333 !important]1.创建配置文件
$ c4 W1 O \! {0 W4 d
5 g0 S/ ^9 P" {$ P) W- ) j. \1 f# W Z
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.启动
0 b" S" m4 f+ D6 k! A# t0 j/ Z8 v6 c8 R
- ' j9 L9 ~4 Z" b2 r- X9 b: c
./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接' |4 c$ {! `' C3 N" `! S+ X
[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务' t1 ^' |- }7 F* z
[color=#333333 !important]  , P } a3 B3 q' c
[color=#333333 !important]客户端
/ ~: i8 O* Y& [# d' P) s[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 2
9 y0 {1 F5 q3 k; l8 F[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源
4 ?- ]8 i7 c& Z' X4 d# Y3 {0 c[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP! Y9 X& a* a3 \: G% U
[color=#333333 !important]-l:端口
. t$ k7 N( I0 `' I! {7 F U4 U[color=#333333 !important]-d:是否为调试模式 2 等级可以省略
& c1 f9 P- C5 Z: |2 _' \* {2 m [color=#333333 !important] . M* ]8 F( B& Y6 o
[color=#333333 !important]客户端使用访问服务器
& j' o {6 ]4 J9 @3 ^' t[color=#333333 !important] + D, Q2 u- P) t, k
流量包分析
1 o2 z- |2 r U6 }5 |# r& c1 {3 v5 K
[color=#333333 !important]建立链接并未产生通信包
9 M2 ?6 N- h1 O( r[color=#333333 !important]
9 I- ]+ e, \; q[color=#333333 !important]使用ssh访问时,才会产生数据包
/ O+ {% e7 s2 A. i( C[color=#333333 !important]
" U* O y' y2 P7 Y* U4 v[color=#333333 !important]数据包分析
1 ~5 |% u+ e; {, P( E1 v[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中% W- Y; X$ X/ c5 j
[color=#333333 !important]
$ ^$ f# D1 T+ y6 m# B7 j[color=#333333 !important] ; \& x# _0 y% K4 ~0 o' Y
[color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。
7 u4 m$ z' @) ~: x( E. eSuricata规则检测(并未测试,仅共参考)# i1 l# }. N! O
) h$ U# D9 B$ B( E% X- l[color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测
* H3 L0 `2 T, D" E: f3 W2 V) _7 Q2 S0 ]5 Q3 z4 ?9 ]4 S! A
7 l! l/ R3 t9 _ 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]结尾1 ^) z, H' F+ `# C. [
[color=#333333 !important]小白水文,求大神放过/ }! v8 Q, N" q- g. }- n$ h, C
[color=#333333 !important]pcap包下载地址:8 W; `- S5 u- `3 }3 Q: E1 U" m
[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw
) i5 K% O" l6 Y- f! ~1 p [color=#333333 !important]提取码:n5ha
# ]8 Q, Z$ k/ f' D0 N9 |% u0 J[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载6 L) B! P; x# _4 z9 ^) H! q
' n+ [' J" m# Q' t+ c! W: a6 ?
精彩推荐+ @+ N# G/ a d9 X
$ }( k+ W% [ b" e" I2 T
8 S! E1 q6 m. F1 @2 z+ S
% |5 e& ? r8 z

* R4 ]( |8 i3 h# \  4 P; M6 [( `( s8 n. a. c3 X# ]
% L" @: I4 ]7 Z. \& U1 p
来源:http://mp.weixin.qq.com/s?src=11×tamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=16 {$ U' M% x% d2 [
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|