##はじめに・・・
NICTが公開しているEXISTを構築しようと思ったのですが、ubuntu系で構築した際のメモ
ほぼほぼ公式BlogやGithubのReadmeのとおりなので、ほんとに単なる個人メモ・・・
[NICTER Blog](https://blog.nicter.jp/2019/03/exist/,"NICTER Blog")
EXIST github
##環境
VirtualBox:6.0.6
OS:Ubuntu 18.4.2
CPU:Corei7-7500から2コア割り当て
メモリ:16GBから4GB割り当て
python3.6
BGM:Arc North の Sirius
使用しているユーザは、ユーザIDがexist、パスワードがpassword!と仮定して記載しています。
##ubuntuインストール後にインストールしたもの
user$ sudo apt-get install curl
user$ apt-get install git
user$ apt-get install python3-pip
user$ apt-get install python3-devel
user$ apt-get -y update
user$ apt-get -y upgrade
##EXISTインストール
###Codeの入手
#/opt/existに構築していきます
user$ cd /opt
user$ sudo git clone https://github.com/nict-csl/exist
user$ sudo chown exist:exist -R /opt/exist
###EXISTが要求しているライブラリ等をインストール
user$ cd exist
user$ sudo pip3 install -r requirements.txt
###MARIA DBのインストール&設定
#インストール
user$ sudo apt list|grep -i mariadb-server
mariadb-server/unknown 1:10.3.14+maria~bionic all
mariadb-server-10.1/bionic-updates,bionic-security 1:10.1.38-0ubuntu0.18.04.1 amd64
mariadb-server-10.3/unknown,now 1:10.3.14+maria~bionic amd64 [installed]
mariadb-server-core-10.1/bionic-updates,bionic-security 1:10.1.38-0ubuntu0.18.04.1 amd64
mariadb-server-core-10.3/unknown,now 1:10.3.14+maria~bionic amd64 [installed,automatic]
user$ apt install mariadb-server-10.3 -y
#設定(パスワードはsodo userのパスワードで良いはず)
user$ sudo mysql -p
MariaDB [(none)]> create database intelligence_db;
#ユーザ名 exist パスワード / password!の場合
#db名は公式と同じintelligence_dbを指定
MariaDB [(none)]> GRANT ALL PRIVILEGES ON `intelligence_db`.* TO 'exist'@'localhost' IDENTIFIED BY 'password!';
MariaDB [(none)]> exit
$ sudo systemctl start mariadb
$ sudo systemctl enable mariadb
###EXISTの設定
user$ vi /opt/exist/intelligence/settings.py.template
#2か所を更新
#今回は単体で動作させるためlocalhostを指定
ALLOWED_HOSTS = [
'localhost'
# '192.168.56.101',
]
#USERとPASSWORDをMARIA DBにセットしたものを指定
#db名はintelligence_dbが元々入っています
DATABASES = {
'default': {
#'ENGINE': 'django.db.backends.sqlite3',
#'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'ENGINE': 'django.db.backends.mysql',
'NAME': 'intelligence_db',
'USER': 'exist',
'PASSWORD': 'password!',
'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;"
},
}
}
#settings.pyとして保存
:wq /opt/exist/intelligence/settings.py
###Migrateを実施
user$ cd /opt/exist
user$ python manage.py makemigrations exploit reputation threat threat_hunter twitter twitter_hunter
user$ python manage.py migrate
##redisのインストール
apt-get install redis
systemctl start redis
systemctl enable redis
###celeryの設定を作成
公式をほぼコピー
差異は、whichで調べて表示されたパスをCELERY_BINに指定する箇所のみ
user$ which celery
/usr/local/bin/celery
user$ sudo mkdir /etc/exist_celery
user$ sudo vi /etc/exist_celery/celery.conf
# Name of nodes to start
# here we have a single node
CELERYD_NODES="w1"
# or we could have three nodes:
#CELERYD_NODES="w1 w2 w3"
# Absolute or relative path to the 'celery' command:
CELERY_BIN="/usr/local/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"
:wq
###celeryをサービスに追加
User,Group,EnvironmentFile,WorkingDirectory
vi /etc/systemd/system/celery.service
[Unit]
Description=Celery Service
After=network.target
[Service]
Type=forking
User=exist
Group=exist
EnvironmentFile=/etc/exist_celery/celery.conf
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
:wq
user$ sudo systemctl start celery.service
user$ sudo systemctl enable celery.service
###celeryのログファイル領域を作成
$ sudo mkdir /var/log/celery; sudo chown exist:exist /var/log/celery
$ sudo mkdir /var/run/celery; sudo chown exist:exist /var/run/celery
###コンフィグの作成
自分の環境やAPI_KEYの設定が必要です。
とりあえずsyspathさえ設定されていれば、reputationは取ってくれる・・・
user$ cd scripts/insert2db/conf/
user$ vi insert2db.conf.template
[exist]
syspath = /opt/exist
[misp]
MISP_URL = http://YOUR_MISP_URL
API_KEY = YOUR_MISP_API_KEY
[malshare]
api_key = YOUR_API_KEY
[twitter]
timeline = https://api.twitter.com/1.1/statuses/home_timeline.json
CK = YOUR_CK
CS = YOUR_CS
AT = YOUR_AT
AS = YOUR_AS
#名前を付けて保存
:wq insert2db.conf
###データの取り込み
基本設定は各フォルダ内に、
$ python3 scripts/insert2db/reputation/insert2db.py
$ python3 scripts/insert2db/twitter/insert2db.py
$ python3 scripts/insert2db/exploit/insert2db.py
$ python3 scripts/insert2db/threat/insert2db.py
###EXISTの起動
起動後は、http://127.0.0.1:8000/ へアクセスすることで動作を確認できます。
user$ python3 manage.py runserver 127.0.0.1:8000
###今後の予定
Raputationはデフォルトでこれらに対応してるらしいのですが、追加するには自分で「/opt/exist/scripts/insert2db/reputation/plugins/」にあるような形式で書く必要があるらしく、追加してみようと思ってます。
・MalwareDomainList
・Ransomware Tracker
・ZeuS Tracker
・SANS DShield
・ThreatExpert
・PhishTank
・Bambenek
・CINS
・CyberCrime Tracker
・Malshare
・Minotr.net