DNS攻击面分析

前序

DNS(Domain Name Server,域名服务器)是进行域名(domainname)和与之相对应的IP地址 (IP address)转换的服务器。DNS中保存了一张域名(domain name)和与之相对应的IP地址 (IP address)的表以解析消息的域名。 域名是Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。域名是由一串用点分隔的名字组成的,通常包含组织名,而且始终包括两到三个字母的后缀,以指明组织的类型或该域所在的国家或地区。

DNS是计算机域名系统 (Domain NameSystem 或Domain Name Service) 的缩写,它是由域名解析器和域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。其中域名必须对应一个IP地址,一个IP地址可以有多个域名,而IP地址不一定有域名。域名系统采用类似目录树的等级结构。域名服务器通常为客户机/服务器模式中的服务器方,它主要有两种形式:主服务器转发服务器。将域名映射为IP地址的过程就称为“域名解析”。

要干什么?

2020年CVE-2020-1350漏洞爆出来之后,一堆人对DNS server进行的漏洞挖掘,挖掘出了很多的新漏洞,因为实习期间做了相关的研究,所以想要总结一下DNS的漏洞,漏洞对应的poc在网上可能能搜到或者搜不到,但是因为DNS协议本身比较简单,根据漏洞构造poc还是不难的。

DNS的攻击面

DNS Query/Response
DNS解析流程分为递归查询和迭代查询,递归查询是以本地名称服务器为中心查询,递归查询是默认方式,迭代查询是以DNS客户端,也就是客户机器为中心查询。其实DNS客户端和本地名称服务器是递归,而本地名称服务器和其他名称服务器之间是迭代。
在这里插入图片描述

Zone Transfer/DNS Notify
当一个新的DNS服务器添加到区域中并配置为从DNS服务器时,它则会执行完全区域传送,在主DNS服务器上获取完整的资源记录副本;同时,为了保证数据同步,主域名服务器有更新时也会及时通知辅助域名服务器从而进行更新(增量区域传送)。

Dynamic Update
允许通过授权的更新者updater对权威DNS服务器的区数据动态的增加、删除资源记录。

下表来源于DNS安全实践
攻击面参照:Secure Domain Name System(DNS)Deployment Guide
在这里插入图片描述

漏洞简介

DNS Query/Response

CVE-2020-1350

漏洞出现在SigWireread,该函数会在向域名服务器查询记录,对返回的Sig记录进行处理,该漏洞在网上已有公开exp,自己也对exp进行了分析,链接在这里
在这里插入图片描述

CVE-2020-1228/0836

有两个内存泄漏的漏洞在迭代查询的时候,接收到返回报文,未释放一些变量
在这里插入图片描述

CVE-2021-24078

当接收到域名服务器的返回报文,对0xf0f0的报文进行存储,但是这个类型的报文是DNS服务器使用的类型,两者处理代码不同,造成混淆
在这里插入图片描述

DNS动态更新

CVE-2021-26877

TxtFileWrite函数是对域文件进行写入,动态更新
在这里插入图片描述

CVE-2021-26897

SigFileWrite函数接收Sig记录更新,缓存区未考虑溢出
在这里插入图片描述

CVE-2021-26893

整数下溢,Key记录动态更新如果长度小于4的话
在这里插入图片描述

CVE-2021-26894

Atma记录更新发生整数下溢
在这里插入图片描述

CVE-2021-26895

对AAAA记录更新发生整数下溢
在这里插入图片描述

CVE-2021-26896

wks记录也会发生类似溢出的漏洞
在这里插入图片描述

CVE-2021-xxxxx

Nsec3FileWrite,编号未知,可能会溢出一个字节
在这里插入图片描述

CVE-2021-xxxxx

Name_WriteCountNameToBufferAsDottedName,将DNS编码的域名转换成字符串,memcpy未加边界验证
在这里插入图片描述

DNS管理端漏洞

下面是CVE-2021-33749,CVE-2021-33750,CVE-2021-33752,CVE-2021-33756
KeyFlatWrite,管理端对key记录读取会造成溢出
在这里插入图片描述
NxtFlatWrite,同样缓存区没有做验证
在这里插入图片描述
WKSFlatWrite,缓存区也没有做验证
在这里插入图片描述
SigFlatWrite,也没有对记录的长度进行限制
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要用Python时滞微分方程的数值,可以使用scipy.integrate库中的delayed函数。具体步骤如下: 1. 导入必要的库: ```python import numpy as np from scipy.integrate import solve_delayed ``` 2. 定义时滞微分方程: ```python def f(t, y, yd): tau = 1.0 dydt = -y + yd(t - tau) return dydt ``` 其中,t表示时间,y表示未知函数,yd表示时滞函数,tau表示时间延迟。 3. 定义初始条件和时间网格: ```python y0 = [1.0] tmax = 10.0 dt = 0.01 tgrid = np.arange(0, tmax+dt, dt) ``` 其中,y0表示y在t=0时的值,tmax表示模拟的最长时间,dt表示时间步长,tgrid表示时间网格。 4. 定义时滞函数: ```python def yd(u): return np.interp(u, tgrid, yhist) ``` 其中,u表示时滞时间,yhist表示y在之前时间的值。 5. 方程: ```python sol = solve_delayed(f, y0, tgrid, yd) ``` 其中,sol是一个对象,包含了数值和其他信息。 6. 提取数值: ```python y = sol.y[0] ``` 其中,sol.y是一个数组,包含了数值。 完整代码如下: ```python import numpy as np from scipy.integrate import solve_delayed def f(t, y, yd): tau = 1.0 dydt = -y + yd(t - tau) return dydt y0 = [1.0] tmax = 10.0 dt = 0.01 tgrid = np.arange(0, tmax+dt, dt) def yd(u): return np.interp(u, tgrid, yhist) yhist = np.zeros_like(tgrid) yhist[0] = y0[0] for i in range(1, len(tgrid)): yhist[i] = yhist[i-1] + dt * (-yhist[i-1]) sol = solve_delayed(f, y0, tgrid, yd) y = sol.y[0] import matplotlib.pyplot as plt plt.plot(tgrid, y, label='y') plt.legend() plt.show() ``` 这个例子中,时滞函数是y在之前时间的值,因此我们先用欧拉出y在所有时间点的值,然后用np.interp函数将其转换为时滞函数。最后,我们时滞微分方程并绘制数值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值