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

    文章

    1107

    浏览量

    34037
  • 容器
    +关注

    关注

    0

    文章

    535

    浏览量

    23023
  • Docker
    +关注

    关注

    0

    文章

    537

    浏览量

    14393

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    开源媒体服务器 Komga本地部署,并实现远程访问

    Komga是一款支持多种格式的数字阅读平台,可本地部署并支持内网穿透实现跨设备访问
    的头像 发表于 02-26 20:53 1025次阅读
    开源媒体<b class='flag-5'>服务</b>器 Komga<b class='flag-5'>本地</b>部署,并实现远程<b class='flag-5'>访问</b>

    Python运行本地Web服务并实现远程访问

    本文介绍使用Python搭建本地Web服务并结合 ZeroNews 实现公网访问
    的头像 发表于 02-06 11:39 310次阅读
    Python运行<b class='flag-5'>本地</b>Web<b class='flag-5'>服务</b>并实现远程<b class='flag-5'>访问</b>

    本地搭建 Clawdbot + ZeroNews 访问

    ClawdBot 是一个本地部署的开源AI助手,支持跨平台,可接入多种通讯工具并执行本地操作,强调隐私与可控性。
    的头像 发表于 02-03 17:51 612次阅读
    <b class='flag-5'>本地</b>搭建 Clawdbot + ZeroNews <b class='flag-5'>访问</b>

    什么是 SASE?| 安全访问服务边缘

    安全访问服务边缘(SASE)是一种整合网络连接与网络安全功能于一个平台的架构。这种架构与传统的企业网络相比,具有显著的差异。SASE架构将
    的头像 发表于 02-02 18:28 463次阅读

    如何安全远程访问Clawdbot?贝锐蒲公英SD-WAN异地组网实战指南

    直接实现Clawdbot(现OpenClaw)本地控制台的远程访问,但传统的远程访问方案往往绕不开公网IP映射或复杂的内网穿
    的头像 发表于 01-30 16:53 1204次阅读
    如何安全远程<b class='flag-5'>访问</b>Clawdbot?贝锐蒲公英SD-WAN异地组网实战指南

    服务器数据恢复—存储映射的卷无法挂载故障,多场景数据完整恢复实操解析

    某品牌服务器存储上有16块FC硬盘,存储设备前面板的10号硬盘指示灯和13号硬盘指示灯亮黄灯,存储设备映射到服务器redhat linux系统上的卷无法挂载,业务中断。
    的头像 发表于 01-22 17:17 641次阅读

    CoolMonitor 监控系统部署及公网访问方案

    现代的界面设计。 功能特点 多种监控类型:支持HTTP/HTTPS网站、API接口、HTTPS证书过期、TCP端口、MySQL/Redis数据库等多种监控 推送监控:支持被动接收客户端的心跳推送,实现不可直接访问设备的监控 精美界面:深色/浅色主题切换,响应式设计适配各种设备尺寸 强大
    的头像 发表于 01-19 14:42 914次阅读
    CoolMonitor 监控系统部署及公网<b class='flag-5'>访问</b>方案

    本地部署微信公众号文章搜索MCP服务并实现远程访问

    本文介绍如何在本地部署基于FastAPI的微信公众号文章搜索MCP服务,并通过内网穿透实现公网访问,支持关键词搜索。
    的头像 发表于 01-12 14:58 1039次阅读
    <b class='flag-5'>本地</b>部署微信公众号文章搜索MCP<b class='flag-5'>服务</b>并实现远程<b class='flag-5'>访问</b>

    本地智能家居系统ESPHome,实现远程访问调试

    ESPHome 是一个开源固件框架,支持通过 YAML 配置实现智能家居自动化,可本地部署并公网访问,便于远程开发。
    的头像 发表于 12-30 14:48 1502次阅读
    <b class='flag-5'>本地</b>智能家居系统ESPHome,实现远程<b class='flag-5'>访问</b>调试

    内网穿透:从原理到实战部署

    本文介绍了内网穿透技术的原理及其应用解决方案。由于NAT网络和动态IP的限制,外部无法直接访问内网设备。内网穿透通过公网中转服务器建立连接通道,实现
    的头像 发表于 11-04 16:57 1555次阅读
    内网穿透:从原理到实战部署

    飞凌嵌入式ElfBoard-常用的网络服务的搭建之NFS服务搭建

    的选择。通过NFS服务,主机将用户指定的目录通过网络共享给目标机(和windows的文件网络共享类似)。目标机可以直接运行存放于Linux主机共享目录下的二进制程序,这样调试程序时十分
    发表于 10-22 09:23

    网络访问卡慢怎么办?

    过程经历了用户本地客户端、客户端到接入服务器之间的网络节点以及服务器。在这三个环节中,任意一个环节出现问题都有可能导致网站访问卡慢。
    的头像 发表于 06-28 14:51 846次阅读

    本地网站秒变公网可访问!开发者必备的内网穿透工具

    效率拉满! 为什么开发者需要这个技能? 远程协作 :前端开发完本地页面,直接分享链接给后端/产品,无需部署到测试服务器 实时预览 :修改代码后刷新公网链接,即时看到效果,告别反复打包部署 准备工作 一台运行
    的头像 发表于 06-19 10:50 827次阅读
    <b class='flag-5'>本地</b>网站秒变公网可<b class='flag-5'>访问</b>!开发者必备的内网穿透工具

    内网穿透和公网ip什么区别

    原理:设备通过路由器获取独立的公网IP地址,直接暴露在互联网中。 典型配置: 向运营商申请固定公网IP(或动态公网IP+DDNS) 在路由器设置端口转发(如将公网IP的80端口映射到内网服务器) 优缺点: ✅ 使用动态IP成本
    的头像 发表于 05-14 14:18 786次阅读
    内网穿透和公网ip什么区别

    新品 | 服务:InfineonSpice 离线仿真工具

    的全套功能。用户可直接访问所有英飞凌SPICE产品模型,但由于它是作为开放式工具创建的,因此也可访问竞争对手的SPICE模型和无源元件的SPICE模型,在功能或性能
    的头像 发表于 04-30 18:21 1091次阅读
    新品 | <b class='flag-5'>服务</b>:InfineonSpice 离线仿真工具