在Anolis8.6上源码编译安装部署OpenVAS(GVM)未完待续
首先给出Greenbone Community的官方文档,官方文档对Ubuntu的支持最好。另一份Greenbone Community Edition 22.4 (stable, initial release 2022-07-25) - Announcements - Greenbone Community Forum说22.4版本稳定。
我们参考这个文档在Anolis8.6上安装部署22.4.0版本的OpenVAS(现在改名叫GVM了)。这个玩意儿直接使用或者打比赛都很有用。
0x01、最低硬件要求
2Core+4G+20G
0x02、准备工作
0x0201、创建账号和组
创建用户和组
useradd -r -M -U -G wheel -s /usr/sbin/nologin gvm
0x0202、编译安装一般工具
yum groupinstall 'Development Tools'yum install \
cmake \
gcc \
gcc-c++ \
doxygen \
xmltoman
0x0203、导入Greenbone签名秘钥
导入Greenbone签名秘钥。
curl -f -L https://www.greenbone.net/GBCommunitySigningKey.asc \
-o /tmp/GBCommunitySigningKey.ascgpg --import /tmp/GBCommunitySigningKey.asc
并标记完全信任。
echo "8AE4BE429B60A59B311C2E739823FAA60ED1E580:6:" | gpg --import-ownertrust
0x03、构建安装各组件
0x0301、gvm-libs
gvm-libs是一个库,提供XML处理和网络交互等基础功能。这个库被openvas-scanner、gvmd、gsad和pg-gvm使用。
从yum源安装必要依赖项。
yum install \
glib2-devel \
gnutls-devel \
gpgme-devel \
libcurl-devel \
libgcrypt-devel \
libnet-devel \
libpcap-devel \
libssh-devel \
libuuid-devel \
libxml2-devel \
uuid-devel
Anolis8.6的源上没有cjson-devel、hiredis-devel、paho-mqtt3c,所以要用其他方式安装这几个必要依赖项。
在https://github.com/redis/hiredis/releases/tag/v1.3.0下载hiredis-1.3.0.tar.gz。编译安装hiredis-devel。
tar xvzf hiredis-1.3.0.tar.gz
cd hiredis-1.3.0/
cmake .
make
make install
在https://github.com/DaveGamble/cJSON/releases/tag/v1.7.18下载cJSON-1.7.18.tar.gz。编译安装cjson-devel。
tar xvzf cJSON-1.7.18.tar.gz
cd cJSON-1.7.18/
cmake .
make
make install
编译安装cjson-devel和hiredis-devel产生的.pc文件会放在/usr/local/lib/pkgconfig和/usr/local/lib64/pkgconfig目录里。修改配置文件~/.bashr,加入环境变量PKG_CONFIG_PATH。
vim ~/.bashrcexport PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/local/lib64/pkgconfig:$PKG_CONFIG_PATHsource ~/.bashrc
在https://github.com/eclipse-paho/paho.mqtt.c/releases/tag/v1.3.9 下载编译好的必要依赖项。解压缩后把bin、lib、文件copy到/usr/local的相对应目录里即可。
tar xvzf Eclipse-Paho-MQTT-C-1.3.9-Linux.tar.gz
cd Eclipse-Paho-MQTT-C-1.3.9-Linux/
cp bin/* /usr/local/bin/
cp include/* /usr/local/include/
cp lib/* /usr/local/lib/ -r
cp share/* /usr/local/share/
从yum源安装可选依赖项。
yum install openldap-devel
手动编译安装可选依赖项radcli-devel。 在https://github.com/radcli/radcli/releases/tag/1.4.0下载radcli-1.4.0.tar.gz。编译安装radcli-devel。
tar xvzf radcli-1.4.0.tar.gz
cd radcli-1.4.0/
./autogen.sh
./configure
make
make install
到GitHub上下载gvm-libs-22.4.0.tar.gz和校验文件.asc,并验证。
curl -f -L https://github.com/greenbone/gvm-libs/archive/refs/tags/v22.4.0.tar.gz \
-o gvm-libs-22.4.0.tar.gz
curl -f -L https://github.com/greenbone/gvm-libs/releases/download/v22.4.0/gvm-libs-22.4.0.tar.gz.asc \
-o gvm-libs-22.4.0.tar.gz.asc
gpg --verify gvm-libs-22.4.0.tar.gz.asc gvm-libs-22.4.0.tar.gz
验证通过后,解压缩,并进入源码目录。开始编译安装。
tar xvzf gvm-libs-22.4.0.tar.gz
cd gvm-libs-22.4.0/
cmake .
make
make install
0x0302、gvmd
Greenbone Vulnerability Management Daemon (gvmd) 的GVM的主服务。gvmd处理认证、扫描管理、漏洞信息、报告、警告、调度等等。这个服务使用PostgresSQL数据库作为存储。
从yum源安装必要依赖项,其实前序步骤已经安装了。
yum install \
glib2-devel \
gnutls-devel \
postgresql-server-devel \
libpq-devel \
libical-devel \
libxslt \
rsync \
perl-XML-Twig \
gpgme-devel
Anolis8.6源上没有提供libbsd-devel,因此要手动编译安装这个必要依赖库。但是编译libbsd就产生新的依赖libmd,所以先编译libmd再编译libbsd。
在https://github.com/guillemj/libmd下载libmd-main.zip。编译安装。
git clone https://github.com/guillemj/libmd.git
cd libmd/
./autogen
./configure
make
make install
在https://libbsd.freedesktop.org/releases/下载libbsd-0.12.2.tar.xz。编译安装。
tar xvJf libbsd-0.12.2.tar.xz
cd libbsd-0.12.2/
./autogen
./configure
make
make install
在https://github.com/greenbone/gvmd/releases/tag/v22.4.0下载gvmd-22.4.0.tar.gz和校验文件.asc,并验证。验证通过后,解压缩,并进入源码目录。开始编译安装。编译发现有些头文件的路径不正确,因此要设置一下。
tar xvzf gvmd-22.4.0.tar.gz
cd gvmd-22.4.0/mkdir -p /usr/include/postgresql
cp /usr/include/libpq-fe.h /usr/include/postgresql/cmake .
make
make installrm /usr/include/postgresql -rf
0x0303、pg-gvm
pg-gvm是PostgreSQL服务的扩展,增加了由gvmd使用的功能。
在https://github.com/greenbone/pg-gvm/releases/tag/v22.4.0下载pg-gvm-22.4.0.tar.gz和校验文件.asc,并验证。验证通过后,解压缩,并进入源码目录。开始编译安装。
tar xvzf pg-gvm-22.4.0.tar.gz
cd pg-gvm-22.4.0/
cmake .
make
make install
0x0304、GSA
Greenbone Security Assistant(GSA)包括两部分:Web application GSA和Web Server gsad。这一节安装GWeb application GSA。
GSA用JavaScript语言编写,依赖于react框架。使用nodejs来构建应用和维护JavaScript依赖。由于安装nodejs外部依赖多消耗时间长,因此使用官方构建好的包即可。这个tar包打的不太好,需要自己建立一个目录,解压缩到目录里,要不然就哪哪都是。
curl -f -L https://github.com/greenbone/gsa/releases/download/v22.4.0/gsa-dist-22.4.0.tar.gz \
-o gsa-22.4.0.tar.gz
curl -f -L https://github.com/greenbone/gsa/releases/download/v22.4.0/gsa-dist-22.4.0.tar.gz.asc \
-o gsa-22.4.0.tar.gz.asc
gpg --verify gsa-22.4.0.tar.gz.asc gsa-22.4.0.tar.gzmkdir gsa-dist-22.4.0
tar xvzf gsa-dist-22.4.0.tar.gz -C gsa-dist-22.4.0
mkdir -p /usr/local/share/gvm/gsad/web
cp -rf gsa-dist-22.4.0/* /usr/local/share/gvm/gsad/web
0x0305、gsad
Greenbone Security Assistant(GSA)包括两部分:Web application GSA和Web Server gsad。这一节安装Web Server gsad。
gsad用C语言编写。提供图片、web应用API这样的静态内容服务。内部上讲,gsad和gvmd用GMP交互。
防火墙开9392/tcp端口。
firewall-cmd --permanent --add-port=9392/tcp
firewall-cmd --reload
yum源安装依赖项。
yum install \
glib2-devel \
gnutls-devel \
libmicrohttpd-devel \
libxml2-devel
在https://github.com/greenbone/gsad/releases/tag/v22.4.0下载gsad-22.4.0.tar.gz和校验文件.asc,并验证。验证通过后,解压缩,并进入源码目录。开始编译安装。
curl -f -L https://github.com/greenbone/gsad/archive/refs/tags/v22.4.0.tar.gz \
-o gsad-22.4.0.tar.gz
curl -f -L https://github.com/greenbone/gsad/releases/download/v22.4.0/gsad-22.4.0.tar.gz.asc \
-o gsad-22.4.0.tar.gz.asc
gpg --verify gsad-22.4.0.tar.gz.asc gsad-22.4.0.tar.gztar xvzf gsad-22.4.0.tar.gz
cd gsad-22.4.0/
cmake .
make
make install
0x0306、openvas-smb
openvas-smb是openvas-scanner的一个助手模块。包括两部分:与通过Windows Management Instrumentation与Windows操作系统交互的库(openvas-wmiclient/openvas-wincmd)、一个执行远程进程的exe程序。这个部分是openvas-scanner的可选依赖项,但是扫描Windows操作系统需要使用这个模块。所以,我们还是把openvas-smb安装好。
官方文档只给出了Ubuntu环境下的依赖项,以下依赖项是根据cmake提示汇总的。
yum安装heimdal的依赖项。
yum install \
perl-JSON \
python38 \
ncurses-devel
手动编译安装openvas-smb的依赖项heimdal-gssapi。在https://github.com/heimdal/heimdal下载heimdal-heimdal-7.8.0.tar.gz。解压缩,并进入源码目录。开始编译安装。
tar xvzf heimdal-heimdal-7.8.0.tar.gz
cd heimdal-heimdal-7.8.0
./autogen.sh
./configure --prefix=/usr/local
make
make install
heimdal的编译安装并未向/usr/local/lib/pkgconfig或者/usr/local/lib64/pkgconfig写入.pc文件,因此只能手动copy过去并修改内容。.pc文件模板在heimdal源码的tools目录里。
cp tools/heimdal-gssapi.pc.in /usr/local/lib/pkgconfig/heimdal-gssapi.pc
cp tools/heimdal-krb5.pc.in /usr/local/lib/pkgconfig/heimdal-krb5.pc
vim /usr/local/lib/pkgconfig/heimdal-gssapi.pc 修改该文件内容如下。
# heimdal-gssapi
prefix=/usr/local
exec_prefix=${prefix}
libdir=${prefix}/lib
includedir=${prefix}/includeName: heimdal-gssapi
Description: Heimdal is an implementation of Kerberos 5, freely available under a three clause BSD style license.
Version: 7.8.0
URL: http://www.pdc.kth.se/heimdal/
Requires.private: heimdal-krb5
Libs: -L${libdir} -lgssapi
Libs.private: -lheimntlm -lcrypt
Cflags: -I${includedir}
vim /usr/local/lib/pkgconfig/heimdal-krb5.pc 修改该文件内容如下。
# heimal-krb5
prefix=/usr/local
exec_prefix=${prefix}
libdir=${prefix}/lib
includedir=${prefix}/include
vendor=HeimdalName: heimdal-krb5
Description: Heimdal implementation of the Kerberos network authentication.
Version: 7.8.0
Libs: -L${libdir} -lkrb5
Libs.private: -lcom_err -lhcrypto -lasn1 -lwind -lheimbase -lroken -lcrypt -lpthread
Cflags: -I${includedir}
还有一个报错无法链接tspi、unistring库,做个软连接就找到了。
cd /usr/lib64
ln -s libtspi.so.1.2.0 libtspi.so
ln -s libunistring.so.2.1.0 libunistring.so
yum安装openvas-smb依赖项。
yum install popt-devel
由于头文件目录位置的问题,遇到一些报错。以下是更正的方法。
mkdir -p /usr/local/include/heimdal/gssapi
cp /usr/local/include/gssapi.h /usr/local/include/heimdal/gssapi/
cp /usr/local/include/krb5.h /usr/local/include/heimdal/
cp /usr/local/include/gssapi/gssapi_krb5.h /usr/local/include/heimdal/gssapi/
cp /usr/local/include/roken.h /usr/local/include/heimdal/
cp /usr/local/include/hdb.h /usr/local/include/heimdal/
在https://github.com/greenbone/openvas-smb/releases/tag/v22.4.0下载openvas-smb-22.4.0.tar.gz和校验文件.asc,并验证。验证通过后,解压缩,并进入源码目录。开始编译安装。
curl -f -L https://github.com/greenbone/openvas-smb/archive/refs/tags/v22.4.0.tar.gz \
-o openvas-smb-22.4.0.tar.gz
curl -f -L https://github.com/greenbone/openvas-smb/releases/download/v22.4.0/openvas-smb-v22.4.0.tar.gz.asc \
-o openvas-smb-22.4.0.tar.gz.asc
gpg --verify openvas-smb-22.4.0.tar.gz.asc openvas-smb-22.4.0.tar.gztar xvzf openvas-smb-22.4.0.tar.gz
cd openvas-smb-22.4.0/
cmake .
make
make install
0x0307、openvas-scanner
openvas-scanner是扫描引擎。
yum源安装依赖项。
yum install \
bison \
glib2-devel \
gnutls-devel \
libgcrypt-devel \
libpcap-devel \
gpgme-devel \
libksba-devel \
rsync \
nmap \
json-glib-devel \
libcurl-devel \
krb5-devel
在https://github.com/greenbone/openvas-scanner/releases/tag/v22.4.0下载openvas-scanner-22.4.0.tar.gz和校验文件.asc,并验证。验证通过后,解压缩,并进入源码目录。开始编译安装。
curl -f -L https://github.com/greenbone/openvas-scanner/archive/refs/tags/v22.4.0.tar.gz \
-o openvas-scanner-22.4.0.tar.gz
curl -f -L https://github.com/greenbone/openvas-scanner/releases/download/v22.4.0/openvas-scanner-v22.4.0.tar.gz.asc \
-o openvas-scanner-22.4.0.tar.gz.asc
gpg --verify openvas-scanner-22.4.0.tar.gz.asc openvas-scanner-22.4.0.tar.gztar xvzf openvas-scanner-22.4.0.tar.gz
cd openvas-scanner-22.4.0
cmake .
make
make install
在23.0版本的openvasd_server中需要配置openvasd的实例。先配置吧,后面会用到?
printf "table_driven_lsc = yes\n" | sudo tee /etc/openvas/openvas.conf
printf "openvasd_server = http://127.0.0.1:3000\n" | sudo tee -a /etc/openvas/openvas.conf
0x0308、ospd-openvas
ospd-openvas是一个OSP服务,实现了gvmd远程控制openvas-scanner。作为一个守护进程,ospd-openvas等待来自gvmd的OSP请求。
安装python。前序步骤已经安装了python38(v3.8.12)。
设置国内pypi源。
python3 -m pip config set global.index-url \
https://mirrors4.tuna.tsinghua.edu.cn/pypi/web/simple
在https://github.com/greenbone/ospd-openvas/releases/tag/v22.4.0下载。校验、解压缩。用pip模块本地安装,注意指定安装路径。
curl -f -L https://github.com/greenbone/ospd-openvas/archive/refs/tags/v22.4.0.tar.gz \
-o ospd-openvas-22.4.0.tar.gz
curl -f -L https://github.com/greenbone/ospd-openvas/releases/download/v22.4.0/ospd-openvas-v22.4.0.tar.gz.asc \
-o ospd-openvas-22.4.0.tar.gz.asc
gpg --verify ospd-openvas-22.4.0.tar.gz.asc ospd-openvas-22.4.0.tar.gztar xvzf ospd-openvas-22.4.0.tar.gz
cd ospd-openvas-22.4.0
python3 -m pip install --prefix=/usr/local . --no-warn-script-location
0x0309、openvasd
0x0?、Next
Trouble Shoot
在编译pg-gvm时,遇到如下报错,但实际上我的PostgreSQL版本是13.5并没有错。
于是,编辑CMakeList.txt文件,在第112行前加入了打印输出进行调试。
发现PostgreSQL_VERSION_STRING字符串居然是空值!
用类似方法继续调试,最终找到在pg-gvm-22.4.0/cmake/FindPostgreSQL.cmake文件中的逻辑。正确的逻辑是:先找libpq-fe.h所在目录,再在该目录里遍历所有pg_config*.h头文件,在/usr/include/pg_config-x86_64.h头文件找到#define PG_VERSION_NUM 130005,最终计算出pg的版本。
报错是因为在0x0502环节,我创建了一个放libpq-fe.h头文件的目录,但没有删掉创建的头文件目录rm /usr/include/postgresql -rf 。导致编译查找到的路径就变成了这个目录。唉……自己的错误啊。