开源 容器_5个用于容器安全的开源工具

开源 容器

随着容器成为打包和部署应用程序的一种几乎无处不在的方法,恶意软件的实例已经增加。 现在,保护容器是DevOps工程师的头等大事。 幸运的是,可以使用许多开源程序来扫描容器和容器图像。 让我们看一下五个这样的工具。

锚地 | 克莱尔 | 达格达 | OpenSCAP | Sysdig Falco


锚地

Anchore引擎是一个开源项目,用于检查,分析和认证Docker映像。 Anchore可以作为Docker映像使用,可以单独运行或与业务流程平台(例如Kubernetes)一起运行。 Anchore从Anchore的托管云服务中获取安全数据。 Anchore也可以作为Jenkins插件使用,使您可以将容器图像扫描集成为CI / CD工作流程的一部分。

由于Docker compose文件,Anchore Engine的安装过程非常简单。 安装说明可在GitHub页面以及支持知识库中找到 。 Anchore引擎提供了后端/服务器端组件,而要扫描图像,Anchore需要另一个组件。 扫描程序可以采用CLI工具的形式,例如Anchore CLIJenkins插件 ,两者均由Anchore开发和维护。

要启动扫描,请使用以下命令将图像添加到Anchore Engine:

 anchore-cli image add python:3 

此命令提交要扫描的图像。 提交后,Anchore将启动图像扫描。 不幸的是,除了键入(或编写脚本)外,似乎没有办法知道扫描何时完成:

 anchore-cli image get python:3  

监视状态。 扫描图像后,使用以下命令列出图像中报告的CVE:


   
   
anchore-cli image vuln python:3 os

Vulnerability ID

严重程度

固定

漏洞网址

CVE-2017-1000379

linux-libc-dev-4.9.88-1 + deb9u1

没有

https://security-tracker.debian.org/tracker/CVE-2017-1000379

CVE-2017-14062

libidn11-1.33-1

没有

https://security-tracker.debian.org/tracker/CVE-2017-14062

CVE-2017-15400

libcups2-2.2.1-8 + deb9u1

没有

https://security-tracker.debian.org/tracker/CVE-2017-15400

CVE-2017-17458

mercurial-4.0-1 + deb9u1

没有

https://security-tracker.debian.org/tracker/CVE-2017-17458

尽管CLI报告了CVE漏洞,但vuln命令可以报告非OS漏洞。 在此示例中,运行它不会报告任何数据:


   
   
anchore-cli image vuln python:3
os: available
non-os: available

anchore-cli image vuln python:3 non-os
<no output>

锚定扫描还可以报告图像中存在的伪像,包括Python包,Ruby gem,os包以及文件系统上的所有其他文件:

 anchore-cli image content python:3 python 

Package

位置

Python

2.7.13

/usr/lib/python2.7/lib-dynload

argparse

1.2.1

/usr/lib/python2.7

bzr

2.8.0.dev1

/usr/lib/python2.7/dist-packages

configobj

5.0.6

/usr/lib/python2.7/dist-packages

mercurial

4

/usr/lib/python2.7/dist-packages

pip

10.0.1

/usr/local/lib/python3.7/site-packages

setuptools

39.2.0

/usr/local/lib/python3.7/site-packages

six

1.10.0

/usr/lib/python2.7/dist-packages

wheel

0.31.1

/usr/local/lib/python3.7/site-packages

wsgiref

0.1.2

/usr/lib/python2.7

使用此数据,Anchore可以使您根据策略评估映像,以检查安全性合规性。 为此,请键入:


   
   
anchore-cli evaluate check python:3
Image Digest: sha256:9d49a3fdfd4198061e10241ee2ff9d75fb270c80747973360c22cd553f1e228c
Full Tag: docker.io/python:3
Status: fail
Last Eval: 2018-07-11T13:20:58Z
Policy ID: 2c53a13c-1765-11e8-82ef-23527761d060

默认情况下,Anchore仅提供评估摘要。 要获得完整评估,您可以传递--detail标志,该标志提供了完整评估:


   
   
anchore-cli evaluate check python:3 --detail
Image Digest: sha256:9d49a3fdfd4198061e10241ee2ff9d75fb270c80747973360c22cd553f1e228c
Full Tag: docker.io/python:3
Image ID: 17453243214e5dd215bdac0f00c639d82941e1d577ee959c842de73d533da572
Status: fail
Last Eval: 2018-07-11T13:22:12Z
Policy ID: 2c53a13c-1765-11e8-82ef-23527761d060
Final Action: stop
Final Action Reason: policy_evaluation

Gate

触发

详情

状态

dockerfile

指令

找不到Dockerfile指令'HEALTHCHECK',匹配条件'not_exists'检查

警告

vulnerabilities

操作系统软件包类型(dpkg)中存在中等漏洞-imagemagick-6-common(CVE-2008-3134- https: //security-tracker.debian.org/tracker/CVE-2008-3134)

警告

vulnerabilities

在OS软件包类型(dpkg)中发现的中等漏洞-imagemagick-6-common(CVE-2017-14528- https: //security-tracker.debian.org/tracker/CVE-2017-14528)

警告

vulnerabilities

在OS软件包类型(dpkg)中发现的中等漏洞-imagemagick-6-common(CVE-2018-5248- https: //security-tracker.debian.org/tracker/CVE-2018-5248)

警告

vulnerabilities

在OS软件包类型(dpkg)中发现中等漏洞-imagemagick-6-common(CVE-2018-11251- https: //security-tracker.debian.org/tracker/CVE-2018-11251)

警告

vulnerabilities

操作系统软件包类型(dpkg)中发现的中等漏洞-Merurial(CVE-2018-1000132- https: //security-tracker.debian.org/tracker/CVE-2018-1000132)

警告

门,阈值和评估是针对上面提到的ID的策略执行的。 通过键入以下内容检查策略:

 anchore-cli policy get 2c53a13c-1765-11e8-82ef-23527761d060 --detail 

这将输出该策略的JSON。 开源的Anchore Engine可让您定义和激活自定义策略,但是它没有可视化策略编辑器,因此尝试手动编辑策略可能很棘手。 安克雷(Anchore)也可以与私人注册中心配合使用; 使用以下方法添加它们:

 anchore-cli registry add <registry> <username> <password> 

还可以将Anchore配置为扫描存储库并添加在存储库中找到的所有标签。 添加后,Anchore引擎将定期轮询注册表并安排对其进行分析。

克莱尔

ClairCoreOS的一种用于容器映像的开源漏洞扫描程序和静态分析工具,它是为CoreOS的容器注册表Quay.io提供支持的同一工具。

Clair定期从各种来源获取漏洞信息,并将其保存在数据库中。 Clair公开了供客户端调用和执行扫描的API。 就是说,Clair是“仅后端”工具,没有扫描仪或用于启动扫描的前端。 有迹象表明,与克莱尔集成了一些第三方的工具,而是从一个终端扫描图像作为部署脚本的一部分,唯一合理的选择似乎是KLAR由optiopay。

Clair的安装说明可以在其Github存储库中找到,并且可以作为Docker的容器运行。 Clair还附带了一个Docker Compose文件和一个Helm Chart,以简化安装,或者可以从源代码进行编译 。 这些步骤仅引导服务器-要运行扫描,您需要兼容的前端。

尽管Clair的集成页面列出了可用的选项,但在本文中,我查看了可用的命令行实用程序。 其中, klar是最简单,最快的。 klar可以从其GitHub版本页面下载或从头开始编译

运行klar很简单。 要开始扫描,语法为:

 CLAIR_ADDR=<Clair server URL>  klar <image name to be scanned> 

例如,假设我们使用Docker Compose文件启动了Clair服务器,并且我们想扫描python:3 Docker映像,则命令将如下所示:

 CLAIR_ADDR=localhost klar python:3 

Klar将提取Docker映像(如果主机上不存在)并针对Clair运行扫描。 完成后,它将显示如下报告:


   
   
Analysing 9 layers

Got results from Clair API v3
Found 488 vulnerabilities
Unknown: 22
Negligible: 181
Low: 150
Medium: 113
High: 22

CVE-2017-12424: [High]

Found in: shadow [1:4.4-4.1]

Fixed By:
In shadow before 4.5, the newusers tool could be made to manipulate internal data structures in ways unintended by the authors. Malformed input may lead to crashes (with a buffer overflow or other memory corruption) or other unspecified behaviors. This crosses a privilege boundary in, for example, certain web-hosting environments in which a Control Panel allows an unprivileged user account to create subaccounts.
https://security-tracker.debian.org/tracker/CVE-2017-12424

Klar允许您通过环境变量自定义其功能。 一些值得注意的包括:

CLAIR_OUTPUT :让您定义klar显示的漏洞的严重性。 例如,将CLAIR_OUTPUT设置为Medium意味着klar将仅显示标记为中级或更高级别的漏洞。

JSON_OUTPUT :如果设置为true,klar将以JSON输出漏洞报告。

WHITELIST_FILE :klar不会将此处列出的CVE报告为漏洞。 是YAML文件; klar的存储库中提供了一个示例配置

DOCKER_USER / DOCKER_PASSWORD / DOCKER_TOKEN :如果您有需要身份验证的注册表,则通过传递这些注册表项可以使klar使用这些凭据提取图像。

达格达

Dagda对已知漏洞执行静态分析。 它使用ClamAV防病毒引擎来扫描和检测Docker映像中包含的木马,病毒和恶意软件。 Dagda还与Sysdig Falco集成,以监视正在运行的Docker容器中的异常情况。

Dagda也随附Docker Compose文件,使其易于评估。 Docker Compose文件和相关安装说明可在Dagda的Github存储库中找到 。 在运行Dagda CLI之前,必须设置Dagda服务器的主机名和端口。 为此,请使用以下命令:


   
   
export DAGDA_HOST='127.0.0.1'
export DAGDA_PORT=5000

在使用Dagda进行分析之前,您需要初始化漏洞数据库。 为此,请使用以下命令:

 python3 dagda.py vuln --init 

这会花费一些时间,可以使用--init_status选项监视以下命令的结果来进行监视:

 watch python3 dagda.py vuln --init_status 

漏洞数据库准备就绪后,状态将更新:


   
   
1. Every 2.0s: python dagda.py vuln --init...  sabhat: Sun Jul 15 16:39:27 2018
2.
3. {
4.     "status": "Updated",
5.     "timestamp": "2018-07-15 11:04:51.234453"
6. }
7.  Now, we can start using Dagda.
8. Dagda lets us search for specific CVEs
9.
10. python dagda.py vuln --cve_info CVE-2009-2890
11. [
12.     {
13.         "cveid": "CVE-2009-2890",
14.         "cvss_access_complexity": "Medium",
15.         "cvss_access_vector": "Network",
16.         "cvss_authentication": "None required",
17.         "cvss_availability_impact": "None",
18.         "cvss_base": 4.3,
19.         "cvss_confidentiality_impact": "None",
20.         "cvss_exploit": 8.6,
21.         "cvss_impact": 2.9,
22.         "cvss_integrity_impact": "Partial",
23.         "cvss_vector": [
24.             "AV:N",
25.             "AC:M",
26.             "Au:N",
27.             "C:N",
28.             "I:P",
29.             "A:N"
30.         ],
31.         "cweid": "CWE-79",
32.         "mod_date": "16-08-2017",
33.         "pub_date": "20-08-2009",
34.         "summary": "Cross-site scripting (XSS) vulnerability in results.php in PHP Scripts Now Riddles allows remote attackers to inject arbitrary web script or HTML via the searchquery parameter."
35.     }
36. ]

Dagda还允许您按产品搜索CVE:


   
   
1. python dagda.py vuln --product openssh
2. [
3.     {
4.         "CVE-1999-1010": {
5.             "cveid": "CVE-1999-1010",
6.             "cvss_access_complexity": "Low",
7.             "cvss_access_vector": "Local access",
8.             "cvss_authentication": "None required",
9.             "cvss_availability_impact": "None",
10.             "cvss_base": 2.1,
11.             "cvss_confidentiality_impact": "Partial",
12.             "cvss_exploit": 3.9,
13.             "cvss_impact": 2.9,
14.             "cvss_integrity_impact": "None",
15.             "cvss_vector": [
16.                 "AV:L",
17.                 "AC:L",
18.                 "Au:N",
19.                 "C:P",
20.                 "I:N",
21.                 "A:N"
22.             ],
23.             "cweid": "CWE-0",
24.             "mod_date": "17-10-2016",
25.             "pub_date": "14-12-1999",
26.             "summary": "An SSH 1.2.27 server allows a client to use the \"none\" cipher, even if it is not allowed by the server policy."
27.         }

使用以下语法扫描Docker映像:


   
   
1. python3 dagda.py check --docker_image python:3
2. {
3.     "id": "5b4b2ef44785ff0001b76e9d",
4.     "msg": "Accepted the analysis of <python:3>"
5. }

上面获得的ID可用于通过以下方式获取详细报告:


   
   
1. python dagda.py history python:3 --id 5b4b32ec4785ff000106c693
2. [
3.     {
4.         "id": "5b4b2ef44785ff0001b76e9d",
5.         "image_name": "python:3",
6.         "status": "Analyzing",
7.         "timestamp": "2018-07-15 11:24:36.866439"
8.     }
9. ]

分析可能需要一些时间,因此请耐心等待。 分析之后,可以使用以下命令获取详细的报告:


   
   
1. python dagda.py history python:3 --id 5b4b32ec4785ff000106c693
2. [
3.     {
4.         "id": "5b4b32ec4785ff000106c693",
5.         "image_name": "python:3",
6.         "static_analysis": {
7.             "malware_binaries": [],
8.             "os_packages": {
9.                 "ok_os_packages": 388,
10.                 "os_packages_details": [
11.                     {
12.                         "is_false_positive": false,
13.                         "is_vulnerable": true,
14.                         "product": "bash",
15.                         "version": "4.4",
16.                         "vulnerabilities": [
17.                             {
18.                                 "CVE-2017-5932": {
19.                                     "cveid": "CVE-2017-5932",
20.                                     "cvss_access_complexity": "Low",
21.                                     "cvss_access_vector": "Local access",
22.                                     "cvss_authentication": "None required",
23.                                     "cvss_availability_impact": "Partial",
24.                                     "cvss_base": 4.6,
25.                                     "cvss_confidentiality_impact": "Partial",
26.                                     "cvss_exploit": 3.9,
27.                                     "cvss_impact": 6.4,
28.                                     "cvss_integrity_impact": "Partial",
29.                                     "cvss_vector": [
30.                                         "AV:L",
31.                                         "AC:L",
32.                                         "Au:N",
33.                                         "C:P",
34.                                         "I:P",
35.                                         "A:P"
36.                                     ],
37.                                     "cweid": "CWE-20",
38.                                     "mod_date": "31-03-2017",
39.                                     "pub_date": "27-03-2017",
40.                                     "summary": "The path autocompletion feature in Bash 4.4 allows local users to gain privileges via a crafted filename starting with a \" (double quote) character and a command substitution metacharacter."
41.                                 }
42.                             },
43.                             [....]
44.                         ]
45.                     },
46.                 [...]
47.                 ],
48.                 "total_os_packages": 416,
49.                 "vuln_os_packages": 28
50.             },
51.             "prog_lang_dependencies": {
52.                 "dependencies_details": {
53.                     "java": [],
54.                     "js": [
55.                         {
56.                             "is_false_positive": false,
57.                             "is_vulnerable": true,
58.                             "product": "jquery",
59.                             "product_file_path": "/usr/share/doc/libfreetype6/js/jquery-1.11.0.min.js",
60.                             "version": "1.11.0.min",
61.                             "vulnerabilities": []
62.                         }
63.                     ],
64.                     "nodejs": [],
65.                     "php": [],
66.                     "python": [],
67.                     "ruby": []
68.                 },
69.                 "vuln_dependencies": 1
70.             }
71.         },
72.         "status": "Completed",
73.         "timestamp": "2018-07-15 11:48:41.214345"
74.     }
75. ]

尽管Dagda支持监视容器,但这要求Sysdig Falco处于运行状态。 Dagda不支持扫描存储库或注册表,因此它比按计划或自动注册表扫描更适合按需扫描。

OpenSCAP

安全内容自动化协议 (SCAP)可使用一组特定的标准进行自动化漏洞管理,度量和策略遵从性评估。 OpenSCAP是SCAP实现的一个示例。 OpenSCAP提供了一组用于扫描和合规性管理的工具 ,包括oscap-docker ,可以扫描容器映像。

oscap-docker使您可以使用以下命令来扫描映像是否符合xccdf (可扩展配置清单说明格式):

 oscap-docker image <image-name> xccdf eval --report results.html --profile standard <path to xccdf definition file> 

例如,要扫描CentOS映像:

 oscap-docker image centos xccdf eval --report results.html --profile standard /usr/share/xml/scap/ssg/content/ssg-centos7-xccdf.xml 

结果输出将如下所示:


   
   
1. Title   Disable At Service (atd)
2. Rule    service_atd_disabled
3. Result  pass
4.
5. Title   Disable Network Router Discovery Daemon (rdisc)
6. Rule    service_rdisc_disabled
7. Result  fail
8.
9. Title   Disable Odd Job Daemon (oddjobd)
10. Rule    service_oddjobd_disabled
11. Result  pass
12.
13. Title   Disable Apache Qpid (qpidd)
14. Rule    service_qpidd_disabled
15. Result  pass
16.
17. Title   Disable Automatic Bug Reporting Tool (abrtd)
18. Rule    service_abrtd_disabled
19. Result  pass
20.
21. Title   Disable ntpdate Service (ntpdate)
22. Rule    service_ntpdate_disabled
23. Result  notapplicable
24.
25. Title   Verify and Correct File Permissions with RPM
26. Rule    rpm_verify_permissions
27. Result  fail
28.
29. Title   Verify File Hashes with RPM
30. Rule    rpm_verify_hashes
31. Result  pass
32.
33. Title   Ensure Software Patches Installed
34. Rule    security_patches_up_to_date
35. Result  notchecked

OpenSCAP的CVE扫描容器图像似乎仅适用于RHEL图像。 对于其他人, oscap-docker继续显示消息:

 <image> is not based on RHEL 

从那时开始将不再进行扫描。

Sysdig Falco

虽然它不是纯粹的容器安全性或CVE扫描解决方案,但Sysdig Falco值得一提。 Sysdig Falco监视我们正在运行的Docker容器,并深入了解容器的行为以及容器中的应用程序。 它提供了丰富的默认通知和警报集,并允许您自定义它们的规则。

Sysdig Falco在容器以及Linux主机中均可使用,但是Sysdig建议在主机操作系统上安装它。 以下是在容器和主机操作系统上安装Sysdig Falco的说明:

安装完成后,启动Sysdig Falco:

 sudo falco 

Falco将加载规则并在准备就绪时提供以下消息:


   
   
1. Falco initialized with configuration file /etc/falco/falco.yaml
2. Loading rules from file /etc/falco/falco_rules.yaml:
3. Loading rules from file /etc/falco/falco_rules.local.yaml:

Falco将根据以下规则显示不同严重性级别的消息:


   
   
1. Debug Shell spawned by untrusted binary (user=root shell=sh parent=httpd cmdline=sh -c ls > /dev/null pcmdline=httpd --action spawn_shell --interval 0 --once gparent=event_generator ggparent=docker-containe gggparent=docker-containe ggggparent=dockerd)
2. Notice Known system binary sent/received network traffic (user=root command=sha1sum --action network_activity --interval 0 --once connection=172.17.0.2:56852->10.2.3.4:8192)
3. Informational System user ran an interactive command (user=daemon command=login )
4. Error File below a known binary directory opened for writing (user=root command=event_generator  file=/bin/created-by-event-generator-sh parent=docker-containe pcmdline=docker-containe -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/82dc57b2e8b551e09a07a694763be59193f9b29e64773040a1710560d5570927 -address /var/run/docker/containerd/docker-containerd.sock -containerd-binary /usr/bin/docker-containerd -runtime-root /var/run/docker/runtime-runc gparent=docker-containe)
5. Error File below /etc opened for writing (user=root command=event_generator  parent=docker-containe pcmdline=docker-containe -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/82dc57b2e8b551e09a07a694763be59193f9b29e64773040a1710560d5570927 -address /var/run/docker/containerd/docker-containerd.sock -containerd-binary /usr/bin/docker-containerd -runtime-root /var/run/docker/runtime-runc file=/etc/created-by-event-generator-sh program=event_generator gparent=docker-containe ggparent=dockerd gggparent=systemd)

这些警报有什么用? 首先,可以将它们转发到Splunk等SIEM工具,然后我们可以根据这些警报的数量和频率进一步创建/发出警报。 Falco还可以调用程序并将警报发送到该程序。 例如,我们可以通过对Webhook端点进行cURL调用,将Falco配置为向Slack发送通知。

结论

尽管大多数开源扫描仪是较大的容器安全平台的小组件,但它们的性能令人钦佩。 当推送新图像时,Anchore和Clair提供了用于扫描注册表和存储库的完整解决方案。 Dagda的扫描速度可能会有些慢,但是可以完成这项工作。 对于基于RHEL的映像,OpenSCAP可能集成得很好。

接下来要读什么

翻译自: https://opensource.com/article/18/8/tools-container-security

开源 容器

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值