你必須要了解的Docker安全基線

2022-01-26 19:00:49
本篇文章給大家帶來了docker中安全基線的相關知識,其中包括服務設定和檔案許可權以及安全審計的相關問題,希望對大家有幫助。

Docker安全基線

服務設定

1.高危-限制容器之間的網路流量

描述:

預設情況下,同一主機上的容器之間允許所有網路通訊。 如果不需要,請限制所有容器間的通訊。 將需要相互通訊的特定容器連結在一起。預設情況下,同一主機上所有容器之間都啟用了不受限制的網路流量。 因此,每個容器都有可能讀取同一主機上整個容器網路上的所有封包。 這可能會導致意外和不必要的資訊洩露給其他容器。 因此,限制容器間的通訊。

加固建議:

在守護程式模式下執行docker並傳遞**–icc = false**作為引數。 例如,

/usr/bin/dockerd --icc=false

若使用systemctl管理docker服務則需要編輯

/usr/lib/systemd/system/docker.service

檔案中的ExecStart引數新增 –icc=false項 然後重新啟動docker服務

systemctl daemon-reload
systemctl restart docker

2.高危-禁止使用特權容器

描述:

使用–privileged標誌將所有Linux核心功能賦予容器,從而覆蓋–cap-add和–cap-drop標誌。 確保不使用它。 --privileged標誌為容器提供了所有功能,並且還解除了裝置cgroup控制器強制執行的所有限制。 換句話說,容器可以完成主機可以做的幾乎所有事情。 存在此標誌是為了允許特殊用例,例如在Docker中執行Docker

加固建議:

不要使用--privileged標誌執行容器

3.高危-限制容器的記憶體使用量

描述:

預設情況下,Docker主機上的所有容器均等地共用資源。 通過使用Docker主機的資源管理功能(例如記憶體限制),您可以控制容器可能消耗的記憶體量。 預設情況下,容器可以使用主機上的所有記憶體。 您可以使用記憶體限制機制來防止由於一個容器消耗主機的所有資源而導致的服務拒絕,從而使同一主機上的其他容器無法執行其預期的功能。 對記憶體沒有限制可能會導致一個問題,即一個容器很容易使整個系統不穩定並因此無法使用。

加固建議

僅使用所需的記憶體來執行容器。 始終使用--memory引數執行容器。 您應該按以下方式啟動容器:docker run --interactive --tty --memory 256m <Container Image Name or ID>

4.高危-將容器的根檔案系統掛載為唯讀

描述:

容器的根檔案系統應被視為「黃金映像」,並且應避免對根檔案系統的任何寫操作。 您應該顯式定義用於寫入的容器卷。 您不應該在容器中寫入資料。 屬於容器的資料量應明確定義和管理。 在管理員控制他們希望開發人員在何處寫入檔案和錯誤的許多情況下,這很有用。

加固建議:

新增「 --read-only」標誌,以允許將容器的根檔案系統掛載為唯讀。 可以將其與卷結合使用,以強制容器的過程僅寫入要保留的位置。 您應該按以下方式執行容器:

docker run --interactive --tty --read-only --volume <writable-volume> <Container Image Name or ID> <Command>

如果您是k8s或其他容器編排軟體編排的容器,請按照相應的安全策略設定或忽略。

5.高危-設定紀錄檔記錄級別

描述:

設定適當的紀錄檔級別,將Docker守護程式設定為記錄您以後想要檢視的事件。 基本紀錄檔級別為「 info」及更高版本將捕獲除偵錯紀錄檔以外的所有紀錄檔。 直到且除非有必要,否則您不應在「debug」紀錄檔級別執行Docker守護程式

加固建議:

執行Docker守護程式,如下所示:

dockerd --log-level=info

若以systemctl管理docker服務則需要編輯/usr/lib/systemd/system/docker.service的ExecStart引數新增--log-level="info",並重新啟動docker

systemctl stop docker
systemctl start docker

6.高危-允許Docker對iptables進行更改

描述:

iptables用於在Linux核心中設定,維護和檢查IP封包過濾器規則表。 允許Docker守護程式對iptables進行更改。 如果您選擇這樣做,Docker將永遠不會對您的系統iptables規則進行更改。 如果允許,Docker伺服器將根據您為容器選擇網路選項的方式自動對iptables進行所需的更改。 建議讓Docker伺服器自動對iptables進行更改,以避免網路設定錯誤,這可能會妨礙容器之間以及與外界的通訊。 此外,每次選擇執行容器或修改網路選項時,它都可以避免更新iptables的麻煩。

加固建議:

不使用’–iptables = false’引數執行Docker守護程式。 若以systemctl管理docker服務則需要編輯/usr/lib/systemd/system/docker.service的ExecStart引數刪除--iptables = false, 重新啟動docker服務

systemctl daemon-reload
systemctl restart docker

7.高危-禁止使用aufs儲存驅動程式

描述:

「aufs」儲存驅動程式是最早的儲存驅動程式。 它基於Linux核心修補程式集,該修補程式集不太可能合併到主要Linux核心中。 並且已知「 aufs」驅動程式會導致一些嚴重的核心崩潰。 'aufs’剛剛獲得了Docker的支援。 最重要的是,許多使用最新Linux核心的Linux發行版都不支援’aufs’驅動程式。

加固建議:

不要明確使用「 aufs」作為儲存驅動程式。 例如,請勿按以下方式啟動Docker守護程式: 若以systemctl管理docker服務則需要編輯/usr/lib/systemd/system/docker.service的ExecStart引數刪除--storage-driver aufs重新啟動docker服務

systemctl daemon-reload
systemctl restart docker

8.高危-禁止在容器上掛載敏感的主機系統目錄

描述:

不允許將以下敏感的主機系統目錄作為容器卷掛載,尤其是在讀寫模式下。

/boot /dev /etc /lib /proc /sys /usr

如果敏感目錄以讀寫模式掛載,則可以對那些敏感目錄中的檔案進行更改。 這些更改可能會降低安全隱患或不必要的更改,這些更改可能會使Docker主機處於受損狀態

如果您是k8s或其他容器編排軟體編排的容器,請依照相應的安全策略設定或忽略。

加固建議:

不要在容器上掛載主機敏感目錄,尤其是在讀寫模式下

9.高危-禁止共用主機的程序名稱空間

描述

程序ID(PID)名稱空間隔離了程序ID號空間,這意味著不同PID名稱空間中的程序可以具有相同的PID。 這是容器和主機之間的程序級別隔離。

PID名稱空間提供了流程分離。 PID名稱空間刪除了系統程序的檢視,並允許程序ID重複使用,包括PID1。如果主機的PID名稱空間與容器共用,則它將基本上允許容器內的程序檢視主機上的所有程序。 系統。 這破壞了主機和容器之間的程序級別隔離的好處。 有權存取容器的人最終可以知道主機系統上正在執行的所有程序,甚至可以從容器內部殺死主機系統程序。 這可能是災難性的。 因此,請勿與容器共用主機的程序名稱空間。

加固建議:

不要使用--pid = host引數啟動容器。

10.中危-為Docker啟動內容信任

描述:

預設情況下禁用內容信任。 您應該啟用它。 內容信任提供了將數位簽章用於傳送到遠端Docker登入檔和從遠端Docker登入檔接收的資料的功能。 這些簽名允許使用者端驗證特定影象標籤的完整性和釋出者。 這確保了容器影象的出處

加固建議:

要在bash shell中啟用內容信任,請輸入以下命令:export DOCKER_CONTENT_TRUST=1 或者,在您的組態檔中設定此環境變數,以便在每次登入時啟用內容信任。 內容信任目前僅適用於公共Docker Hub的使用者。 當前不適用於Docker Trusted Registry或私有登入檔。

檔案許可權

11.高危-確認docker相關檔案許可權適合

描述:

確保可能包含敏感引數的檔案和目錄的安全對確保Docker守護程式的正確和安全執行至關重要

加固建議:

執行以下命令為docker相關檔案設定許可權:

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

若檔案路徑與實際系統中不同可以使用以下命令獲取檔案路徑:

systemctl show -p FragmentPath docker.socket
systemctl show -p FragmentPath docker.service

12.高危-確保docker.sock不被掛載

描述:
docker.sock掛載的容器容易被獲取特殊許可權,一旦危險進入到docker中,嚴重影響了宿主機的安全.

加固建議:

按照提示<image name> <container name>查詢啟動的docker容器 , 以非docker掛載docker.sock的形式重新啟動容器

docker stop <container name>

docker run [OPTIONS] <image name>或docker run [OPTIONS] <image id>

安全審計

13.高危-稽核Docker檔案和目錄

描述:

除了稽核常規的Linux檔案系統和系統呼叫之外,還稽核所有與Docker相關的檔案和目錄。 Docker守護程式以「 root」特權執行。 其行為取決於某些關鍵檔案和目錄。如 /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.

推薦學習:《》

以上就是你必須要了解的Docker安全基線的詳細內容,更多請關注TW511.COM其它相關文章!