/ DNS

Passive DNS 学习总结(一)

一、收集

passive DNS sensor是有状态的,收集DNS解析服务器发出的查询报文以及进入的来自权威DNS服务器的应答报文。发出的查询请求和接收的应答报文都包括DNS-9 Tuple。

Element Description
Query IP The address of the initiator.
Response IP The address of the target.
IP protocol Usually 17, UDP.
Query port The port number of the initiator.
Response port The port number of the target, 53.
ID Randomized 16 bit nonce.
QNAME The domain name being looked up.
QTYPE Its type.
QCLASS Its class.

sensor接收到一个查询报文,它将报文缓存到state table中(一个内存数据结构),当应答报文返回时,根据state table中的查询报文,查询和请求报文一起和元数据(例如时间戳)被包装为一个dnsqr信息,写入输出流(到SIE)。state table中的入口数最高位128K,持续时间最长为60秒。
state table采用DNS 9元组的前6个元素索引,每个dnsqr有三种类型:

  1. UDP_QUERY_RESPONSE. 查询与应答匹配信息。
  2. UDP_UNANSERED_QUERY. 查询发出,但是已经过期,没有收到应答。
  3. UDP_UNSOLICITED_RESPONSE. 接收到应答,但是state table 中没有对应请求。

维护state table表的状态是十分必要的,可以抵御“盲欺骗”。比如,攻击者如果知道某个DNS解析服务器加入passive DNS收集,他可以盲发大量的dns应答报文指向dns解析服务器。如果不匹配相应和应答报文,passive dns系统无法知道所接收的报文是否合法。

二、分解

接收到原始的应答报文,会分解为更细粒度的RRSet[rfc2181]. RRsets包括了一个或多个Resource Record(RR),包括应答段、权威段、附加段。dnsqr信息提交之前会进行一些检查。

  • dnsqr中的只有UDP_QUERY _RESPONSE状态的报文会被处理,其他被丢弃。
  • 检查捕获时间,超过12小时的被丢弃,防止意外上传了旧数据。
  • 检查UDP checksum。
  • 应答信息中解码失败的被丢弃。
  • 应答信息中TC位设置为1的丢弃
  • 应答信息中QDCOUNT不是1的丢弃。

通过上述检查的信息,应答报文中三个段中的每个IN RRset被一次性取出,规范化,注解应答时间戳,IP地址等,进行下一个阶段。
规范化的过程:将RRset的名称小写化,如果RR中包含多个值则根据RFC4043进行排序。