|
|
DNS隧道
/ c! Y' n# g; z! d7 }' |: T& q& E2 z
! L9 [. z7 l. y[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。
! e) J5 D; \+ t实验环境
% L( v* ]8 I# U8 K8 e, m, m# h
% K4 C6 b" _ s6 _# N, F& ^& ?: q8 S[color=#333333 !important]CentOS Linux 两台' v' J( @' w4 ?+ ]
创建DNS服务器
5 @- ^ p1 B( \/ I+ V2 i! H- e) H, Q
1.安装bind
% m0 b/ m0 R/ b) e" ~6 m7 b6 [/ y. R3 a8 g1 H7 O L
[color=#333333 !important]yum install bind*: }8 U _& F( h5 T1 t. k3 ] P$ h, K& O, W
2.配置named文件) k2 Y1 J! V; W
" i) S! b' x) P8 [$ v[color=#333333 !important]修改/etc/named.conf, Z9 j: i; q; D7 d
[color=#333333 !important]将下图中选中的地方改为any7 R" y: [5 {" w( ?+ B9 |! z; Z
[color=#333333 !important] 5 v. I& B- r% z e" P [6 F
3. 设置NS记录,A记录8 ~4 z# x" s9 E1 U: v7 D% {/ @, c
8 @# A# [* z/ W7 X
[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件
( ~, X$ u8 j- V[color=#333333 !important]  ; L; f: h j2 d* D7 I
[color=#333333 !important]增加正向解析记录
' D* S7 T! }! a; |( s: x: j9 l, B2 z[color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字
$ s0 ?1 n# P4 V* G' \ p' C[color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel0 z# e/ j9 N! Y+ z5 p2 p8 J' o
[color=#333333 !important]修改文件如下
, b9 Z4 @ j1 \/ E7 Z8 h8 Q[color=#333333 !important]添加NS记录,A记录! H" |3 s" J1 z0 c
[color=#333333 !important] " I$ p3 Y* z& D/ a
[color=#333333 !important]添加bind为自启动服务5 ~8 H* C- N, f. L/ P5 W
[color=#333333 !important]systemctl enablenamed.service' V" C, R( P+ q* ^: V+ h! O
[color=#333333 !important]systemctl restartnamed.service
# f8 s1 s* ]( q/ p# Q. L [color=#333333 !important]查看启动状态( a4 c" |, a" R1 e
[color=#333333 !important]systemctl statusnamed.service
/ H# O. I4 V- ~5 w+ s [color=#333333 !important] ! o- J% G9 u4 p
[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F)7 F" J" T" K! L d
Iodine
) N7 ]( w/ n9 n! m; ~$ N8 `/ k6 z2 c3 u5 O) d. k/ ?
[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。
- p" h" u2 J+ G6 w4 C安装
1 z: ^! e: ~! S) Z5 F+ M# F& q% ]* J
0 }2 w0 Q5 w0 s2 f5 I[color=#333333 !important]下载地址:
' j; y" s0 n9 j" u[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip
8 J- i5 N9 f- g* S3 [: ^ [color=#333333 !important]unzip 解压
0 Q, W" i+ U( B5 C( S$ L[color=#333333 !important]cd iodine-master
% j$ w- t4 N6 \8 k- T" u0 L9 J2 N[color=#333333 !important]make
$ @$ q) b9 M$ _ s' H[color=#333333 !important]出现报错& T2 l4 k' {0 l0 _. Z( c
[color=#333333 !important]
7 ?- n: N1 B- S1 M! c4 z! M[color=#333333 !important]yum -y install zlib-devel, H( ]7 j4 |- G7 U. x( I0 R
[color=#333333 !important]make;make install- Z% N8 d" O( Y8 c. R
[color=#333333 !important]安装完成
0 ^/ R+ }% P6 y[color=#333333 !important]进入 bin
/ j0 M6 D- I+ c+ O- {[color=#333333 !important]iodined 服务器' J# c2 {3 E. x5 R. z! I$ f
[color=#333333 !important]iodine 客户端# ^3 _& D8 R$ p) P5 o
实验测试7 T6 b Z; r# Z6 e# v
% }( y" ?( l5 z$ Z1 A `% T[color=#333333 !important]服务器+ ]6 A5 d$ Y# @* V
[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com
* e" ~% b, x5 v[color=#333333 !important]-f 前台显示,运行后一直在命令行等待# `5 _5 t; h4 x Y" o
[color=#333333 !important]-c 中继模式|直连模式
8 _) A8 W/ I" S7 r[color=#333333 !important]-P 认证密码5 X% L7 T9 n+ d& r! N: }/ i
[color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。$ E) q7 r `* L, m' Q% t
[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。9 R0 q$ U; Q A2 H" @8 T
[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡# u. ^) j: U3 D4 d3 X# @
[color=#333333 !important] ! m% i" B& w+ w# [$ w1 j8 o3 N
[color=#333333 !important] , A8 r- D ]& K% Y
[color=#333333 !important]客户端3 g$ Y" U# e9 |
[color=#333333 !important]./iodine -f -P 123456 192.168.1.7 ns.dnstuneltest.com6 ^! u; s A3 L( _4 x; c
[color=#333333 !important]-f 前台显示& n4 K- K1 E8 s5 t
[color=#333333 !important]-P 认证密码
+ `: y1 Q( G4 F4 W[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析
7 x% N1 r7 o% R [color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。
3 p% M% A2 ?1 u( J) y[color=#333333 !important]
- U" \6 o9 L/ F# h6 j. Y/ x流量包分析
0 o. L6 Q4 \3 ?* N# D# C8 v0 y3 ~/ t! t5 F+ \( |& U3 O5 F
[color=#333333 !important]抓包" p7 E4 O4 _5 d$ b$ _# E9 Y, v" o
[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap" R3 r& w. x9 `% p
建立链接的包分析, s% }7 w5 |- X \
8 X+ c5 X: e( ~! w- i
[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包
( y+ K) k7 P! u& o i[color=#333333 !important]
4 G3 |0 }+ N8 Y$ P[color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀5 Z0 Z+ ?) Y _6 W! s3 |
[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据
9 K! o) ]' E1 `6 Y" b2 ][color=#333333 !important] ! b+ s- i. w! J$ |7 t' ^6 t* F) A
[color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)% [4 W# Y( m! M% \; D- R
[color=#333333 !important] ( ?) q3 J8 l/ i6 Y
[color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。& |6 P7 J; G% J0 _' W
通信流量包分析
4 R# [& n# R2 h; q' b
* n7 H7 F+ B P+ }: @8 s! J! V3 E4 \[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析
7 F1 d7 Y) b& c9 M- a[color=#333333 !important] & h% c2 _6 f T, ~9 C
[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。/ ~5 Y9 e. [& X0 ~
[color=#333333 !important]05fanyi05baidu03com9 E: v- f: d1 @+ A9 B
[color=#333333 !important] 7 t2 E G7 v+ g1 |
[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。; b& ]: e2 ]3 W/ R2 l$ S# ?
[color=#333333 !important]
3 F9 y% W$ S+ G1 N6 Z m! `suricata检测规则(并未测试,仅共参考)
6 v/ C% {( o9 O1 S. Y/ p& L1 |" y8 o+ U3 k2 a( s- X, y+ A
# H) d( A( j" _ |
n& `/ g4 B6 P& u% G1 A+ O 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;)Dns2tcp7 v4 y4 {+ B7 E2 @. h
' {& H/ W, C( K0 [" ]% e安装
* V i; n# f0 n. z- l' H0 P1 ~2 d, L( G+ I
[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell
( K! b* J" v! @) D& Z[color=#333333 !important]下载链接
8 \, t/ d2 O4 M5 c[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag9 ]) z- s1 y) G+ V( i
[color=#333333 !important]提取码:t1rw
0 t2 e+ H1 L) \+ m[color=#333333 !important]安装编译
n) n2 i* C5 A5 {1 [3 S/ x1 \. J( j; e. [
- 5 H8 R) }- f- S0 }
./configure make;make install[color=#333333 !important]服务器端8 w2 g# w$ m, ?/ |9 e
1 b* l8 @# V& ?8 E/ I# Z8 C
4 T9 w- K Y# l1 h* W server/dns2tcpd[color=#333333 !important]客户端2 L6 m7 w, D. x+ S
P$ f; R1 j1 I( h1 y
, F0 k- J H( ~4 E# T0 b( R Linux: client/dns2tcpc windows:[color=#333333 !important]云盘直接下载windows版本,或者下载
( H3 C! m3 K6 H6 C; G+ K
) a9 k+ M0 ?' j1 o7 i, w0 `1 B% e
$ a! k9 _) I" \! X5 D- k6 m dns2tcpc.exe实验测试
& q7 e! M' P; G$ b( M
1 r" K; d8 w: y7 R) M) Y& V% L[color=#333333 !important]服务器端
; T/ O% s) _! |6 k! A8 W' b[color=#333333 !important]1.创建配置文件
2 d' @* w% u0 D( M( u2 G9 N
( m. z9 i: m. p3 [1 p
) |# s- u) r( C: V% 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.启动
S) [' O1 U# M" x# p; k: X1 X# L, r( j3 X% M' m5 ?
9 q% M+ Q S3 o% x8 _, Z ./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接
, n% w/ C0 N% V- O- @ h$ b[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务& L' Q) A6 ?* p" I* t
[color=#333333 !important]  / ~/ D7 r: R, W+ T7 C i: `
[color=#333333 !important]客户端
) W# W$ N5 X5 m5 `6 f" M[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 2
- m. x& x5 y* C$ l; X[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源
$ F9 H: q, U" A1 k/ S! m! w[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP
' ?5 W/ I( J3 i$ _[color=#333333 !important]-l:端口
- w# ?& i. @) K! \0 p[color=#333333 !important]-d:是否为调试模式 2 等级可以省略
% ^# M6 s- S9 i1 l; Y [color=#333333 !important] ) E, ^, V, T; D0 L3 m
[color=#333333 !important]客户端使用访问服务器
) g! n4 Y$ U2 W1 f2 L; D4 c5 A[color=#333333 !important]
1 c8 z* m2 [% {4 G. l流量包分析
# g2 E; g5 R2 S* p9 ]& r' d, |- t
[color=#333333 !important]建立链接并未产生通信包! D. O, ~+ A( a. r; B
[color=#333333 !important]
" `+ Q, _" q% m2 l. j! e$ c3 n[color=#333333 !important]使用ssh访问时,才会产生数据包
3 m5 P; w" e3 N# V5 p1 D3 P, b[color=#333333 !important]
6 z0 |( z( u6 K9 o! ]: H[color=#333333 !important]数据包分析
" J; I* B: Q9 c; \. r7 }/ c[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中
, L! r* S* ~, x# J* T* T8 B[color=#333333 !important] ; B# D2 |3 Z" c2 f$ U+ ?1 A. K
[color=#333333 !important] 8 u, w5 @3 i- h
[color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。
5 I; g$ t& V2 kSuricata规则检测(并未测试,仅共参考)1 t$ x0 @( B) t' p4 u
: u# {/ ^7 M- d |[color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测2 {- k8 _) r7 d* a5 K" h+ n
4 c2 X7 l+ e6 t7 T+ a1 g% q
- , k) X2 Y" J" p7 r% @3 w! 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]结尾
; B& U* x4 k; K[color=#333333 !important]小白水文,求大神放过
& b& o% ^* p$ p/ e& }' l8 P `8 l1 _[color=#333333 !important]pcap包下载地址:
; @6 S0 M0 {( w; D) Z: i+ |[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw
! B: @) j. o) j% ]# t [color=#333333 !important]提取码:n5ha0 `, _5 r7 j/ S$ ~6 f/ F
[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载6 K, T# r7 J7 V+ z/ S. E# d

3 I/ P5 j, j! @ i/ C0 } c* ^精彩推荐2 j- p1 G: ]" Q' u2 A- p" ~5 N6 I
5 m- H6 b$ K6 ?0 W7 Y1 B/ c- T
+ v/ i% B [, F; F
; U+ E9 v" Q! ^2 ]0 y0 v & ]& X( V& _. j
  
! K+ }! _6 s/ K: o7 b
& d# q5 Q5 I/ p. `$ R0 a7 X$ A来源:http://mp.weixin.qq.com/s?src=11×tamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=1; Q3 `# {' d) A: b/ a6 u& y& |; B
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|