DNS 安全和端口随机化
DNS security and port randomization
我最近一直在阅读有关 DNS cache-poisoning attacks 的内容。从本质上讲,它们是可能的,因为攻击者可以猜测 DNS 消息事务 ID,因为它只是一个 16 位整数。即使整数是随机的,仍然有可能在短时间内一连串的 DNS 数据包恰好匹配 2^16 个数据包中的一个 window.
因此,第二个安全措施是端口随机化。如果 UDP 源端口是随机的,攻击者将不得不在短时间内猜测 源端口 和 事务 ID window,这通常是不可行的。但是我看到老版本的DNS软件比如BIND 9之前的版本没有进行端口随机化,因此很容易受到攻击。
这让我想到了一个问题:当一个 [=没有事先调用 bind
就使用了 10=]?我认为这就是临时端口的全部想法。为什么应用程序(如 BIND)必须特意执行端口随机化?
我的理解是,本质上,像 Linux 这样的 OS 将有一系列的临时端口可供每个进程使用。进程可以调用 bind()
将 UDP 套接字绑定到特定端口。但是如果在没有先调用 bind
的情况下使用 UDP 套接字(即调用 send
),OS 将延迟分配一个随机的临时端口给套接字。那么,为什么旧版本的 BIND 没有自动执行端口随机化?
This brings me to the question: don't most UNIX OS's like Linux and BSD automatically assign random ports when a SOCK_DGRAM is used without a prior call to bind? I thought that was the whole idea with ephemeral ports.
临时端口的主要思想不是以安全的方式随机,而是快速选择一些未使用的端口。不同的 OS 使用不同的策略,有些有点随机,有些使用更强的随机生成器,有些甚至以顺序方式分配端口。
这意味着并非所有 OS 临时端口都无法预测以用于 DNS。
有关更多详细信息,我建议您研究 RFC 6506 "Port Randomization Recommendations" and the overview about port selection strategies at https://www.cymru.com/jtk/misc/ephemeralports.html。
我最近一直在阅读有关 DNS cache-poisoning attacks 的内容。从本质上讲,它们是可能的,因为攻击者可以猜测 DNS 消息事务 ID,因为它只是一个 16 位整数。即使整数是随机的,仍然有可能在短时间内一连串的 DNS 数据包恰好匹配 2^16 个数据包中的一个 window.
因此,第二个安全措施是端口随机化。如果 UDP 源端口是随机的,攻击者将不得不在短时间内猜测 源端口 和 事务 ID window,这通常是不可行的。但是我看到老版本的DNS软件比如BIND 9之前的版本没有进行端口随机化,因此很容易受到攻击。
这让我想到了一个问题:当一个 [=没有事先调用 bind
就使用了 10=]?我认为这就是临时端口的全部想法。为什么应用程序(如 BIND)必须特意执行端口随机化?
我的理解是,本质上,像 Linux 这样的 OS 将有一系列的临时端口可供每个进程使用。进程可以调用 bind()
将 UDP 套接字绑定到特定端口。但是如果在没有先调用 bind
的情况下使用 UDP 套接字(即调用 send
),OS 将延迟分配一个随机的临时端口给套接字。那么,为什么旧版本的 BIND 没有自动执行端口随机化?
This brings me to the question: don't most UNIX OS's like Linux and BSD automatically assign random ports when a SOCK_DGRAM is used without a prior call to bind? I thought that was the whole idea with ephemeral ports.
临时端口的主要思想不是以安全的方式随机,而是快速选择一些未使用的端口。不同的 OS 使用不同的策略,有些有点随机,有些使用更强的随机生成器,有些甚至以顺序方式分配端口。 这意味着并非所有 OS 临时端口都无法预测以用于 DNS。
有关更多详细信息,我建议您研究 RFC 6506 "Port Randomization Recommendations" and the overview about port selection strategies at https://www.cymru.com/jtk/misc/ephemeralports.html。