牵扯到DNS的攻击五花八门,如劫持、恶意利用等。服务器和PC上DNS请求的种类和频率还是有区别的,基于这个特点,将服务器上利用DNS防护加固服务器的感想分享下,可以作为现有防护方案的补充。
互联网上几乎所有的应用都离不开DNS服务,如果分析DNS的请求和返回,不仅可以发现劫持等问题,还会发现入侵的恶意程序等。下面以僵尸网络为例,分析DNS在整个攻击过程中扮演的角色和作用。僵尸网络的整个的框架如下图所示。
在僵尸网络中,c&c(command & control)服务器是整个的核心,也是整个系统中最薄弱的环节。僵尸网络如果想要长期潜伏,c&c的基础设施和访问网络的信道必须得到保护。常见的和DNS相关的有三种保护方式:
动态域名服务DDNS(Dynamic domain name service),是一种将域名链接到动态IP地址的方法。意味着域名一直指向同一台主机,无论这个主机的IP地址如何变化。
僵尸代理提出自己的域名集合,不需要僵尸主控机的配置文件等其他方式得到URL,使得僵尸网络可以主动查询存活的c&c服务器。这种在固定时间间隔产生唯一的域名称为”域名变化地址“,域名生成算法(DGA)使这种方法成为可能。
被动或主动地接入僵尸网络,分析他们的通信指令及其数据报特征,结合其他设备进一步分析整个域内的流量,从而找出异常设备。
僵尸网络产生的数据包,有自己的特征,通过对数据包的深度分析,对比已知特征,即可发现。比如通过机器学习检测DGA域名等,相关的技术较成熟。
僵尸网络发起攻击时,会产生较大的攻击流量,而这些流量的统计指标与正常流量有着显著的差别。相关的产品也早已问世。
服务器上DNS的请求频率和总数与PC还是不同的,服务器上业务稳定后,对DNS的请求的域名种类是在一定范围内的。基于环境和恶意程序的这些特点,可以将请求的域名设置成白名单,其他的予以阻断并告警,以此来检测和阻断这些恶意程序。如果怕阻断影响正常业务,可只设置告警即可。
常规的方案中蜜罐是需要主动或被动接入僵尸网络中的,后面两种方法也需要第三方设备,且对未知的恶意程序不一定可以发现。新方案是纯软件的,部署及其成本有优势,只要白名单设置准确,效果是很好的。
方案中核心环节之一就是对DNS数据包的解析,需要一些DNS数据报结构和压缩方面的基础知识,结合实际的数据包分析如下。
B)、“标识”、“标志”、“问题数”、“资源记录数”、“授权资源记录数”、“额外资源记录数”对应前12个字节。具体内容如下:
其中name对应的码流为c0和0c,没有像C)中Queries字段那样完整的展示出来。0xc0和0x0c是16进制的表示方法,对应的二进制分别为11000000 00001100。如果前两位为11,则代表是使用了压缩的方式,且表示是一个16bit的指针而不是8bit的计数字节,剩余的14个字节则说明改DNS报文中标识符所在的位置(起始位置由标识字段的第一个字节算起)。因为后14bit的二进制表示为000000 00001100,就是十进制的12,对应的DNS报文由标识字段的第一个字节向后推12个字节,所以是 。
有了上面关于DNS数据报的知识,剩下的就是具体的实现了。以github上的一个demo为例,地址为:,核心的部分基本已包含,缺少域名规则比较的部分。代码较简单,通过Linux下的netfilter框架,在NF_INET_LOCAL_IN和NF_INET_LOCAL_OUT两个点劫持和DNS请求和返回的数据报,并将其中相关的数据解析出来。
通过以上的分析可知,如果在我们的服务器上部署了DNS防护加固功能,会得到请求和返回的DNS数据报的详细信息。如果是域名劫持的话,从DNS的返回数据包中我们可以看到返回的域名和IP的对应关系是异常的。如果是系统被恶意部署了bot,会产生白名单中没有的DNS请求,及其容易发现,不需要再通过分析所有的流量包或流量日志了,效率及其准确性都有提高。一些木马病毒通过DNS进行恶意的数据传输,因为请求的域名没有在白名单中,同样的也是可以立即发现。
还没有评论,来说两句吧...
发表评论