• 使用香浓熵实现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 什么是熵?

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

    shannon_equation

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

    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

    utshannonsubdomains

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

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

  • 相关阅读:
    eclipse两种注释的快捷键
    为什么我的安卓虚拟机没有虚拟键盘
    windows server2012部署apache项目访问后台管理系统时tomcat就停了是怎么回事
    什么时候你可以考虑离职?遇到这6种情况
    安装wampserver后,在www文件夹下面写php文件,而在网页里输入localhost而无法打开php文件时解决办法汇总
    访问localhost文件下的testmysql.php文件报Not Found
    访问localhost的phpmyadmin出现访问被拒绝
    wamp如何设置数据库的密码
    WAMP不能启动, 一直处于红色图标或者橙色图标的解决办法
    [AngularJS] Decorator a directive
  • 原文地址:https://www.cnblogs.com/2020-zhy-jzoj/p/13165824.html
Copyright © 2020-2023  润新知