OpenVAS是为数不多的开源漏洞扫描工具之一。如果不是最好的,那也一定是前三名。后来,改名为GVM,并且以发行的年月作为版本号。到文章发表时,最新版是GVM 20.08,发行于2020年8月。
以前,使用过OpenVAS 7。后来,升级成OpenVAS 9。不得不说的是,这个升级过程非常痛苦。最近,官方声称OpenVAS 9到2020年底也要停服了。一不做,二不休。干脆升级到最新版GVM 20.08。天不随人愿,根本找不到现成的安装包。只能自己从源码开始安装。这个安装过程更是痛苦。为了让小伙伴们少受痛苦,我就把这个安装过程记录在这里。如果顺利的话,只要一段一段地拷贝并执行,就一定能安装成功。
顺便强调一句:非必须,不要从源码开始安装。尽量使用官方的安装包。
Ready? Go!
# user/root
sudo apt-get install node-gyp
sudo apt-get install build-essential cmake gnutls-bin pkg-config glib2.0 libgnutls28-dev libssh-dev libssl-dev redis-server libhiredis-dev libxml2-dev doxygen libldap2-dev libgcrypt-dev libpcap-dev libgpgme-dev libradcli-dev graphviz bison libksba-dev libical-dev libpq-dev postgresql postgresql-contrib postgresql-server-dev-all libopenvas9-dev heimdal-dev libpopt-dev xmltoman gcc-mingw-w64 nmap libmicrohttpd-dev nodejs xsltproc python3-virtualenv python3-paramiko python3-lxml python3-defusedxml python3-pip python3-psutil virtualenv libpthread-stubs0-dev
sudo apt-get install npm
sudo npm install -g yarn --prefix /usr/
sudo apt-get install libssh-dev
# root
echo 'export PATH="$PATH:/opt/gvm/bin:/opt/gvm/sbin:/opt/gvm/.local/bin"' | sudo tee -a /etc/profile.d/gvm.sh &&\
sudo chmod 0755 /etc/profile.d/gvm.sh &&\
source /etc/profile.d/gvm.sh &&\
sudo bash -c 'cat << EOF > /etc/ld.so.conf.d/gvm.conf
# gmv libs location
/opt/gvm/lib
EOF'
# user/root
sudo mkdir /opt/gvm &&\
sudo adduser gvm --disabled-password --home /opt/gvm/ --no-create-home --gecos '' &&\
sudo usermod -aG redis gvm &&\
sudo chown gvm:gvm /opt/gvm/ && \
sudo su - gvm
# gvm
mkdir src &&\
cd src &&\
export PKG_CONFIG_PATH=/opt/gvm/lib/pkgconfig:$PKG_CONFIG_PATH
# gvm
git clone -b gvm-libs-20.08 --single-branch https://github.com/greenbone/gvm-libs.git &&\
git clone -b openvas-20.08 --single-branch https://github.com/greenbone/openvas.git &&\
git clone -b gvmd-20.08 --single-branch https://github.com/greenbone/gvmd.git &&\
git clone -b master --single-branch https://github.com/greenbone/openvas-smb.git &&\
git clone -b gsa-20.08 --single-branch https://github.com/greenbone/gsa.git &&\
git clone -b ospd-openvas-20.08 --single-branch https://github.com/greenbone/ospd-openvas.git &&\
git clone -b ospd-20.08 --single-branch https://github.com/greenbone/ospd.git
# gvm
cd gvm-libs &&\
export PKG_CONFIG_PATH=/opt/gvm/lib/pkgconfig:$PKG_CONFIG_PATH &&\
mkdir build &&\
cd build ;\
cmake -DCMAKE_INSTALL_PREFIX=/opt/gvm .. &&\
make &&\
make doc &&\
make install &&\
cd /opt/gvm/src
# gvm
cd openvas-smb &&\
export PKG_CONFIG_PATH=/opt/gvm/lib/pkgconfig:$PKG_CONFIG_PATH &&\
mkdir build &&\
cd build/ ;\
cmake -DCMAKE_INSTALL_PREFIX=/opt/gvm .. &&\
make &&\
make install &&\
cd /opt/gvm/src
编译前,先安装一些基础模块。
# user/root
sudo apt-get install nettle-bin
sudo apt-get install libunistring2 libunistring
wget https://ftp.gnu.org/gnu/nettle/nettle-3.6.tar.gz
tar xzvf nettle-3.6.tar.gz
cd nettle-3.6
./configure
make
sudo make install
wget https://www.gnupg.org/ftp/gcrypt/gnutls/v3.6/gnutls-3.6.15.tar.xz
sudo apt install xz-utils
tar -xf gnutls-3.6.15.tar.xz
cd gnutls-3.6.15
./configure
make
sudo make install
编译并安装OpenVAS
# gvm
cd openvas &&\
export PKG_CONFIG_PATH=/opt/gvm/lib/pkgconfig:$PKG_CONFIG_PATH &&\
mkdir build &&\
cd build/ ;\
cmake -DCMAKE_INSTALL_PREFIX=/opt/gvm .. &&\
make &&\
make doc &&\
make install &&\
cd /opt/gvm/src
# root
export LC_ALL="C" &&\
ldconfig &&\
cp /etc/redis/redis.conf /etc/redis/redis.orig &&\
cp /opt/gvm/src/openvas/config/redis-openvas.conf /etc/redis/ &&\
chown redis:redis /etc/redis/redis-openvas.conf &&\
echo "db_address = /run/redis-openvas/redis.sock" > /opt/gvm/etc/openvas/openvas.conf &&\
systemctl enable redis-server@openvas.service &&\
systemctl start redis-server@openvas.service
系统微调。
# root
sysctl -w net.core.somaxconn=1024 &&\
sysctl vm.overcommit_memory=1 &&\
echo "net.core.somaxconn=1024" >> /etc/sysctl.conf &&\
echo "vm.overcommit_memory=1" >> /etc/sysctl.conf
系统微调。禁用THP。
# root
cat << EOF > /etc/systemd/system/disable-thp.service
[Unit]
Description=Disable Transparent Huge Pages (THP)
[Service]
Type=simple
ExecStart=/bin/sh -c "echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled && echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag"
[Install]
WantedBy=multi-user.target
EOF
微调后,重启服务。
# root
systemctl daemon-reload &&\
systemctl start disable-thp &&\
systemctl enable disable-thp &&\
systemctl restart redis-server
使用下面的命令打开sudoer的编辑器。
# root
visudo
把下面的内容编辑或添加进去。保存并退出。
### Add secure path
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/opt/gvm/sbin"
### Allow the user running ospd-openvas, to launch openvas with root permissions
gvm ALL = NOPASSWD: /opt/gvm/sbin/openvas
gvm ALL = NOPASSWD: /opt/gvm/sbin/gsad
先安装依赖模块。
# user/root
sudo apt-get install libssh-gcrypt-4 libssh-gcrypt-dev
编译并安装GVM
# gvm
cd /opt/gvm/src &&\
cd gvmd &&\
export PKG_CONFIG_PATH=/opt/gvm/lib/pkgconfig:$PKG_CONFIG_PATH &&\
mkdir build &&\
cd build/ &&\
cmake -DCMAKE_INSTALL_PREFIX=/opt/gvm .. &&\
make &&\
make doc &&\
make install &&\
cd /opt/gvm/src
这个下载过程比较漫长,取决于网络状态。至少也需要以小时计算。为了节约时间,我的做法是把旧的文件直接拷贝过来。
# gvm
greenbone-nvt-sync
openvas -u
# user/root
sudo -u postgres bash
export LC_ALL="C"
createuser -DRS gvm
createdb -O gvm gvmd
psql gvmd
create role dba with superuser noinherit;
grant dba to gvm;
create extension "uuid-ossp";
create extension "pgcrypto";
exit
exit
# gvm
gvm-manage-certs -a
# gvm
gvmd --create-user=admin --password=admin
获取上面创建的管理员的详细信息。
# gvm
gvmd --get-users --verbose
# admin dffd45de-be63-45b4-87b3-68b1bea07b1a
将上面获取的信息粘贴到下面的命令中并执行。这一步非常重要。很多人在运行时出问题,跟这一步有很大关系。
# gvm
gvmd --modify-setting 78eceaec-3385-11ea-b237-28d24461215b --value dffd45de-be63-45b4-87b3-68b1bea07b1a
这一步运行时间会比较长。与网络状态有关,要以小时计算。
# gvm
greenbone-feed-sync --type GVMD_DATA
greenbone-feed-sync --type SCAP
greenbone-feed-sync --type CERT
首先,安装Python。
# user/root
sudo apt-get install python3.8 python3.8-dev
再安装nodejs。
# user/root
sudo apt-get install curl
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install nodejs
编译并安装GSA。
# gvm
cd /opt/gvm/src/gsa &&\
export PKG_CONFIG_PATH=/opt/gvm/lib/pkgconfig:$PKG_CONFIG_PATH &&\
mkdir build &&\
cd build/ &&\
cmake -DCMAKE_INSTALL_PREFIX=/opt/gvm .. &&\
make &&\
make doc &&\
make install &&\
touch /opt/gvm/var/log/gvm/gsad.log &&\
cd /opt/gvm/src
创建虚拟环境。
# gvm
cd /opt/gvm/src
export PKG_CONFIG_PATH=/opt/gvm/lib/pkgconfig:$PKG_CONFIG_PATH
virtualenv --python python3.8 /opt/gvm/bin/ospd-scanner/
source /opt/gvm/bin/ospd-scanner/bin/activate
安装OSPD。
# gvm
mkdir /opt/gvm/var/run/ospd/ &&\
cd ospd &&\
pip3 install . &&\
cd /opt/gvm/src
安装OSPD-OpenVAS。
# gvm
cd ospd-openvas &&\
pip3 install . &&\
cd /opt/gvm/src
创建gvmd启动脚本。
# root
cat << EOF > /etc/systemd/system/gvmd.service
[Unit]
Description=Open Vulnerability Assessment System Manager Daemon
Documentation=man:gvmd(8) https://www.greenbone.net
Wants=postgresql.service ospd-openvas.service
After=postgresql.service ospd-openvas.service
[Service]
Type=forking
User=gvm
Group=gvm
PIDFile=/opt/gvm/var/run/gvmd.pid
WorkingDirectory=/opt/gvm
ExecStart=/opt/gvm/sbin/gvmd --osp-vt-update=/opt/gvm/var/run/ospd.sock
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
Restart=on-failure
RestartSec=2min
KillMode=process
KillSignal=SIGINT
GuessMainPID=no
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
创建gsad启动脚本。
# root
cat << EOF > /etc/systemd/system/gsad.service
[Unit]
Description=Greenbone Security Assistant (gsad)
Documentation=man:gsad(8) https://www.greenbone.net
After=network.target
Wants=gvmd.service
[Service]
Type=forking
PIDFile=/opt/gvm/var/run/gsad.pid
WorkingDirectory=/opt/gvm
ExecStart=/opt/gvm/sbin/gsad --drop-privileges=gvm
Restart=on-failure
RestartSec=2min
KillMode=process
KillSignal=SIGINT
GuessMainPID=no
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
创建ospd-openvas启动脚本。
# root
cat << EOF > /etc/systemd/system/ospd-openvas.service
[Unit]
Description=Job that runs the ospd-openvas daemon
Documentation=man:gvm
After=network.target redis-server@openvas.service
Wants=redis-server@openvas.service
[Service]
Environment=PATH=/opt/gvm/bin/ospd-scanner/bin:/opt/gvm/bin:/opt/gvm/sbin:/opt/gvm/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Type=forking
User=gvm
Group=gvm
WorkingDirectory=/opt/gvm
PIDFile=/opt/gvm/var/run/ospd-openvas.pid
ExecStart=/opt/gvm/bin/ospd-scanner/bin/python /opt/gvm/bin/ospd-scanner/bin/ospd-openvas --pid-file /opt/gvm/var/run/ospd-openvas.pid --unix-socket=/opt/gvm/var/run/ospd.sock --log-file /opt/gvm/var/log/gvm/ospd-scanner.log --lock-file-dir /opt/gvm/var/run/ospd/
Restart=on-failure
RestartSec=2min
KillMode=process
KillSignal=SIGINT
GuessMainPID=no
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
重新启动前面创建的服务。
# root
systemctl daemon-reload &&\
systemctl enable gvmd &&\
systemctl enable gsad &&\
systemctl enable ospd-openvas &&\
systemctl start gvmd &&\
systemctl start gsad &&\
systemctl start ospd-openvas
查看服务的状态,看看是否工作正常。
# root
systemctl status gvmd
systemctl status gsad
systemctl status ospd-openvas
# gvm
gvmd --get-scanners --verbose
# 08b69003-5fc2-4037-a479-93b440211c74 OpenVAS /var/run/ospd/ospd.sock 0 OpenVAS Default
# 6acd0832-df90-11e4-b9d5-28d24461215b CVE 0 CVE
修改默认扫描器的参数。
# gvm
gvmd --modify-scanner=08b69003-5fc2-4037-a479-93b440211c74 --scanner-host=/opt/gvm/var/run/ospd.sock
在本机上启动浏览器,在地址栏内输入:http://localhost,或在别的机器上启动浏览器,在地址栏内输入:http://192.168.xx.xx,你应该能看到绿色的登录界面。
恭喜你!成功了!!
使用和微调就看你自己的了。
rm -rf build
ln -s xx.so.4 xx.so.3
gvmd --rebuild
gvmd --rebuild-scap