镜像漏洞的静态分析 - 介绍CoreOS 的最新出版的 第一个稳定版Clair


最近coreos 发布了第一个稳定版的 Clair。 Clair 是用于静态分析镜像漏洞的。

项目地址: https://github.com/coreos/clair
安装说明: https://github.com/coreos/clai ... ME.md
api使用说明: https://github.com/coreos/clai ... ME.md

说明里有些不到位的地方,我自己整理了一下,方便大家理解这个产品。

Clair的安装:

Clair 仓库里的文档不是很全,我用下面的命令在docker 安装了Clair
$ docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres
$ mkdir $HOME/clair_config
$ curl -L https://raw.githubusercontent.com/coreos/clair/master/config.example.yaml -o $HOME/clair_config/config.yaml

编辑 $HOME/clair_config/config.yaml # Add the URI for your postgres database
修改这行:    source: postgresql://postgres:mysecretpassword@postgres:5432?sslmode=disable

$ docker run -d --link some-postgres:postgres -p 6060-6061:6060-6061 -v $HOME/clair_config:/config quay.io/coreos/clair -config=/config/config.yaml


一开始只有两个namespaces,需要运行一段时间,namespaces会自动增加的。应该是后台在定期的更新。

$ http GET http://192.168.99.100:6060/v1/namespaces
HTTP/1.1 200 OK
Content-Encoding: gzip
Content-Length: 139
Content-Type: application/json;charset=utf-8
Date: Wed, 23 Mar 2016 13:40:29 GMT
Server: clair

{
"Namespaces": [
    {
        "Name": "debian:9"
    },
    {
        "Name": "debian:7"
    },
    {
        "Name": "debian:unstable"
    },
    {
        "Name": "debian:8"
    },
    {
        "Name": "debian:6"
    },
    {
        "Name": "ubuntu:15.04"
    },
    {
        "Name": "ubuntu:14.04"
    },
    {
        "Name": "ubuntu:14.10"
    },
    {
        "Name": "ubuntu:12.04"
    },
    {
        "Name": "ubuntu:15.10"
    },
    {
        "Name": "ubuntu:12.10"
    },
    {
        "Name": "ubuntu:13.04"
    },
    {
        "Name": "centos:6"
    },
    {
        "Name": "centos:7"
    },
    {
        "Name": "alpine:3.3.1"
    }
]
}

找出docker 的地址:

安装后,会有个6060端口和6061 端口开放,如果你是在Mac OSX 里通过docker toolbox运行的话,需要找到docker-machine 的IP 地址:
$ docker-machine ip default
192.168.99.100


如果是在linux运行的话,就用localhost

安装httpie

另外建议下载httpie 来方便的运行 API 命令, 安装指南在这里: https://github.com/jkbrzt/httpie

安装 analyze-local-images 工具

$ export GOPATH=~/go
$ go get -u github.com/coreos/clair/contrib/analyze-local-images


查验镜像漏洞

$ docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
postgres               latest              sha256:dbc8c        7 days ago          264.6 MB

$ ~/go/bin/analyze-local-images -endpoint "http://192.168.99.100:6060" -my-address "192.168.99.1"  sha256:dbc8c
2016-03-24 10:44:22.905841 I | Saving sha256:dbc8c to local disk (this may take some time)
2016-03-24 10:45:29.771654 I | Retrieving image history
2016-03-24 10:45:29.777688 I | Setting up HTTP server (allowing: 192.168.99.100)
2016-03-24 10:45:29.976925 I | Analyzing 22 layers...
2016-03-24 10:45:29.976975 I | Analyzing 0456b61ad24ba6753d46e19e2586c22aa42213d03010ae9ff2a98e80d806077f
2016-03-24 10:45:33.546126 I | Analyzing c40c73f26c50e2f85ed08dcea6a69b3e70b7469db8471d3d73c17698db321c5e
2016-03-24 10:45:33.599194 I | Analyzing a8c33d342baa99c8ca1dd818cbfe7cdf5bd5050598dad2f7b195abe7dbd0ba63
2016-03-24 10:45:33.622768 I | Analyzing 6c24b3b29a121b0a742d0b36976275cdb5142b414f8125332ed4c5f493302ac1
2016-03-24 10:45:33.648919 I | Analyzing 9e9c6b30783b8ab43213fff1c6499c032e6a899b15a41b341b4e9ed3d0ea8629
2016-03-24 10:45:33.753044 I | Analyzing 35b03b84efe8ee4b85593eb2029f6360d389c0d3add0bcf1e48440bcd15cded1
2016-03-24 10:45:34.006911 I | Analyzing a1cdc76a0e6d54731954597941702f1f4ddc14a53ca7879ea2a25feff18a70fc
2016-03-24 10:45:34.018243 I | Analyzing 8356a9f56af927dd67b4eef260837d0c9a86442a48ee57c9bf86cc1a89fa21b3
2016-03-24 10:45:34.031197 I | Analyzing fb8e51d2cdf18924a992d05f1a609a8fcf859633ebca655c8ba3a3f50d78a355
2016-03-24 10:45:34.090228 I | Analyzing 60e6892ba314d8f72d14764ab68f9b95a76de973ab20662a6fd17b087f216663
2016-03-24 10:45:34.103962 I | Analyzing e71252ece3e652476d7490dc5a96c864d7e6b8e5debd5e151d892f8cc652eb51
2016-03-24 10:45:34.114411 I | Analyzing 8abd6019d2f1a1f0a43643576176f739eb5771e477202cb36221780bd5c369d4
2016-03-24 10:45:34.129347 I | Analyzing be8449210eef62d3c6781bfaf9d69e8e2492496bbdb20fa97aa59800c83dc51a
2016-03-24 10:45:36.412017 I | Analyzing 643ba7afebaac94c7ee7bb9dabdcf1235f56ee26c8e44ec1206ab03baa8b09a8
2016-03-24 10:45:36.431959 I | Analyzing 4600be77f144b172cfc663e770fb835e8ba5218148b77eb1f3d00875b5c246c0
2016-03-24 10:45:36.451772 I | Analyzing cf8efbeab4f35d1d994e96f3f57530685082848b55e5195b4aa54a5e6d40b88c
2016-03-24 10:45:36.467521 I | Analyzing 0c0f765698a0286808a0b69e35e59a4904b694ee9870e5785e429ee7c0086b9b
2016-03-24 10:45:36.482545 I | Analyzing e862bad5c87a3b139e1d20dcb09bf4abe44db1be4884d97656b1bc3e98a5c332
2016-03-24 10:45:36.557267 I | Analyzing 311e38f6789a18fe2fb1b0ad7d7fb6b77d2258ca9e8a674365183089cd10f343
2016-03-24 10:45:36.570596 I | Analyzing 0d3a6ad76dfad47972a136fb4ff8f18c09b58d6779eb0596b0b49f91ba6e2a51
2016-03-24 10:45:36.581846 I | Analyzing 5df3c3fb8871a21b0d7b399125bbd6ba896ae506bfeb20bccbef39accc25ee71
2016-03-24 10:45:36.596228 I | Analyzing c5eb573339b364fb24979b5bcdac7d37960e5a2a24bab57aa502487b3d97c4d8
2016-03-24 10:45:36.615809 I | Retrieving image's vulnerabilities
Clair report for image sha256:dbc8c (2016-03-23 23:45:37.910712412 +0000 UTC)
CVE-2015-8804 (High)
x86_64/ecc-384-modp.asm in Nettle before 3.2 does not properly handle carry
propagation and produces incorrect output in its implementation of the P-384
NIST elliptic curve, which allows attackers to have unspecified impact via
unknown vectors.

Package:       nettle @ 2.7.1-5
Link:          https://security-tracker.debian.org/tracker/CVE-2015-8804
Layer:         be8449210eef62d3c6781bfaf9d69e8e2492496bbdb20fa97aa59800c83dc51a

CVE-2016-3191 (High)
The compile_branch function in pcre_compile.c in PCRE 8.x before 8.39 and
pcre2_compile.c in PCRE2 before 10.22 mishandles patterns containing an
(*ACCEPT) substring in conjunction with nested parentheses, which allows remote
attackers to execute arbitrary code or cause a denial of service (stack-based
buffer overflow) via a crafted regular expression, as demonstrated by a
JavaScript RegExp object encountered by Konqueror, aka ZDI-CAN-3542.

Package:       pcre3 @ 2:8.35-3.3+deb8u2
Link:          https://security-tracker.debian.org/tracker/CVE-2016-3191
Layer:         0456b61ad24ba6753d46e19e2586c22aa42213d03010ae9ff2a98e80d806077f


endpoint 就是docker 的IP, my-address 就是你和clair容器通讯时的IP。sha256:dbc8c 是镜像的 ID

暂时不支持alpine linux。

2 个评论

老师您好,看了您的文章有一些问题,冒昧问一下,我是在CentOS7系统下进行安装,在进行“安装 analyze-local-images 工具”这一步时报错,请问您能不能给讲下这一步的具体步骤?非常感谢
老师您好,看了您的文章《镜像漏洞的静态分析 - 介绍CoreOS 的最新出版的 第一个稳定版Clair》,在进行配置的时候,执行到运行clair容器docker run --name clair-test2 -d --link some-postgres:postgres -p 6060-6061:6060-6061 -v /root/clair_config:/config quay.io/coreos/clair -config=/config/config.yaml时,查看容器运行日志发现连不上数据库:2017-05-18 09:59:39.829485 C | main: failed to load configuration: could not load configuration: no database source specified。不知道您知不知道是什么原因,能否给讲解一下,谢谢,打扰了

要回复文章请先登录注册