安全路透社
当前位置:安全路透社 > 网络转载 > 正文

通过DNS进行主机安全防护的一些分享

*本文原创作者:linken

0X01 简介

牵扯到DNS的攻击五花八门,如劫持、恶意利用等。服务器和PC上DNS请求的种类和频率还是有区别的,基于这个特点,将服务器上利用DNS防护加固服务器的感想分享下,可以作为现有防护方案的补充。

0×02 DNS在恶意程序中的应用

互联网上几乎所有的应用都离不开DNS服务,如果分析DNS的请求和返回,不仅可以发现劫持等问题,还会发现入侵的恶意程序等。下面以僵尸网络为例,分析DNS在整个攻击过程中扮演的角色和作用。僵尸网络的整个的框架如下图所示。

image.png

在僵尸网络中,c&c(command & control)服务器是整个的核心,也是整个系统中最薄弱的环节。僵尸网络如果想要长期潜伏,c&c的基础设施和访问网络的信道必须得到保护。常见的和DNS相关的有三种保护方式:

1、动态DNS技术。

动态域名服务DDNS(Dynamic domain name service),是一种将域名链接到动态IP地址的方法。意味着域名一直指向同一台主机,无论这个主机的IP地址如何变化。

2、fast-Fluxing技术。

核心思想是指将某个域名解析为频繁变化的IP地址,也就是说将多个IP赋给一个域名。

3、域名变化地址。

僵尸代理提出自己的域名集合,不需要僵尸主控机的配置文件等其他方式得到URL,使得僵尸网络可以主动查询存活的c&c服务器。这种在固定时间间隔产生唯一的域名称为”域名变化地址“,域名生成算法(DGA)使这种方法成为可能。

这三种技术通过不同的技术隐藏c&c的地址,从而达到保护信道和c&c服务器的目的。

0×03 常规的防护方法

1、蜜罐

被动或主动地接入僵尸网络,分析他们的通信指令及其数据报特征,结合其他设备进一步分析整个域内的流量,从而找出异常设备。

2、通过网络数据报的特征发现

僵尸网络产生的数据包,有自己的特征,通过对数据包的深度分析,对比已知特征,即可发现。比如通过机器学习检测DGA域名等,相关的技术较成熟。

3、通过网络流量日志发现

僵尸网络发起攻击时,会产生较大的攻击流量,而这些流量的统计指标与正常流量有着显著的差别。相关的产品也早已问世。

0×04 新的解决方案

服务器上DNS的请求频率和总数与PC还是不同的,服务器上业务稳定后,对DNS的请求的域名种类是在一定范围内的。基于环境和恶意程序的这些特点,可以将请求的域名设置成白名单,其他的予以阻断并告警,以此来检测和阻断这些恶意程序。如果怕阻断影响正常业务,可只设置告警即可。

0×05 和常规方案的比较

常规的方案中蜜罐是需要主动或被动接入僵尸网络中的,后面两种方法也需要第三方设备,且对未知的恶意程序不一定可以发现。新方案是纯软件的,部署及其成本有优势,只要白名单设置准确,效果是很好的。

0×06 DNS数据报及其压缩方法

方案中核心环节之一就是对DNS数据包的解析,需要一些DNS数据报结构和压缩方面的基础知识,结合实际的数据包分析如下。

A)、DNS具体的数据报的格式如下图。前12个字节大小是固定的。

image.png

B)、“标识”、“标志”、“问题数”、“资源记录数”、“授权资源记录数”、“额外资源记录数”对应前12个字节。具体内容如下:

image.png

C)、“查询问题”对应的数据和码流分别为:

image.png

D)、“回答”对应的数据和码流分别为:

image.png

E)、“授权”和“额外信息”的数据在这个数据报中不存在。

F)、重点看看“回答”中压缩的部分。

image.png

其中name对应的码流为c0和0c,没有像C)中Queries字段那样完整的展示出来。0xc0和0x0c是16进制的表示方法,对应的二进制分别为11000000 00001100。如果前两位为11,则代表是使用了压缩的方式,且表示是一个16bit的指针而不是8bit的计数字节,剩余的14个字节则说明改DNS报文中标识符所在的位置(起始位置由标识字段的第一个字节算起)。因为后14bit的二进制表示为000000 00001100,就是十进制的12,对应的DNS报文由标识字段的第一个字节向后推12个字节,所以是 www.baidu.com

image.png

上图灰色部分是完整的DNS返回数据报,从起始表示字段向后推12个字节,后面的数据为:

image.png

就是www.baidu.com对应的表示方法。

0×07 新解决方案的实现

有了上面关于DNS数据报的知识,剩下的就是具体的实现了。以github上的一个demo为例,地址为:https://github.com/sizet/lkm_parse_dns_packet,核心的部分基本已包含,缺少域名规则比较的部分。代码较简单,通过Linux下的netfilter框架,在NF_INET_LOCAL_IN和NF_INET_LOCAL_OUT两个点劫持和DNS请求和返回的数据报,并将其中相关的数据解析出来。

0×08 结束语

通过以上的分析可知,如果在我们的服务器上部署了DNS防护加固功能,会得到请求和返回的DNS数据报的详细信息。如果是域名劫持的话,从DNS的返回数据包中我们可以看到返回的域名和IP的对应关系是异常的。如果是系统被恶意部署了bot,会产生白名单中没有的DNS请求,及其容易发现,不需要再通过分析所有的流量包或流量日志了,效率及其准确性都有提高。一些木马病毒通过DNS进行恶意的数据传输,因为请求的域名没有在白名单中,同样的也是可以立即发现。

*本文原创作者:linken

未经允许不得转载:安全路透社 » 通过DNS进行主机安全防护的一些分享

赞 (1)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册