在我看来,应该可以伪造 DNS 回复,因此它不包含任何请求的 DS/RRSIG/... 部分,从而绕过解析域的 DNSSEC 验证。
DNSSEC 系统对这种攻击免疫吗?
Unbound 与本地存储的 DLV 和 ROOT 锚文件有什么不同吗?
在我看来,应该可以伪造 DNS 回复,因此它不包含任何请求的 DS/RRSIG/... 部分,从而绕过解析域的 DNSSEC 验证。
DNSSEC 系统对这种攻击免疫吗?
Unbound 与本地存储的 DLV 和 ROOT 锚文件有什么不同吗?
是的,DNSSEC 对这种攻击免疫。从锚点(通常是根,有时是 DLV)开始,每个委托要么是明确安全的(在委托上设置 DS):
powerdns.com. 172800 IN NS powerdnssec1.ds9a.nl.
powerdns.com. 172800 IN NS powerdnssec2.ds9a.nl.
powerdns.com. 86400 IN DS 44030 8 3 7DD75AE1565051F9563CF8DF976AC99CDCA51E3463019C81BD2BB083 82F3854E
powerdns.com. 86400 IN DS 44030 8 2 D4C3D5552B8679FAEEBC317E5F048B614B2E5F607DC57F1553182D49 AB2179F7
powerdns.com. 86400 IN DS 44030 8 1 B763646757DF621DD1204AD3BFA0675B49BE3279
或显式不安全(NSEC[3] 位图证明在委派时没有 DS):
gov-1l.us. 7200 IN NS HNS1.BEYONDHOSTING.NET.
gov-1l.us. 7200 IN NS HNS2.BEYONDHOSTING.NET.
gov-1l.us. 86400 IN NSEC GOV-ABUSE.us. NS RRSIG NSEC
或隐含不安全(NSEC3 选择退出):
stackexchange.com. 172800 IN NS brad.ns.cloudflare.com.
stackexchange.com. 172800 IN NS roxy.ns.cloudflare.com.
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0QFMDQRCSRU0651QLVA1JQB21IF7UR NS SOA RRSIG DNSKEY NSEC3PARAM
4OTDAP6T1E8VS8BHMCK8CDHSGE3GCOBM.com. 86400 IN NSEC3 1 1 0 - 4OTJJUP7OGM6C149HPOE7O9M1L9LS1OP NS DS RRSIG
(第二次拒绝覆盖的stackexchange.com哈希值4otjehvpu9q5tm1d5v0ec302rcbll9um,因此没有安全委托)。
在所有这些情况下,如果存在安全授权,则相关名称的 NSEC[3] 记录将证明 DS 的存在。因此,如果签名被剥离,验证客户端可以检测到这一点。
为了进一步阅读,我强烈推荐RFC7129: Authenticated Denial of Existence in DNS和RFC4035 的第 5.2 节(Authenticating Referrals)(DNS 安全扩展的协议修改)