日经小白问题: IPv6 下直接暴露在公网上,是不是安全方面有隐患?

2021-09-18 23:44:00 +08:00
 acess
以前经常听说 IPv6 地址空间大,所以 IPv4 下 zmap 这种高效扫描工具能不到 1 个小时就扫遍全网这种事情已经不再可能了。

怎么说呢?

我觉得这种说法貌似是有道理,但稍微想想……

有几个人上网从来就没点击过什么奇怪的链接?(虽然有安全意识的人都知道链接不能乱点)
也许一不小心、甚至毫无察觉的情况下(比如劫持、XSS ),就访问了什么奇奇怪怪的网站,然后——对方很显然就直接能知道你的 IPv6 地址了啊。

虽然这样是守株待兔的,只能被动等着你上钩,相比主动扫描影响确实相对小多了,但并不是说就没影响了。

相比而言,如果是 NAT 下的 IPv4,那他获取到的只是 NAT 网关的 IP 地址,并不能直接借助这个地址深入到内网(当然如果是 UPnP 、NAT-PMP 之类映射了那当然还是能访问到内网,不过我想有不少本来就不想暴露在公网的东西,从一开始就并不会支持 UPnP 之类的)。


关于 Windows 防火墙……根据我现在的理解:

貌似 Windows 防火墙是分“区域”的,默认是“公用网络”,比如我连了公共 WiFi 这种,我肯定不希望我的端口直接暴露出去;但有的时候,比如 BT 下载之类的,暴露一下可能也无妨。
如果是我把笔记本背回家了,连的是家里的 WiFi,那么就切换到了“专用网络”。在家里的话,比如 SMB 共享,我希望可以在别的设备上访问,于是很多时候这些端口就是暴露的。

于是问题来了,其实在“专用网络”下,我也不想让我家局域网之外的其他设备访问我的 SMB 共享不是么。

我看了一下 Windows 防火墙高级设置,里面好像也没有限制远端 IP 地址。那么……

如果是 NAT 下的 IPv4,那么“天然”就是只有我局域网里的手机啦、平板啦、第二台电脑啦……只有这些我家里的、自己的设备才能访问我的 SMB 共享。
如果是 IPv6 呢?没有 NAT 了,那我的 SMB 共享岂不就是直接暴露在公网上了么?


(当然也可以吐槽“专用网络”这个分类本身就太过笼统……比如一个学生,在寝室里愿意开放给舍友访问的东西,和放暑假回家后、在家里愿意开放给家里人访问的东西,很可能并不重合……但这其实是另一码事了)


搜了一下,貌似有人说 OpenWrt 默认的防火墙规则,会默认阻止入站连接。但是运营商的光猫什么的就不好说了,貌似一般就是没有 NAT 、也没有这样的防火墙规则。(稍微搜了一下,貌似也有光猫可能有阻止入站的规则?但好像这个甚至都没在 web 界面给出选项,都需要 telnet 上去直接改配置文件,更遑论细粒度地放行某个设备或端口)

( IPv6 的 NAT 是啥情况我也不知道。IPv4 貌似很多时候提到的都是 NAPT,而且即便能打洞大多也是端口限制型锥形 NAT 这种,貌似只要不是刻意打洞就并不怎么暴露。IPv6 据说是“真正的 NAT”,也就是说地址是一一映射的?那么也许 v6 的 NAT 很多时候并不能起到阻挡入站连接的效果了)

(另外其实我还在想一个问题,就是 IPv4 的 NAT 下有 UPnP 、NAT-PMP 之类协议能自动设置端口映射——虽然这些协议好像还是不能解决多层嵌套“级联”的问题……那么 IPv6 呢?如果说都是像(据说) OpenWrt 那样防火墙规则直接默认阻挡入站了,那如果一个 app 想像之前 UPnP 一样“开洞”要怎么办呢?是不是只能弹窗要求用户手动去设置?)


另外其实我还想到一件事,就是 Electrum 这个 BTC 钱包曾经爆过的一个高危漏洞,在浏览器访问恶意网页时,因为 Electrum 钱包在运行时就监听本地端口开了一个 RPC 服务器,可以被浏览器里的恶意网页(比如 JS 代码?)访问,于是就可以直接窃取钱包里的资金或私钥(如果钱包没设密码的话,如果设置了密码也仍然有隐私泄露问题,也就是 BTC 地址可以被得知)。
当时的修正措施是让 Electrum 的 RPC 服务器在响应头里加入一条来禁止 CORS,不过当时就有人说这样修得其实并不算彻底。

一方面可以说,像 Electrum 的这个 RPC 漏洞,就是被动守株待兔的典型,并不是主动去“扫描”,但很显然一样很致命、很严重。

但另一方面其实也可以说,Electrum 已经监听本地回环地址 127.0.0.1 了(如果我没记错的话),于是这反过来可以挑战上文提到的“IPv6 相比 NAT 下的 IPv4 会增加暴露面”这个概念——不说什么 IPv4 还是 IPv6 、是公网 IP 还是内网私有 IP,即便你监听的是本地回环地址又如何,不是照样有可能“暴露”么,虽然这大概因为浏览器环境所以受到一定的限制(大概就是……只能是 HTTP(S)、FTP 之类等浏览器能支持的协议,而且还会受 CORS 限制?)
9924 次点击
所在节点    信息安全
40 条回复
villivateur
2021-09-18 23:49:31 +08:00
我最近也在考虑这个问题,但这个问题显然可以用防火墙解决,不管什么系统都有限制远端地址的功能,直接只允许同网段 ipv6,以及本地 ipv6 地址的连接即可
villivateur
2021-09-18 23:50:25 +08:00
楼主可以再多看看 ipv6 的原理什么的,思而不学则殆
learningman
2021-09-18 23:55:34 +08:00
就算是浏览器不支持的协议,也有可能构造 payload 的
acess
2021-09-18 23:56:06 +08:00
@villivateur 啊,确实,IPv6 也有 link-local 地址……如果 Windows 默认没在规则里填写这个限制,自己去仔细设置一下其实就可以了。
swulling
2021-09-19 01:02:39 +08:00
1. 大部分路由器(已经支持 IPV6 )的情况下,都默认都屏蔽了 IPV6 的传入链接(但可能会允许 Ping,具体看策略),保留传出链接。此时就算给你分配的 IPV6 地址,你可以访问外部的 IPV6 网站,但是外部无法通过你的 IPV6 地址访问你。

2. 那么同时就可以在路由器上配置允许外部 IPV6 连入功能(已 ASUS 为例,叫 IPV6 防火墙)

3. 此外大部分服务只会监听 0.0.0.0,很少监听::

结论:你考虑的事情卖路由器的已经考虑了。
swulling
2021-09-19 01:04:08 +08:00
基本上所有内网的安全标配就是屏蔽 IPV6 传入,这个也没啥困难的,加一个 ACL 就行~
swulling
2021-09-19 01:06:25 +08:00
4. ISP (联通、电信等)也有可能屏蔽部分端口的传入链接,防止你违反建站,如 80 443 等
ysc3839
2021-09-19 01:14:17 +08:00
我上的大学的 IPv6 网络就是禁止外部连入的。
jim9606
2021-09-19 01:27:29 +08:00
严格来说:是的。
例如在 IPv4 下,你一个服务监听 0.0.0.0,你可以认为只有在 NAT 网关后面的局域网主机可以访问你的服务,完全不设防也不用怎么担心被公网扫描器扫到。但如果你监听[::],那你得小心得知你的主机 ID (后 64 位)的扫描器。
不过 Windows 默认还是有防范的,自带的 SMB 等服务默认只开放给本地子网(也就是 /64 相同的源地址)

一刀切禁止传入 IPv6 的问题就等于是放弃 P2P 了,要知道这可是 IPv6 的重大优势。我这边教育网是只开放给教育网,也就是其他高校可以传入。
hs0000t
2021-09-19 01:40:19 +08:00
现在光猫都自带防火墙,默认禁止所有 ipv6 传入
tril
2021-09-19 01:48:16 +08:00
虽然你拿到的是公网 ip,但对你家的路由器上的防火墙来说,你还是内网,路由器会和 ipv4 一样屏蔽所有的入站连接,你需要开放端口到公网的话也需要和 ipv4 的端口转发一样去路由器手动配置,并不会直接开放到公网。这和云服务器的 web 防火墙是类似的。

如果考虑到防火墙设置错误的情况,防火墙允许了所有入站连接,那确实比较危险。nat 下被黑的一般是防火墙本身,linux 被黑没那么容易传染给 windows 设备,公网 ipv6 就直接黑你电脑了。

实在担心,可以考虑回归 nat,反正 ipv6 也有 fd00::/8 供你做内网地址,就是 nat66 的兼容性可能没那么好。

ipv6 也有 upnp 。
crab
2021-09-19 02:41:42 +08:00
家用如果经过路由器只要不开放在 DMZ 区域或者映射端口,不管 ipv4v6 默认不就是在内网,外网怎么扫啊。又不是几十年前电话线 adsl 猫拨号后直接接电脑在公网冲浪。
imdong
2021-09-19 03:07:10 +08:00
如果我没记错,你的每台设备都会被分配至少两个 v6 地址,一个是相对动态的,临时的地址,用于出口,每隔一段时间就会失效。

而同时,还有一个相对固定的地址,主要用于入站。

对于你访问的网站,获取到的是动态地址,这个地址是可以屏蔽所有主动请求的,甚至你可以每分钟,每秒钟,或者每个网站都使用不同的出口 v6 地址。

而对于你的服务,实际应该监听在固定 v6 上,防火墙应该允许到这个地址的部分访问。而这个地址,是不会被主动暴露的,被动扫描的话,那个效率你懂的。
jim9606
2021-09-19 06:02:33 +08:00
@tril 如果环境需要靠 NAT66 来提供安全性,那基本有条件上防火墙。至少目前市面上的路由器都是带防火墙的,有些甚至不能关。
而且好像也没多少路由实现了 UPnP WANIPv6FirewallControl 。
ihipop
2021-09-19 08:24:05 +08:00
正常的路由器 /电信光猫都有默认配置,只允许家庭内部 v6 主动发起对外链接
小白就用正常路由器就行了,爱折腾的朋友为自己的行为负责
delpo
2021-09-19 08:32:00 +08:00
我来说一个其他方面的风险
现在用移动网络也能获取 ipv6 地址了,而运营商的网关一般是没有防火墙阻止入站流量的,那我只要知道某人的 ipv6 地址,就可以无限发数据包,然后他的流量很快就会被耗尽,即使手机本身有防火墙也不能阻止流量的消耗
shynome
2021-09-19 08:43:14 +08:00
@delpo 你怕是不知道 2n**64n 有 22 位,比你的密码还要长,而且移动网络基本只存在 1 小时左右
delpo
2021-09-19 08:57:30 +08:00
@shynome 当然不可能靠猜测得到 ipv6 地址,但是想要获取的话方法还是挺多的
比如说陌生人发给你一个链接,你点了就会被记录 ip
再或者使用语音聊天的时候 webrtc 也很容易暴露 ip
cwbsw
2021-09-19 11:17:57 +08:00
如果说都是像(据说) OpenWrt 那样防火墙规则直接默认阻挡入站了,那如果一个 app 想像之前 UPnP 一样“开洞”要怎么办呢?是不是只能弹窗要求用户手动去设置?)
-------------------------------
不需要。参考 FaceTime,在服务器帮助下节点之间是能够直连的。因为 IPv4 是 NAT+防火墙,而 IPv6 只有防火墙,双方节点在服务器帮助下拿到对方地址和端口后只需同时向对方发包就能在防火墙建立状态。
v2tudnew
2021-09-19 11:31:14 +08:00
三个字:防火墙

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/802867

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX