openvas 是 nessus 项目的一个开源分支,用于对目标系统进行漏洞评估和管理,openvas 的配置使用相较于 nessus 更加复杂,扫描速度也不如 nessus,但是胜在开源免费。相比于 nessus,openvas 的漏洞评估更加侧重系统内部的漏洞,尤其是在 Linux 内核级的漏洞检测上尤为明显。
在实际工作做,若公司愿意在安全投入足够的资金情况下,仍建议采购商业版的漏扫器, 若投入有限,利用开源的 openvas 实现对系统层面漏洞进行有效管理归集,也能直观的体现出系统的基本风险状态,也不失为一种展现工作成果的方式。
测试系统环境:
部署系统:centos7.4
目标系统:centos7.4 和 Windows server 2012
关闭 selinux,重启主机
更新系统:
yum install -y update
安装依赖包:
yum install -y wget bzip2 texlive net-tools alien gnutls-utils
添加 openvas 的安装源
wget -q -O - https://www.atomicorp.com/installers/atomic | sh
安装 openvas 包:
yum install -y openvas
安装 openvas 包以后,查看可使用的命令:
几个主要命令的简单说明:
openvas-check-setup
检查 openvas 安装状态,安装完成以后检查是否安装完成;
openvas-setup
执行命令安装 openvas
openvassd
启动扫描进程
openvasmd
管理 openvas,可以用于设置管理账户和密码
gsad
启动系统的安全评估进程,提供 web 接口
greenbone-nvt-sync
更新漏洞库的命令
注:保证系统正常运行,必须启动 gsad、openvassd、openvasmd 三个进程, openvas-setup
进行安装 openvas 系统,过程等待时间比较长:
第一步: 设置下载漏洞库的方式,默认使用 rsync 方式,安装默认方式即可
第二步: 设置允许连接 ip,默认是全放开
第三步: 设置管理员账号密码,默认管理员账号是 admin,默认的 web 端口为 9392
要正常使用扫描器功能必须安装 redis,如下配置 redis.conf,设置后台启动,更换默认端口,且只允许本机连接:
启动 redis 服务:
/usr/bin/redis-server /etc/redis.conf
安装完成以后检查安装状态:
openvas-check-setup --v9
注:在 centos7 以上版本,v7 和 v8 因 nmap 版本不是 5.51,无法正常使用,v9 版本虽然会有提醒 nmap 版本不匹配但是影响正常使用
安装正常会提示:
It seems like your OpenVAS-9 installation is OK.
查看系统启动后的进程状态:
系统的登录页面:
注:若开启了防火墙,需要在防火墙上放开 9392 端口
首页仪表盘:
默认呈现“任务风险评估状态”、“任务执行状态”、“CVE 漏洞库变化趋势”、“资产网络拓扑”、“NVT 漏洞库”
常用功能模块简单介绍:
Dashboard
:首页仪表盘
Scans
:扫描模块
----tasks
:扫描任务列表
----results
:扫描结果列表
----reports
:扫描报告列表
Assets
:资产模块
----hosts
:以主机维度呈现风险情况
----operating systems
:以操作系统维度呈现风险情况
----hosts(classic)
:以主机列表形式列出风险情况、端口和应用情况
Secinfo
:漏洞库模块,列出了系统收集的所有漏洞清单
Configuration
:配置功能模块
----targets
:可自定义扫描目标
----port lists
:可自定义扫描的端口
----credentials
:配置登录认证扫描
----scan config
:可自定义扫描策略
Extras
:一些其他的系统设置
Administration
:管理员设置,包括用户和用户组、认证的设置
Help
:系统的使用帮助和介绍
将系统时间设置为上海时间,避免扫描的时间和本地时区有时差:
新建扫描任务:
在 scan targets 里配置扫描目标,可以设置账号登录扫描,Linux 系统可以使用 SSH 方式,Windows 系统可以使用 SMB 方式( SMB 服务必须是启动的):
在配置登录过程中,若提示 “Credential exist already”
,则分别要在 “scans”
功能模块的 “tasks”
选项里和 “configuration”
功能模块的 “Targets”
和 “Credentials”
选项里筛选出对应的主机清单进行删除。
创建好任务以后,在任务列表里选择点击列表右侧的扫描按钮:
点击开始扫描后若弹出以下错误,则说明 openvassd 的扫描进程未启动
进入系统执行命令 openvassd 启动进程
执行状态:
默认的扫描速度比较慢,可以在 configuration
功能模块的 scan config
定制不同的扫描策略,减少不必要的扫描过程:
自定义 centos
系统的扫描策略和默认全量快速扫描策略的扫描类和漏洞库数量的差异:
执行扫描过程中可以通过 ps –ef
查看正在检测的规则模块,通过定制可以缩减测试的功能模块漏洞库数量,加快扫描速度;若扫描过程中长期卡在一个漏洞库规则的扫描进程上,可以直接 kill
该进程号,继续后续的扫描:
对比登录扫描和未登录扫描的差异,可以明显发现登录扫描能够探测出更多系统内部的漏洞:
配置过滤规则,可以查看中高危漏洞,以下为 Windows
主机为例扫描出的中高危漏洞:
查看 Linux 系统扫描示例,可以看出高危漏洞绝大多数是内核级的漏洞:
Linux 系统针对内核级漏洞修复方式:
注:实际生产环境中,涉及内核漏洞的一定先测试确保不影响业务系统
导入 key
sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
安装 yum 源
sudo rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
安装内核
sudo yum --enablerepo=elrepo-kernel install kernel-ml-devel kernel-ml
检查启动顺序
sudo awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
设置默认启动顺序
sudo grub2-set-default 0
重启后删除原 kernel
sudo yum remove kernel
升级内核以后的漏洞扫描情况对比,可以明显看出内核级漏洞已经不存在:
测试过程中的漏洞记录表
扫描报表导出:
“Scan”
功能模块里的 “reports”
,然后选择,然后选择需要导出的任务报表,点击列表里 “Date”
一列的任务时间,点击进去以后在左上角选择导出的报表格式:
Openvas 的整体功能还是比较强大的,但是相比于商业版扫描器的配置使用起来会更加的麻烦,就此次小样本的测试结果而言,Linux 系统漏洞检测的侧重点在内核级的漏洞,Windows 的漏洞扫描功能相对而言较弱,不如 nessus。