모의해킹 (WAPT)

Docker 컨테이너 환경 OpenVAS 실행 가이드

날으는물고기 2023. 8. 30. 08:51

소개

이 문서는 Docker를 사용하여 사전 빌드된 컨테이너 이미지에서 Greenbone Community Edition을 실행하기 위한 가이드를 제공합니다. 각 서비스가 별도의 컨테이너에서 실행되는 분산 서비스 아키텍처로 구성됩니다. 이러한 서비스들의 오케스트레이션은 docker-compose 파일을 통해 이루어집니다.

Greenbone Community Containers를 사용하면 기존 운영 체제, 설치된 소프트웨어 및 도구 체인과는 독립적으로 로컬 네트워크를 스캔할 수 있습니다.

하드웨어 요구사항

최소:

  • CPU 코어: 2
  • 램: 4GB
  • 하드 디스크: 20GB 여유 공간

권장:

  • CPU 코어: 4
  • 램: 8GB
  • 하드 디스크: 60GB 여유 공간

사전 요구사항

참고: 가이드를 단계별로 따라주십시오. 나중 단계에서는 이전 명령의 설정이나 출력이 필요할 수 있습니다.

시스템에서 권한이 필요한 명령을 실행하기 위해 sudo 명령을 사용합니다.

curl 설치

이 가이드에서 파일을 다운로드하는 데 curl이 필요합니다.

sudo apt install curl

Docker 설치

서비스를 컨테이너 내에서 실행하려면 docker가 필요합니다. 다음 명령을 사용하여 Docker를 설치할 수 있습니다.

sudo apt install docker.io

Docker Compose 설치

Greenbone Community Edition의 서비스를 시작하고 연결하기 위해 docker-compose 버전 1.29.0 이상이 필요합니다. 서비스 오케스트레이션의 설명은 compose 파일을 사용하여 수행됩니다. Greenbone Community Edition을 위한 compose 파일은 나중에 제공됩니다.

sudo apt install docker-compose

설정

현재 사용자가 도커를 실행하고 따라서 컨테이너를 시작할 수 있도록 하기 위해 docker 사용자 그룹에 추가되어야 합니다. 그룹 변경을 적용하려면 로그아웃하고 다시 로그인하거나 su를 사용하십시오.

 

현재 사용자를 docker 그룹에 추가하고 현재 쉘 환경에 그룹 변경을 적용합니다.

sudo usermod -aG docker $USER && su $USER

docker compose 파일을 다운로드하려면 대상 디렉터리를 생성해야 합니다.

export DOWNLOAD_DIR=$HOME/greenbone-community-container && mkdir -p $DOWNLOAD_DIR

Docker Compose 파일

Greenbone Community Edition을 컨테이너와 함께 실행하려면 다음 컴포즈 파일을 사용해야 합니다.

services:
  vulnerability-tests:
    image: greenbone/vulnerability-tests
    environment:
      STORAGE_PATH: /var/lib/openvas/22.04/vt-data/nasl
    volumes:
      - vt_data_vol:/mnt

  notus-data:
    image: greenbone/notus-data
    volumes:
      - notus_data_vol:/mnt

  scap-data:
    image: greenbone/scap-data
    volumes:
      - scap_data_vol:/mnt

  cert-bund-data:
    image: greenbone/cert-bund-data
    volumes:
      - cert_data_vol:/mnt

  dfn-cert-data:
    image: greenbone/dfn-cert-data
    volumes:
      - cert_data_vol:/mnt
    depends_on:
      - cert-bund-data

  data-objects:
    image: greenbone/data-objects
    volumes:
      - data_objects_vol:/mnt

  report-formats:
    image: greenbone/report-formats
    volumes:
      - data_objects_vol:/mnt
    depends_on:
      - data-objects

  gpg-data:
    image: greenbone/gpg-data
    volumes:
      - gpg_data_vol:/mnt

  redis-server:
    image: greenbone/redis-server
    restart: on-failure
    volumes:
      - redis_socket_vol:/run/redis/

  pg-gvm:
    image: greenbone/pg-gvm:stable
    restart: on-failure
    volumes:
      - psql_data_vol:/var/lib/postgresql
      - psql_socket_vol:/var/run/postgresql

  gvmd:
    image: greenbone/gvmd:stable
    restart: on-failure
    volumes:
      - gvmd_data_vol:/var/lib/gvm
      - scap_data_vol:/var/lib/gvm/scap-data/
      - cert_data_vol:/var/lib/gvm/cert-data
      - data_objects_vol:/var/lib/gvm/data-objects/gvmd
      - vt_data_vol:/var/lib/openvas/plugins
      - psql_data_vol:/var/lib/postgresql
      - gvmd_socket_vol:/run/gvmd
      - ospd_openvas_socket_vol:/run/ospd
      - psql_socket_vol:/var/run/postgresql
    depends_on:
      pg-gvm:
        condition: service_started
      scap-data:
        condition: service_completed_successfully
      cert-bund-data:
        condition: service_completed_successfully
      dfn-cert-data:
        condition: service_completed_successfully
      data-objects:
        condition: service_completed_successfully
      report-formats:
        condition: service_completed_successfully

  gsa:
    image: greenbone/gsa:stable
    restart: on-failure
    ports:
      - 9392:80
    volumes:
      - gvmd_socket_vol:/run/gvmd
    depends_on:
      - gvmd

  ospd-openvas:
    image: greenbone/ospd-openvas:stable
    restart: on-failure
    init: true
    hostname: ospd-openvas.local
    cap_add:
      - NET_ADMIN # for capturing packages in promiscuous mode
      - NET_RAW # for raw sockets e.g. used for the boreas alive detection
    security_opt:
      - seccomp=unconfined
      - apparmor=unconfined
    command:
      [
        "ospd-openvas",
        "-f",
        "--config",
        "/etc/gvm/ospd-openvas.conf",
        "--mqtt-broker-address",
        "mqtt-broker",
        "--notus-feed-dir",
        "/var/lib/notus/advisories",
        "-m",
        "666"
      ]
    volumes:
      - gpg_data_vol:/etc/openvas/gnupg
      - vt_data_vol:/var/lib/openvas/plugins
      - notus_data_vol:/var/lib/notus
      - ospd_openvas_socket_vol:/run/ospd
      - redis_socket_vol:/run/redis/
    depends_on:
      redis-server:
        condition: service_started
      gpg-data:
        condition: service_completed_successfully
      vulnerability-tests:
        condition: service_completed_successfully

  mqtt-broker:
    restart: on-failure
    image: greenbone/mqtt-broker
    ports:
      - 1883:1883
    networks:
      default:
        aliases:
          - mqtt-broker
          - broker

  notus-scanner:
    restart: on-failure
    image: greenbone/notus-scanner:stable
    volumes:
      - notus_data_vol:/var/lib/notus
      - gpg_data_vol:/etc/openvas/gnupg
    environment:
      NOTUS_SCANNER_MQTT_BROKER_ADDRESS: mqtt-broker
      NOTUS_SCANNER_PRODUCTS_DIRECTORY: /var/lib/notus/products
    depends_on:
      - mqtt-broker
      - gpg-data
      - vulnerability-tests

  gvm-tools:
    image: greenbone/gvm-tools
    volumes:
      - gvmd_socket_vol:/run/gvmd
      - ospd_openvas_socket_vol:/run/ospd
    depends_on:
      - gvmd
      - ospd-openvas

volumes:
  gpg_data_vol:
  scap_data_vol:
  cert_data_vol:
  data_objects_vol:
  gvmd_data_vol:
  psql_data_vol:
  vt_data_vol:
  notus_data_vol:
  psql_socket_vol:
  gvmd_socket_vol:
  ospd_openvas_socket_vol:
  redis_socket_vol:

아래 표는 Docker 컴포즈 파일의 제공된 컨테이너와 그들의 서비스를 자세히 설명합니다.

컨테이너 서비스 설명
redis-server Redis 서버 조정된 구성을 가진 Redis 서버입니다. VT 데이터 및 스캔 결과를 스캐너에서 저장합니다.
pg-gvm PostgreSQL gvmd와 함께 사용하기 위한 PostgreSQL 데이터베이스 클러스터 설정입니다. 실제 데이터는 psql_data_vol 볼륨에 저장됩니다.
gvmd gvmd PostgreSQL 데이터베이스와 ospd-openvas 스캐너와 통신하기 위해 볼륨 내 unix 소켓을 사용하는 gvmd 컨테이너입니다. 다운로드된 피드 데이터는 gvmd_data_vol 볼륨에 저장됩니다. 피드 데이터를 확인하려면 gpg_data_vol의 GPG 키링을 사용합니다.
gsa gsad GSA 웹 애플리케이션을 제공하기 위해 실행되는 gsad 웹 서버 컨테이너입니다. 웹 인터페이스는 localhost의 9392 포트에서 사용할 수 있습니다. gvmd와 통신하기 위해 볼륨 내 unix 소켓을 사용합니다.
ospd-openvas ospd-openvas 취약성 스캐너를 제공하는 컨테이너입니다. 피드에서 가져온 VT 데이터는 vt_data_vol 볼륨에 저장됩니다. 피드 데이터를 확인하려면 gpg_data_vol의 GPG 키링을 사용합니다. Redis 서버와의 연결은 볼륨 내 unix 소켓을 통해 설정됩니다.
mqtt-broker Mosquitto MQTT 브로커 notus-scanner, openvas-scanner 및 ospd-openvas 간의 통신에 사용되는 MQTT 브로커입니다.
notus-scanner notus-scanner 로컬 보안 검사에 사용되는 notus-scanner 컨테이너입니다. 피드 데이터를 확인하려면 gpg_data_vol의 GPG 키링을 사용합니다. notus-scanner 자체의 피드 데이터는 notus_data_vol에 저장됩니다.
gvm-tools gvm-tools gvmd 및 ospd-openvas를 쿼리하고 제어하기 위한 gvm-tools CLI를 제공하는 컨테이너입니다.
gpg-data   그린본의 공개 서명 키가 있는 GPG 키링을 시작 시 gpg_data_vol 볼륨으로 복사하는 컨테이너입니다. 시작 후 종료됩니다.
vulnerability-tests   시작 시 취약성 테스트(VT)를 vt_data_vol 볼륨으로 복사하는 컨테이너입니다. 라이선스를 표시한 후 종료됩니다.
notus-data   시작 시 notus-scanner에 대한 취약성 정보를 notus_data_vol 볼륨으로 복사하는 컨테이너입니다. 라이선스를 표시한 후 종료됩니다.
scap-data   시작 시 CVE 및 CPE 데이터를 scap_data_vol 볼륨으로 복사하는 컨테이너입니다. 라이선스를 표시한 후 종료됩니다.
cert-bund-data   시작 시 CERT-Bund 데이터를 cert_data_vol 볼륨으로 복사하는 컨테이너입니다. 라이선스를 표시한 후 종료됩니다.
dfn-cert-data   시작 시 DFN-CERT 데이터를 cert_data_vol 볼륨으로 복사하는 컨테이너입니다. 라이선스를 표시한 후 종료됩니다.
data-objects   시작 시 스캔 설정, 컴플라이언스 정책 및 포트 목록을 data_objects_vol 볼륨으로 복사하는 컨테이너입니다. 라이선스를 표시한 후 종료됩니다.
report-formats   시작 시 보고서 형식을 data_objects_vol 볼륨으로 복사하는 컨테이너입니다. 라이선스를 표시한 후 종료됩니다.

위 내용은 Docker 컴포즈 파일 내의 각 컨테이너와 해당 서비스를 자세히 설명한 것입니다.

다운로드

컴포즈 파일을 직접 복사하거나 다음 명령을 사용하여 다운로드할 수 있습니다.

cd $DOWNLOAD_DIR && curl -f -L https://greenbone.github.io/docs/latest/_static/docker-compose-22.4.yml -o docker-compose.yml

Greenbone Community Containers 실행

docker-compose 파일을 사용하여 컨테이너 이미지를 다운로드(풀)하고 컨테이너를 백그라운드에서 시작할 수 있습니다.

 

Greenbone Community Containers 다운로드

docker-compose -f $DOWNLOAD_DIR/docker-compose.yml -p greenbone-community-edition pull

Greenbone Community Containers 시작

docker-compose -f $DOWNLOAD_DIR/docker-compose.yml -p greenbone-community-edition up -d

로그 출력의 지속적인 스트림을 얻으려면 다음 명령을 실행합니다.

 

모든 서비스의 로그 메시지 표시

docker-compose -f $DOWNLOAD_DIR/docker-compose.yml -p greenbone-community-edition logs -f

로그 스트림은 Ctrl-C를 눌러 중지할 수 있습니다.

관리자 사용자 설정

경고: 기본적으로 admin이라는 사용자 이름과 admin이라는 비밀번호로 사용자가 생성됩니다. 이는 보안에 취약하며, 새로운 비밀번호로 업데이트하는 것이 매우 권장됩니다.

 

관리자 사용자의 비밀번호를 생성된 비밀번호 대신 원하는 비밀번호로 업데이트하려면 다음 명령을 사용합니다.

docker-compose -f $DOWNLOAD_DIR/docker-compose.yml -p greenbone-community-edition \
    exec -u gvmd gvmd gvmd --user=admin --new-password=<password>

취약성 관리 시작

서비스가 시작되고 모든 피드 데이터가 로드된 후, Greenbone Security Assistant 웹 인터페이스(GSA)를 브라우저에서 열 수 있습니다.

 

GSA를 브라우저에서 열기

xdg-open "http://127.0.0.1:9392" 2>/dev/null >/dev/null &

브라우저는 GSA의 로그인 페이지를 표시하며, 이전에 생성한 자격 증명을 사용하여 취약성 스캔을 시작할 수 있습니다.

처음 로그인 후 Greenbone Security Assistant 열기

설정 및 시작 스크립트

참고: 먼저 Prerequisites에 나와 있는 지침을 따르는 것을 기억하십시오.

 

다음 스크립트에는 위의 모든 명령이 포함되어 있습니다. 다음 명령을 사용하여 이 스크립트를 다운로드할 수 있습니다.

curl -f -O https://greenbone.github.io/docs/latest/_static/setup-and-start-greenbone-community-edition.sh && chmod u+x setup-and-start-greenbone-community-edition.sh

스크립트를 실행하려면 다음 명령을 실행하십시오.

./setup-and-start-greenbone-community-edition.sh

이제 이 스크립트를 실행하면 위에서 제시한 단계를 자동으로 수행할 수 있습니다.

 

원문 : https://greenbone.github.io/docs/latest/22.4/container/

728x90