vuls 도입 메모 ~Vuls 서버 구축으로부터 취약성 진단의 정기 실행을 할 때까지(메일 통지·Chatwork 통지)~

소개


  • 취약성 진단을 위해 vuls 환경을 구축합니다.

  • 이 절차에 따라



    vuls 서버 측에서 수행


  • vuls 실행 사용자 만들기
  • vuls 설치
  • VulsRepo 설치
  • VulsRepo를 systemd 관리하고 자동 시작 설정

  • 취약성 정보 업데이트
  • 취약성 진단을 정기적으로 실행하고 결과를 메일 통지

  • 대상 환경


  • CentOS7

  • 설치된 버전


    $ vuls -v
    vuls v0.6.1 ca21602
    
    $ go version
    go version go1.10.1 linux/amd64
    
    $ go-cve-dictionary -v
    go-cve-dictionary v0.3.1 b083bed
    

    디렉토리 구조



    다음은 본 절차에서 개인적으로 중요하다고 생각하는 포인트
    - /opt/vuls/
        - config.toml ★vuls設定ファイル
        - cve.sqlite3 ★脆弱性診断が含まれるDB
        - go/
            - bin/vuls ★vulsコマンドの存在場所
            - go/src/github.com/future-architect/vuls/ ★vulsのインストール場所
        - results/ ★vuls診断結果を保存するディレクトリ
            - 各種診断結果。。。
        - vulsrepo/ ★vuls診断結果をWebで確認するツール一式
            - その他ライセンスもろもろ。。。
            - server/
                - vulsrepo-config.toml ★VulsRepoの設定ファイル
                - vulsrepo-server ★VulsRepoの起動スクリプト
                - その他設定もろもろ。。。
    

    Vuls 구축 절차


  • 보충
  • #로 시작하는 행의 명령은 root 사용자로 실행되고 $는 vuls 사용자로 실행됩니다.


  • vuls 설치



    1. 필요한 패키지 설치


    # yum -y install sqlite git gcc
    # wget https://dl.google.com/go/go1.10.1.linux-amd64.tar.gz
    # tar -C /usr/local -xzf go1.10.1.linux-amd64.tar.gz
    

    2. vuls 용 사용자 작성, 로그 설정


    # useradd vuls -b /opt ★任意のユーザで構いません
    # mkdir /var/log/vuls
    # chown -R vuls.vuls /var/log/vuls ★useraddした任意のユーザ名の権限にする
    # chmod 700 /var/log/vuls
    

    3. Go 언어용 환경 변수 설정


    # vi /etc/profile.d/goenv.sh ★goenv.shを作成して以下の3行を記載する。
    export GOROOT=/usr/local/go
    export GOPATH=$HOME/go
    export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
    
    # source /etc/profile.d/goenv.sh
    

    4.go-cve-dictionary 설치



    go-cve-dictionary란?


  • 취약성 정보의 공개 데이터를 DB에 가져오고 관리하기 위한 도구
  • # su - vuls
    $ mkdir -p $GOPATH/src/github.com/kotakanbe
    $ cd $GOPATH/src/github.com/kotakanbe
    $ git clone https://github.com/kotakanbe/go-cve-dictionary.git
    $ cd go-cve-dictionary
    $ make install 
    

    5. NVD에서 취약성 데이터베이스 얻기


    $ cd /opt/vuls
    $ for i in `seq 1998 $(date +"%Y")`; do go-cve-dictionary fetchjvn -years $i; done
    

    6.vuls 설치


    $ mkdir -p $GOPATH/src/github.com/future-architect
    $ cd $GOPATH/src/github.com/future-architect
    $ git clone https://github.com/future-architect/vuls.git
    $ cd vuls
    $ make install
    

    vuls 실행



    vuls 연결 준비



    다음은 vuls 서버 측에서 작업


    # su - vuls
    $ ssh-keygen -t rsa
    $ cat ~/.ssh/id_rsa.pub ★このファイルの中身をメモ
    

    다음은 취약성 진단 서버 측에서 작업


    # useradd vuls
    # su - vuls
    $ mkdir ~/.ssh/
    $ vi ~/.ssh/authorized_keys ★先ほどメモしたファイルの中身を記載する
    $ chmod 700 /home/vuls/.ssh/
    $ chmod 600 ~/.ssh/authorized_keys
    

    SSH 연결 확인 (vuls 서버 → 취약성 진단하는 서버)


    # ssh -i /opt/vuls/.ssh/id_rsa vuls@<脆弱性診断するサーバのIPアドレス>
    

    vuls 구성 파일 작성 (vuls 서버에서 실행)


    # su - vuls
    $ vi config.toml
    [servers.target-server]
    host        = "<脆弱性診断するサーバのIPアドレス>"
    port        = "22"
    user        = "vuls" ★脆弱性診断をするユーザ
    keyPath     = "/opt/vuls/.ssh/id_rsa" 
    

    취약성 진단 실행


    $ vuls scan target-server
    $ vuls report -lang=ja
    

    취약점 진단을 웹 도구(VulsRepo)에서 확인하고 싶습니다.


  • 자세한 내용은 아래 공식 문서를 확인하십시오.
  • VulsRepo


  • VulsRepo 설치


    # su - vuls
    $ cd $HOME $ git clone https://github.com/usiusi360/vulsrepo.git
    $ cd $HOME/vulsrepo/server
    $ cp vulsrepo-config.toml.sample vulsrepo-config.toml
    $ vi vulsrepo-config.toml
    [Server]
    rootPath = "/opt/vuls/vulsrepo"
    resultsPath  = "/opt/vuls/results"
    serverPort  = "5111"
    

    VulsRepo 시작


    $ cd $HOME/vulsrepo/server
    $ ./vulsrepo-server
    

    취약성 진단 결과를 웹에서 확인



    http://< Vuls 서버의 IP 주소 >:5111로 이동합니다.



    취약성 진단한 대상의 보고서를 선택 → [Submit]



    왼쪽 상단의 풀다운에서 [03. Pivot: Package/CVSS-Severity/CveID/Summary => ServerName]을 선택 → [Save]



    VulsRepo를 systemd로 관리하고 싶습니다.



    시작 파일 만들기


    # vi /etc/systemd/system/vulsrepo.service
    
    [Unit]
    Description=vulsrepo daemon
    Documentation=https://github.com/usiusi360/vulsrepo
    
    [Service]
    ExecStart = /opt/vuls/vulsrepo/server/vulsrepo-server
    ExecRestart = /bin/kill -WINCH ${MAINPID} ; /opt/vuls/vulsrepo/server/vulsrepo-server
    ExecStop = /bin/kill -WINCH ${MAINPID}
    Restart = no
    Type = simple
    User = vuls
    Group = vuls
    
    [Install]
    WantedBy = multi-user.target
    

    확인


    # systemctl list-unit-files --type=service|grep vulsrepo
    vulsrepo.service                           disabled 
    

    자동 기동 설정, 동작 확인


    # systemctl enable vulsrepo
    Created symlink from /etc/systemd/system/multi-user.target.wants/vulsrepo.servic
    #
    # systemctl status vulsrepo
    ● vulsrepo.service - vulsrepo daemon
       Loaded: loaded (/etc/systemd/system/vulsrepo.service; enabled; vendor preset:
       Active: inactive (dead) since 水 2019-01-09 16:29:37 JST; 3s ago
         Docs: https://github.com/usiusi360/vulsrepo
      Process: 32536 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUC
      Process: 32525 ExecStart=/opt/vuls/vulsrepo/server/vulsrepo-server (code=kille
     Main PID: 32525 (code=killed, signal=TERM)
    #
    # systemctl start vulsrepo
    #
    # systemctl status vulsrepo
    ● vulsrepo.service - vulsrepo daemon
       Loaded: loaded (/etc/systemd/system/vulsrepo.service; enabled; vendor preset:
       Active: active (running) since 水 2019-01-09 16:29:46 JST; 1s ago
         Docs: https://github.com/usiusi360/vulsrepo
      Process: 32536 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUC
     Main PID: 32545 (vulsrepo-server)
        Tasks: 4
       Memory: 864.0K
       CGroup: /system.slice/vulsrepo.service
               mq32545 /opt/vuls/vulsrepo/server/vulsrepo-server
    # systemctl stop vulsrepo
    #
    # systemctl status vulsrepo
    ● vulsrepo.service - vulsrepo daemon
       Loaded: loaded (/etc/systemd/system/vulsrepo.service; enabled; vendor preset:
       Active: inactive (dead) since 水 2019-01-09 16:29:37 JST; 3s ago
         Docs: https://github.com/usiusi360/vulsrepo
      Process: 32536 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUC
      Process: 32525 ExecStart=/opt/vuls/vulsrepo/server/vulsrepo-server (code=kille
     Main PID: 32525 (code=killed, signal=TERM)
    

    Vuls 정기 실행



    취약성 정보의 정기 업데이트



    다음은 매주 월요일 아침 5시에 실행됩니다.
    # vi /etc/crontab
    00 5 * * 1 vuls ${HOME}/go/bin/go-cve-dictionary fetchnvd -last2y -dbpath=/opt/vuls/cve.sqlite3
    30 5 * * 1 vuls ${HOME}/go/bin/go-cve-dictionary fetchjvn -latest -dbpath=/opt/vuls/cve.sqlite3
    

    취약성 진단 결과를 이메일로 통지



    메일러 설치, 시작, 자동 시작


    # yum install -y postfix
    # systemctl start postfix
    # systemctl enable postfix
    

    Vuls 이메일 설정하기


    # vi /opt/vuls/config.toml
    
    [email]
    smtpAddr      = "localhost"
    smtpPort      = "25"
    from          = "[email protected]"
    to            = ["[email protected]"]
    subjectPrefix = "[vuls]"
    

    취약성 진단 결과를 이메일로 알림(선택사항: -to-email)


    $ vuls scan && vuls report -lang=ja -format-full-text -to-email
    

    취약성 진단의 정기 실행



    다음은 매월 1일 아침 6시에 진단을 실행합니다.
    # vi /etc/crontab
    00 6 1 * * vuls /opt/vuls/go/bin/vuls scan && /opt/vuls/go/bin/vuls report -lang=ja -format-full-text -to-email > /dev/null 2>&1
    

    취약성 진단 결과를 채팅으로 통보하기



    설정 파일 작성


    $ vi /opt/vuls/config.toml
    
    [chatwork]
    room = "aaaaaaa" ★チャットワークルームID
    apiToken = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ★チャットワークのユーザのAPIトークン
    

    취약성 진단 결과를 채팅에 알리기(옵션: -to-chatwork)


    $ vuls scan && vuls report -format-full-text -to-chatwork -lang=ja
    

    좋은 웹페이지 즐겨찾기