Clair助力Docker鏡像安全

jopen 8年前發布 | 14K 次閱讀 Docker CoreOS

ClairCoreOS 最近發布的一款 開源容器漏洞掃描工具 。該工具可以交叉檢查Docker鏡像的操作系統以及上面安裝的任何包是否與任何已知不安全的包版本相匹配。漏洞是從特定操作系統的通用漏洞披露( CVE )數據庫獲取。該工具當前支持的操作系統包括 Red HatUbuntuDebian

通過從鏡像文件系統中抽取靜態信息以及維護一個 組成鏡像的不同層 之間的差異列表,可以大大減少分析時間,而且不需要實際運行可能存在漏洞的容器。如果鏡像所依賴的一個靠下的層存在漏洞,那么該鏡像就會被識別為有漏洞,而且,通過 使用圖存儲 ,可以避免重新分析鏡像。

CoreOS 使用Clair分析 用戶上傳到 Quay.io (一個類似DockerHub的容器注冊中心)的Docker鏡像。現已發現, Quay上的大多數鏡像都存在漏洞 ,甚至是像Heartbleed(80%)或Ghost(67%)這樣的著名漏洞。2015年初,一份有關 DockerHub 的報告推斷, 至少有30%的官方鏡像和多達40%的用戶上傳鏡像包含高級漏洞 。期間,在 DockerCon 2015歐洲大會 上,除了其他安全相關的特性外,Docker還宣布了他們自己的鏡像掃描和漏洞檢測項目 Nautilus 。Nautilus并不開源,而且只能運行在Docker Hub上。

市場上還有其他容器漏洞檢測工具,比如IBM的 Vulnerability AdvisorFlawCheck 。它們的主要不同之處在于它們是專有的,在IBM的場景中,僅應用于托管在 Bluemix云產品 上的鏡像。IBM的解決方案還支持 基本的安全策略 (比如,“密碼使用期限應該為90天”),會以同靜態代碼分析工具類似的方式生成警告。

當然,這些工具可以確定是否存在可能有漏洞的包,但不能驗證它們實際上是否已被利用。另外,它們也無法檢測運行實例中的動態行為,比如在運行時安裝有漏洞的包版本。

Clair提供了一個 JSON API ,并且可以在本地運行以檢查容器鏡像,例如,作為持續集成或持續交付管道的一部分。

下面的代碼片段初始化(默認配置)并啟動了一個Clair本地服務:

$ git clone https://github.com/coreos/clair.git

從Github克隆Clair庫

$ cp clair/config.example.yaml clair/config/config.yaml

使用默認設置創建一個初始配置文件

$ docker pull quay.io/coreos/clair:latest

下載一個安裝了Clair的CoreOS容器鏡像

$ docker run -p 6060:6060 -p 6061:6061 -v clair:$PWD/clair/config:ro quay.io/coreos/clair:latest --config=/config/config.yaml

啟動服務——務必等待獲取初始漏洞列表(消息 “升級器:升級完成”)</pre>

<p>
    如果管道生成了可以部署的不可變Docker鏡像,那么漏洞掃描就可以在某個階段成為安全測試的一部分,這可能會中斷管道。例如,下面的代碼 <a href="/misc/goto?guid=4958976735523126859" target="_blank">分析一個名為“tmpimage”的Docker鏡像</a> :
</p>

$ go get -u github.com/coreos/clair/contrib/analyze-local-images

需要安裝go

$ $GOPATH/bin/analyze-local-images tmpimage

analyze-local-images是一個包裝器腳本,分析鏡像中的所有層</pre>

<p>
    上述代碼片段查找鏡像中任意層上的高級或嚴重漏洞。通過 <a href="/misc/goto?guid=4958976735610874851" target="_blank">抽取每個層然后單個提交給Clair的API</a> ,可以指定其他的嚴重性等級。
</p>
<p>
    單個層的完整漏洞列表(任意嚴重性等級,從可忽略到嚴重)可以通過稍后的分析生成,例如通過運行下面的代碼:
</p>

$ curl -s -H "Content-Type: application/json" -X POST -d \
'{
    "ID": "39bb80489af75406073b5364c9c326134015140e1f7976a370a8bd446889e6f8",
    "Path": "/tmp/docker/layers/39bb80489af75406073b5364c9c326134015140e1f7976a370a8bd446889e6f8.tar"
}' \
127.0.0.1:6060/v1/layers

向Clair提交層,分析并存儲在DB中

$ curl -s "127.0.0.1:6060/v1/layers/39bb80489af75406073b5364c9c326134015140e1f7976a370a8bd446889e6f8/vulnerabilities?minimumPriority=Negligible" | python -m json.tool > all_vulnerabilities.json

獲取在層里找到的所有漏洞</pre>

<p>
    此外,CoreOS最近還宣布了 <a href="/misc/goto?guid=4958870219800364285" target="_blank">Tectonic</a> ( <a href="/misc/goto?guid=4958976735730264728" target="_blank">CoreOS的容器即服務產品</a> )中的 <a href="/misc/goto?guid=4958974857245693909" target="_blank">分布式信任計算(DTC)</a> 能力。DTC在整個棧上建立了一個受信任的加密鏈,從應用程序層到容器、操作系統,再到硬件。
</p>
<p>
    查看英文原文: <a href="/misc/goto?guid=4958976735859291546" target="_blank">Clair Helps Secure Docker Images</a> 
</p>

</div>

來自: http://www.infoq.com/cn/news/2016/01/clair-docker-vulnerabilities

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!