作为安全行业从业者,一定会有一款适合自己的扫描器,在众多开源扫描器中,相信有很多人会选择openvas,绿骨头组织的这款产品因其性能卓越,扩展性强,接入点、接入方式灵活等众多优点,至今已经成为了企业的安全解决方案之一。
这款扫描器有一个非常优秀的功能点,即以GMP协议为支撑,平台支持灵活任务下发。因此这个功能是一定要尝试的,试想当你想对一批目标进行定时扫描或者常规扫描时,你只需要简单的配置,通过web界面或者cli脚本,将任务下发给你的scanner-slave集群,然后坐等收集扫描结果,是不是很爽!
笔者最近在配置openvas的主从服务器时,遇到了一些BUG甚是头疼,磕了很久终于解决,于是记录下来,以防有同道中人掉坑里。
在配置扫描器的时候,海量的教程,海量的词汇经常让我头晕晕的,比如Openvasmd、gvmd、openvassd、gasd、OMP、GMP等等,首先我们来过一遍这些名词。第三列的重要指数是笔者综合在学习OpenVas的过程中碰到的频率,重要性,困扰性给的一个参考值。
名称 | 功能 | 重要指数 |
---|---|---|
gvmd | GVM10自带的守护进程 | 10 |
openvasmd | GVM9及之前的守护进程的叫法 | 10 |
openvassd | GVM的扫描器进程,作用就是进行漏洞扫描,并将结果反馈给管理模块。 | 10 |
OSPd | 多个扫描器之间使用OSP协议进行通信,而OSPd就是通信进程。 | 3 |
GOS | 全称Greenbone Operating System。GSM设备的操作系统。提供商业版本,具有企业支持功能的GVM框架。 | 4 |
GSM | 全称Greenbone Security Manager,绿骨公司系列产品之一,常以应用程序或虚拟机形式出现。 | 8 |
GMP | 全称Greenbone Management Protocol,听名字就知道是管理协议,gvmd和openvasmd使用该协议、基于XML与其他模块进行通信,以前叫OMP。 | 8 |
OSP | 全称Open Scanner Protocol,多种绿骨公司产品之间用于通信的协议 | 5 |
GVM | 全称Greenbone Vulnerability Manager,这是许多服务的一个框架,作为一个商业产品也是组成GSM的一部分,以前直接叫openvas。 | 10 |
GVM9 | GVM9代版本,也叫OpenVas9,用在GOS 4代系列。 | 10 |
GVM10 | GVM10代版本,用在GOS 5代系列。 | 10 |
GSE | 全称Greenbone Source Edition,绿骨应用栈,支撑漏洞扫描,漏洞管理,GVM等,用以支持第三方调用,比如Linux的某个分支提供GVM,但它是以GSE为基础构建的。 | 3 |
不论是跟GMP还是OSP server通信,首先需要选择一种主从服务器间的通信方法:
TLS连接类型是GOS 3.1及更高版本中用于通信的默认连接类型,也是笔者要重点介绍的配置方法.笔者的测试环境为centos7,具体版本见2.3,一台slave和一台master,且防火墙关闭(方便测试)
Master配置
第一步:登录到GSA上,进入 Configuration-> Credentials
第二步:进入Configuration-> Scanner,Type一定要选GMP Scanner.Credential选刚刚创建的test.
第三步:创建任务
第四步:配置证书,重中之重
任务创建之后需要在master上给相应的scanner配置slave的cacert.pemslave上cert默认路径在/var/lib/gvm/CA/cacert.pem此处需要把slave上的cacert.pem复制到master上.
此处配置证书需要在master机器上,并以命令行方式进行
gvmd --get-scanners //查找test的uuid
gvmd --modify-scanner="test-uuid" --scanner-ca-pub=/path/to/slave/cacert.pem
此处配置完成master后,最好重启一下gvmd以及gsad.原因后面会说.接下来配置Slave.
Slave配置
第一步,创建一个非admin的账号
gvmd --create-user=test --new-password=test --role=Admin
第二步:保证gvmd监听在TCP-port上,而不是Unix socket,这一步笔者在实验的时候错了许多次,总结出几个要注意的点.首先执行:
service gvmd stop
service gsad stop
其次执行:
gvmd --listen=0.0.0.0 --port=9391
gsad --mlisten=0.0.0.0 --mport=9391
确保gsad正常运行的前提下,gvmd监听9391端口:
netstat -anop | grep gvmd
tcp 0 0 0.0.0.0:9391 0.0.0.0:* LISTEN 13034/gvmd: Waiting off (0.00/0/0)
期间打开log,跟进报错:
tail -f /var/log/gvm/gvmd.log
启动task
点击启动task,此处可能会遇到如下几个问题:
问题一:
failed to connect xxxx port 9391.
解决方案:确保slave上的9391端口开放,确保防火墙能通过.
问题二:
(master)slave_connect failed | (slave)read_from_client_tls
该问题广泛出现在Greenbone 开源社区,github issue,同样的配置不见得能解决同样的问题,因此笔者进行了深入的分析和研究。
tail -f /var/log/gvm/gvmd-master:
md manage:WARNING:slave_connect: failed to open connection to XXXX on 9391
lib serv:WARNING:gvm_server_verify: the certificate is not trusted
lib serv:WARNING:gvm_server_verify: the certificate hasn't got a known issuer
tail -f /var/log/gvm/gvm-slave:
md main:read_from_client_tls: failed to read from client: The TLS connection was non-properly terminated.
1.笔者首先抓了master上的包,发现有向slave的9391端口发的包, slave的9391端口也有返回包,排除了网络不可达的问题.
2.端口可以通信,那会不会是证书选错了?笔者通过查阅各种资料,确保cacert没有搞错,路径没有搞错
3.端口正常,证书正确,配置正确?经历一天的排除+尝试,一遍遍确认自己配置是正确的前提下,笔者终于找到了找到了一个可能的原因,即当执行下列命令之后
gvmd --modify-scanner="uuid" --scanner-ca-pub=/path/to/cacert.pem
gvmd并不能立即加载该证书,并且即使按照上面步骤执行也会重复出现上述报错.如果没有加载证书,配置再正确,报错都一样,分析都是白搭。
因此需要在配置完证书之后,重启一下gvmd使其加载证书,才能加载正确配置。
重启task即可在两边的log中发现如下log,且GSA上也终于从requested变成了running.欣喜地发现进度为1%.
Status of task test6 has changed to Running
从GOS 4开始,SSH是默认的连接类型,可通过GVM建立管理守护进程之间的连接。 GMP协议通过SSH隧道传输并转发到gvmd / openvasmd,目前笔者还没有测试过.
Unix Domain Socket是Greenbone Source Edition中gvmd的默认类型。 但只可以使用在与进程相同的主机上运行client-tools时。
gvmd/openvasmd提供的Unix Domain Socket的从GVM 9中的openvasmd.sock更改为GVM 10中的gvmd.sock。
在GOS 4代里sock路径一般为/run/openvas/openvasmd.sock.
在GOS 5代里sock路径一般为/run/gvm/gvmd.sock.
基于OSPd的扫描器也可以通过Unix Domain Socket访问。
举个例子,笔者的实验环境为:
rpm -qa | grep gvm
rpm -qa | grep openvas
gvmd-8.0.0-6928.el7.art.x86_64
gvm-libs-10.0.0-6924.el7.art.x86_64
openvas-scanner-6.0.0-6930.el7.art.x86_64
openvas-smb-1.0.5-6923.el7.art.x86_64
默认启动的gvmd使用的是Unix Domain Socket,验证如下:
netstat -ano |grep gvmd
unix 2 [ ACC ] STREAM LISTENING 25846 /var/run/gvmd.sock
1.官方文档永远是最好的教程,其次是开源社区.
2.Debug时要有自己的主线+思考,不是盲目地遇到 一个问题就去查,别人的前置环境和自己的不一样会让自己掉进去,越陷越深,这样问题就会发散。
3.心平气和,万不得已之时,重启大法好!
附一份官方参考文档:https://readthedocs.org/projects/gvm-tools/downloads/pdf/latest/
*本文原创作者:LittleT1ger,本文属于FreeBuf原创奖励计划,未经许可禁止转载