今天是实验室期末总结的第一天, 有同学讲到了IPv6安全问题, 我突然想起测试一下家庭宽带的IPv6现在还能不能伪造源地址, 我一直以为是不能的。
测试使用scapy来发包, 脚本如下:
pkt = IPv6(src='伪造的源地址', dst='接收者地址')/UDP(sport=8888, dport=7777)/b'test0123456789ab' pkt.show() send(pkt * 10, iface='网络接口') exit(0)
测试结果为, 北京联通几乎不对源地址做任何验证(部分显然有问题的地址还是会过滤的, 下同), 如下图所示。
其中, 伪造的源地址为2001:4860:4860::8888 (在上图中, 由于开启了反向解析, 显示为dns.google, 是Google IPv6公共DNS的地址), 接收者地址为2604:a880:1:20::1f:7001 (本博客的地址)。伪造的包是从我的家庭宽带发出的。
此外, 我还请福报(foobar)院的有关领导、专家对浙江电信、厦门电信、北京移动以及上海移动分别进行了测试。测试结果表明, 浙江电信允许且只允许源地址和分配的地址在同一个/30子网的包通过, 经过查询IPv6地址库, 有关领导、专家推测电信是在省网部署的源地址验证。厦门电信也是只允许厦门的地址。这与之前某电信员工来我们实验室讨论时说到的情况(即, 电信有源地址验证)部分一致。北京移动和上海移动则与北京联通情况类似, 几乎不验证源地址。
另外, 北京联通的情况, 包括上文中的截图, 我通过大佬和联通有关老板传达到了北京公司负责信息安全的员工那里。过了一段时间, 不知道他们怎么处理的, Google的IPv6公共DNS被全网墙了(今天中午我恰好测试了一下, 是可以访问的, 如下图所示), 然后源地址仍然可以伪造。此处的Google IPv6公共DNS的地址仅仅是被伪造的源地址的一个例子啊, 迷惑。
建议阅读
- Network Ingress Filtering: Defeating Denial of Service Attacks which employ IP Source Address Spoofing. https://tools.ietf.org/html/bcp38.
- A Source Address Validation Architecture (SAVA) Testbed and Deployment Experience. https://tools.ietf.org/html/rfc5210.
- Source Address Validation Improvement (SAVI) Framework. https://tools.ietf.org/html/rfc7039.
去年我做过类似测试,江苏电信没有做限制,山东移动也没有做限制