서버 취약점 점검 툴 (OpenVAS 20.8.0) 설치하기 - Ubuntu 20.04

리눅스/Security|2015. 1. 27. 09:00
반응형

OpenVAS 9, 10, 11 버전은 2020 기준으로 EOL 로 인해 사용이 불가능합니다.

아래는 Ubuntu 20.04 버전에 OpenVAS 20.8.0 버전 설치하는 방법을 기술하였습니다.

메모리는 4G 이상이 필요합니다.



1. 패키지 설치


# apt -y update

apt -y install build-essential cmake gnutls-bin pkg-config libgnutls28-dev libssh-dev libssl-dev redis-server libhiredis-dev libxml2-dev doxygen xsltproc 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 libopenvas-dev heimdal-dev libpopt-dev xmltoman gcc-mingw-w64 nmap libmicrohttpd-dev npm nodejs virtualenv python3-paramiko python3-lxml python3-defusedxml python3-pip python3-psutil

# npm install -g yarn --prefix /usr/



2. 사용자 환경 설정


# echo 'export PATH="$PATH:/opt/gvm/bin:/opt/gvm/sbin:/opt/gvm/.local/bin"' | sudo tee -a /etc/profile.d/gvm.sh

# chmod 0755 /etc/profile.d/gvm.sh

# source /etc/profile.d/gvm.sh



3. GVM 라이브러리 경로 추가


# vi /etc/ld.so.conf.d/gvm.conf


# gmv-libs location

/opt/gvm/lib



4. 사용자 계정 생성


# mkdir /opt/gvm

# adduser gvm --disabled-password --home /opt/gvm/ --no-create-home --gecos ''

# usermod -aG redis gvm

# chown gvm:gvm /opt/gvm/

# su - gvm



5. 소스 디렉토리 생성


$ mkdir src

$ cd src/

$ export PKG_CONFIG_PATH=/opt/gvm/lib/pkgconfig:$PKG_CONFIG_PATH



6. GVM 라이브러리 생성


$ git clone -b gvm-libs-20.08 --single-branch https://github.com/greenbone/gvm-libs.git

$ 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/



7. OpenVAS samba 설치


$ git clone -b master --single-branch https://github.com/greenbone/openvas-smb.git

$ 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 install

$ cd /opt/gvm/src/



8. OpenVAS scanner 설치


$ git clone -b openvas-20.08 --single-branch https://github.com/greenbone/openvas.git

$ 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

$ exit



9. Redis 설정


# 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



10. GVM 사용자 권한 설정


# vi /etc/sudoers


기존 설정 유지하고 파란색 부분만 추가 합니다.


Defaults        env_reset

Defaults        mail_badpass

Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/opt/gvm/sbin"


gvm ALL = NOPASSWD: /opt/gvm/sbin/openvas

gvm ALL = NOPASSWD: /opt/gvm/sbin/gsad



11. 취약점 룰 업데이트


# su - gvm

$ greenbone-nvt-sync



12. OpenVAS 매니저 설치


$ cd /opt/gvm/src/

$ git clone -b gvmd-20.08 --single-branch https://github.com/greenbone/gvmd.git

$ 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

$ exit



13. PostgreSQL 설정


# sudo -u postgres bash

$ export LC_ALL="C"

$ cd    // 출처에는 해당 항목이 없는데 그냥 진행하면 아래 명령시 퍼미션 에러 출력되므로 디렉토리 이동해준다.

$ createuser -DRS gvm

$ createdb -O gvm gvmd


$ psql gvmd

gvmd=# create role dba with superuser noinherit;

gvmd=# grant dba to gvm;

gvmd=# create extension "uuid-ossp";

gvmd=# create extension "pgcrypto";

gvmd=# exit

$ exit



14. GVM 인증서 생성


$ sudo su - gvm

$ gvm-manage-certs -a



15. GVM admin 생성


$ /opt/gvm/sbin/gvmd --create-user=admin --password=admin

$ gvmd --get-users --verbose

// 출력된 admin 계정의 UUID 확인 : ad77ed01-f2ce-4bb3-a3c5-c8df70f38332

$ gvmd --modify-setting 78eceaec-3385-11ea-b237-28d24461215b --value ad77ed01-f2ce-4bb3-a3c5-c8df70f38332

// 출력되었던 admin 계정의 UUID 입력, 실행


16. Greenbone Feed 갱신


$ greenbone-feed-sync --type GVMD_DATA

$ greenbone-feed-sync --type SCAP

$ greenbone-feed-sync --type CERT



17. Greenbone Security Assistant 구축


$ cd src/

$ git clone -b gsa-20.08 --single-branch https://github.com/greenbone/gsa.git

$ cd 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


* make 진행중 npm install 중에 문제가 생기면 여러번 시도를 해보고,
'npm ERR! code EINTEGRITY' 라는 에러가 출력 될 경우
npm cache verify 실행 후 다시 make 를 시도합니다.


18. Python 으로 가상 환경 설정

$ exit
# python3 --version
# add-apt-repository ppa:deadsnakes/ppa
# apt -y update
# apt -y install python3.7 python3.7-dev

$ sudo su - gvm
$ cd /opt/gvm/src
$ export PKG_CONFIG_PATH=/opt/gvm/lib/pkgconfig:$PKG_CONFIG_PATH
$ virtualenv --python python3.7  /opt/gvm/bin/ospd-scanner/
$ source /opt/gvm/bin/ospd-scanner/bin/activate


19. 스캐너 래퍼용 ospd  클래스 다운로드 및 설치

(ospd-scanner) gvm@ubuntu:~$ git clone -b ospd-20.08 --single-branch https://github.com/greenbone/ospd.git
(ospd-scanner) gvm@ubuntu:~$ mkdir /opt/gvm/var/run/ospd/
(ospd-scanner) gvm@ubuntu:~$ cd ospd/
(ospd-scanner) gvm@ubuntu:~$ pip3 install .
(ospd-scanner) gvm@ubuntu:~$ cd /opt/gvm/src


20. 원격 제어를 위한 ospd-openvas 설치


(ospd-scanner) gvm@ubuntu:~$ git clone -b ospd-openvas-20.08 --single-branch  https://github.com/greenbone/ospd-openvas.git

(ospd-scanner) gvm@ubuntu:~$ cd ospd-openvas/

(ospd-scanner) gvm@ubuntu:~$ pip3 install .



21. systemd 설정


$ exit

$ sudo su

# vi /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



# vi /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



# vi /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 


데몬 재시작 및 부팅시 자동 활성화 설정


# systemctl daemon-reload

# systemctl enable gvmd

# systemctl enable gsad

# systemctl enable ospd-openvas

# systemctl start gvmd                          // 매니저

# systemctl start gsad                            // 웹UI

# systemctl start ospd-openvas        // 스캐너


데몬 상태 확인


# systemctl status gvmd



22. 관리 페이지 접근


브라우저로 아래 URL 을 입력합니다.

https://192.168.0.1


* 초기 로그인 계정 : admin / admin

* 로그인 후 비밀번호 변경 필수


로그인 후 우측 상단의 사람 아이콘에 마우스를 올려놓으면 출력되는 My Settings 메뉴를 선택합니다. 좌측의 노트 모양의 Edit 버튼을 눌러 'Timezone (Asia/Seoul)' 과 'Change Password' 를 변경합니다.



[참고] https://www.libellux.com/openvas/#install-openvas-20-08-from-source

[코멘트] sysdocu.tistory.com


----------------------------------------------------------------------------------------------------


위 내용을 진행하며 부족했던 부분은 추가로 작성 하였습니다.


1. CLI 사용하기


OpenVAS 신 버전에서는 구버전에서 사용하던 openvas-manager 나 omp 명령이 없습니다.

이를 대체하기 위한 명령어로는 gvm-cli 가 있으며, gvm-tools 패키지를 설치해서 사용이 가능합니다.


1) gvm-cli 설치

# python3 -m pip install gvm-tools


2) pdf 생성용 패키지 설치 

# apt -y install texlive-latex-base texlive-fonts-recommended texlive-fonts-extra texlive-latex-extra


3) 스캐닝을 위해 사용자 전환

# sudo su - gvm


4) 스캐닝


타겟 생성 (스캐닝 대상 서버 IP 와 스캐닝할 포트 범위)

$ gvm-cli --gmp-username admin --gmp-password admin socket --socketpath /opt/gvm/var/run/gvmd.sock\

 --xml "<create_target><name>test1</name>\

<hosts>192.168.10.2</hosts>\

<alive_tests>Consider Alive</alive_tests>\

<port_list id='33d0cd82-57c6-11e1-8ed1-406186ea4fc5'></port_list>\

</create_target>"


태스크 생성 (파란색 글씨는 고정 : Full and Fast scan)

$ gvm-cli --gmp-username admin --gmp-password admin socket --socketpath /opt/gvm/var/run/gvmd.sock\

 --xml "<create_task><name>test2</name>\

<target id=\"681ea656-785d-42b0-8f49-ce35f01ec6cd\"></target> \

<config id=\"daba56c8-73ec-11df-a475-002264764cea\"></config></create_task>"


스캐닝 시작 

$ gvm-cli --gmp-username admin --gmp-password admin socket --socketpath /opt/gvm/var/run/gvmd.sock\

 --xml '<start_task task_id="589082e6-0245-4553-8501-aabcc6bbd4bb"/>'


스캐닝 상태 확인 

$ gvm-cli --gmp-username admin --gmp-password admin socket --socketpath /opt/gvm/var/run/gvmd.sock\

 --xml  "<get_tasks task_id=\"589082e6-0245-4553-8501-aabcc6bbd4bb\"/>" |sed -e "s/></>\n</g" |grep -E "progress|scan_start|scan_end|severity"


리포트 저장 (파란색 글씨는 고정 : pdf 문서 코드)

$ gvm-cli --gmp-username admin --gmp-password admin socket --socketpath /opt/gvm/var/run/gvmd.sock\

 --xml "<get_reports report_id=\"8f1114a3-a37a-402c-b01c-c872864abc83\" format_id=\"c402cc3e-b531-11e1-9163-406186ea4fc5\" details='True' filter='apply_overrides=0 levels=hml rows=100 min_qod=70 first=1 sort-reverse=severity' />" | grep -oP '(?<=</report_format>)[^<]+' | base64 -d > report.pdf



2. 트러블 슈팅

스캐닝이 되지 않고 바로 종료되거나,
Error Message 가 아래와 같이 출력 된 경우 해결 방법입니다.

(에러)
Could not connect to Scanner

(해결)
unix-socket 을 확인합니다.
# systemctl status  ospd-openvas
/opt/gvm/var/run/ospd.sock

사용자를 전환 합니다.
# sudo su - gvm

아래 명령으로 출력된 OpenVAS 스캐너 ID 를 확인 합니다.
$ gvmd --get-scanners

확인했던 unix-socket 과 OpenVAS 스캐너 ID 를 갱신해 줍니다.
$ gvmd --modify-scanner=08b69003-5fc2-4037-a479-93b440211c73 --scanner-host=/opt/gvm/var/run/ospd.sock

그리고 나서 스캐닝을 재시도 합니다.



------------------------------- End-Of-Life ---------------------------------


Ubuntu 18.04, 19.04, 20.04 에서 설치 방법 (OpenVAS)


# apt -y update


# apt -y install openvas


# openvas-setup


설치 마지막에 아래와 같이 패스워드가 출력되므로 잊지않고 메모해두기 바랍니다.


User created with password '609e5e80-4be1-4ac4-8072-6185b9a75589'.


패스워드를 분실 하였을때는 아래와 같이 초기화가 가능합니다.


# openvasmd --user=admin --new-password=new_password


가동 및 중지

# openvas-start

# openvas-stop




CentOS 7.x 에서 설치 방법 (OpenVAS)


OS 종류별 설치 방법은 아래 사이트를 참고하세요.

http://www.openvas.org/



1) selinux 중지

/etc/sysconfig/selinux 수정


2) OS환경 업데이트

yum -y update


3) 필수 구성요소 설치

# yum -y install wget bzip2 texlive net-tools alien gnutls-utils


4) 리포지토리 추가

# wget -q -O - https://www.atomicorp.com/installers/atomic | sh


5) OpenVAS 9 설치

# yum -y install openvas


6) /etc/redis.conf 파일에 아래 내용 주석 해제

unixsocket /tmp/redis.sock

unixsocketperm 700


/etc/redis.conf 파일 없는경우 (yum install redis)


7) Redis 시작

# systemctl enable redis

# systemctl start redis


8) OpenVAS 설정

# openvas-setup


9) 방화벽에 tcp/9392 포트 오픈


이제 https://<IP-ADDRESS>:9392 에 접속해 로그인 후 스캐닝이 가능하다.


CLI (omp) 를 사용하려면 아래 명령을 필수로 수행해야 합니다.

# openvasmd -p 9390 -a 127.0.0.1


또한 pdf 로 출력이 되지 않을 경우 (0 byte) 아래 매뉴얼을 참고합니다.

https://sysdocu.tistory.com/1332



[추가 설정 - Timezone 변경]

https://IP:9392

관리자 계정으로 로그인 후

Extras > My Settings 들어가면

상단 제목 부분에 '연장' 아이콘이 있습니다. 그것을 클릭해서 Timezone 변경이 가능합니다.




CentOS 7.x 에서 설치 방법 (GVM)

같은 OpenVAS 9 버전임에도 설치 해야 하는 패키지, 명령어 등이 바뀌어서 새로운 설치 방법을 찾아보게 되었습니다.

아래 절차대로만 실행하면 CentOS 7 에서 새로운 OpenVAS 9 사용이 가능해질 것입니다.

OpenVAS 설치시 openvas-manager, omp 사용이 불가하고 강제적으로 GVM 이 설치되어 gvm-cli 명령을 이용해야 합니다.

그마저도 GCE (커뮤니티 에디션) 에서는 지원이 안된다는 얘기가 있습니다.


[설치]


# vi /etc/sysconfig/selinux

SELINUX=disabled


# yum -y update

# yum -y install wget

# wget -q -O - https://updates.atomicorp.com/installers/atomic | sh
wget -q -O – https://www.atomicorp.com/installers/atomic | sh 도 상관없음

# yum -y install greenbone-vulnerability-manager

# vi /etc/redis.conf

아래 옵션 두 줄 주석 해제
unixsocket /tmp/redis.sock
unixsocketperm 700

# systemctl enable redis


# systemctl restart redis

# openvas-setup
설치중 관리자 계정 등록

# echo 'OPTIONS="--listen=0.0.0.0 --port=9392"' > /etc/sysconfig/gsad

# systemctl restart gsad
netstat -nltp 로 확인시 9392 포트가 안열려 있으면 gsad 를 재가동

* 취약점 검사 결과 리포트 PDF 추출을 위한 패키지 설치
# yum -y install texlive-collection-fontsrecommended texlive-collection-latexrecommended texlive-changepage texlive-titlesec

# mkdir -p /usr/share/texlive/texmf-local/tex/latex/comment
# cd /usr/share/texlive/texmf-local/tex/latex/comment
# wget http://mirrors.ctan.org/macros/latex/contrib/comment/comment.sty
# chmod 644 comment.sty
# texhash

*gvm-tools 설치를 위한 python 3.6 설치

gvm-tools 를 설치해야 gvm-cli 를 사용할 수 있음

# yum -y install https://centos7.iuscommunity.org/ius-release.rpm
# yum -y update
# yum install -y python36u python36u-libs python36u-devel python36u-pip python36-defusedxml python36-lxml

gvm-cli 명령을 실행해서 옵셜 설명이 나오면 정상. 그 외 에러가 출력되면 맨 아랫줄 메세지를 참고하여 패키지를 추가 설치하거나 별도 해결책을 찾아봐야 합니다.


반응형

댓글()