NICT EXIST를 설치해 보았습니다.

2019/03/15에 NICT 의 사이버 보안 연구실이 공개한 EXIST 를 설치해 보았으므로, 그 기록입니다.

소개



EXIST란?



EXISTNICT 의 NICTER 해석 팀이 개발한 웹 어플리케이션으로, NICTER 해석 팀이 일상적인 조사·해석 업무에 사용하고 있는 툴입니다.
커뮤니티나 보안 벤더 등이 제공하는 사이버 위협 정보를 자동 집계할 수 있습니다.

EXIST는 사이버 위협 정보를 집계하고 다양한 소스를 가로 질러 검색 할 수있는 웹 응용 프로그램입니다. 다양한 소스에서 사이버 위협 정보를 피드 및 API를 통해 검색하여 EXIST의 데이터베이스에 집계합니다. 사용자는 WebUI 또는 WebAPI에서 사이버 위협 정보를 특정 키워드로 횡단적으로 검색 할 수 있습니다.
인용: NICTER Blog 부터)



환경 구성


- OS: CentOS 7.6  
- DB: MariaDB 10.3.13
- Python 3.6.7

설치



GitHub의 순서를 참고로, 설치해 갑니다.
OS가 프록시 아래 환경에 있으면 /etc/profile에 프록시 설정을 추가하십시오.

OS 최신화


# sudo yum update -y  
# sudo yum upgrade -y
# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)

Git 설치


# yum install git -y

# プロキシの設定は必要に応じて実施
# git config --global http.proxy http://proxy.example.com:port
# git config --global https.proxy http://proxy.example.com:port

Python3 설치



Yum 리포지토리를 추가하고 Python3.6을 설치합니다.
# yum install -y https://centos7.iuscommunity.org/ius-release.rpm
# yum install python36u python36u-libs python36u-devel python36u-pip -y
# yum groupinstall 'development tools' -y
# python3.6 --version
Python 3.6.7

pip 버전 업



Python과 함께 제공되는 pip 버전은 이전 상태이므로 --upgrade 옵션을 사용하여 최신 버전으로 업데이트합니다.
프록시 환경의 경우 --proxy http://proxy.example.com:port 옵션을 추가합니다.
# pip3.6 install --upgrade pip
# pip3.6 --version
pip 19.0.3 from /usr/lib/python3.6/site-packages/pip (python 3.6)

소스 클론


# cd /opt
# git clone https://github.com/nict-csl/exist.git

Python 모듈 설치



프록시 환경의 경우 pip 명령에 --proxy http://proxy.example.com:port를 추가합니다.
# cd /opt/exist
# pip install -r requirements.txt

MariaDB 설치



프록시 환경의 경우, ~/.curlrc 에 프록시 정보를 기재해 둡니다.

~/.curlrc
proxy-user=username:password
proxy=http://proxy.example.com:port
# curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
[info] Repository file successfully written to /etc/yum.repos.d/mariadb.repo.
[info] Adding trusted package signing keys...
[info] Succeessfully added trusted package signing keys.

# yum install MariaDB-server MariaDB-client -y
# systemctl start mariadb
# systemctl enable mariadb

mysql_secure_installation



MariaDB의 최소 보안 설정을 수행합니다.
# mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): //初期インストール時はパスワードがないため、そのままEnter押下
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] Y
New password: //新しいパスワードを入力
Re-enter new password: //再度、新しいパスワードを入力
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] Y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

MariaDB 재부팅


# systemctl restart mariadb

MariaDB 설정



MariaDB에 mysql -u root -p 명령으로 로그인하고 EXIST에 대한 설정을 구성합니다.
MariaDB [(none)]> CREATE DATABASE intelligence_db;
MariaDB [(none)]> CREATE USER 'exist'@'localhost' IDENTIFIED BY 'Passw0rd';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON intelligence_db.* TO 'exist'@'localhost';
MariaDB [(none)]> quit

장고 설정



템플릿 파일을 복사하여 구성 파일을 만듭니다.
# cp -p /opt/exist/intelligence/settings.py.template /opt/exist/intelligence/settings.py
settings.py 파일의 정보를 업데이트합니다.
업데이트는 다음 내용입니다.
  • ALLOWED_HOSTS : FQDN 정보
  • DATABASES : #MariaDB 설정 에서 설정한 정보

  • /opt/exist/intelligence/settings.py
    ALLOWED_HOSTS = [
         'localhost',
         'xxx.xxx.xxx.xxx', # インストールサーバーのIPアドレス etc.
    ]
    
    ...(中略)...
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'intelligence_db',
            'USER': 'exist',
            'PASSWORD': 'Passw0rd',
            'HOST': '',
            'PORT': '',
            'OPTIONS': {
                'charset': 'utf8mb4',
                'init_command': 'SET character_set_connection=utf8mb4;'
                                'SET collation_connection=utf8mb4_unicode_ci;'
                                "SET NAMES 'utf8mb4';"
                                "SET CHARACTER SET utf8mb4;"
            },
        }
    }
    

    장고 마이그레이션


    # cd /opt/exist
    # python3.6 manage.py makemigrations exploit reputation threat threat_hunter twitter twitter_hunter
    # python3.6 manage.py migrate
    

    Redis server 설치


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

    Celery 설정



    /etc/sysconfig/celery
    # Name of nodes to start
    # here we have a single node
    CELERYD_NODES="localhost"
    # or we could have three nodes:
    #CELERYD_NODES="w1 w2 w3"
    
    # Absolute or relative path to the 'celery' command:
    CELERY_BIN="/bin/celery"
    
    # App instance to use
    # comment out this line if you don't use an app
    CELERY_APP="intelligence"
    # or fully qualified:
    #CELERY_APP="proj.tasks:app"
    
    # How to call manage.py
    CELERYD_MULTI="multi"
    
    # Extra command-line arguments to the worker
    CELERYD_OPTS="--time-limit=300 --concurrency=8"
    
    # - %n will be replaced with the first part of the nodename.
    # - %I will be replaced with the current child process index
    # and is important when using the prefork pool to avoid race conditions.
    CELERYD_PID_FILE="/var/run/celery/%n.pid"
    CELERYD_LOG_FILE="/var/log/celery/%n%I.log"
    CELERYD_LOG_LEVEL="INFO"
    

    Celery 자동 시작 설정



    /etc/systemd/system/celery.service
    [Unit]
    Description=Celery Service
    After=network.target
    
    [Service]
    Type=forking
    User=root
    Group=root
    EnvironmentFile=/etc/sysconfig/celery
    WorkingDirectory=/opt/exist
    ExecStart=/bin/sh -c '${CELERY_BIN} multi start ${CELERYD_NODES} \
    -A ${CELERY_APP} --pidfile=${CELERYD_PID_FILE} \
    --logfile=${CELERYD_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL} ${CELERYD_OPTS}'
    ExecStop=/bin/sh -c '${CELERY_BIN} multi stopwait ${CELERYD_NODES} \
    --pidfile=${CELERYD_PID_FILE}'
    ExecReload=/bin/sh -c '${CELERY_BIN} multi restart ${CELERYD_NODES} \
    -A ${CELERY_APP} --pidfile=${CELERYD_PID_FILE} \
    --logfile=${CELERYD_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL} ${CELERYD_OPTS}'
    
    [Install]
    WantedBy=multi-user.target
    

    방화벽 설정


    # firewall-cmd --zone=public --add-service=http --permanent
    # firewall-cmd --zone=public --add-service=https --permanent
    # firewall-cmd --zone=public --add-port=8000/tcp --permanent
    # firewall-cmd --reload
    

    EXIST 시작


    # mkdir -p /var/log/celery; chown root:root /var/log/celery
    # mkdir -p /var/run/celery; chown root:root /var/run/celery
    # systemctl start celery.service
    # systemctl enable celery.service
    # python3.6 /opt/exist/manage.py runserver 0.0.0.0:8000
    

    웹브라우저에서 http://<EXISTサーバーのIPアドレス>:8000 로 이동하여 아래 화면이 나오면 시작이 완료됩니다.



    관련 링크


  • 독립행정법인 정보통신연구기구(NICT)
  • GitHub
  • NICTER Blog - 사이버 위협 정보 집계 시스템 EXIST

  • 참고 정보


  • CentOS7에 Python3 시스템을 설치하는 단계
  • NICT가 공개한 사이버 위협 정보를 자동 집약할 수 있는 EXIST를 만들어 보았다(설치편)
  • curl 명령으로 프록시 설정
  • MariaDB 설치/초기 설정 [CentOS7]
  • 사이버 위협 정보 집계 시스템 EXIST를 구축해 보았다 #exist
  • 좋은 웹페이지 즐겨찾기