MS08-020:DNS事务ID的可预测性如何?
今天,我们发布了MS08-020安全更新,以解决DNS客户端解析器中事务ID(TXID)生成算法的一个弱点。TXID是一个16位实体,主要用作DNS服务器/客户端之间的同步机制;实际上,您可以将其视为DNS查询/响应交换的初始序列号(ISN)。因此,TXID本应具有一定程度的随机性且难以预测。如果TXID和主机名都可预测,攻击者可以伪造恶意DNS回复,而DNS客户端解析器会认为这些回复来自合法的DNS服务器。客户端随后将使用欺骗信息连接到(可能)由攻击者控制的IP。
我们想进一步解释这个弱点,以帮助您识别网络上的潜在攻击。请记住,攻击者需要在合法DNS服务器用有效响应回复之前,在欺骗响应中精确匹配请求TXID。我们之前实现的PRNG算法较弱,因此容易受到预测攻击,这为攻击提供了便利。给定先前的连续TID,x_n、x_{n+1}、x_{n+2},攻击者可能能够确定PRNG状态并以高度置信度预测x_{n+3}、x_{n+4}等。旧的TXID生成算法如下(修订后的伪代码以确保技术准确性):
|
|
以下是旧客户端解析器发送的顺序TXID日志。请注意位位置4、5、6、7和8中出现的可预测模式。
如您所见,即使存在此弱点,攻击者也无法精确预测保证的下一个TXID。但这些中间位的有限熵确实大大减少了预测下一个TXID的搜索空间。如果您正在监视网络上的攻击,请继续寻找与先前DNS欺骗攻击相同的模式:针对单个主机客户端查找的数千个不同TXID的DNS“回复”的稳定洪流。
为了解决这个弱点,我们简单地用加密安全的PRNG替换了算法:CryptGenRandom()。您可以在http://msdn2.microsoft.com/en-us/library/aa379942(VS.85).aspx上了解其工作原理。
博客更新 - 4月29日:修订了上述伪代码以确保技术准确性。
- 安全漏洞研究与防御博客作者
发布内容“按原样”提供,不提供任何保证,也不授予任何权利。