使用 vuls 对 CentOS 操作系统安全评估

前言

由于某些安全事件的发生,对于系统安全需要进行进行一步的评估,本次主要使用 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 image。
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
vuls report

单行模式

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 ...

命令行图形化

1
vuls tui

通过 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 !

Er Dong wechat
扫描二维码关注微信公众号
坚持原创技术分享,您的支持将鼓励我继续创作!