损坏的 DNS 请求

损坏的 DNS 请求

有时,在一些包含我的 DNS 服务器的网络捕获中,我发现看似无效的请求的查找失败。

当在 Wireshark 中查看时,这些显示的内容看起来像是 ASCII 范围之外的转义字节。

来自 Wireshark 的 query.name > Copy > Bytes > Hex Stream 的一个示例是:

Raw: 03777777128b68481cc5116ceb53bade651327d982751903636f6d00`
As Python bytes: \x03www\x12\x8bhH\x1c\xc5\x11l\xebS\xba\xdee\x13'\xd9\x82u\x19\x03com\x00

您可以看到这里有部分常见的 DNS 查询格式:

  • 发送 3 个字节的信号,然后www
  • 信号为 18 个字节,然后...乱码。
  • 发送 3 个字节的信号,然后com

我不明白中间部分应该是什么。

我熟悉国际字符的 Punycode,并且我确信这不是这样的。

我无法访问发出请求的主机。我知道一些恶意软件尝试解决此类问题,所以我很好奇这是否可能表明存在恶意软件。

编辑添加

以下是 Wireshark 看到的 DNS 响应的屏幕截图: 在此处输入图片描述

答案1

Punycode 是一种 ASCII 编码,因此您说得没错,这似乎是垃圾。我们需要查看整个数据包才能说明更多信息。我已将该字符串分解为下面的 ASCII 和十六进制字节边界,以便更容易理解数据包结构。

(如果有人发现错误,直接编辑即可)

[03] www
[12][8b] hH
[1c][c5][11] l
[eb] S
[ba][de] e
[13] ' [illegal DNS ASCII: byte 0x27]
[d9][82] u
[19][03] com
[terminating null byte 0x00]

  • Punycode 不使用 7 位 ASCII 边界以上的字节,该边界以十六进制结束7F
  • C2即使我们假设有人非法尝试在此字符串中嵌入 UTF-8 字节,这些字节也以十六进制到 范围内的起始字节开头F4。紧跟在初始 www 后面的字节是十六进制12(换页符),后跟8B,这是一个连续字节。这绝对不是有效的 UTF-8。

目前,我们剩下三种可能性:

  1. 数据损坏
  2. 旨在利用漏洞的数据包
  3. 尝试通过 DNS 协议对非 DNS 数据进行编码,以绕过防火墙,例如 VPN 软件。我没有花太多时间研究这种做法的实现,因此无法评论这种情况发生的可能性。如果真是这样,我会假设开头的“www”和结尾的“com”是一种欺骗基本深度数据包检测的拙劣尝试。

相关内容