|
|
DNS隧道
: G# [: u6 Z6 j! Q/ [9 t
, Y8 f V+ f: b/ \% M9 x' ] Y" K[color=#333333 !important]DNS协议又称域名系统是互联网的基础设施,只要上网就会用到,因而DNS协议是提供网络服务的重要协议,在黑客进入内网后会使用DNS、ICMP、HTTP等协议隧道隐藏通信流量。本文通过DNS隧道实验并对流量进行分析,识别DNS隧道流量特征。
. K3 _# b" u6 H% p% f$ J% L" k实验环境
$ K' A$ B" b4 B/ \$ b+ U! F
2 v# y/ C4 M$ d* [+ W1 p2 L[color=#333333 !important]CentOS Linux 两台
4 r7 J) X9 c, W$ D0 ?; y6 w$ E 创建DNS服务器
# f: A: x1 Y% W- m `# t
" \; u) `2 r: I: Z: ~( v1.安装bind
3 h4 H# J: ~, j% y$ y* ]5 ]2 D$ K" l ~! e/ ^
[color=#333333 !important]yum install bind*6 U: c% j. X. |2 k) P a# k; o5 {
2.配置named文件
6 |( @# b0 l9 H, C0 D2 W8 Y0 F F% b0 J; _ |# g. K
[color=#333333 !important]修改/etc/named.conf' A. J' }) ^9 h# }
[color=#333333 !important]将下图中选中的地方改为any2 l p8 N* G0 H$ P5 O. t! i
[color=#333333 !important]
7 {! J$ E. ~$ Q4 I O6 f0 E5 C3. 设置NS记录,A记录; z. S( R: B; K0 W0 D4 x. ]
" P- D* {$ D% C4 B! j$ {* q[color=#333333 !important]增加区域解析文件在/etc/named.rfc1912.zones增加区域解析记录文件
# a2 k5 e- C2 F% C M[color=#333333 !important] 
* B0 {$ s+ {' u) I0 E7 ^' ^5 D[color=#333333 !important]增加正向解析记录
" L, ~3 N4 E5 b) d3 x, }- a+ ~( s[color=#333333 !important]将/var/named/named.localhost改为上图中修改的名字
+ }6 L( i& N$ J, I! j[color=#333333 !important]cp /var/named/named.localhost/var/named/name.dnstunel
, Z7 K/ g" F+ W4 N9 s [color=#333333 !important]修改文件如下& D/ C- q7 Y( z4 Q& t& P# \) p- Y
[color=#333333 !important]添加NS记录,A记录) e/ \8 e0 U& U! S$ ` s7 h
[color=#333333 !important]
( E5 a1 a7 i7 f- F% |, R$ i# [[color=#333333 !important]添加bind为自启动服务
0 R7 \9 X' B' B4 r8 `% X" Z) Q( Z$ ~[color=#333333 !important]systemctl enablenamed.service
$ I" Y" C- ~. H) `2 I2 n[color=#333333 !important]systemctl restartnamed.service
) p9 H ?, g- a$ K$ _3 [8 J; ]5 L5 |7 \" V [color=#333333 !important]查看启动状态' ?$ Z/ y) h1 C2 M
[color=#333333 !important]systemctl statusnamed.service5 ~7 c3 U4 ^1 u ?
[color=#333333 !important] 7 C+ h! H) h) b" i0 j
[color=#333333 !important]将另一台主机DNS服务器设置为192.168.1.7,ping ns.dnstuneltest.com是否正确解析,(如果不能解析,可能跟防火墙有关系,在DNS服务器上执行iptables -F)" D/ x1 k9 p8 G# T7 ]' j
Iodine3 n, E" I; O, X" d
- U. e7 A% v6 Z6 u5 S8 t7 Q
[color=#333333 !important]Ionine支持两种模式,中继以及直连模式,服务器与客户端可以直接通信而不需要第三种辅助软件,通信的DNS数据损坏容易容易被发现。: l0 K `* e3 t' x8 ^4 G
安装# g* y3 [; x5 B/ i- Z/ e& v( p
- {/ M3 U8 D, y; x7 k$ E2 e
[color=#333333 !important]下载地址:
8 @0 w* M& ]" t4 d[color=#333333 !important]https://github.com/yarrick/iodine/archive/master.zip: e! x& C( n- ? p, K
[color=#333333 !important]unzip 解压
; U Q- w6 Q$ N9 m[color=#333333 !important]cd iodine-master7 S* T7 D' w3 K5 a7 g0 |( J: S
[color=#333333 !important]make
% t8 f7 k7 N3 d+ x9 p L* O# V, i1 d[color=#333333 !important]出现报错
3 V% w$ r( ^+ M$ }[color=#333333 !important] $ ]& z0 j3 C& ^% v) n4 Q( a% F3 e
[color=#333333 !important]yum -y install zlib-devel1 i ^& Q3 S% V# y8 R+ h
[color=#333333 !important]make;make install6 ~$ H: U8 J" x' e
[color=#333333 !important]安装完成) r! B+ G* R3 i& M: B
[color=#333333 !important]进入 bin
# F' s" B7 y0 [. @7 \6 Q[color=#333333 !important]iodined 服务器# r' u- j; l: H; n8 O5 P
[color=#333333 !important]iodine 客户端3 P0 \" ?6 a- f3 O* y- m
实验测试0 D" X: q r, O9 C7 J
* p2 m [" G4 \[color=#333333 !important]服务器
3 i0 B: ^4 V; [# x[color=#333333 !important]./iodined -f -c -P 123456 10.1.0.1ns.dnstuneltest.com4 q4 N1 H8 }$ U$ G
[color=#333333 !important]-f 前台显示,运行后一直在命令行等待6 i4 i+ g- b' S) J0 p* v
[color=#333333 !important]-c 中继模式|直连模式+ U$ A# M9 s1 V
[color=#333333 !important]-P 认证密码: J3 [: r/ S6 C1 z: {" d
[color=#333333 !important]Ip 虚拟出网卡的IP,在隧道建立后,客户端同样会多出一块dns0网卡,与该IP在 同一网段,可以任意设置,虚拟IP。
8 D% q% _" \) {# o2 {& a+ E5 d[color=#333333 !important]设置的域名,这里要跟区域配置文件一致。
9 x+ k/ t- ?( n A. q[color=#333333 !important]输入完成之后,ifconfig查看会多一块网卡
7 Y- e: @: I) F! [% L/ V[color=#333333 !important] 9 K9 Z: C2 L+ b! d
[color=#333333 !important] ' M6 S% L8 F% c+ b- f
[color=#333333 !important]客户端' d0 i/ p* u' l, f% c/ m
[color=#333333 !important]./iodine -f -P 123456 192.168.1.7 ns.dnstuneltest.com
K: C8 y w; I& A8 A+ T. `[color=#333333 !important]-f 前台显示
8 _- f# \6 J4 F/ X7 w0 u- s' B% n# e[color=#333333 !important]-P 认证密码5 L* I2 L3 @$ B: _: z1 t
[color=#333333 !important]IP 为配置DNS服务器IP或者为购买的云服务IP,输入此选项之后,直接与指定IP查询,而不经过其他DNS服务器层解析5 ]3 \; R/ J5 S5 i4 |
[color=#333333 !important]客户端此时也会新增一个网卡,DNS0,IP为10.1.0.2与服务器DNS0网卡处于同一网段中,此时服务器端与客户端可以使用这两个IP互相通信。
1 U( D: Q X' c% {. E O[color=#333333 !important] 1 J# e* h- V* [- e! a- ]$ q
流量包分析; w4 l7 l2 a( s
8 O U |$ d1 a$ y# s" M[color=#333333 !important]抓包
! j+ B0 o$ I8 O! U% e7 ^5 H1 B0 F[color=#333333 !important]tcpdump -i enp2s0 port 53 -w /tmp/iodine.pcap
$ y5 W. L2 Z" h 建立链接的包分析! J& L' ]- T( ~( ~5 M
/ n7 t( O+ r: R" K9 w& h: R
[color=#333333 !important]在客户端启动后,会向服务器发送DNS请求包, J% E: N5 ? k7 u4 o
[color=#333333 !important]
! X4 |/ }: R8 S, r( f[color=#333333 !important]客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀+ F. ?0 K. ~0 v& K+ f& T: L; D9 q
[color=#333333 !important]yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据
7 y0 L9 }- `) ?[color=#333333 !important]
, o0 M g! B+ z1 d- |+ Q8 R% {8 Y[color=#333333 !important]服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)9 \# M( C2 E( y8 L+ {$ i2 @
[color=#333333 !important] 1 g8 `- `' Q; f
[color=#333333 !important]采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。
4 I1 ?7 H6 v6 E/ v g) U通信流量包分析5 m6 N. w6 V, {
1 e. [: L( v& _% E' v[color=#333333 !important]通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析
: X* M$ h3 E5 n& D[color=#333333 !important] * @; X2 J, @) x d, @7 ?
[color=#333333 !important]正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。
6 e3 p) @5 o' J5 K- f: L) J# ^0 f[color=#333333 !important]05fanyi05baidu03com, W5 E+ k% d4 G, a4 v* b* {
[color=#333333 !important]
3 T$ C, h7 P3 N% _[color=#333333 !important]隧道中的流量明显不符合上文的query字段规定。由60 08开头。% T8 v" p; _) m
[color=#333333 !important] 2 N( }0 v4 M: g
suricata检测规则(并未测试,仅共参考)6 r0 _' y& u6 ^' x: K% a q, p9 A
# N. Z( o3 b4 z7 G8 t6 L' J# }
8 t- Q9 l7 M6 i/ _& l
d4 x, v( q, v3 U: h. m7 q; Z 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- c1 B0 ^9 f3 T* ]" D
9 J* ?" s+ E! \: g
安装
3 ]: Y- k# X! o- }1 R' s' a' Y9 p& x
[color=#333333 !important]需要与其他回连工具配合,或者写入反弹shell
4 }$ _6 ~( x. _3 n[color=#333333 !important]下载链接
: C* Q) p) w( Y, n[color=#333333 !important]链接:https://pan.baidu.com/s/14SIxdiIWHKZDUz6lgn_Zag
7 e. ~0 o- ?1 X [color=#333333 !important]提取码:t1rw4 w& j. _- o# Z# Y7 d9 c& n+ c
[color=#333333 !important]安装编译
# n7 o) N# Q# C7 R* L% j( V9 \1 E
- V4 u- v: ^( u- p8 A. \- & s3 e) f2 f0 @! \5 I, n
./configure make;make install[color=#333333 !important]服务器端
! x6 B% V. R, d7 E& W- [% [" l) ^
( g3 _8 u8 }+ W! y- u: W server/dns2tcpd[color=#333333 !important]客户端 g2 U5 s& i7 f; A
w. a% _# u e1 X+ `- , r5 E/ J8 k0 Y9 [% O
Linux: client/dns2tcpc windows:[color=#333333 !important]云盘直接下载windows版本,或者下载: d& P) R u* M! i$ V
" G4 u; x5 o% a1 S o8 @* D9 W# H# o- , B$ Y a1 w7 u+ Y* s7 e5 B
dns2tcpc.exe实验测试
: I' v4 Q7 b1 [# e. [+ X5 c0 I( b7 H+ z
[color=#333333 !important]服务器端
. y( l& ~: T; _3 c% `3 }[color=#333333 !important]1.创建配置文件
# s, _- `( E& H; y5 J3 Q, U5 I' l+ S* h
" l& x+ p' p2 L' Y
; {8 g- O5 N# w; D 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.启动' T# r0 R5 h9 F' o# r! w
, w0 g% [' V( p3 w( z X) {
( u; f K4 t* P H( W! z ./dns2tcpd -f/etc/dns2.conf[color=#333333 !important]启动之后会将DNS的隧道流量根据客户端选择的资源使用对应的服务建立连接
3 ^0 T7 z+ ^: H6 j[color=#333333 !important]出现如下错误需要关闭服务器自带的dns解析服务
( U$ p; u9 ?% X3 A2 D4 E[color=#333333 !important] 
x( ^: {. v4 u q3 \4 X% n[color=#333333 !important]客户端
, l" t# x2 S1 Q: D) q! f[color=#333333 !important]dns2tcpc -r ssh-z ns.dnstuneltest.com 192.168.1.6 -l 8888 -d 2$ N; P4 o, u3 K
[color=#333333 !important]r:指定对应的资源,前面服务器需开启指定的资源
3 O- b, u. H$ a3 F9 c4 m7 q& D2 ?$ s[color=#333333 !important]-z:自定解析的dns域名,如果域名已经添加的公网的DNS解析则可以省略后面的IP
7 r/ z* e9 N6 `* n* v/ y: s( h[color=#333333 !important]-l:端口 j( J& }) d. g( r* C7 Q3 {9 U, `1 J
[color=#333333 !important]-d:是否为调试模式 2 等级可以省略8 U; S% }! `( K i: E
[color=#333333 !important] 1 J; X# H7 d* {8 f
[color=#333333 !important]客户端使用访问服务器) q+ F+ z w3 f% H N0 P
[color=#333333 !important]
- E( G; x4 U6 P, }% h2 R% x流量包分析
, l3 p; s' l5 W/ v9 G, x/ [
* ]; a8 N$ q3 J, X# C" H[color=#333333 !important]建立链接并未产生通信包
9 a$ t# s' ^: X! K" n3 q$ }+ W[color=#333333 !important] 1 d" Z8 [) A1 }% E
[color=#333333 !important]使用ssh访问时,才会产生数据包
' t! A! Q1 m4 c N+ `9 \/ N[color=#333333 !important] ! V, n f) Q7 e) M0 V5 C
[color=#333333 !important]数据包分析
* z$ S- c' E. L! K& L[color=#333333 !important]需要时客户端会向服务端发起TXT类型请求,服务器的返回包也会放在回复的TXT记录中: h O6 f% w# l' U& G* P
[color=#333333 !important] ; ?8 O, p7 ^1 D, }9 i6 ?
[color=#333333 !important]
0 A" _* s- E5 r[color=#333333 !important]客户端通过TXT类型记录的域名前缀来发出数据,通过DNS RR中的TXT记录来附加回应的内容。域名前缀和回应内容均采用base64编码,如果提取单条数据,进行base64解码,即可看到传输的内容。从发包行为上可以发现,如果在进行传输数据这种大量数据交互操作的情况,dns2tcp会将数据切分成若干个小单元,依次发出,时间间隔非常小,而当无数据交互,空闲时,两端仍然通过发包维持通信状态。
5 O$ y: h U+ J6 O5 i6 J! w3 ^) kSuricata规则检测(并未测试,仅共参考): g9 o0 l8 J5 ^
4 S% O( ]3 s; Z {/ D+ G[color=#333333 !important]因为Dns2tcp采用的是标准的dns协议格式,所以只能通过发包的频率检测
. |0 ?1 g8 T" b6 S9 v( L; w O4 J. w1 L% q# b
- 9 s: J+ [7 o; \) |6 M
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]结尾" {7 u. [/ Q3 h$ w+ t& B+ g
[color=#333333 !important]小白水文,求大神放过6 B1 U- @, t3 @4 @$ R3 b
[color=#333333 !important]pcap包下载地址:
y& r( x% H' D[color=#333333 !important]链接:https://pan.baidu.com/s/1R9IhfxI285QMLGwjh_gQVw* e ^$ u7 u. w0 @0 W! {1 P
[color=#333333 !important]提取码:n5ha' a0 J+ [* P5 H1 z
[color=#333333 !important]*本文原创作者:johylodog,本文属于FreeBuf原创奖励计划,未经许可禁止转载1 n- q) q9 F. m, R& ^

/ \- h; x7 x4 k) R精彩推荐
( k3 ~' F' t( |4 U# o9 Q$ t r- o+ _* m* ?# o/ p
3 g( e( Z& @8 x' r- d- J* ] ' v0 I- J8 [7 H+ T7 `4 `
1 g+ d, B' `$ z# D
  3 r8 |, [4 `( P0 D3 t) G; l3 L
& O2 u; M$ u1 w+ f& W( T) q来源:http://mp.weixin.qq.com/s?src=11×tamp=1570629604&ver=1902&signature=6WVS2c9BX9g255KV02vDuZUf4Q-DsydX1HzYrGZQpvWzyxn-OJh60MhkKy2F523nI8Du9rFL10xll9GNw5mXJi6NOiQcPXT6mRo921KuE1aysrHEhmY6znpdP*dp-xIK&new=1
% Z& S4 z/ w R7 Y, `* m免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|