HanDs
管理员

OPENVAS源码编译解析 



本文原创作者:[email protected]

[email protected]是通过KALI虚拟机,KALI中按照步骤配置即可。但这些步骤我从来都记不住,出了问题也只好求助网络,所以就有了自己编译安装的想法,一方面是满足自己的完美心理,另一方面就是加深对各模块的理解。废话不多说,来看一下我的OPENVAS源码编译之路吧。

准备工作

1. 系统环境

Ubuntu 14.04.3 LTS

2. 软件下载

LibrariesOPENVAS库文件

http://wald.intevation.org/frs/download.php/2291/openvas-libraries-8.0.7.tar.gz

Scanner:扫描代理

http://wald.intevation.org/frs/download.php/2266/openvas-scanner-5.0.5.tar.gz

Manager:调度中心

http://wald.intevation.org/frs/download.php/2295/openvas-manager-6.0.8.tar.gz

GSA:前端Web UI

http://wald.intevation.org/frs/download.php/2299/greenbone-security-assistant-6.0.10.tar.gz

本次编译以ROOT身份进行,所以在ROOT家目录建立了openvas目录,并依次执行wget命令下载上述库和软件到openvas目录。

3. CMAKE

OPENVAS使用CMAKE进行编译,不熟悉CMAKE的童鞋可以移步http://sewm.pku.edu.cn/src/paradise/reference/CMake%20Practice.pdf进行学习。

安装库文件

1. 解压库包,安装依赖

在库INSTALL安装指南中开头就提示我们“大部分开发者使用的是Debian 7代号为Wheezy的系统,在其他系统上编译可能会失败”。我使用了Ubuntu,不是因为UbuntuDebian有很深的渊源关系,纯粹个人Ubuntu更习惯一些。

继续阅读INSTALL,可看到有对安装前提条件的说明,基本是依赖库及其版本的说明,最后给出了Debian 7 Wheezy的依赖库安装指令,如下图:

我本着“出现问题后再解决问题”的思路,执行上图的依赖库安装指令,没有任何问题,顺利完成依赖的升级下载。

2. 外部编译、安装

创建一个build目录,用于进行CMAKE外部编译,并通过-DCMAKE_INSTALL_PREFIX指定安装路径前缀为“/root/openvas/tool”,如下图:

顺利生成编译文件后,运行make进行编译,如下图:

编译顺利通过后,运行make install进行安装,如下图:

安装结果可以到/root/openvas/tool查看,如下图:

我们可以看到在库文件安装过程中,生成两个可执行程序openvas-naslopenvas-nasl-lint,我们可以查看资料了解他们的作用,并且对源码分析工作也有一定的帮助。

安装Scanner

1. 解压Scanner软件包,安装依赖

Scanner INSTALL安装指南中可看到存在安装的前提条件,安装有其依赖库和版本约束,但并未像安装库文件时那样给出Debian 7 Wheezy的依赖安装指令,我继续本着“在出现编译问题后再解决问题”的思路,不去关心这些依赖并进行了忽略。

Scanner依赖安装过的库文件,但是我们并没有将库文件安装到系统标准路径(/usr/usr/local),而是指定了安装前缀,这样Scanner安装的时候是找不到这些库文件的,我们必须告知其安装时库文件的路径,而这一切只需运行一条命令,如下图:

pkg-config工具是在安装库文件前作为依赖最先被安装,不懂为什么运行这样一简单一条指令就可以明确库查找路径的童鞋可移步自行了解。

2. 外部编译、安装

创建一个build目录,用于进行CMAKE外部编译,并通过-DCMAKE_INSTALL_PREFIX指定安装路径前缀为“/root/openvas/tool”,如下图:

可以看到在生成编译文件时有一个警告信息,信息的大致内容是“没有发现Doxygen,它在编译HTML文档时是需要的”,其实DoxygenINSTALL安装指南前提条件中列出来了,被我们忽略了(看来有一些不能忽略^_^),运行“apt-get install doxygen”后重新生成编译文件就不会产生这个警告信息了,顺利生成编译文件后,运行make进行编译,如下图:

完成编译后,运行make install命令进行安装,如下图:

安装结果可以到/root/openvas/tool查看,如下图:

通过与库文件的安装对比,就可以知道Scanner安装了哪些可执行文件,我们通过查资料可以知道这些文件的作用,帮助我们理解源码。

3. 配置与启动

n Scanner启动后以服务形式运行于9391端口,与Scanner通信需要建立SSL连接,这就需要为Scanner生成连接建立所需要的证书,过程如下图:

按照步骤填写信息,最后生成了两份证书,每一份都包含一个公钥和一个私钥,为什么是两份?不是所有的SSL加密都需要向CA证书签发机构提出申请的,这需要花钱的,所以OPENVAS自己会建立一个小型的证书认证系统,第一份证书就是小型认证系统CA的证书(这里是我的主观判断,有不同意见,欢迎交流)。openvas-mkcert生成证书后会自动把证书放到合适的位置。

n Scanner进行漏扫,必须有插件,也叫NVTsNetwork Vulnerability Tests),每个插件是以NASLNessus Attack Scripting Language)写的,开始NVTs是空的,实际扫描前必须进行同步下载,同步脚本在/root/openvas/tool/sbin路径下,执行如下图:

执行报错了,用vim查看同步脚本如下图:

上图截取了同步脚本的前9行,可以很明显的看到错误的原因,因为我们没有将openvas安装到标准目录/usr,而是指定了安装前缀/root/openvas/tool/,所以which openvassd肯定是没值,这样就产生了我们看到的错误提示了。另上图倒数第三行,openvassd -s会输出默认配置,脚本从默认配置中提取了插件的存放位置。理解了这些,修改重新配置,如下图:

修改后,执行脚本如下图:

成功开始同步,剩下的就是耐心等待同步结束(网络不同,时间大不同),同步结束后,插件的保存路径为/root/openvas/tool/var/lib/openvas/plugins,在该路径下可以看到NASL插件。

n Scanner启动前还需要运行一个redis服务,用于临时存储每个主机扫描收集的信息。redis是一个可内存可持久化的键值形式的数据库,我们通过apt-get install redis-server进行安装,安装后自动启动服务,可通过netstat -lntp | grep “6379”查看服务在6379端口进行监听,可通过redis-cli shutdown停掉服务,或者kill -9 PID停掉。不理解如何使用redis的童鞋可以移步了解一下其用法。在INSTLL安装指南中已经明确指出支持redis 2.42.6版本,并给出了两个版本快速启动的命令,如下图:

我们安装的是redis2.8版本,不管那么多,继续本着“出现问题后再解决问题”的思路,执行上图第二条指令,但因为安装路径的问题,执行命令实际如下:

执行命令后通过netstat -lntp | grep “6379”发现服务并没有监听6379端口,难道我们执行错了?实际不然,打开example_redis_2_6.conf,找到下面图片所示位置就明白原因所在了。

redis在本地,不在网络,所以这里不需要设置端口。

n 运行openvassd运行scanner,很不幸,遇到错误了,如下:

错误信息提示没有找到库文件,我们编译过程没有遇到问题,库文件的也确实安装成功了,那么问题在哪里呢?有过Linux开发经验的同学一定遇到过这种问题,解决办法有两种:第一种是执行export LD_LIBRARY_PATH=/root/openvas/tool/lib:$LD_LIBRARY_PATH命令,设置环境变量解决,但这种方式适合测试,是一种临时解决方案。第二种是更新动态库缓存文件,我们采用的就是这种方法,在/etc/ld.so.conf.d目录下建立openvas.conf文件,写入内容如下:

然后执行ldconfig命令,更新/etc/ld.so.cache文件内容,如下图:

现在是时候启动Scanner了,如下图:

图片22.png

没有问题,启动成功,Scanner9391端口监听,需要说明的是Scanner启动成功后,Manager可以扮演客户端的角色与Scanner交互,对Scanner进行控制,真正的客户端如命令行CLIWEBUIGSA)只能与Manager进行交互,不能越过Manager操作Scanner

安装Manager

1. 解压Manager软件包,安装依赖

Manager INSTALL安装指南中也可以看到存在安装的前提条件,安装有其依赖库和版本约束,但前面库文件以及Scanner的安装已经满足了Manager安装需求了。但PKG_CONFIG_PATH环境变量的设置少不了,如下图:

2. 外部编译、安装

创建一个build目录,用于进行CMAKE外部编译,并通过-DCMAKE_INSTALL_PREFIX指定安装路径前缀为“/root/openvas/tool”,过程可能会提示缺少sqlite3xmltoman,通过apt-get安装相应的软件包即可,最终顺利生成编译文件,如下图:

运行make进行编译如下图:

完成编译后,运行make install命令进行安装,如下图:

安装结果可以到/root/openvas/tool查看,如下图:

通过与Scanner的安装对比,就可以知道Manager安装了哪些可执行文件,我们通过查资料可以知道这些文件的作用,帮助我们理解源码。

3. 配置与启动

n Manager启动后需要与Scanner通信,Scanner是服务端,Manager是客户端,在Scanner的“配置与启动”阶段,我们已经为Scanner生成了SSL相关的证书和私钥文件,说明Manager可以进行服务端验证,但是Scanner也要求对Manager进行客户端验证,所以也需要为Mananger生成SSL相关的证书和私钥文件。首先执行openvas-mkcert-client生成证书和私钥:

然后将证书和私钥从临时目录拷贝到相应目录下,如下:

上述两步也可以通过执行openvas-mkcert-client -n -i自动完成。

n 创建一个管理员账户,如下:

n 启动Manager,如下图:

安装GSA

1. 解压库包,安装依赖

GSAINSTALL安装指南中,明确指出了安全了前提条件,安装相关依赖包如下图:

2. 外部编译、安装

创建一个build目录,用于进行CMAKE外部编译,并通过-DCMAKE_INSTALL_PREFIX指定安装路径前缀为“/root/openvas/tool”,如下图:

运行make进行编译如下图:

完成编译后,运行make install命令进行安装,如下图:

安装结果可以到/root/openvas/tool查看,如下图:

3. 配置与启动

执行gsad进行启动,如下图:

通过设置IP地址为0.0.0.0使服务可以通过其他机器进行访问。

检查工作

OPENVAS提供了一个检查安装是否成功的脚本,脚本位置https://svn.wald.intevation.org/svn/openvas/trunk/tools/openvas-check-setup,下载运行可检测,但因为我们不是安装在标准路径,所以要设置一下PATH环境变量,如下图:

运行脚本如下:

WARNING我们就不管了,看一下错误,缺少SCAP库,有关这个库的研究就是另一个话题了,我们这里按照给出的FIX修改就是,如下图:

完成SCAP库的创建和更新后,继续运行检测脚本,如下:

提示没有OpenVAS CERT数据库被发现,按照FIX提示创建即可,如下图:

再次运行检查脚本,没有ERROR了,到此安装OK

使用演示

访问http://192.168.140.79:9392,如下图:

输入Manager创建的用户名密码,登录如下图:

一切OK,大家可以自己研究使用了。

*原创作者:[email protected],本文属FreeBuf原创奖励计划,未经许可禁止转载


学习中请遵守法律法规,本网站内容均来自于互联网,本网站不负担法律责任
OPENVAS 源码编译解析
#1楼
发帖时间:2016-7-30   |   查看数:0   |   回复数:0
游客组
快速回复