0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

外部網(wǎng)絡(luò)可直接訪問(wèn)映射到127.0.0.1 的本地服務(wù)

馬哥Linux運(yùn)維 ? 來(lái)源:馬哥Linux運(yùn)維 ? 作者:馬哥Linux運(yùn)維 ? 2022-06-30 11:23 ? 次閱讀

近日Hacker News 上面有一個(gè)貼子[1]火了,這是一封發(fā)給 Docker 安全團(tuán)隊(duì)的郵件,主要講的是 Docker 有一個(gè)非常離譜的安全隱患。即使你通過(guò)像-p 127.0.0.180這樣的參數(shù)端口暴露到回環(huán)地址,外部仍然可以訪問(wèn)該服務(wù),怎么回事呢?

原因其實(shí)很簡(jiǎn)單,Docker 添加了這樣一條 Iptables 規(guī)則:

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

只要外部攻擊者通過(guò)這臺(tái)主機(jī)將流量發(fā)送到172.17.0.2:80,就會(huì)匹配這條規(guī)則并成功訪問(wèn)容器中的服務(wù),127.0.0.1 并沒(méi)有什么卵用。

尷尬的是,選擇將端口映射到 127.0.0.1 的用戶(hù)基本上都是覺(jué)得這樣很安全,以至于他們不再想采取進(jìn)一步的安全措施?,F(xiàn)在問(wèn)題來(lái)了,映射到 127.0.0.1 不能說(shuō)是非常安全吧,只能說(shuō)是與安全毫不相干。。。

概念驗(yàn)證

下面通過(guò)一個(gè)例子來(lái)驗(yàn)證。

① 在 A 機(jī)器上運(yùn)行一個(gè) PostgreSQL 容器,并將端口映射到 127.0.0.1。

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

② 同一個(gè)局域網(wǎng)中的 B 機(jī)器添加路由表,將所有訪問(wèn)172.16.0.0/12的流量指向 A 機(jī)器。

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

③ 在 B 機(jī)器中掃描 A 機(jī)器的端口。

→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 機(jī)器中直接連接 PostgreSQL。

→psql-h172.17.0.2-Upostgres
Passwordforuserpostgres:

解決方案

事實(shí)上不僅僅是 127.0.0.1,你將容器端口映射到主機(jī)的任何一個(gè)地址,外部都可以訪問(wèn)到,這就離了大譜了!

郵件作者給 Docker 團(tuán)隊(duì)提出了一個(gè)解決方案,希望能優(yōu)化 Docker 的 iptables 規(guī)則:

① 首先要嚴(yán)格限制允許訪問(wèn)容器端口的源地址和網(wǎng)絡(luò)接口,例如docker run -p 127.0.0.15432iptables 規(guī)則如下:

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

改進(jìn)后的 iptables 規(guī)則如下:

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

同理,如果主機(jī)的地址為192.168.0.100,掩碼為24,那么docker run -p 192.168.0.1005432的 iptables 規(guī)則就應(yīng)該是:

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

② 最后要修改默認(rèn)行為,如果使用-p參數(shù)時(shí)沒(méi)有指定任何 IP 地址,就默認(rèn)映射到 127.0.0.1。

雖然評(píng)論區(qū)也有很多人給出了添加 iptables 規(guī)則來(lái)進(jìn)行限制的方案,但這是不現(xiàn)實(shí)的,目前全世界有成千上萬(wàn)的用戶(hù)在使用-p參數(shù)將容器端口映射到 127.0.0.1,攻擊者估計(jì)早就發(fā)現(xiàn)了這個(gè)漏洞,我們不能期望用戶(hù)自己添加 iptables 規(guī)則來(lái)限制外部訪問(wèn),最靠譜的方式還是等 Docker 官方修復(fù)這個(gè) bug 然后升級(jí)吧。

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 端口
    +關(guān)注

    關(guān)注

    4

    文章

    948

    瀏覽量

    31986
  • 容器
    +關(guān)注

    關(guān)注

    0

    文章

    492

    瀏覽量

    22028
  • Docker
    +關(guān)注

    關(guān)注

    0

    文章

    453

    瀏覽量

    11792

原文標(biāo)題:Docker 暴重大安全漏洞:外部網(wǎng)絡(luò)可直接訪問(wèn)映射到 127.0.0.1 的本地服務(wù)

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    打破網(wǎng)絡(luò)邊界:P2Link助力實(shí)現(xiàn)高效遠(yuǎn)程訪問(wèn)與內(nèi)網(wǎng)穿透

    。 內(nèi)網(wǎng)穿透的必要性與挑戰(zhàn) 在現(xiàn)代網(wǎng)絡(luò)中,大多數(shù)設(shè)備都在內(nèi)網(wǎng)中運(yùn)行,通常通過(guò)路由器與互聯(lián)網(wǎng)連接。NAT的存在使得內(nèi)網(wǎng)中的設(shè)備擁有私有IP地址,無(wú)法直接通過(guò)外部網(wǎng)絡(luò)
    發(fā)表于 10-31 11:54

    海外HTTP訪問(wèn)指南:暢通無(wú)阻的網(wǎng)絡(luò)之旅

    在數(shù)字化時(shí)代,互聯(lián)網(wǎng)已成為我們獲取信息、學(xué)習(xí)新知、娛樂(lè)休閑的重要渠道。然而,由于地域限 制、網(wǎng)絡(luò)封 鎖等原因,有時(shí)我們難以直接訪問(wèn)到某些海外的網(wǎng)站或服務(wù)。
    的頭像 發(fā)表于 10-21 18:17 ?240次閱讀

    外部端口和內(nèi)部端口是什么意思

    。這些端口用于接收來(lái)自外部網(wǎng)絡(luò)的連接請(qǐng)求。在家庭或企業(yè)網(wǎng)絡(luò)中,外部端口通常由路由器或防火墻管理,它們可以被配置為允許或拒絕來(lái)自特定IP地址或服務(wù)
    的頭像 發(fā)表于 10-17 10:50 ?259次閱讀

    細(xì)數(shù)那些令人矚目的內(nèi)網(wǎng)穿透工具

    。本文旨在概述幾種常用的內(nèi)網(wǎng)映射工具及其實(shí)現(xiàn)方法,以便讀者能夠根據(jù)自身需求靈活選擇和應(yīng)用。 端口映射的重要性 當(dāng)本地服務(wù)器或設(shè)備部署在私有網(wǎng)絡(luò)
    的頭像 發(fā)表于 08-14 15:45 ?292次閱讀
    細(xì)數(shù)那些令人矚目的內(nèi)網(wǎng)穿透工具

    STM32G473VET的內(nèi)部DAC3 DAC4的四個(gè)通道如何映射到作為外部輸出到單片機(jī)管腳?

    你好,請(qǐng)問(wèn)STM32G473VET的內(nèi)部DAC3 DAC4 的四個(gè)通道如何映射到作為外部輸出到單片機(jī)管腳,我需要通過(guò)什么樣的方式接到哪些可選的管腳作為輸出,請(qǐng)列出。謝謝!
    發(fā)表于 07-04 07:13

    路由器映射是什么意思?路由器端口映射怎么設(shè)置?

    有一個(gè)Web服務(wù)器在您的家庭網(wǎng)絡(luò)中運(yùn)行,您可以使用路由器映射將其公開(kāi)到互聯(lián)網(wǎng)上。這樣,任何人都可以從互聯(lián)網(wǎng)上訪問(wèn)該Web服務(wù)器。 路由器端口
    的頭像 發(fā)表于 05-10 13:42 ?1155次閱讀

    在STM32F407官方LWIP例程中,怎樣修改把需要發(fā)送的數(shù)據(jù)直接由應(yīng)用層映射到數(shù)據(jù)鏈路層?

    STM32F407 以太網(wǎng)DMA數(shù)據(jù)發(fā)送問(wèn)題,最近在做一個(gè)關(guān)于電網(wǎng)IEC61850通信項(xiàng)目,其中9-2SV協(xié)議要求應(yīng)用層數(shù)據(jù)直接映射到數(shù)據(jù)鏈路層,不需經(jīng)表示層、會(huì)話層、傳輸層、網(wǎng)絡(luò)層;在
    發(fā)表于 04-29 06:21

    STM32F4能否實(shí)現(xiàn)用重映射功能將dcmi映射到別的io口?

    能否實(shí)現(xiàn)用重映射功能將dcmi映射到別的io口
    發(fā)表于 03-25 08:07

    CysecureTools如何直接訪問(wèn)外部存儲(chǔ)設(shè)備內(nèi)的密鑰呢?

    顯然不符合安全標(biāo)準(zhǔn)。 那么,如標(biāo)題所示,CysecureTools應(yīng)該如何直接訪問(wèn)外部存儲(chǔ)設(shè)備內(nèi)的密鑰呢?\"
    發(fā)表于 01-31 08:08

    TC33X將dCache映射到RAM會(huì)導(dǎo)致存儲(chǔ)總線錯(cuò)誤是為什么?如何解決?

    我嘗試通過(guò)以下(簡(jiǎn)化的)順序使用 TC33X 將數(shù)據(jù)緩存映射到 RAM 區(qū)域: CPU_DCON0 = 2 MTU_CLC = 0 MTU_MEMMAP |= 1 在軟件閃爍且調(diào)試器保持連接
    發(fā)表于 01-25 06:23

    如何將共享代碼映射到DSPR5以及將其映射到其他RAM區(qū)域?

    Scratch-Pad Sram(CPU5 DSPR)相關(guān)聯(lián)。 在鏈接器腳本中,我已經(jīng)映射了每個(gè).text 部分移至其各自的 PSPR 內(nèi)核。 我想知道如何將共享代碼映射到 DSPR5 以及如何將其映射到其他 RAM 區(qū)域。
    發(fā)表于 01-24 07:26

    如何通過(guò)WebDAV服務(wù)訪問(wèn)NAS

    WebDAV是 HTTP 協(xié)議的擴(kuò)展,可讓用戶(hù)管理存儲(chǔ)在遠(yuǎn)程服務(wù)器上的文件,可以使用用戶(hù)名和密碼來(lái)進(jìn)行訪問(wèn),同時(shí)直接拷貝,編輯或刪除共享空間內(nèi)的文件。啟用WebDAV 服務(wù)器后,可使用
    的頭像 發(fā)表于 01-16 15:30 ?932次閱讀
    如何通過(guò)WebDAV<b class='flag-5'>服務(wù)</b>器<b class='flag-5'>訪問(wèn)</b>NAS

    什么是本地IP?服務(wù)本地IP有哪些優(yōu)勢(shì)?

    本地IP是指直接在互聯(lián)網(wǎng)上分配給服務(wù)器或設(shè)備的IP地址,而不是通過(guò)NAT(網(wǎng)絡(luò)地址轉(zhuǎn)換)或 代理等中間設(shè)備進(jìn)行轉(zhuǎn)發(fā)。讓我們關(guān)注本地IP的優(yōu)勢(shì)
    的頭像 發(fā)表于 12-26 11:52 ?4666次閱讀

    EC SRAM映射到CPU Memory空間的共享內(nèi)存設(shè)計(jì)

    ShareMemory,顧名思義就是共享內(nèi)存。這個(gè)概念在很多計(jì)算機(jī)系統(tǒng)中都存在,本文特指 EC SRAM 映射到 CPU Memory 空間的共享內(nèi)存設(shè)計(jì)。
    的頭像 發(fā)表于 11-18 15:11 ?1427次閱讀
    EC SRAM<b class='flag-5'>映射到</b>CPU Memory空間的共享內(nèi)存設(shè)計(jì)

    多個(gè)相同IP設(shè)備通過(guò)網(wǎng)段隔離器實(shí)現(xiàn)不同IP的訪問(wèn)映射

    )來(lái)解決這一問(wèn)題,它允許多個(gè)設(shè)備在內(nèi)部網(wǎng)絡(luò)上共享單個(gè)公共IP地址,并實(shí)現(xiàn)外網(wǎng)的跨網(wǎng)段訪問(wèn)。 網(wǎng)段隔離器可以通過(guò)WAN和LAN不同防火墻區(qū)域進(jìn)行網(wǎng)段隔離;通過(guò)NAT和IP映射實(shí)現(xiàn)LAN口IP映射
    的頭像 發(fā)表于 11-15 17:21 ?714次閱讀
    多個(gè)相同IP設(shè)備通過(guò)網(wǎng)段隔離器實(shí)現(xiàn)不同IP的<b class='flag-5'>訪問(wèn)</b><b class='flag-5'>映射</b>