先前將台灣的開發環境從 Windows 11 換成 Linux 後,沒想到,在網路設備中發異常流量,甚至導致網路堵塞。
原本開發環境是採用 Windows 11 ,由於微軟已針對蠕蟲和惡意程式提供許多防護措施,使得系統的安全性相對較高,但 Linux,並沒有不安全,只資訊安全需要自行控管,像是有次網路分享資料庫(samba),忘了限制寫入權限,放幾個晚上,該資料夾出現一些不明的exe。
剛開始以為是安裝了不該裝的軟體,導致 NAT 流量異常,但經過多次移除軟體與交叉測試,問題依舊存在。最終,在 Docker 容器中發現了幾個異常的容器服務,顯然問題出在這裡。
即使在防火牆上限制 TCP/IP 300個連線數,但路由器仍然頻繁被打爆,導致辦公室網路多次癱瘓。
經過調查,最後在Docker Host 中多出了幾個異常的Ubuntu的容器在運行,進而推測,內網可能有人的電腦中了蠕蟲,而蠕蟲透過Docker 的遠端管理連接埠,拉取的官方的Ubuntu Docker 映像檔,並可以連線進容器中做任何的操作,並利用這些惡意容器耗盡主機資源,包括網路、CPU 和硬碟,或偷取資料。
了解蠕蟲如何利用 Docker 權限過大的漏洞後,在找到蠕蟲在那台電腦之前,我決定加上 TLS 憑證來強化安全性,防止開發機的 Docker 被駭客劫持。
openssl genrsa -aes256 -out ca-key.pem 4096
提示:輸入密碼時需妥善保存。
生成 CA 憑證:
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
生成伺服器金鑰:
openssl genrsa -out server-key.pem 4096
生成伺服器憑證簽署請求 (CSR):
openssl req -subj "/CN=*" -sha256 -new -key server-key.pem -out server.csr
使用 CA 簽署伺服器憑證:
openssl x509 -req -days 1000 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem
生成客戶端金鑰:
openssl genrsa -out key.pem 4096
生成客戶端憑證簽署請求 (CSR):
openssl req -subj "/CN=client" -new -key key.pem -out client.csr
使用 CA 簽署客戶端憑證:
openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem
編輯 Docker 服務配置:
vim /lib/systemd/system/docker.service
將 ExecStart
修改為以下內容:
ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/var/tls/ca.pem --tlscert=/var/tls/server-cert.pem --tlskey=/var/tls/server-key.pem -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock
設置金鑰和憑證的權限:
chmod 0400 ca-key.pem server-key.pem key.pem chmod 0444 ca.pem server-cert.pem cert.pem
使用 SCP 將憑證複製到 Windows 客戶端:
scp -r [email protected]:/var/tls E:\tls
Windows 用戶可以將憑證放入 %USERPROFILE%/.docker
資料夾中,以便自動使用憑證連線。(ca.pem 和 cert.pem 及 key.pem )
重載並重啟 Docker:
systemctl daemon-reload systemctl restart docker
透過原先可以直接不透過憑證管理Docker 的指令測試
docker -H="tcp://192.168.0.123:2376" ps
現在沒有 tls 憑證,就不允許管理 Docker
Error response from daemon: Client sent an HTTP request to an HTTPS server.
接著,我們我們帶上 tls 的憑證,就能遠端管理 Docker
docker --tls -H="tcp://192.168.0.123:2376" ps
加上 tls 後 就沒在跑出不明容器或塞爆NAT 的狀,但真的沒想到未加密的Docker 遠程管理連接埠,這麼容易被蠕蟲利用,資訊安全在Linux 上格外的重要,最後通過部署 TLS 憑證,有效提昇 Docker 遠程管理的安全性,避免因駭客利用漏洞造成的資源損耗與網路癱瘓,同時,建議定期審核 Docker 容器與映像檔來源,以降低安全風險。