審核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並傳遞'--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
不要在容器上掛載敏感的主機系統目錄 | 服務配置
描述
不允許將以下敏感的主機系統目錄作為容器卷掛載,尤其是在讀寫模式下。
/boot
/dev
/etc
/lib
/proc
/sys
/usr
如果敏感目錄以讀寫模式掛載,則可以對那些敏感目錄中的文件進行更改。 這些更改可能會降低安全隱患或不必要的更改,這些更改可能會使Docker主機處於受損狀態。
加固建議
不要在容器上掛載主機敏感目錄,尤其是在讀寫模式下
限制容器的內存使用量 | 服務配置
描述
默認情況下,Docker主機上的所有容器均等地共享資源。 通過使用Docker主機的資源管理功能(例如內存限制),您可以控制容器可能消耗的內存量。
默認情況下,容器可以使用主機上的所有內存。 您可以使用內存限制機制來防止由於一個容器消耗主機的所有資源而導致的服務拒絕,從而使同一主機上的其他容器無法執行其預期的功能。 對內存沒有限制可能會導致一個問題,即一個容器很容易使整個系統不穩定並因此無法使用。
加固建議
僅使用所需的內存來運行容器。 始終使用'--memory'參數運行容器。 您應該按以下方式啟動容器:
docker run --interactive --tty --memory 256m <Container Image Name or ID>
為Docker啟用內容信任 | 服務配置
描述
默認情況下禁用內容信任。 您應該啟用它。
內容信任提供了將數字簽名用於發送到遠程Docker注冊表和從遠程Docker注冊表接收的數據的功能。 這些簽名允許客戶端驗證特定圖像標簽的完整性和發布者。 這確保了容器圖像的出處
加固建議
要在bash shell中啟用內容信任,請輸入以下命令:export DOCKER_CONTENT_TRUST=1 或者,在您的配置文件中設置此環境變量,以便在每次登錄時啟用內容信任。 內容信任目前僅適用於公共Docker Hub的用戶。 當前不適用於Docker Trusted Registry或私有注冊表。
將容器的根文件系統掛載為只讀 | 服務配置
描述
容器的根文件系統應被視為“黃金映像”,並且應避免對根文件系統的任何寫操作。 您應該顯式定義用於寫入的容器卷。
您不應該在容器中寫入數據。 屬於容器的數據量應明確定義和管理。 在管理員控制他們希望開發人員在何處寫入文件和錯誤的許多情況下,這很有用。
加固建議
添加“ --read-only”標志,以允許將容器的根文件系統掛載為只讀。 可以將其與卷結合使用,以強制容器的過程僅寫入要保留的位置。 您應該按以下方式運行容器:
docker run --interactive --tty --read-only --volume <writable-volume> <Container Image Name or ID> <Command>
確認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
設置日志記錄級別 | 服務配置
描述
設置適當的日志級別,將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
允許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
不要使用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
不要使用特權容器 | 服務配置
描述
使用--privileged標志將所有Linux內核功能賦予容器,從而覆蓋--cap-add和--cap-drop標志。 確保不使用它。
--privileged標志為容器提供了所有功能,並且還解除了設備cgroup控制器強制執行的所有限制。 換句話說,容器可以完成主機可以做的幾乎所有事情。 存在此標志是為了允許特殊用例,例如在Docker中運行Docker
加固建議
不要使用--privileged標志運行容器
不共享主機的進程名稱空間 | 服務配置
描述
進程ID(PID)命名空間隔離了進程ID號空間,這意味着不同PID命名空間中的進程可以具有相同的PID。 這是容器和主機之間的進程級別隔離。
PID名稱空間提供了流程分離。 PID命名空間刪除了系統進程的視圖,並允許進程ID重復使用,包括PID1。如果主機的PID命名空間與容器共享,則它將基本上允許容器內的進程查看主機上的所有進程。 系統。 這破壞了主機和容器之間的進程級別隔離的好處。 有權訪問容器的人最終可以知道主機系統上正在運行的所有進程,甚至可以從容器內部殺死主機系統進程。 這可能是災難性的。 因此,請勿與容器共享主機的進程名稱空間。
加固建議
不要使用'--pid = host'參數啟動容器。
確保docker.sock不被掛載 | 文件權限
描述
docker.sock掛載的容器容易被獲取特殊權限,一旦危險進入到docker中,嚴重影響了宿主機的安全
加固建議
按照提示
docker stop <container name>
docker run [OPTIONS] <image name>或docker run [OPTIONS] <image id>
