新聞中心
云時代流行的今天,云和容器成了日常工作的一部分。這樣就涉及一個安全問題,在容器使用過程中常常要構(gòu)建鏡像,在構(gòu)建進行并push到公共存儲(私有項目不要存儲大公共注冊表),其中可能會涉及有些敏感信息和機密數(shù)據(jù)泄露。比如IP地址,密碼,私鑰等信息。本文我們就來說說在實踐中如何避免敏感信息的泄露。包括基本語法,鏡像編譯,運行時以及安全掃描等方法。

成都創(chuàng)新互聯(lián)IDC提供業(yè)務(wù):資陽移動機房,成都服務(wù)器租用,資陽移動機房,重慶服務(wù)器租用等四川省內(nèi)主機托管與主機租用業(yè)務(wù);數(shù)據(jù)中心含:雙線機房,BGP機房,電信機房,移動機房,聯(lián)通機房。
概述
容器和Docker讓我們的日常更加便捷,但是同時也會很容易將一些信息不小心泄露給公眾造成安全問題。密碼,云憑證和SSH私鑰,如果配置不當(dāng),一不小心就會泄露。除非建立一套安全事件策略,綜合防護,一些案例:
Codecov供應(yīng)鏈攻擊:
2021年4月1日,由于Codecov一個Docker文件配置失誤,攻擊者可以竊取憑據(jù)并修改客戶使用的Bash Uploader腳本。通過惡意代碼修改Bash Uploaders,并將環(huán)境變量和從一些客戶的CI/CD環(huán)境中收集的密鑰泄露給了一個受攻擊者控制的服務(wù)器。
受到該事件影響,HashiCorp用于發(fā)布簽名和驗證的GPG密鑰被泄露,目前已經(jīng)采用輪換機制定期更換私鑰。
其他由于Docker Hub公共鏡像導(dǎo)致的泄露還包括(不限于):
AWS賬戶和憑據(jù),SSH私鑰,Azure密鑰,.npmrc令牌,Docker Hub賬戶,PyPI存儲庫密鑰,SMTP服務(wù)器認證信息,eCAPTCHA密碼,Twitter API密鑰,Jira密鑰,Slack密鑰以及其他一些密鑰等。
COPY方法
DockerFile語法中常見的一個COPY方法:
FROM debian:buster
COPY . /app
默認情況下,該語句會將當(dāng)前目錄中所有內(nèi)容的復(fù)制到鏡像中。這些內(nèi)容中可能會包含敏感信息的文件:例如站點.env。
一旦敏感信息,被放到Docker鏡像中,則任何可以訪問該鏡像的用戶都可以看到這些信息。為了防止由于COPY導(dǎo)致的敏感信息泄露:
限制復(fù)制內(nèi)容:只復(fù)制必須的特定文件或目錄。 例如:
COPY setup.py myapp/app
.dockerignore:使用.dockerignore確保敏感文件不被復(fù)制到鏡像中去,一個典型的配置:
NOTICE
README.md
LICENSE
AUTHORS.md
CONTRIBUTING.md
.vscode/
vendor/
env/
ENV/
build/
dist/
target/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
Dockerfile
.git
.editorconfig
*.egg-info/
.installed.cfg
*.egg
*.manifest
*.spec
.gcloudignore
.gitignore
.tox/
.dockerignore
.coverage
.coverage.*
.cache
htmlcov/
nosetests.xml
coverage.xml
*,cover
.hypothesis/
ssh/
id_rsa
.git-credentials
config.*
避免手動生成鏡像:與CICD自動生成系統(tǒng)相比,開發(fā)環(huán)境更容易涉及敏感文件,因此在開發(fā)環(huán)境手動生成公共鏡像更容易導(dǎo)致泄露。
使用CI環(huán)境變量:如果CI或構(gòu)建環(huán)境需要使機密信息,需要將其配置在環(huán)境變量中,而不要通過文件訪問。
鏡像編譯
有時需要在構(gòu)建Docker鏡像時使用機密,例如訪問私有軟件包存儲庫的密碼。
FROM python:3.9
RUN pip install \
--extra-index-url User:pass@priveapk.example \
package privatepackage
直接在URL包含了用戶名和密碼會直接導(dǎo)致其泄露??梢允褂铆h(huán)境變量形式來應(yīng)用:
export MYSECRET=secretpassword
export DOCKER_BUILDKIT=1
docker build --secret --secret id=mysecret,env=MYSECRET .
運行時
有些密碼是需要在容器運行時候需要訪問的,比如訪問數(shù)據(jù)庫的憑據(jù)。同樣的運行時機密也不能直接存儲在鏡像中。
除了鏡像內(nèi)容導(dǎo)致意外泄露,這種存儲在鏡像中的配置也綁定了環(huán)境,不便于鏡像靈活運行。在運行容器時可以通過多種方法將機密傳遞給容器:
使用環(huán)境變量。
與綁定機密文件的卷。
編排系統(tǒng)(如K8S)的密碼管理機制。
在公有云環(huán)境中,可以使用云環(huán)境變量和授權(quán)。比如AWS 的IAM角色管理。
外部密鑰庫。
通過以上這些機制,可以避免運行時敏感信息存儲在鏡像本身中。
安全掃描
除了上面一些管理方面策略外,還有一個主動方法就是自動地進行安全掃描。市面上有很多密碼掃描工具,可以掃描目錄或者Git倉庫,如果包含敏感信息則會直接告警。比如detect-secrets,trufflehog
也有對鏡像掃描的工具,比如pentester可以掃描Docker Hub鏡像,發(fā)現(xiàn)問題。
總結(jié)
本文我們討論了容器敏感信息防泄露的一些安全方法,包括基本語法,鏡像編譯,運行時以及安全掃描等方法。綜合使用這些方法和策略,可以有效地防止容器使用時候的敏感信息泄露,從而提高安全。
網(wǎng)頁標(biāo)題:防范Docker信息泄露具體方案
轉(zhuǎn)載來于:http://www.dlmjj.cn/article/codhpee.html


咨詢
建站咨詢
