前言
由于某些安全事件的发生,对于系统安全需要进行进行一步的评估,本次主要使用 vuls 工具对日常主要使用的几个版本操作系统对其进行安全基线的建立和系统安全性的评分。
评估工具
vuls 是一个 Linux/FreeBSD 的无代理漏洞扫描器,使用 go 语言编写。
用到的CVE工具
主要是三个工具,go-cve-dictionary、goval-dictionary、gost(go-security-tracker)
- go-cve-dictionary:该工具用于构建 NVD(国家漏洞数据库)和日本 JVN 的本地副本,根据它们的CVE标识符包含安全漏洞,包括详尽的信息和风险评分。
1 2 3 4 5 6 7 8
| wget https://github.com/kotakanbe/go-cve-dictionary/releases/download/v0.2.1/go-cve-dictionary_0.2.1_linux_amd64.tar.gz tar -zxf go-cve-dictionary_0.2.1_linux_amd64.tar.gz for i in `seq 2002 $(date +"%Y")`; do go-cve-dictionary fetchnvd -years $i; done ... snip ... ls -alh cve.sqlite3 -rw-r--r--. 1 centos centos 51M Aug 6 08:10 cve.sqlite3 -rw-r--r--. 1 centos centos 32K Aug 6 08:10 cve.sqlite3-shm -rw-r--r--. 1 centos centos 5.1M Aug 6 08:10 cve.sqlite3-wal
|
- goval-dictionary:这是用来建立OVAL的本地副本的工具。
1 2 3
| wget https://github.com/kotakanbe/goval-dictionary/releases/download/v0.1.0/goval-dictionary_0.1.0_linux_amd64.tar.gz tar -zxf goval-dictionary_0.1.0_linux_amd64.tar.gz goval-dictionary fetch-redhat 7
|
- gost:是一个 RedHat 或者 Debian 副本的本地安全跟踪器。
1 2 3 4 5
| docker run --rm -i \ -v $PWD:/vuls \ -v $PWD:/var/log/gost \ vuls/gost fetch redhat --after=2016-01-01
|
使用这些工具将 2002年以后的 CVE 事件和 Bug fix 情况在本地建立副本用于测试。时间范围为2002年到2018年9月13日。
vuls 配置
1 2 3 4 5 6 7 8 9 10 11 12
| [servers.172-31-4-82] # 主机地址 host = "172.31.4.82" # 用户名 user = "ec2-user" # ssh 登陆 key 文件路径 keyPath = "/home/username/.ssh/id_rsa" # 扫描模式 fast fast-root deep scanMode = ["fast-root"] # 扫描在运行的 docker 容器,通过 docker exec 实现,所以只能是在运行的容器。 containerType = "docker" containersIncluded = ["${running}"]
|
vuls 模式
vuls 从联网和不联网有两种模式 online 和 offline,本次测试使用 online
vuls 从扫描的角度有三种模式 ,分别是 fast, fast-root, deep。
- fast:快速扫描模式不需要 root 权限,没有依赖性,几乎没有负载扫描目标服务器。
- fast-root: 快速扫描模式扫描使用 root 权限,几乎没有负载扫描目标服务器。可以分析受影响的进程(需要 yum-ps 或者debian-goodies来进行)。
- deep:使用 root 权限进行深度扫描模式。某些命令可能导致高负载,例如获取许多可更新包的。可以生成解析的变更日志。
三种模式对漏洞的扫描程度并没有变化,只是增加了一些附属的功能。所以选择 fast 模式。
vuls 报告
生成报告
单行模式
1 2 3 4 5 6
| vuls report -format-one-line-text
One Line Summary ================ c74 Total: 294 (High:65 Medium:198 Low:24 ?:7) 93/294 Fixed 708 installed, 285 updatable deb8 Total: 490 (High:62 Medium:158 Low:22 ?:248) 11/490 Fixed 512 installed
|
完整模式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| vuls report -format-full-text
c74 (centos7.4.1708) ==================== Total: 23 (High:22 Medium:1 Low:0), 9/23 Fixed, 708 installed, 285 updatable
+---------------+----------------------------------------------------------------------------------+ | CVE-2017-9233 | | +---------------+----------------------------------------------------------------------------------+ | Max Score | 7.5 HIGH (nvd) | | nvd | 7.5/CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H HIGH | | redhat_api | 6.5/CVSS:3.0/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H MODERATE | | nvd | 5.0/AV:N/AC:L/Au:N/C:N/I:N/A:P MEDIUM | | Summary | XML External Entity vulnerability in libexpat 2.2.0 and earlier (Expat XML | | | Parser Library) allows attackers to put the parser in an infinite loop using a | | | malformed external entity definition from an external DTD. | | Mitigation | Do not parse untrusted arbitrary XML data using the expat | | | package. | | CWE | CWE-835: Loop with Unreachable Exit Condition ('Infinite Loop') (redhat_api) | | CWE | [OWASP Top4] CWE-611: Improper Restriction of XML External Entity Reference | | | ('XXE') (nvd) | | Affected PKG | expat-2.1.0-10.el7_3 -> Will not fix | | Confidence | 100 / RedHatAPIMatch | | Source | https://nvd.nist.gov/vuln/detail/CVE-2017-9233 | | CVSSv2 Calc | https://nvd.nist.gov/vuln-metrics/cvss/v2-calculator?name=CVE-2017-9233 | | CVSSv3 Calc | https://nvd.nist.gov/vuln-metrics/cvss/v3-calculator?name=CVE-2017-9233 | | RHEL-CVE | https://access.redhat.com/security/cve/CVE-2017-9233 | | CWE | https://cwe.mitre.org/data/definitions/CWE-835.html | | CWE | https://cwe.mitre.org/data/definitions/CWE-611.html | | OWASP Top10 | https://github.com/OWASP/Top10/blob/master/2017/en/0xa4-xxe.md | +---------------+----------------------------------------------------------------------------------+
... snip ...
|
命令行图形化
通过 tab 键来进行窗口的切换,通过方向键来翻页。
基线测试环境
本次测试主要针对 CentOS 操作系统的 7.2、7.4、7.5 devel安装和 minimal 安装进行测试,建立以建立基线。
devel 安装时选择 “Development and Creative Workstations” 中的 “development Tools”
CentOS 三个版本安装包的数量
|
CentOS 7.2 |
CentOS7.4 |
CentOS 7.5 |
minimal |
285 |
299 |
300 |
dev |
1594 |
1568 |
1640 |
随着版本的更新,越新的版本安装的包会之间变多,
测试结果
CentOS 三个版本的高危漏洞
|
Total |
High |
Medium |
Low |
Fixed |
installed |
updatable |
CentOS 7.2 mini |
886 |
221 |
557 |
107 |
433 |
290 |
212 |
CentOS 7.2 devel |
2206 |
554 |
1446 |
205 |
1134 |
1594 |
1020 |
CentOS 7.4 mini |
572 |
122 |
374 |
75 |
124 |
304 |
178 |
CentOS 7.4 devel |
1393 |
294 |
941 |
157 |
333 |
1568 |
661 |
CentOS 7.5 mini |
491 |
100 |
327 |
63 |
43 |
305 |
79 |
CentOS 7.5 devel |
1141 |
213 |
795 |
132 |
85 |
1640 |
229 |
通过观察上述结果发现,
- 安装的软件越多,带来的漏洞越多。所以建议尽量使用 mini 镜像,然后开始安装需要的软件,避免引入漏洞,扩大被攻击面。
- 随着版本的更新,总的漏洞数量和高危漏洞数量都在减少。所以尽量使用新的操作系统发行版。
======================
Erdong, A Linux user !