作为 DOOS 攻击(基本上是无效的)的一部分,我目前看到以下形式的日志消息:
<DATE> client <EXTERNAL-IP>#3074 (<NAME>): query: <SAME-NAME> IN RRSIG + (<ONE-OF-MY-IPs>)
我读了 DNS 日志后发现,这是一个来自 < EXTERNAL-IP > 的查询,结果将发送到 < ONE-OF-MY-IPs >。对吗?
我们正在运行较旧的 BIND,很快就会升级,但我希望了解这个查询实际上在做什么(发送了许多查询)。
编辑:此外,想知道他们如何构建它以将结果发送到另一个 IP。
答案1
BIND 查询日志格式
您是否关注过 Alan Clegg 的 (ISC)关于 BIND 日志的幻灯片第 16 页指出错误地:
发送响应的地址(括号中)
BIND 9 管理员参考手册告诉我们,它实际上是询问已发送,即您的 DNS 服务器的 IP 地址。手册结构不是最容易阅读或参考的,因此这里是相关文档的完整路径:
- 从参考手册版本 9.14.11 开始,
- 第 5 章 BIND 9 配置参考,
- 配置文件语法,
logging
语句定义和用法,- 词组
category
,queries
- 词组
- 配置文件语法,
- 第 5 章 BIND 9 配置参考,
更清晰的格式和重点是我的:
- 查询日志条目首先以
@0x<hexadecimal-number>
格式报告客户端对象标识符。- 接下来,它会报告客户端的 IP 地址和端口号,并且
- 查询名称、类别和类型。
- 接下来,它报道
- 是否设置了“所需递归”标志(
+
如果已设置,-
则未设置),- 查询是否已签名(
S
),- 是否使用 EDNS 以及 EDNS 版本号(
E(#)
),- 是否使用了 TCP(
T
),- 是否设置了 DO (DNSSEC Ok)(
D
),- 是否设置了 CD(检查已禁用)(
C
),- 是否收到了有效的 DNS 服务器 COOKIE (
V
),以及- 是否存在没有有效服务器 COOKIE 的 DNS COOKIE 选项(
K
)。
- 此后,将报告发送查询的目标地址。
- 最后,如果客户端查询中存在任何 CLIENT-SUBNET 选项,则它将包含在格式的方括号中
[ECS address/source/scope]
。
因此:
info: client @0xf00 203.0.113.88#3074 (example.com): query: example.com IN RRSIG + (192.0.2.1)
203.0.113.88#3074
是客户端的 IP 地址和端口example.com
是查询名称、IN
类和RRSIG
类型(RFC 4034,3)+
告诉客户请求递归192.0.2.1
是发送查询的 DNS 服务器的 IP 地址
DNS 放大攻击及其缓解方法
此日志条目中没有 DDoS 攻击的迹象本身,并将响应发送回客户端203.0.113.88#3074
。如果客户端 IP 地址被欺骗,则放大攻击是关于对查询的响应RRSIG
比原始查询大得多。
...攻击者将 UDP DNS 查询发送到反射解析器,并将查询的源 IP 地址设置为目标(受害者)的地址。反射服务器处理递归查询并将响应发送到他们认为查询来源的 IP 地址。由于来源被欺骗,回复实际上被发送到目标。- -
未请求的 DNS 响应在到达目标机器时会被丢弃,但是当它们完成此操作时,它们已经消耗了网络资源和目标机器的一小部分 CPU 时间。
为了缓解这种情况,请根据您的具体情况:
- 如果这是一个权威性服务器,不允许开放递归。这直接来自 IANA 的权威名称服务器的技术要求:
没有开放递归名称服务
权威名称服务器不得提供递归名称服务。通过在权威机构管辖范围之外发送设置了“RD”位的查询来测试此要求。
如果这是一个递归名称服务器,限制仅允许您自己的网络访问该服务。这可以使用 或 来allow-query
实现allow-recursion
。
allow-recursion
指定允许哪些主机通过此服务器进行递归查询。如果
allow-recursion
未设置,则allow-query-cache
在设置时使用,否则在设置时使用,否则使用allow-query
默认值 ( )。localnets; localhost;
- 您可以使用响应率限制:
为了使 RRL 能够防御此问题,请编辑并向全局选项
named.conf
添加以下子句:rate-limit
options { … rate-limit { responses-per-second 10; }; };
官方文档中对此进行了更详细的解释options
语句定义和用法:响应率限制. 您可以在那里找到
- why and how to use `slip` to truncate responses (done by default with value `2`)
- use `qps-scale` to tighten defenses during attacks.