DNS rebinding attack
Opened this issue · 0 comments
manxingxing commented
是什么?
是一种利用DNS进行的攻击。它诱使受害者访问恶意网页,在客户端执行javascript脚本,攻击受害者网络上的其他计算机/服务。它可绕过同源策略,也可绕过内网防火墙。
怎么实施?
攻击者注册一个域名,并掌控一个 DNS 服务器。通过给该域名设置非常短的 ttl (time to live),令 DNS 解析该域名时会指向变动的 IP地址。
- 诱使受害者访问恶意域名下的网址
- 在初次访问时,DNS 服务解析域名到恶意网页所在的 IP 地址
- 在恶意网页上运行有恶意脚本,扫描用户内网可能存在隐患的服务或设备
- 一旦发现可攻击的目标服务或设备,恶意脚本向恶意域名发送攻击请求
- 受控的 DNS 服务将恶意域名解析到目标服务或设备的 IP 地址,由于请求的源域名和目的域名相同,所以不会被同源策略拦截
- 攻击请求被成功发到目标服务服务或设备
目标服务为何能接受攻击请求
一般来说,web 服务器根据请求的 HOST 请求头来判断请求转发给那个虚拟主机服务(virtual host)。攻击请求的 Host 请求头一般是恶意域名,而不是目标服务的域名,那为何请求能成功到达目标服务呢?
对 nginx 来说,会存在一个默认的虚拟主机。当请求的 Host 请求头与所有的虚拟主机的 server_name 都不匹配时,就会将请求转发给这个默认的虚拟主机。于是恶意请求就被转发到这个默认的虚拟主机服务。
这种攻击容易实施吗
存在一些检测 DNS 重绑定漏洞服务的工具,它们本身就能发动这种攻击。例如 https://github.com/nccgroup/singularity
如何防范
最简单的方法就是检查请求的 Host 请求头。如果和预期不符,拒接请求即可
Rails 和 HostAuthorization
Rails 6 自带了一个 HostAuthorization
的 middleware,会检测 Host 请求头,拒绝不合法的请求