在对 DNS 服务器进行 DNS 放大攻击期间,我发现一些 DNS 请求对于几个 IP/端口有类似的东西104.49.96.196:80
。我知道这是欺骗 IP,但可以考虑过滤 DNS 请求的端口吗?我认为我们不应该期望端口 > 1023。这是一个安全的假设吗?在这种情况下,我相信这是一个很容易发现的胜利,并且不会回复 DNS 放大攻击(如果数据包到达 DNS 服务器并且没有被 WAF 丢弃)。
答案1
不,这不是一个安全的假设。不要尝试过滤端口,这不会产生有用的结果。客户端如何处理其本地端口是它自己的事,因此作为服务器,您可以期望从所有端口获取流量。Unix 在 1024 处拆分是过去的古老遗产,基本上今天不再有任何意义。
如果您想对抗 DNS 放大,除了“标准”措施(例如确保您确实需要处理收到的所有流量,即您不会完全开放)之外,当今最常用的方法之一就是 RRL 或基本上是速率限制。
看着https://www.infoblox.com/dns-security-resource-center/dns-security-solutions/dns-security-solutions-response-rate-limiting-rrl/有关该主题的介绍,以及https://www.isc.org/docs/DNS-RRL-LISA14.pdf进行更具技术性的演示。
答案2
DNS 客户端的源端口应 > 1023。
如果它小于 1024,则如果它来自其他 DNS 服务器,它应该是源端口 53 - 但这种情况不太可能。
验证tcpdump port 53
通过观察RFC6056和使用一些示例进行简化我们还可以进一步说,任何运行良好的 IP 堆栈都不应该有低于 49152(第一个临时端口)的源端口。然而,第 3.2 节与此相矛盾,样本也是如此。
但是,除非有人能够提供重新定义 RFC6056 的 RFC 参考,否则可以肯定地说 sport <= 1023 是无效的。
如果由于某种原因请求失败,客户端应该重试,并希望获得成功的请求。(即使这会失败,我也会忽略这些实现)