区文件传送是主名称服务器把整个区的数据复制给备用服务器的机制。它本身是正常操作,但如果没限制来源,任何人一条命令就能把整个区的记录拉走,包括从没公开过的内部主机名。
域名的解析数据集中放在区文件里,里面是这个域下的全部记录:地址、邮件、子域名、服务记录。第 26 期介绍过权威名称服务器,同一份数据通常要放在不止一台上——一台主服务器负责写,几台备用服务器跟着同步,同步靠的就是区文件传送。
传送分两种:一种把整个区重发一遍,叫全量传送;一种只发上次同步之后变动的那几条,叫增量传送。备用服务器启动时、或者发现手里的数据过期时,向主服务器发起传送请求,主服务器把数据传过去。整套动作只需要一条查询。
问题就出在这条查询上。传送请求没有身份验证,靠的是服务器自己配一份允许名单:只有名单里的地址能拉。配置漏了或者默认放开,情况就变成谁都能拉——查出这个域名有哪些名称服务器,挨个试一次,整个区就到手了。
拿到区文件意味着什么?不用爆破、不用扫描,攻击者直接得到一份完整清单:内部使用的主机名、还没上线的测试环境、指向内网的地址、邮件服务器,以及哪些子域名挂在哪个云平台上。后续攻击里这些都是省工夫的信息——哪个入口看着最薄弱,清单上写得清清楚楚。
一个常被忽略的地方是委托出去的子区。主域名的区文件锁得好好的,早年某个项目委托出去的子区可能还开着,配置归另一拨人管,谁也想不到去检查。
检查的方法很简单:从外网对每个名称服务器各发一次传送请求,正常的回应是拒绝;如果回来的是一串记录,就是漏了。修法也简单:配上允许名单,只让自己的备用服务器能拉。