本篇文章給大家?guī)砹薲ocker中安全基線的相關(guān)知識,其中包括服務(wù)配置和文件權(quán)限以及安全審計的相關(guān)問題,希望對大家有幫助。
Docker安全基線
服務(wù)配置
1.高危-限制容器之間的網(wǎng)絡(luò)流量
描述:
默認(rèn)情況下,同一主機(jī)上的容器之間允許所有網(wǎng)絡(luò)通信。 如果不需要,請限制所有容器間的通信。 將需要相互通信的特定容器鏈接在一起。默認(rèn)情況下,同一主機(jī)上所有容器之間都啟用了不受限制的網(wǎng)絡(luò)流量。 因此,每個容器都有可能讀取同一主機(jī)上整個容器網(wǎng)絡(luò)上的所有數(shù)據(jù)包。 這可能會導(dǎo)致意外和不必要的信息泄露給其他容器。 因此,限制容器間的通信。
加固建議:
在守護(hù)程序模式下運(yùn)行docker并傳遞**–icc = false**作為參數(shù)。 例如,
/usr/bin/dockerd --icc=false
若使用systemctl管理docker服務(wù)則需要編輯
/usr/lib/systemd/system/docker.service
文件中的ExecStart參數(shù)添加 –icc=false項 然后重啟docker服務(wù)
systemctl daemon-reload systemctl restart docker
2.高危-禁止使用特權(quán)容器
描述:
使用–privileged標(biāo)志將所有Linux內(nèi)核功能賦予容器,從而覆蓋–cap-add和–cap-drop標(biāo)志。 確保不使用它。 –privileged標(biāo)志為容器提供了所有功能,并且還解除了設(shè)備cgroup控制器強(qiáng)制執(zhí)行的所有限制。 換句話說,容器可以完成主機(jī)可以做的幾乎所有事情。 存在此標(biāo)志是為了允許特殊用例,例如在Docker中運(yùn)行Docker
加固建議:
不要使用--privileged
標(biāo)志運(yùn)行容器
3.高危-限制容器的內(nèi)存使用量
描述:
默認(rèn)情況下,Docker主機(jī)上的所有容器均等地共享資源。 通過使用Docker主機(jī)的資源管理功能(例如內(nèi)存限制),您可以控制容器可能消耗的內(nèi)存量。 默認(rèn)情況下,容器可以使用主機(jī)上的所有內(nèi)存。 您可以使用內(nèi)存限制機(jī)制來防止由于一個容器消耗主機(jī)的所有資源而導(dǎo)致的服務(wù)拒絕,從而使同一主機(jī)上的其他容器無法執(zhí)行其預(yù)期的功能。 對內(nèi)存沒有限制可能會導(dǎo)致一個問題,即一個容器很容易使整個系統(tǒng)不穩(wěn)定并因此無法使用。
加固建議
僅使用所需的內(nèi)存來運(yùn)行容器。 始終使用--memory
參數(shù)運(yùn)行容器。 您應(yīng)該按以下方式啟動容器:docker run --interactive --tty --memory 256m <Container Image Name or ID>
4.高危-將容器的根文件系統(tǒng)掛載為只讀
描述:
容器的根文件系統(tǒng)應(yīng)被視為“黃金映像”,并且應(yīng)避免對根文件系統(tǒng)的任何寫操作。 您應(yīng)該顯式定義用于寫入的容器卷。 您不應(yīng)該在容器中寫入數(shù)據(jù)。 屬于容器的數(shù)據(jù)量應(yīng)明確定義和管理。 在管理員控制他們希望開發(fā)人員在何處寫入文件和錯誤的許多情況下,這很有用。
加固建議:
添加“ –read-only”標(biāo)志,以允許將容器的根文件系統(tǒng)掛載為只讀。 可以將其與卷結(jié)合使用,以強(qiáng)制容器的過程僅寫入要保留的位置。 您應(yīng)該按以下方式運(yùn)行容器:
docker run --interactive --tty --read-only --volume <writable-volume> <Container Image Name or ID> <Command>
如果您是k8s或其他容器編排軟件編排的容器,請按照相應(yīng)的安全策略配置或忽略。
5.高危-設(shè)置日志記錄級別
描述:
設(shè)置適當(dāng)?shù)娜罩炯墑e,將Docker守護(hù)程序配置為記錄您以后想要查看的事件。 基本日志級別為“ info”及更高版本將捕獲除調(diào)試日志以外的所有日志。 直到且除非有必要,否則您不應(yīng)在“debug”日志級別運(yùn)行Docker守護(hù)程序
加固建議:
運(yùn)行Docker守護(hù)程序,如下所示:
dockerd --log-level=info
若以systemctl管理docker服務(wù)則需要編輯/usr/lib/systemd/system/docker.service
的ExecStart參數(shù)添加--log-level="info"
,并重啟docker
systemctl stop docker systemctl start docker
6.高危-允許Docker對iptables進(jìn)行更改
描述:
iptables用于在Linux內(nèi)核中設(shè)置,維護(hù)和檢查IP數(shù)據(jù)包過濾器規(guī)則表。 允許Docker守護(hù)程序?qū)ptables進(jìn)行更改。 如果您選擇這樣做,Docker將永遠(yuǎn)不會對您的系統(tǒng)iptables規(guī)則進(jìn)行更改。 如果允許,Docker服務(wù)器將根據(jù)您為容器選擇網(wǎng)絡(luò)選項的方式自動對iptables進(jìn)行所需的更改。 建議讓Docker服務(wù)器自動對iptables進(jìn)行更改,以避免網(wǎng)絡(luò)配置錯誤,這可能會妨礙容器之間以及與外界的通信。 此外,每次選擇運(yùn)行容器或修改網(wǎng)絡(luò)選項時,它都可以避免更新iptables的麻煩。
加固建議:
不使用’–iptables = false’參數(shù)運(yùn)行Docker守護(hù)程序。 若以systemctl管理docker服務(wù)則需要編輯/usr/lib/systemd/system/docker.service
的ExecStart參數(shù)刪除--iptables = false
, 重啟docker服務(wù)
systemctl daemon-reload systemctl restart docker
7.高危-禁止使用aufs存儲驅(qū)動程序
描述:
“aufs”存儲驅(qū)動程序是最早的存儲驅(qū)動程序。 它基于Linux內(nèi)核補(bǔ)丁集,該補(bǔ)丁集不太可能合并到主要Linux內(nèi)核中。 并且已知“ aufs”驅(qū)動程序會導(dǎo)致一些嚴(yán)重的內(nèi)核崩潰。 'aufs’剛剛獲得了Docker的支持。 最重要的是,許多使用最新Linux內(nèi)核的Linux發(fā)行版都不支持’aufs’驅(qū)動程序。
加固建議:
不要明確使用“ aufs”作為存儲驅(qū)動程序。 例如,請勿按以下方式啟動Docker守護(hù)程序: 若以systemctl管理docker服務(wù)則需要編輯/usr/lib/systemd/system/docker.service
的ExecStart參數(shù)刪除--storage-driver aufs
重啟docker服務(wù)
systemctl daemon-reload systemctl restart docker
8.高危-禁止在容器上掛載敏感的主機(jī)系統(tǒng)目錄
描述:
不允許將以下敏感的主機(jī)系統(tǒng)目錄作為容器卷掛載,尤其是在讀寫模式下。
/boot /dev /etc /lib /proc /sys /usr
如果敏感目錄以讀寫模式掛載,則可以對那些敏感目錄中的文件進(jìn)行更改。 這些更改可能會降低安全隱患或不必要的更改,這些更改可能會使Docker主機(jī)處于受損狀態(tài)
如果您是k8s或其他容器編排軟件編排的容器,請依照相應(yīng)的安全策略配置或忽略。
加固建議:
不要在容器上掛載主機(jī)敏感目錄,尤其是在讀寫模式下
9.高危-禁止共享主機(jī)的進(jìn)程名稱空間
描述
進(jìn)程ID(PID)命名空間隔離了進(jìn)程ID號空間,這意味著不同PID命名空間中的進(jìn)程可以具有相同的PID。 這是容器和主機(jī)之間的進(jìn)程級別隔離。
PID名稱空間提供了流程分離。 PID命名空間刪除了系統(tǒng)進(jìn)程的視圖,并允許進(jìn)程ID重復(fù)使用,包括PID1。如果主機(jī)的PID命名空間與容器共享,則它將基本上允許容器內(nèi)的進(jìn)程查看主機(jī)上的所有進(jìn)程。 系統(tǒng)。 這破壞了主機(jī)和容器之間的進(jìn)程級別隔離的好處。 有權(quán)訪問容器的人最終可以知道主機(jī)系統(tǒng)上正在運(yùn)行的所有進(jìn)程,甚至可以從容器內(nèi)部殺死主機(jī)系統(tǒng)進(jìn)程。 這可能是災(zāi)難性的。 因此,請勿與容器共享主機(jī)的進(jìn)程名稱空間。
加固建議:
不要使用--pid = host
參數(shù)啟動容器。
10.中危-為Docker啟動內(nèi)容信任
描述:
默認(rèn)情況下禁用內(nèi)容信任。 您應(yīng)該啟用它。 內(nèi)容信任提供了將數(shù)字簽名用于發(fā)送到遠(yuǎn)程Docker注冊表和從遠(yuǎn)程Docker注冊表接收的數(shù)據(jù)的功能。 這些簽名允許客戶端驗證特定圖像標(biāo)簽的完整性和發(fā)布者。 這確保了容器圖像的出處
加固建議:
要在bash shell中啟用內(nèi)容信任,請輸入以下命令:export DOCKER_CONTENT_TRUST=1
或者,在您的配置文件中設(shè)置此環(huán)境變量,以便在每次登錄時啟用內(nèi)容信任。 內(nèi)容信任目前僅適用于公共Docker Hub的用戶。 當(dāng)前不適用于Docker Trusted Registry或私有注冊表。
文件權(quán)限
11.高危-確認(rèn)docker相關(guān)文件權(quán)限適合
描述:
確??赡馨舾袇?shù)的文件和目錄的安全對確保Docker守護(hù)程序的正確和安全運(yùn)行至關(guān)重要
加固建議:
執(zhí)行以下命令為docker相關(guān)文件配置權(quán)限:
chown root:root /usr/lib/systemd/system/docker.service chmod 644 /usr/lib/systemd/system/docker.service chown root:root /usr/lib/systemd/system/docker.socket chmod 644 /usr/lib/systemd/system/docker.socket chown root:root /etc/docker chmod 755 /etc/docker
若文件路徑與實際系統(tǒng)中不同可以使用以下命令獲取文件路徑:
systemctl show -p FragmentPath docker.socket systemctl show -p FragmentPath docker.service
12.高危-確保docker.sock不被掛載
描述:
docker.sock掛載的容器容易被獲取特殊權(quán)限,一旦危險進(jìn)入到docker中,嚴(yán)重影響了宿主機(jī)的安全.
加固建議:
按照提示<image name>
<container name>
查找啟動的docker容器 , 以非docker掛載docker.sock的形式重新啟動容器
docker stop <container name>
docker run [OPTIONS] <image name>或docker run [OPTIONS] <image id>
安全審計
13.高危-審核Docker文件和目錄
描述:
除了審核常規(guī)的Linux文件系統(tǒng)和系統(tǒng)調(diào)用之外,還審核所有與Docker相關(guān)的文件和目錄。 Docker守護(hù)程序以“ root”特權(quán)運(yùn)行。 其行為取決于某些關(guān)鍵文件和目錄。如 /var/lib/docker、/etc/docker、docker.service、 docker.socket、/usr/bin/docker-containerd、/usr/bin/docker-runc等文件和目錄
加固建議:
在/etc/audit/audit.rules與/etc/audit/rules.d/audit.rules文件中添加以下行:
-w /var/lib/docker -k docker -w /etc/docker -k docker -w /usr/lib/systemd/system/docker.service -k docker -w /usr/lib/systemd/system/docker.socket -k docker -w /usr/bin/docker-containerd -k docker -w /usr/bin/docker-runc -k docker
然后,重新啟動audit程序 service auditd restart
.
推薦學(xué)習(xí):《docker視頻教程》