Docker安全自動化掃描工具對比測試
題外話:
這點兒東西測試了快兩天,各種坑是真的多,望後來者可以引以為鑑
正文
本次對主流的Docker安全自動化掃描工具進行了測試比較,測試比較結果如下表所示:
工具 | Clair | Anchore | DockerScan |
---|---|---|---|
工具 | Clair | Anchore | DockerScan |
環境搭建 | 複雜 | 簡單(慢) | 簡單 |
安裝相容性 | 差 | 好 | 差 |
掃描 | 需要先上傳映象 | 直接掃描 | 直接掃描 |
掃描速度 | 快 | 快 | 快 |
漏洞資料庫 | CVE | CVE | 無 |
掃描結果 | 漏洞 | 漏洞+其他 | 其他 |
Ubuntu | OK | OK | OK |
CentOS | OK | OK | 未成功 |
報告輸出 | html報告 | 控制檯報告(有格式排版) | 控制檯報告(無格式排版) |
其他說明 | 通過對容器的layer進行掃描,對映象進行特徵提取,依據特徵匹配CVE漏洞。 | 側重對映象的審計,通過對容器的layer進行掃描發現漏洞,基於CVE資料庫。功能強大,其中就包含了DockerScan的功能。 | 提取映象中的多種資訊,依據這些資訊人工判斷該映象是否存在安全隱患。 |
先上結論:建議使用Anchore 理由:功能最強大,使用最簡單
部分對比項說明:
1、環境搭建:
Clair
環境搭建依賴複雜眾多,需要修改一些配置檔案,同時需要go語言環境,環境搭建出錯概率極高,同時會因為系統環境不同而出現錯誤。
Anchore
環境搭建簡單,需要同步漏洞資料庫,該過程比較耗時(約30-60分鐘)。環境相容性好,基本不出錯。
DockerScan
2、掃描資料 Anchore可以掃描的功能最多,包含了Clair和DockerScan的主要功能。
既然推薦了Anchore,那自然是要詳細說明的!
Anchore安裝使用說明
1、安裝依賴
注:如果有就不用再安裝了 注:docker版本驗證:docker version
依賴 | 安裝說明 |
---|---|
Docker | >1.10 |
Epel-release | yum install epel-release |
Rpm-python | yum install rpm-python |
dpkg | yum install dpkg |
Python-pip | yum install python-pip |
2、安裝Anchore
安裝 | 安裝說明 |
---|---|
安裝: | pip install anchore |
環境變數: | export PATH=~/.local/bin:$PATH |
安裝完確認: | anchore --version |
更新列表: | anchore feeds list |
更新資料庫: | anchore feeds sync 實際中可能會執行失敗,相信博主是網路的問題,多執行幾次說不定哪次就執行成功了 |
更新過程是這樣的效果: (這張圖是網上扒來的,實際測試中取決於網路,網路好的話就是下圖這樣。博主在實際測試中,每次都是差不多有一半是掉線的!)
3、映象使用
拉取映象:docker pull nginx
(以nginx為例)
檢視已安裝映象:docker images
效果是這樣的:
4、Anchore使用
幫助文件:anchore --help
常用功能:
對映象進行分析:anchore analyze --image nginx:latest --imagetype base
生成結果報告:anchore gate --image nginx:latest
CVE漏洞掃描:anchore query --image nginx:latest cve-scan all
與純淨映象的區別:anchore query --image nginx:latest show-file-diffs base
列表檔案詳細:anchore query --image nginx:latest list-files-detail all
映象特徵提取:anchore toolbox --image nginx:latest show
5、詳細命令說明
(示例命令標紅色的引數為對應的說明。博主英語很差,翻譯是一條一條複製到百度翻譯裡面輸出的) (另外,在這裡翻譯了絕大多數,還有個別引數博主覺得沒什麼卵用,就不翻譯了)
analyze:
anchore analyze --image
nginx:latest --imagetype
base
命令 | 說明 |
---|---|
–force | 即使資料庫中已存在分析也要進行分析 |
–image | 處理指定的映象 |
–imagefile | 在指定檔案中列出映象ID |
–include-allanchore | 包括所有映象 |
–dockerfile <file> | 分析docker檔案映象 |
–imagetype <typetext> | 指定正在分析的映象型別 |
–skipgates | 不要將門作為分析的一部分 |
–layerstrategy | 分析映象歷史中的策略的名稱 |
query:
anchore query --image nginx:latest list-files-detail
all
命令 | 說明 |
---|---|
list-gem-detail | 列出增長細節 |
show-dockerfile | 顯示docker檔案 |
list-python-package-detail | 列出python包的細節 |
show-pkg-diffs | 顯示包的差異 |
has-final-gateaction | 最後關門 |
get-retrieved-files | 獲取檢索到的檔案 |
show-non-packaged-files | 顯示非打包檔案 |
show-familytree | 顯示家庭樹 |
list-java-package-detail | 列出Java包的詳細資訊 |
list-files | 列出檔案 |
list-npms | 列出NPM |
list-package-detail | 列出包細節 |
list-packages | 列出包 |
list-npm-detail | 列出NPM細節 |
list-python-packages | 列出python軟體包 |
list-image-attrs | 列出影象吸引力 |
has-gateaction | 關門 |
show-layer-info | 顯示塗層資訊 |
show-layers | 顯示圖層 |
list-gems | 列表的增長 |
list-package-licenses | 列出軟體包許可證 |
has-package | 有包裝 |
list-java-packages | 列出Java包 |
list-retrieved-files | 列出檢索檔案 |
show-distro | 展示發行版 |
list-content-search-matches | 列表內容搜尋匹配 |
show-non-packaged-files-diff | 顯示非打包檔案差異 |
show-file-diffs | 顯示檔案差異 |
list-files-detail | 詳細列出檔案 |
cve-scan-simple | 簡單的漏洞掃描 |
size-bins | 尺寸 |
cve-scan | 漏洞掃描 |
base-status | 基本狀態 |
distro-bins | 分開儲物 |
common-packages | 常用包裝 |
anchore query --image
nginx:latest list-files-detail all
命令 | 說明 |
---|---|
–image | 處理指定映象ID |
–imagefile | 在指定檔案中列出映象ID |
–include-allanchore | 包括所有已知的映象 |
gate:
anchore gate --image
nginx:latest
命令 | 說明 |
---|---|
–force | 即使資料庫中已存在分析也要進行分析 |
–image | 處理指定的映象 |
–imagefile | 在指定檔案中列出映象ID |
–include-allanchore | 包括所有映象 |
–editpolicy | 編輯指定映象的門策略 |
–rmpolicy | 刪除指定映象的策略,恢復預設策略 |
–listpolicy | 列出指定映象的當前門策略 |
–updatepolicy <file> | 將輸入門策略檔案儲存為指定映象的策略 |
–policy <file> | 使用指定的策略檔案而不是預設檔案 |
–run-bundle | 使用anchore策略包進行評估 |
–bundlefile <file> | 從指定檔案中使用指定的捆綁JSON |
–usetag <imagetag> | 使用指定標籤來使用Run評估輸入物件 |
–resultsonly | 只顯示評估結果 |
–show-gatehelp | 顯示可用於構建anchore策略的所有門名、觸發器和引數 |
–show-policytemplate | 基於所有安裝的門/觸發器生成策略模板 |
–whitelist | 編輯評估的門觸發器和可選白名單 |
–global-whitelist <file> | 使用指定的全域性白名單檔案 |
–show-triggerids | 在輸出中顯示觸發的門ID |
–show-whitelisted | 展示白名單 |