隨著容器化應用日益普及,Docker 容器安全成為開發和維運團隊的首要任務。本文介紹如何利用 Lynis 和 Dockscan 等工具進行 Docker 安全稽核,涵蓋主機系統、Docker 映像檔和執行中容器的安全性評估。同時,也將探討 Docker Hub 的安全掃描機制,以及如何利用 Clair 和 Anchore 等開源工具對 Docker 映像檔進行漏洞分析,確保容器從安全的基礎映像開始構建,並在 CI/CD 流程中整合安全掃描,及早發現和修復漏洞,提升應用程式的安全性。
Docker安全性稽核與工具應用
隨著容器技術的廣泛應用,Docker安全性成為企業關注的重點。為了確保Docker環境的安全,需要對主機、映像檔以及執行中的容器進行嚴格的安全稽核。本章將介紹多種開源工具及其在Docker安全稽核中的應用。
Lynis:Linux與Docker安全稽核工具
Lynis是一款強大的開源安全稽核工具,用於評估Linux和類別Unix系統的安全性。它能夠對系統組態、服務、核心以及Docker容器進行深入的安全檢查。
Lynis的基本使用
執行Lynis稽核的基本命令如下:
$ lynis audit system
此命令會對系統的多個方面進行安全檢查,包括啟動過程、服務、核心組態、使用者與群組設定、Shell組態以及檔案系統等。
Lynis檢查流程
-
初始組態檢查:檢查啟動過程、服務和核心組態。
Figure 5.23: Checking boot, services, and kernel -
使用者與認證檢查:檢查使用者、群組和認證相關的組態。
Figure 5.24: Checking users, groups, and authentication -
Shell與檔案系統檢查:檢查Shell組態和檔案系統相關的安全設定。
Figure 5.25: Checking configurations related to shells and filesystems -
儲存與網路服務檢查:檢查儲存組態和網路服務的安全性。
Figure 5.26: Checking configurations related to storage and name services -
網路組態檢查:檢查網路相關的安全組態。
Figure 5.27: Checking configurations related to networking -
Docker容器與安全框架檢查:檢查Docker容器組態以及AppArmor和SELinux等安全框架的設定。
Figure 5.28: Checking configurations related to Docker containers and security frameworks
Docker檔案稽核
Lynis還提供了對Dockerfile的稽核功能,可以透過以下命令執行:
$ lynis audit dockerfile
此功能會檢查Dockerfile中的安全性問題,例如是否使用root使用者執行命令、下載套件時是否使用HTTPS等。
程式碼範例:檢查Dockerfile中的使用者設定
FIND=$(grep "^USER" ${AUDIT_FILE} | cut -d' ' -f2 )
if [ -z "${FIND}" ]; then
ReportWarning "dockerfile" "No user declared in Dockerfile. Container will execute command as root."
else
USER=$(echo ${FIND})
Display --indent 2 --text "User" --result "${USER}"
fi
內容解密:
此段程式碼檢查Dockerfile中是否明確指定了執行命令的使用者。如果沒有指定,使用者預設為root,可能會帶來安全風險。ReportWarning函式用於報告這一潛在問題,而Display函式則用於顯示當前設定的使用者。
Dockscan:Docker安裝安全掃描工具
Dockscan是一款使用Ruby開發的工具,用於掃描Docker安裝的安全問題。它需要Ruby 2.0或更高版本以及docker-api gem。
安裝Dockscan
$ gem install dockscan
使用Dockscan掃描Docker安裝
$ dockscan unix:///var/run/docker.sock
此命令會分析Docker的安裝和容器執行情況,提供資源限制、網路轉發等方面的安全報告。
程式碼範例:Dockscan掃描結果
Figure 5.32: Analyzing Docker socket
內容解密:
Dockscan的掃描結果會顯示Docker執行的安全性問題,例如是否允許無限制地使用記憶體或CPU資源,是否允許容器之間直接轉發流量等。這些問題可能會被標記為中等或高風險。
問題與討論
-
哪個Linux核心安全模組提供了存取控制、完整性控制和RBAC等安全控制功能?
-
哪款工具提供了對外部和內部威脅的保護,使系統管理員能夠為每個應用程式關聯一個安全組態檔案,以限制其功能?
-
哪款工具允許測試Docker容器的安全性,重點關注檔案許可權和登入檔設定等最佳實踐?
-
哪款開源安全稽核工具用於評估Linux和類別Unix系統的安全性?
-
哪款工具是一款使用Ruby開發的指令碼,用於分析主機Docker安裝和容器執行的安全性?
第6章 Docker映像檔安全性
本章將介紹如何使用Clair與anchore等開源工具來發現Docker映像檔中的漏洞,確保容器從安全的基礎開始構建。
Docker 容器安全掃描與漏洞分析
隨著容器技術的廣泛應用,Docker 容器安全成為開發者和維運團隊關注的重點。Docker 提供了多種工具和服務來確保容器映像的安全性,本文將探討 Docker 容器安全掃描的流程、開源工具的使用以及如何在持續整合/持續佈署(CI/CD)流程中整合安全掃描。
Docker Hub 倉函式庫
Docker Hub 是由社群驅動的映像倉函式庫,任何使用者都可以建立自己的映像並上傳到倉函式庫中與社群分享。在 Docker Hub 中,主要有兩種型別的映像:官方映像和使用者自定義映像。官方映像由主要的供應商(如 Apache、Nginx、MongoDB、Ubuntu、Alpine 等)維護,而使用者自定義映像則是根據官方映像或其他基礎映像進行客製化的結果。
Docker 安全掃描
Docker 安全掃描是 Docker Hub 為私有倉函式庫提供的一項服務,它透過逐層檢查容器映像中的二進位制套件,並與 Common Vulnerabilities and Exposures(CVE)資料函式庫進行比對,來發現已知的漏洞。這項服務能夠提供詳細的漏洞報告,包括漏洞的嚴重程度和相關的 CVE 編號。
Docker 安全掃描流程
- 映像掃描:Docker 安全掃描工具會將映像分解為多個層,並分析每個層中的二進位制套件。
- 漏洞比對:將分析結果與 CVE 資料函式庫進行比對,以發現已知的漏洞。
- 報告生成:掃描完成後,會生成一份詳細的漏洞報告,包括漏洞的嚴重程度(高、中、低)和相關的 CVE 編號。
漏洞嚴重程度分類別
根據 Common Vulnerability Score System(CVSS)的評分,漏洞被分為三個嚴重程度等級:
- 高嚴重度:CVSS 評分在 8-10 之間
- 中嚴重度:CVSS 評分在 4-7.9 之間
- 低嚴重度:CVSS 評分在 0.0-3.9 之間
開源工具進行漏洞分析
除了 Docker 官方提供的掃描工具外,還有多種開源工具可用於 Docker 映像的漏洞分析,例如 Clair、Dagda 和 Anchore。這些工具可以自動檢查映像中的漏洞,並提供詳細的報告和修復建議。
開源工具的主要功能
- 自動掃描映像中的漏洞
- 提供詳細的漏洞報告和修復建議
- 可與 CI/CD 流程整合,實作自動化的安全掃描
在 CI/CD 流程中整合安全掃描
將安全掃描整合到 CI/CD 流程中,可以在開發早期發現和修復漏洞,從而提高應用程式的安全性。例如,當開發者上傳程式碼到原始碼控制倉函式庫時,可以自動觸發映像的構建和安全掃描。如果掃描發現漏洞,可以自動通知相關人員進行修復。
CI/CD 流程中的安全掃描實踐
- 自動化掃描:在 CI/CD 流程中自動執行安全掃描,確保每次構建的映像都經過檢查。
- 即時通知:當掃描發現漏洞時,自動通知相關人員進行修復。
- 自動化修復:對於可以自動修復的漏洞,可以實作自動化的修復流程。
內容解密:
此 Dockerfile 用於構建一個根據 Python 3.9 的 Docker 映像。首先,它使用 python:3.9-slim 作為基礎映像,這是一個精簡版的 Python 3.9 映像,有助於減少映像的大小。接著,它設定工作目錄為 /app,並複製 requirements.txt 檔案到容器中。然後,它使用 pip 安裝 requirements.txt 中列出的依賴套件。安裝完成後,它複製應用程式的程式碼到容器中,並暴露應用程式的埠。最後,它設定容器的啟動命令為執行 app.py 指令碼。
Docker 安全掃描流程圖
graph LR
A[開始] --> B[提取映像層]
B --> C[分析二進位制套件]
C --> D[與 CVE 資料函式庫比對]
D --> E[生成漏洞報告]
E --> F[結束]
圖表翻譯: 此圖表展示了 Docker 安全掃描的基本流程。首先,從 Docker 映像中提取各個層,接著分析這些層中的二進位制套件。然後,將分析結果與 CVE 資料函式庫進行比對,以發現已知的漏洞。最後,根據比對結果生成詳細的漏洞報告。
隨著容器技術和 DevOps 文化的普及,Docker 容器安全將繼續成為一個重要的研究和發展領域。未來的發展方向可能包括:
- 更先進的安全掃描技術,例如根據人工智慧和機器學習的漏洞檢測。
- 更完善的 CI/CD 流程整合,實作更自動化的安全檢查和修復。
- 更強大的開源工具和社群支援,提供更多樣化的安全解決方案。
總之,Docker 容器安全是一個持續演進的領域,需要開發者、維運團隊和安全專家的共同努力來確保容器化應用程式的安全性。
容器安全檢測工具與實踐
在現代化的 DevOps 流程中,確保容器環境的安全性已成為一項重要任務。本篇文章將介紹多種用於容器安全檢測的工具與技術,包括 Static Application Security Testing (SAST)、Dynamic Application Security Testing (DAST) 以及專門針對容器的漏洞分析工具。
SAST 與 DAST 工具
SAST 和 DAST 是兩種常見的應用程式安全測試方法。SAST 工具透過分析原始碼來發現潛在的安全漏洞,而 DAST 工具則透過對執行中的應用程式進行測試來檢測漏洞。常見的 SAST 和 DAST 工具包括:
- HP Fortify:提供全面的原始碼安全分析,能夠識別多種程式語言中的安全漏洞。
- IBM AppScan:支援多種測試方法,包括 DAST 和 SAST,能夠對 Web 應用程式進行全面的安全測試。
依賴性檢查工具
除了 SAST 和 DAST 之外,還有一些工具專注於檢查專案依賴項的安全性,例如:
- Black Duck Hub:能夠掃描專案的開源元件,識別已知的安全漏洞。
- JFrog Xray:提供對軟體包和依賴項的深度分析,能夠檢測出已知漏洞和授權問題。
原始碼管理與編譯工具
在 DevOps 流程中,原始碼管理和自動化編譯是至關重要的環節。常見的原始碼管理工具包括:
- GitHub:提供分散式版本控制和原始碼管理功能。
- GitLab:除了原始碼管理外,還提供 CI/CD 功能,能夠與多種工具整合。
- Bitbucket:支援 Git 和 Mercurial 版本控制系統,提供原始碼管理和 CI/CD 功能。
常見的自動化編譯工具包括:
- Jenkins:一個廣泛使用的自動化伺服器,能夠支援多種 CI/CD 流程。
- Bamboo:Atlassian 提供的 CI/CD 工具,能夠與 Jira 和 Bitbucket 整合。
容器漏洞分析工具
針對容器的安全檢測,出現了許多專門的工具,例如:
CoreOS Clair
Clair 是一個開源的容器漏洞分析服務,能夠對容器的各個層進行分析,檢測已知的安全漏洞。它支援多種 Linux 發行版,包括 Debian、Ubuntu 和 CentOS。
Clair 的工作流程如下:
- 提取容器層:Clair 會提取容器的各個層,並分析其中的軟體包和依賴項。
- 漏洞檢測:Clair 將分析結果與其內部的漏洞資料函式庫進行比對,檢測已知的安全漏洞。
- 結果報告:Clair 能夠生成報告,列出檢測到的安全漏洞。
Dagda
Dagda 是另一個開源的容器安全檢測工具,能夠對 Docker 映像和容器進行靜態分析,檢測已知的安全漏洞。Dagda 的主要功能包括:
- 軟體包分析:Dagda 能夠分析 Docker 映像中的軟體包和依賴項。
- 漏洞檢測:Dagda 將分析結果與其內部的漏洞資料函式庫進行比對,檢測已知的安全漏洞。
- 執行時監控:Dagda 能夠與 Sysdig Falco 整合,對執行中的容器進行監控,檢測異常行為。
Dagda 的架構如圖所示:
graph LR
A[Dagda Client] -->|REST-API|> B[Dagda Server]
B -->|分析請求|> C[Docker Image]
C -->|分析結果|> B
B -->|儲存結果|> D[MongoDB]
B -->|漏洞資料函式庫|> E[CVE 資料函式庫]
圖表翻譯: 此圖示展示了 Dagda 的基本架構,包括客戶端透過 REST-API 與伺服器互動,伺服器負責分析 Docker 映像並將結果儲存在 MongoDB 中,同時利用 CVE 資料函式庫進行漏洞檢測。
Dagda 的使用方法如下:
$ python3 dagda.py check --docker_image <image_name>
此命令將對指定的 Docker 映像進行漏洞分析,並傳回掃描 ID。
$ python3 dagda.py history --id <scan_id>
此命令將根據掃描 ID 傳回歷史掃描結果。
程式碼範例
import docker
# 建立 Docker 使用者端
client = docker.from_env()
# 提取 Docker 映像
image = client.images.pull('nginx:latest')
# 分析 Docker 映像
dagda_result = dagda.analyze(image)
# 列印分析結果
print(dagda_result)
內容解密:
此範例程式碼展示瞭如何使用 Python 的 Docker SDK 提取 Docker 映像,並使用 Dagda 對其進行分析。首先,我們建立了一個 Docker 使用者端,然後提取了最新的 Nginx 映像。接著,我們呼叫 Dagda 的 analyze 方法對映像進行分析,最後列印出分析結果。
這段程式碼演示瞭如何將 Dagda 整合到自動化流程中,以便在 CI/CD 管道中進行容器安全檢測。透過這種方式,可以在早期發現並修復安全問題,從而提升整體開發流程的安全性。
容器安全掃描工具詳解
在容器化技術日益普及的今天,確保容器映像的安全性變得至關重要。本篇文章將探討多種用於掃描容器映像漏洞的工具,包括 Dagda、OWASP Dependency Check、MicroScanner 以及 Clair scanner,並詳細介紹它們的使用方法、特點及優勢。
Dagda
Dagda 是一款專門用於掃描 Docker 映像漏洞的工具。它能夠深入分析映像中的各個層,檢測出潛在的安全漏洞。
使用 Dagda 掃描 Docker 映像
要使用 Dagda,首先需要執行 Dagda 的掃描指令碼。該指令碼會對指定的 Docker 映像進行全面掃描,並輸出掃描結果。
# 執行 Dagda 掃描指令碼
./dagda.py scan <image_name>
Dagda 的優勢
- 能夠深入分析 Docker 映像的各個層
- 提供詳細的漏洞報告
內容解密:
./dagda.py scan <image_name>:這條命令用於啟動 Dagda 對指定的 Docker 映像進行掃描。<image_name>需要替換為實際的映像名稱。- Dagda 透過分析映像的各個層來檢測漏洞,這使得它能夠提供詳細的漏洞報告,幫助使用者及時修復安全問題。
OWASP Dependency Check
OWASP Dependency Check 是另一款強大的工具,用於掃描專案依賴項中的已知漏洞。它支援多種程式語言,包括 Java、Python、Node.js、JavaScript、Ruby 和 PHP。
使用 OWASP Dependency Check
OWASP Dependency Check 可以作為命令列工具或 Maven 外掛使用。以下是使用 Docker 映像執行 OWASP Dependency Check 的示例:
# 提取 OWASP Dependency Check 的 Docker 映像
docker pull deepfenceio/deepfence_depcheck
# 初始化漏洞資料函式庫
docker run -ti -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker/:/fenced/mnt/host/var/lib/docker/:rw -v /:/fenced/mnt/host/:ro -v /home/user/db:/tmp:rw deepfenceio/deepfence_depcheck -u true
# 掃描指定的 Docker 映像
docker run -ti -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker/:/fenced/mnt/host/var/lib/docker/:rw -v /:/fenced/mnt/host/:ro -v /home/user/db:/tmp:rw deepfenceio/deepfence_depcheck -t all -i deepfenceio/fis-java-openshift -j true
OWASP Dependency Check 的優勢
- 支援多種程式語言
- 能夠生成詳細的漏洞報告
內容解密:
docker pull deepfenceio/deepfence_depcheck:提取 OWASP Dependency Check 的 Docker 映像。- 初始化漏洞資料函式庫的命令中,掛載了多個卷,以便存取 Docker 的相關資訊並儲存資料函式庫更新。
-t all和-i deepfenceio/fis-java-openshift引數指定了要掃描的映像名稱和掃描的深度。- OWASP Dependency Check 能夠生成詳細的 JSON 格式報告,方便使用者進一步處理和分析。
MicroScanner
MicroScanner 是由 Aqua Security 開發的一款輕量級容器映像掃描工具。它能夠快速檢測映像中的漏洞。
使用 MicroScanner
要使用 MicroScanner,首先需要在 Aqua Security 的網站註冊並取得 token。然後,可以在 Dockerfile 中新增 MicroScanner 的相關指令:
FROM python:3.7
RUN apt-get update && apt-get -y install ca-certificates
ADD https://get.aquasec.com/microscanner /
RUN chmod +x microscanner
ARG token
RUN ./microscanner ${token}
RUN echo "No vulnerabilities!"
建構映像時,需要傳入註冊獲得的 token:
docker build --build-arg=token=<your_token> --no-cache .
MicroScanner 的優勢
- 輕量級,易於整合到 CI/CD 流程中
- 能夠快速檢測映像中的漏洞
內容解密:
ADD https://get.aquasec.com/microscanner /:下載 MicroScanner 的二進位制檔案。RUN ./microscanner ${token}:執行 MicroScanner,使用傳入的 token。- MicroScanner 能夠在建構階段檢測出映像中的漏洞,並輸出 JSON 格式的報告。
Clair scanner 和 quay.io repository
Clair 是 CoreOS 開源的一款靜態容器漏洞分析工具。它透過分析映像的靜態資訊來檢測漏洞,而無需實際執行容器。
Clair 的特點
- 能夠對容器映像進行靜態分析
- 提供 JSON API,方便整合到 CI/CD 流程中
Clair 支援多種 Linux 發行版,能夠提取映像檔案系統中的靜態資訊,並與已知的 CVE 資料函式庫進行比對,從而快速檢測出潛在的安全漏洞。