当前位置: 首页 > news >正文

在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 。导致编译查找到的路径就变成了这个目录。唉……自己的错误啊。

http://www.dtcms.com/a/291591.html

相关文章:

  • 华为云CCE-PV使用OBS存储类之坑
  • Android NDK ffmpeg 音视频开发实战
  • 语义化版本规范(SemVer)
  • 【计算机组成原理】符号位OF、ZF、CF、SF详解
  • c语言 进阶 动态内存管理
  • stream event
  • Playwright-MCP浏览器会话复用全解析
  • swiper js无缝滚动---解决播放总是有间隔、动画一闪一跳的问题
  • 3.组合式API父子通信
  • 【免费版】开启 Youtube 双语字幕
  • 神经网络——非线性激活
  • Java学习-----AIO模型
  • STM32小实验四--按键控制LED灯
  • tar 解压:Cannot change ownership to uid 1000, gid 1000: Operation not permitted
  • 2021-06-27 51单片机外部中断0控制数码管0自增到9
  • 知识之镜:当检索生成照见人类认知的深渊
  • C++ 分配内存释放内存
  • LinkedList的模拟实现(双向链表Java)
  • JavaScript的引入方式和基础语法的快速入门与学习
  • 单表查询-分页提前获取数据
  • ni-app 对鸿蒙的支持现状
  • 【系统全面】Linux进程——基础知识介绍
  • 【智能协同云图库】智能协同云图库第二期:基于腾讯云 COS 对象存储—开发图片各功能模块
  • 从0开始的中后台管理系统
  • WebAPIs事件流与事件委托与其他事件
  • 关于JavaWeb的总结笔记
  • 【web 自动化】-6- 数据驱动DDT
  • 二叉树实现堆,咕咕咕
  • 【Windows】多标签显示文件夹
  • 【世纪龙科技】数字课程资源-新能源汽车概论