一次用户端DNS劫持引发的DNS安全研究

我们的互联网协议存在需要修复的缺陷。但是,对于提供运行互联网的核心服务的东西,即 DNS(域名服务),“刚刚好”的安全性是否足够?最大的威胁之一是 DNS 缓存中毒,恶意主机可以为网络的其余部分播下错误的域名。DNSSEC 通过建立一个受保护的区域来克服这个问题,在该区域中,所有响应都经过数字签名。然后,DNS 解析可以检查 DNS 信息是否已由其中一个受信任的主机签名。

缓慢的协议

对于 IPv4,我们已经用完了 IP 地址,需要迁移到 IPv6。但行业会大规模迁移吗?答案通常是“不会”,因为公司通常不想破坏其现有的 IPv4 网络。基本上,NAT(网络地址转换)已经解决了这个问题,有超过 300 亿台设备连接到互联网,但只使用了大约 30 亿个地址。而且,与 IPv6 一样,DNSSEC 协议从未真正流行起来。为什么?因为 SSL/TLS 协议提供了一定程度的安全性,因为我们可以使用 PKI(公钥基础设施)来验证我们连接的名称服务器。使用 DNSSEC,我们可以对记录进行数字签名,从而为我们的查找提供集成信任。

搞垮互联网

您是否知道,整个互联网可能瞬间崩溃……仅仅因为一个协议?……DNS。由于我们非常依赖 DNS 服务器来解析 IP 地址,针对核心 DNS 基础设施的大规模分布式拒绝服务 (DDoS) 攻击将使大部分互联网瘫痪。如果核心基础设施出现故障,其余基础设施将崩溃。而且,我们的 DNS 基础设施随时可能被恶意利用。

DNS 是一种糟糕的协议。它依赖于一个 DNS 服务器告诉其他 DNS 服务器域名的 IP 解析是什么。但是您可以信任谁来播种呢?好吧,域名的主要权威机构。我们不必整合主要权威机构,因为域名上的信息将通过互联网传播。那么,如果恶意实体看到错误的 IP 地址会发生什么?假设一个民族国家 — MegaTropolis — 想要接管一个小国 — MiniTropolis。好吧,他们的第一个重点可能是毒害世界各地的 DNS 缓存,以便所有 MiniTopolis 域都指向 MegaTropolis 网站。

域名系统安全扩展DNSSEC )

DNS 的问题在于它几乎没有内置任何真正的安全性,伪造的 DNS 系统很容易被设置并将用户重定向到错误的站点。但有一个解决方案……域名系统安全扩展DNSSEC )。它提供 DNS 数据的来源认证以及数据完整性。它不会阻止某人查看请求和回复中的数据。与 DNS 相关的问题已经为人所知一段时间了 [此处]:

这些威胁包括:数据包拦截;ID 猜测和查询预测;名称链;受信任服务器的背叛;拒绝服务;经过身份验证的域名拒绝;以及通配符。最大的威胁之一是 DNS 缓存中毒,恶意主机可以为网络的其余部分播下错误的域名。DNSSEC 通过建立一个受保护的区域来克服这个问题,在该区域中所有响应都经过数字签名。然后 DNS 解析可以检查 DNS 信息是否已由其中一个受信任的主机签名。

DNS 的工作原理是创建定义 SOA(授权开始)的域记录。然后定义序列号、刷新时间等:

在此,我们可以定义 NS(名称服务器)和 MX(邮件服务器),以及域内定义主机的 IP 地址。我们可以使用 nslookup 来查询条目:

需要注意的是,DNSSEC并不提供数据的机密性,也不能防止拒绝服务攻击。

编码

一些 Go 代码见 [此处]。通过此代码,我们将创建一个 2,048 位 RSA 密钥对(一个公钥和一个私钥),然后使用受信任域的私钥对 SOA 进行签名。然后,其他人可以使用受信任域的公钥检查签名。SOA 条目的创建方式与 DNS 相同,其中包含域名的响应标头和 IP 地址(dns.ClassINET):

序列号在 SOA 上很重要,因为它定义了条目的最新版本。在本例中,签名是使用 RSA 加密的 SHA-256 哈希创建的。我们还为签名添加了一个到期日期。签名由密钥 (key.Hdr.Name) 中定义的实体签名 [此处]:

主导

“crypto”
“crypto/rsa”
“github.com/miekg/dns”
“fmt”
“os”

func main () {
域:= “asecuritysite.com”
argCount:= len(os.Args [ 1:])
如果(argCount> 0){域=字符串(os.Args [ 1 ])}
域=域+ “。”
key := new (dns.DNSKEY)
key.Hdr.Name = 域
key.Hdr.Rrtype = dns.TypeDNSKEY
key.Hdr.Class = dns.ClassINET
key.Hdr.Ttl = 3600
key.Flags = 256
key.Protocol = 3
key.Algorithm = dns.RSASHA256
priv, _ := key.Generate( 2048 )
soa := new (dns.SOA)
soa.Hdr = dns.RR_Header{域, dns.TypeSOA, dns.ClassINET,144000 }
soa.Ns = "ns." +域
soa.Mbox = "邮件." +domain
soa.Serial = 1293945905
soa.Refresh = 14400
soa.Retry = 3600
soa.Expire = 604800
soa.Minttl = 86400
sig := new (dns.RRSIG)
sig.Hdr = dns.RR_Header{domain, dns.TypeRRSIG, dns.ClassINET, 14400 , 0 }
sig.TypeCovered = dns.TypeSOA
sig.Algorithm = dns.RSASHA256
sig.Labels = 2
sig.Expiration = 1562761057
sig.Inception = 1562761057
sig.OrigTtl = soa.Hdr.Ttl
sig.KeyTag = key.KeyTag()
sig.SignerName = key.Hdr.Name
var pr crypto.Signer
pr,_= newSignerFromKey(priv)
if err := sig.Sign(pr, []dns.RR{soa}); err != nil {
fmt.Printf( "签名失败" )
return
}
if err := sig.Verify(key, []dns.RR{soa}); err != nil {
fmt.Printf( "验证失败" )
} else {
fmt.Printf( "签名成功nn" )
}
fmt.Printf( "SOA: %snn" ,soa)
fmt.Printf( "签名:%snn",sig)
fmt.Printf( "密钥:%snn" ,key)

}
type rsaPrivateKey struct {
*rsa.PrivateKey
}
func newSignerFromKey (k interface {}) (crypto.Signer, error ) {
var sshKey crypto.Signer
switch t := k.( type ) {
case *rsa.PrivateKey:
sshKey = &rsaPrivateKey{t}
default :
return nil , fmt.Errorf( "ssh:不支持的密钥类型 %T" , k)
}
return sshKey, nil
}

对“asecuritysite.com.”消息的运行示例为 [此处]:

签名正常
SOA:asecuritysite.com。14400 IN SOA ns.asecuritysite.com。mail.asecuritysite.com。1293945905 14400 3600 604800 86400

签名:asecuritysite.com。14400 IN RRSIG SOA 8 2 14400 20190710121737 20190710121737 42450 asecuritysite.com。NqFhFsl
EHFtETdO1cWFKhMyWydiTDpGkWKQggzgbzVGa9COBQDrFS+NRsVEQEpIee3EMJ/hY6RXpmo75ZxWO7OO4FfIBbl2qgZctewmutFy+HT4GUFA3dJp9rzfr2Jn
0lnCCOkLIW33zHgXgSXmKJobWXPsHTPQoUogjdxmPzbzWFd6S1XXPep4klyi1hbcM9uvnABtFGw5tb/rd7hs6B/hS9spoO5MHZqDczmAKEoW1XKht12G97Qc
Qz3nyyGlRScntbHNXk3xaD3Xzevu9SWhZ4Ro2xFvIWxdFkLWCv2wZkcwHIG9q7zFE5HglZhip+q8EKzfZV1PQn8AOVf16dA==

密钥:asecuritysite.com。3600 输入 DNSKEY 256 3 8 AwEAAdcn7cvHVXBvDQVsh6ge+JHZWTCn4WarBbWzQ1TGKMpk/pT9L386Q2ZU1fvynYdp
eqQi4PKbRpavycjqMFBtJvg9qhHpXq25iSpdx1+aNHL8zyvx/eFFTAWHA8qN3uQuVKc5mm+KQ498poWd1dnYBNHRcNGgZA8epNsq+WSoLzRISIxgiFDs6j+k
ryO4ivj7n8dLOqqcv9C/tQl/7YhU4y3lHSek9FqFOCpYK4DzQb+jJuLKNWjAPobWF19JkrvcN0KeDZ2TZEeApz3UGtjsRMowH4AJ48yKyaT2vnmE52MwIiC1
/yHLtQJK77CMgow3BejXO2T9uytp+rTQyZk8Ens=

结论

互联网就像一艘巨大的木材船,需要一段时间才能转向。它一直在努力适应 IPv6 等重大变化,但它的核心存在一个重大缺陷……DNS。虽然 DNSSEC 解决了它的一些弱点,但它并不能阻止人们监视您的访问,而且 DNS 基础设施可能会受到 DDoS 攻击。

目前,DNSSEC 并未如预期般流行,而 SSL/TLS 则填补了安全漏洞。但对提供 DNS 的受信任域的攻击可能会给互联网带来严重问题。 

原创文章,作者:速盾高防cdn,如若转载,请注明出处:https://www.sudun.com/ask/78444.html

(0)
速盾高防cdn的头像速盾高防cdn
上一篇 2024年5月29日
下一篇 2024年5月29日

相关推荐

  • CMS模板网,cms模板不存在

    在网站建设和设计行业中,——cms模板是一个重要的概念。那是什么?它有哪些特点和优点?如何选择适合我的CMS模板? cms模板有哪些常见类型及其特点,如果您对这些问题感兴趣,请继续…

    行业资讯 2024年3月31日
    0
  • 如何进行运城网站推广

    如果你是一个网络行业的从业者,那么你一定知道运城网站推广对于企业发展的重要性。但是,如何进行运城网站推广却是一个需要深入探讨的话题。今天,我将为你介绍如何制定目标与策略、关键步骤以…

    行业资讯 2024年4月15日
    0
  • 手机很多网站都被屏蔽了,手机网站被拦截怎么解除

    在某些情况下,移动阻止问题可能是由不正确的服务器设置引起的。您可以联系您的服务器提供商检查是否存在此类问题,并帮助您及时修复。 5.询问搜索引擎 如果您发现您的移动网站在移动设备上…

    行业资讯 2024年5月13日
    0
  • 服务器使用什么防御最有效?

    在当今数字化时代,网络安全问题已经成为各行各业必须面对的挑战。特别是在服务器使用方面,如何有效防御不断增长的安全威胁已经成为了网络安全加速行业的重要议题。随着技术的不断发展,服务器…

    行业资讯 2024年4月4日
    0

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注