使用香浓熵实现DNS Tunnel检测

最近抽了些时间研究了一下BIND(Linux DNS)日志,希望能通过DNS查询查询日志发现一些******的蛛丝马迹。

***在***服务器之后,往往需要将目标系统中核心的信息资产传回,而传输往往会遇到防火墙、IDS等防护设备的阻拦,但通常再严密的防火墙至少也要放通DNS服务器的请求,在这个前提下,就有大牛想出通过DNS Tunnel传送数据,避过防火墙来外发数据。业界已经有很多此类工具,比如dnscat2,可以将信息加密封装在DNS协议中与C&C建立信道。

DNS Tunnel是隐蔽信道的一种,通过将其他协议封装在DNS协议中传输建立通信。对DNS载荷的编码是DNS Tunnel的另一个核心技术。从高层来看,载荷只是客户端和服务器通信的正常流量。例如客户端发送一个A记录请求给服务器,查询的主机名为2roAUwBaCGRuc3R1bm5lbGluZwo.test.domain.com,其中2roAUwBaCGRuc3R1bm5lbGluZwo则是客户端传递给服务器的信息,这串字符解码后的信息便是dns tunnel。

相信对于DNS Tunnel的检测手段应该有很多种,本文就基于Splunk平台对ISC BIND的DNS查询日志做异常检测,并发现隐藏信道。

0x01 什么是熵?

先说什么是熵?在计算机领域,熵的定义为“随机变量中的不确定度度量”。对于计算机科学中的大多数事物,熵是用香浓发明的香浓公式计算的:

使用香浓熵实现DNS Tunnel检测

换句话说,字符串越随机,它对随机性的计算就越高(或者更确切地说是“熵”)。这种计算通常被称为熵的“分数”。为了说明这种“不确定度的度量”在现实中的样子,让我们计算以下域名的香农熵:

l  域名aaaaa.com的熵值为1.8

l  域名 google.com的熵值为2.6

l  A00wlkj—(-a.aslkn-C.a.2.sk.esasdfasf1111)-890209uC.4.com的熵值为3

从上面的例子可以看出来,随机程度低的域名(aaaaa.com和google.com)比随机程度高的域名(A00wlkj—(-a.aslkn-C.a.2.sk.esasdfasf1111)-890209uC.4.com)的熵值要低

0x02 为什么用熵?

基于前面提到的原因,很多恶意软件会使用DNS作为由内向外传输信息的通道,而在传输信息的时候大多会使用一种DGA (domain generation algorithm)算法,将加密信息写在域名或者子域名里面,这些域名从形式上看就像是随机生成的域名一样,比如说比较有名的蠕虫病毒Conficker 或者web爆破工具Blackhole Exploit Kit。因为这些具名都是在短时内生成的,传统的防护手段,如配置**,难以产生有效的防护。

0x03 如何实现?

基于Splunk平台我们不需要自己实现香浓熵算法,在Splunk Add-on “URL Toolbox”中包含了一套开箱即用的熵算法,我们可以将Splunk从日志中提取到的URL或者DNS域名作为算法的输入,计算字符串的熵从而找到随机程度较大的输入,进而分析出潜在的恶意软件传输通道。

URL Toolbox中基于Python实现的熵算法:

def shannon(word):
    entropy = 0.0
    length = len(word)    occ = {}
    for c in word :
        if not c in occ:
            occ[ c ] = 0
        occ += 1

    for (k,v) in occ.iteritems():
        p = float( v ) / float(length)
        entropy -= p * math.log(p, 2) # Log base 2    return entropy

接下来看一个例子,首先请确保你的Splunk平台已经安装了URL Toolbox。

从子域名中找到DNS Tunnel:

sourcetype="isc:bind:query" | eval list="mozilla" | `ut_parse(query, list)` | `ut_shannon(ut_subdomain)` | table ut_shannon, query | sort ut_shannon desc

使用香浓熵实现DNS Tunnel检测

从查询的结果可以看到,ip-dns.info有一个非常可疑的子域名解析请求,熵值非常之高,从子域名本身的形式看也非常像DNS Tunnel。

来源:华为云社区  作者:菊花茶

上一篇:mysql 必知必会整理—子查询与连接表[八]


下一篇:2021-10-28 SAP Spartacus SSR 性能方面的一些学习笔记