0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

外部网络可直接访问映射到127.0.0.1 的本地服务

马哥Linux运维 来源:马哥Linux运维 作者:马哥Linux运维 2022-06-30 11:23 次阅读

近日Hacker News 上面有一个贴子[1]火了,这是一封发给 Docker 安全团队的邮件,主要讲的是 Docker 有一个非常离谱的安全隐患。即使你通过像-p 127.0.0.180这样的参数端口暴露到回环地址,外部仍然可以访问该服务,怎么回事呢?

原因其实很简单,Docker 添加了这样一条 Iptables 规则:

→iptables-nvLDOCKER
ChainDOCKER(2references)
pktsbytestargetprotoptinoutsourcedestination
00ACCEPTtcp--!docker0docker00.0.0.0/0172.17.0.2tcpdpt:80

只要外部攻击者通过这台主机将流量发送到172.17.0.2:80,就会匹配这条规则并成功访问容器中的服务,127.0.0.1 并没有什么卵用。

尴尬的是,选择将端口映射到 127.0.0.1 的用户基本上都是觉得这样很安全,以至于他们不再想采取进一步的安全措施。现在问题来了,映射到 127.0.0.1 不能说是非常安全吧,只能说是与安全毫不相干。。。

概念验证

下面通过一个例子来验证。

① 在 A 机器上运行一个 PostgreSQL 容器,并将端口映射到 127.0.0.1。

#IP:192.168.0.100
→dockerrun-ePOSTGRES_PASSWORD=password-p127.0.0.15432postgres

② 同一个局域网中的 B 机器添加路由表,将所有访问172.16.0.0/12的流量指向 A 机器。

#IP:192.168.0.200
→iprouteadd172.16.0.0/12via192.168.0.100

③ 在 B 机器中扫描 A 机器的端口。

→nmap-p5432-Pn--open172.16.0.0/12
StartingNmap7.92(https://nmap.org)at2021-11-0515:00CDT
Nmapscanreportfor172.17.0.2
Hostisup(0.00047slatency).

PORTSTATESERVICE
5432/tcpopenpostgresql

④ 在 B 机器中直接连接 PostgreSQL。

→psql-h172.17.0.2-Upostgres
Passwordforuserpostgres:

解决方案

事实上不仅仅是 127.0.0.1,你将容器端口映射到主机的任何一个地址,外部都可以访问到,这就离了大谱了!

邮件作者给 Docker 团队提出了一个解决方案,希望能优化 Docker 的 iptables 规则:

① 首先要严格限制允许访问容器端口的源地址和网络接口,例如docker run -p 127.0.0.15432iptables 规则如下:

ChainDOCKER(2references)
pktsbytestargetprotoptinoutsourcedestination
00ACCEPTtcp--!docker0docker00.0.0.0/0172.17.0.2tcpdpt:5432

改进后的 iptables 规则如下:

ChainDOCKER(2references)
pktsbytestargetprotoptinoutsourcedestination
00ACCEPTtcp--lodocker0127.0.0.1/8172.17.0.2tcpdpt:5432

同理,如果主机的地址为192.168.0.100,掩码为24,那么docker run -p 192.168.0.1005432的 iptables 规则就应该是:

ChainDOCKER(2references)
pktsbytestargetprotoptinoutsourcedestination
00ACCEPTtcp--eth0docker0192.168.0.0/24172.17.0.2tcpdpt:5432

② 最后要修改默认行为,如果使用-p参数时没有指定任何 IP 地址,就默认映射到 127.0.0.1。

虽然评论区也有很多人给出了添加 iptables 规则来进行限制的方案,但这是不现实的,目前全世界有成千上万的用户在使用-p参数将容器端口映射到 127.0.0.1,攻击者估计早就发现了这个漏洞,我们不能期望用户自己添加 iptables 规则来限制外部访问,最靠谱的方式还是等 Docker 官方修复这个 bug 然后升级吧。

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 端口
    +关注

    关注

    4

    文章

    968

    浏览量

    32091
  • 容器
    +关注

    关注

    0

    文章

    495

    浏览量

    22069
  • Docker
    +关注

    关注

    0

    文章

    472

    浏览量

    11864

原文标题:Docker 暴重大安全漏洞:外部网络可直接访问映射到 127.0.0.1 的本地服务

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何设置内网IP的端口映射到公网

    在现代网络环境中,端口映射(Port Mapping)是一项非常实用的技术,它允许用户将内网设备的服务端口映射到公网,使外网用户可以访问内网中的服务
    的头像 发表于 11-14 14:23 536次阅读

    打破网络边界:P2Link助力实现高效远程访问与内网穿透

    。 内网穿透的必要性与挑战 在现代网络中,大多数设备都在内网中运行,通常通过路由器与互联网连接。NAT的存在使得内网中的设备拥有私有IP地址,无法直接通过外部网络
    发表于 10-31 11:54

    海外HTTP访问指南:畅通无阻的网络之旅

    在数字化时代,互联网已成为我们获取信息、学习新知、娱乐休闲的重要渠道。然而,由于地域限 制、网络封 锁等原因,有时我们难以直接访问到某些海外的网站或服务
    的头像 发表于 10-21 18:17 374次阅读

    外部端口和内部端口是什么意思

    。这些端口用于接收来自外部网络的连接请求。在家庭或企业网络中,外部端口通常由路由器或防火墙管理,它们可以被配置为允许或拒绝来自特定IP地址或服务
    的头像 发表于 10-17 10:50 856次阅读

    远程桌面内网穿透是什么?有什么作用?

    的计算机或服务。内网穿透适合什么人?1、远程办公人员:当公司内部的办公网络无法直接访问时,远程办公人员需要通过内网穿透技术从外部访问公司内部
    的头像 发表于 09-13 08:10 410次阅读
    远程桌面内网穿透是什么?有什么作用?

    细数那些令人瞩目的内网穿透工具

    。本文旨在概述几种常用的内网映射工具及其实现方法,以便读者能够根据自身需求灵活选择和应用。 端口映射的重要性 当本地服务器或设备部署在私有网络
    的头像 发表于 08-14 15:45 368次阅读
    细数那些令人瞩目的内网穿透工具

    STM32G473VET的内部DAC3 DAC4的四个通道如何映射到作为外部输出到单片机管脚?

    你好,请问STM32G473VET的内部DAC3 DAC4 的四个通道如何映射到作为外部输出到单片机管脚,我需要通过什么样的方式接到哪些可选的管脚作为输出,请列出。谢谢!
    发表于 07-04 07:13

    路由器映射是什么意思?路由器端口映射怎么设置?

    有一个Web服务器在您的家庭网络中运行,您可以使用路由器映射将其公开到互联网上。这样,任何人都可以从互联网上访问该Web服务器。 路由器端口
    的头像 发表于 05-10 13:42 1375次阅读

    在STM32F407官方LWIP例程中,怎样修改把需要发送的数据直接由应用层映射到数据链路层?

    STM32F407 以太网DMA数据发送问题,最近在做一个关于电网IEC61850通信项目,其中9-2SV协议要求应用层数据直接映射到数据链路层,不需经表示层、会话层、传输层、网络层;在
    发表于 04-29 06:21

    STM32F4能否实现用重映射功能将dcmi映射到别的io口?

    能否实现用重映射功能将dcmi映射到别的io口
    发表于 03-25 08:07

    TC275 ADC通道引脚如何映射到复用引脚上去,函数上怎么配置?

    TC275 ADC通道引脚如何映射到复用引脚上去,函数上怎么配置?
    发表于 02-19 07:46

    CysecureTools如何直接访问外部存储设备内的密钥呢?

    显然不符合安全标准。 那么,如标题所示,CysecureTools应该如何直接访问外部存储设备内的密钥呢?\"
    发表于 01-31 08:08

    TC33X将dCache映射到RAM会导致存储总线错误是为什么?如何解决?

    我尝试通过以下(简化的)顺序使用 TC33X 将数据缓存映射到 RAM 区域: CPU_DCON0 = 2 MTU_CLC = 0 MTU_MEMMAP |= 1 在软件闪烁且调试器保持连接
    发表于 01-25 06:23

    如何将共享代码映射到DSPR5以及将其映射到其他RAM区域?

    Scratch-Pad Sram(CPU5 DSPR)相关联。 在链接器脚本中,我已经映射了每个.text 部分移至其各自的 PSPR 内核。 我想知道如何将共享代码映射到 DSPR5 以及如何将其映射到其他 RAM 区域。
    发表于 01-24 07:26

    如何通过WebDAV服务访问NAS

    WebDAV是 HTTP 协议的扩展,可让用户管理存储在远程服务器上的文件,可以使用用户名和密码来进行访问,同时直接拷贝,编辑或删除共享空间内的文件。启用WebDAV 服务器后,可使用
    的头像 发表于 01-16 15:30 1087次阅读
    如何通过WebDAV<b class='flag-5'>服务</b>器<b class='flag-5'>访问</b>NAS