V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
black11black
V2EX  ›  问与答

一个网络安全方面的问题, NAT 映射有没有可能被劫持?

  •  
  •   black11black · 2020-11-24 17:12:52 +08:00 · 1790 次点击
    这是一个创建于 1460 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,纯粹好奇,问一个小白问题。

    一般我们认为如果把机器放在一个子网络中,是比把 IP 直接暴露在公网安全的,因为外部没有办法主动连接内部网络中的某台机器。

    那么有没有办法通过劫持实现某种映射呢?比如如果我是黑客的话,我伪造一个封包说我是来自于 xxx 的,要发送给你们网络内部的 10.10.10.10 ,请帮我转发,有办法这样攻入一个系统吗?

    11 条回复    2020-11-25 09:09:22 +08:00
    dbw9580
        1
    dbw9580  
       2020-11-24 17:52:14 +08:00 via Android
    可以的,请直拨分机号
    whywhywhy
        2
    whywhywhy  
       2020-11-24 18:09:40 +08:00
    这个技术层面是可以的,但是
    1.你要与对方路由器同一个广播域,对方路由器就会收到你这个请求,
    2.对方的“防火墙”或路由器允许你访问内网。

    所以基本上你都听不懂,问了也白问,回答了也白回答。

    第一个条件你满足不了,第二个条件反而还真的有企业是允许的(有些二货网管把三层交换机当路由器用,却偷懒不限制访问)
    totoro625
        3
    totoro625  
       2020-11-24 18:10:48 +08:00   ❤️ 1
    设定为 1 对 1,那台机器是不会相应非正常请求的,除非是没有限制,或者程序本身就有 bug ;视 bug 严重程度而定
    设定为 1 对多,可能它本身就是用来转发请求的,自然就可以访问内网全部的机器;视该端口权限而定

    --------
    分享一个小故事:(端口小明、小敏、小周)
    我是端口小明,主人叫我看大门,我被设定成只能回答 ABCD,有一天一个神明路过看到了我,问我叫什么名字。我知道我叫小明,但是我回答不了他,纵使他是我信仰的神明,因为我被设定成只能回答 ABCD 。我可以选择不回答他,也可以回答他 ABCD,也可以抛出一个错误,然后装死。我家的大门坚不可摧;

    我是端口小敏,主人叫我看大门,我被设定成只能回答 ABCD,主人本来想叫小明来看大门的,结果嘴糊叫了我“小敏”。我和小明不同,但是名字差不多,我有一个漏洞,那就是当有人问 999 次我的名字的时候我会告诉别人大门的密码,有一天一个神明路过看到了我,问我叫什么名字。我知道我叫小敏,但是我回答不了他,纵使他是我信仰的神明,因为我被设定成只能回答 ABCD 。我可以选择不回答他,也可以回答他 ABCD,也可以抛出一个错误,然后装死。但是这个神明有点奇怪,他坚信世界上没有攻不破的系统,他试过无数种办法也没有攻破我家的大门,但是最终,他问了 999 次我叫什么名字,然后我告诉了他我家的大门密码,攻无不破的系统就此被入侵了。

    我是端口小周,主人叫我看大门,我被设定成传话筒,有一天一个神明看到我,问我叫什么名字。由于没有指定对象,我按照主人预设的方案,向屋内的人复读“你叫什么名字”,房子里的大小姐听到了,说我叫小九,我复读“我叫小九”。神明以为我就是小九,但我知道我不是,我是小周,我只是个传话筒。试探了我无数次之后神明终于发现我是一个传话筒的事实,神明很高兴,因为他在 github 上听说了小敏的漏洞,神明想试一下能不能攻破这个系统,让我传话给小明,对我说了 999 次我叫什么名字,小明没有说出大门的密码。可惜这个神明有点嘴糊,他想找的其实是小敏,我知道,但我没法告诉他,因为我被设定成一个传话筒,只能传话,不能说话。我家的大门坚不可摧。

    我是端口小周,主人还叫我看大门,我被设定成传话筒,又有个神明看到了我,他听说了我是一个传话筒,他也在 github 上听说了小敏的漏洞,神明想试一下能不能攻破这个系统,让我传话给小敏,对我说了 999 次我叫什么名字,小敏告诉了他我家的大门密码,攻无不破的系统就此被入侵了。

    我还是端口小周,主人还叫我看大门,我被设定成传话筒,但是这次我被设定了限制,只能传话给小明,不能传话给小敏。我是传话筒、小敏是傻子,只要问了 999 次我叫什么名字,就能得到我家的大门密码的消息被传的满世界都是,甚至我家大门上都贴着一条这样的小广告,无数的神明蜂拥而至,纷纷问我叫什么名字,但是我被设下限制,不能再向小敏传话。我家的大门坚不可摧。
    dbw9580
        4
    dbw9580  
       2020-11-24 18:21:40 +08:00
    >可以的,请直拨分机号
    下面说正经的

    >因为外部没有办法主动连接内部网络中的某台机器。
    其实单独 NAT 本身并不能保证这件事情,而是需要有相应的防火墙规则配合,而且绝大多数路由器都这么配置了,才给人这样的错觉,只要 NAT 了就能防止外部主动连接内部的机器。

    例如,iptables 里只在 nat 表里配置了 NAT 规则,而 filter 表里 FORWARD 链默认是 ACCEPT,也没有任何规则 DROP 目的地址是非外部网卡地址的包,那么如果有个攻击者在路由器外侧网卡的链路上,它可以指定数据包的目的地址是内网中的任意一台机器的地址,发给路由器,路由器就会转发。

    这个攻击场景局限于攻击者需要在路由器外侧网卡的链路上,条件比较苛刻,所以一般难有巨大的风险,所以常常被人忽视了。而且这不是通过劫持 NAT 映射表实现的攻击,是路由器的防火墙没有配置好留下的漏洞。

    至于有没有其他符合楼主说的可以劫持 NAT 映射表的攻击手段,我就不知道了。
    noe132
        5
    noe132  
       2020-11-24 18:48:59 +08:00 via Android
    dnat 一般是 sip sport dip dport4 个参数绑定的,并且是由内部主动建立的。如果不是 mitm,是无法强行往
    Aliencn
        6
    Aliencn  
       2020-11-24 18:52:56 +08:00
    建议楼主看一下 udp 打洞的过程,就能明白如果黑客要访问内部设备,内部要先发起一个连接才行。

    然后再看一下 UPnP 的原理以及爆出来的安全漏洞,利用 UPnP 的 NAT 穿透还是可以从外部攻入内部系统的。
    black11black
        7
    black11black  
    OP
       2020-11-24 21:28:25 +08:00
    @Aliencn 我目前在用 frp 工具,我比较好奇他有没有办法实现主动连入,正常情况下应该是不行,我好奇如果能劫持通讯链中的某个点做些修改封包的操作不知道能不能实现。
    updateing
        8
    updateing  
       2020-11-24 21:32:22 +08:00 via Android
    NAT Slipstreaming 可能算是一个攻破 NAT 的方式吧,不过也是要客户端稍微配合一下的,不是直接攻正门的方式。见 https://samy.pl/slipstream/
    cigarzh
        9
    cigarzh  
       2020-11-24 22:01:21 +08:00
    你知道从 full cone nat 到 symmetric nat 都有啥区别吗
    FreeEx
        10
    FreeEx  
       2020-11-24 23:49:25 +08:00 via iPhone
    想法很好,但是做不到的。
    第一点:二层网络通信需要双方在同一个子网内。
    第二点:三层网络通信需要路由转发(包含 SNAT 和 DNAT )。
    假设你有两个网卡
    外部网络 eth0 192.168.1.10 ,内部网络 eth1 10.1.1.10 ,DNAT 规则把另一台内网机器 10.1.1.99 的 80 端口映射到了 192.168.1.10 的 80 端口。
    我有一台 192.168.1.20 的机器,伪造了 10.1.1.88 到 10.1.1.10 的数据报文硬是发到了你的 eth0 网卡,你猜 eth0 会不会处理这个报文?
    iceheart
        11
    iceheart  
       2020-11-25 09:09:22 +08:00 via Android
    如果能实现,那一定是个大 bug 。结果是要么这个 bug 被修复,要么这个系统被抛弃。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   926 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 21:19 · PVG 05:19 · LAX 13:19 · JFK 16:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.