WSL2 DNS解析异常
2021年2月24日 星期三
昨晚我在对服务器进行例行补丁更新时遭遇了一场虚惊:出现了疑似DNS篡改的迹象。经调查发现,这并非恶意攻击,而是WSL2(Windows Subsystem for Linux 2)以看似错误的方式处理DNS响应。
背景知识
在标准Linux主机使用dig
命令进行DNS查询时,响应通常包含四个部分:QUESTION(查询问题)、ANSWER(答案)、AUTHORITY(权威记录)和ADDITIONAL(附加记录)。
通过抓包分析可见,正常DNS响应会严格区分这些字段。
WSL2的异常行为
在WSL2环境中执行相同查询时,响应结构出现异常:本应置于ADDITIONAL段的E.ROOT-SERVERS.net.
和G.ROOT-SERVERS.net.
根服务器记录被错误地归类到ANSWER段。
抓包数据显示,WSL2的DNS服务器未按标准格式返回响应,而是将两条附加记录直接混入答案段。
实际问题场景
我在服务器重启后尝试重连SSH时,客户端突然提示检测到新IP地址并要求验证签名——这在单IP服务器环境中本不应发生。由于异常IP属于内网地址,未引发严重警报。
经过多次测试,发现仅当前工作站存在该问题,其他设备均正常连接目标服务器。
根本原因分析
通过dig
命令检查发现,DNS查询返回了多个答案:正确IP和本应属于附加段的IP。由于使用内部DNS服务器,第二个IP指向了本地服务器,这就解释了为何会出现内网IP而非根服务器IP。
SSH客户端按顺序尝试答案段中的IP:首个IP无响应时自动尝试第二个IP,由于该IP运行SSH服务,遂成功连接并触发首次连接的安全验证。
影响与应对
虽然此次事件未造成实际危害,但该异常可能在某些环境中引发严重问题。作者已准备向WSL2 GitHub项目提交问题报告,希望开发团队能修复此行为。
安全考量
理论上该漏洞可能被用于恶意目的,但攻击者需要极高权限才能实现,实际利用价值有限。不过作者仍期待安全研究人员能深入探索其潜在攻击面。