清华大学和加州大学的研究人员在DNS系统中发现新弱点可进行投毒
DNS即域名解析系统,我们的互联网生活在底层完全依赖DNS这类关键的基础设施,当然尽管DNS系统非常重要但难免也会被发现漏洞。在2008年时DNS使用的缓存系统存在弱点可以进行投毒,即用户查询某个域名时范围攻击者控制的IP地址。
攻击者借助这种方式就可以实现对特定域名的劫持,例如将用户引导到钓鱼网站上盗取用户的账号和密码等。后来维护者们对DNS系统进行修复并采用随机端口号,而不是我们常规认知中DNS使用的就肯定是53端口号。随机端口号有助于缓解此类攻击,让攻击者不容易猜到端口号并获得DNS提供的原始事务ID。
不过清华大学和美国加州大学以及安全公司奇安信的研究人员发现可以通过侧信道攻击来推断DNS使用的端口,当获得正确的端口后又可以使用此前的缓存投毒,这样就可以达到劫持网站返回错误IP的目的。
研究人员表示不论是Windows还是Linux还是macOS系统的内核目前都存在弱点,以Linux为例:为节省带宽Linux内置的速率限制器将传入的请求设置为1000个每秒,同时还使用计数器来追踪这些请求。如果这1000个端口都不是DNS正确使用的端口则会返回无效访问。有趣的是对在有效开放端口收到的每个请求计数器都不会进行递减,服务器也不会返回错误,这意味着黑客可以通过每秒发送1000个数据包的形式去往随机端口里丢数据猜测正确的端口。
从1000个端口里找到正确的端口还是比较简单的,有正确的端口就能利用此前的漏洞进行投毒。安全业界建议Linux将DNS速率请求限制器进行最大值的随机化(理论上说也是65536),这样攻击者很难快速推测出来正确的端口。
Linux已经在2020年10月16日将自动随机化速率限制的改进合并到内核中,当然这肯定也需要很长时间才能让所有Linux设备都换上新内核。Windows和macOS暂时还没有对该问题进行修复,不知道微软和苹果准备在什么时候进行修复。
附论文地址:DNS Cache Poisoning Attack Reloaded: Revolutions with Side Channels