サイバー脅威情報集約システム(EXIST)とMalware Information Sharing Platform(MISP)の構築のまとめ②

# はじめに
- 元同僚から面白そうなOSSを教えてもらったので調べがてら構築をしてみた.
- ここでは構築する際にトラブった箇所や手順などをまとめていく感じです.
- ALL-in-One方式で構築した際、取得したデータサイズのせいかDiskFull-->LVM追加でミスって-->VMクラッシュという楽しい目にあったため個別での構築としています.
- 3部構成(共通部分/EXIST/MISP)で記事を書く予定です.

# 1.前提
- Windows10pro Hyper-Vを利用し以下条件のもと構築を行っております.(共通)
  - お好みでVMwareやvBOXをお使いください
- OSはCentOS7の最新版を利用しそれぞれ別VMで構築とする.(共通)
  - 検証環境下ではCentOS8自体の挙動が不安定だったので別途原因究明が必要と考えCentOS7を選択
- 構築時のアカウントはすべてrootアカウントで実施.(共通)
- VMのリソースはvCPU:2core,mem:8GB,DISK:50GB,Network:IPアドレスはDHCPでMACアドレス登録して固定配布.(共通)
  - 稼働するとメモリ使用量は平均6GB
  - DISKは20GBで100%超えてしまったため、50GBにしております
- pyenvを使用しPython ver3.6.xをインストール.(EXIST)
  - Verison3.7以降だと指定PackageのVersionではエラーが発生するため
  - venvを使わずに構築していきますが、インストールだけはしておきます
- git:Verは2.29.x(現時点で最新のもの)とする.(共通)
  - 2.x台であればなんでもよいかと
- wget/curl/tmux/htopなど適宜インストール.
  - 不要な人はスルーでもOK
- FirewallやSElinuxは自己責任のもと無効にしてください.(共通)
  - Firewallではのちに8000ポートの開放を手順に入れております
  - SElinuxは土下座してdisabledにしております

# 2.OSS製品のドキュメント

[サイバー脅威情報集約システム(EXIST)](https://blog.nicter.jp/2019/03/exist/)
[Malware Information Sharing Platform(MISP)](https://www.misp-project.org/index.html)

# 3.構築内容
- pyenv
- サイバー脅威情報集約システム(EXIST)

## 3-1.pyenvのインストール
今回の目的を考えた場合、pyenvでやる必要性はないと思うが今後のアップデートを考慮してこちらでいくこととする.

```shell
# git clone https://github.com/pyenv/pyenv.git
Cloning into 'pyenv'...
remote: Enumerating objects: 18376, done.
remote: Total 18376 (delta 0), reused 0 (delta 0), pack-reused 18376
Receiving objects: 100% (18376/18376), 3.67 MiB | 2.80 MiB/s, done.
Resolving deltas: 100% (12514/12514), done.

# 今回は不要かも
# git clone https://github.com/pyenv/pyenv-virtualenv.git pyenv/plugins/pyenv-virtualenv
Cloning into 'pyenv/plugins/pyenv-virtualenv'...
remote: Enumerating objects: 2064, done.
remote: Total 2064 (delta 0), reused 0 (delta 0), pack-reused 2064
Receiving objects: 100% (2064/2064), 580.34 KiB | 753.00 KiB/s, done.
Resolving deltas: 100% (1413/1413), done.

# pyenvのPATHの設定
# vim ~/.bash_profile
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:/bin:$PATH"
eval "$(pyenv init -)"

# ログイン中のアカウントへ上記設定の反映
# source ~/.bash_profile

# 指定のVersionをインストール
# pyenv install 3.6.12
Downloading Python-3.6.12.tar.xz...
-> https://www.python.org/ftp/python/3.6.12/Python-3.6.12.tar.xz
Installing Python-3.6.12...
WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?
WARNING: The Python readline extension was not compiled. Missing the GNU readline lib?
WARNING: The Python sqlite3 extension was not compiled. Missing the SQLite3 lib?
Installed Python-3.6.12 to /root/.pyenv/versions/3.6.12

# 任意のVersionをシステムへ反映
# pyenv global 3.6.12

# 反映の確認
# python --version

# pipコマンドのアップデート(しないとあとでエラーがでます)
# pip install --upgrade pip
pip 18.1 from /root/.pyenv/versions/3.6.12/lib/python3.6/site-packages/pip (python 3.6)
[root@exist opt]# pip install --upgrade pip
Collecting pip
  Downloading https://files.pythonhosted.org/packages/cb/28/91f26bd088ce8e22169032100d4260614fc3da435025ff389ef1d396a433/pip-20.2.4-py2.py3-none-any.whl (1.5MB)
    100% |################################| 1.5MB 7.5MB/s
Installing collected packages: pip
  Found existing installation: pip 18.1
    Uninstalling pip-18.1:
      Successfully uninstalled pip-18.1
Successfully installed pip-20.2.4

```

余談:pyenv以外でやる場合は以下の方法で（現状ver3.8.6がインストールされる模様)

```shell
# yum install python3 python3-libs python3-devel python3-pip
=====================================================================================================================
 Package                             Arch                Version                             Repository         Size
=====================================================================================================================
Installing:
 python3                             x86_64              3.6.8-17.el7                        base               70 k
 python3-devel                       x86_64              3.6.8-17.el7                        base              217 k
 python3-libs                        x86_64              3.6.8-17.el7                        base              6.9 M
 python3-pip                         noarch              9.0.3-8.el7                         base              1.6 M
Installing for dependencies:
 dwz                                 x86_64              0.11-3.el7                          base               99 k
 libtirpc                            x86_64              0.2.4-0.16.el7                      base               89 k
 perl-srpm-macros                    noarch              1-8.el7                             base              4.6 k
 python-rpm-macros                   noarch              3-34.el7                            base              9.1 k
 python-srpm-macros                  noarch              3-34.el7                            base              8.8 k
 python3-rpm-generators              noarch              6-2.el7                             base               20 k
 python3-rpm-macros                  noarch              3-34.el7                            base              8.1 k
 python3-setuptools                  noarch              39.2.0-10.el7                       base              629 k
 redhat-rpm-config                   noarch              9.1.0-88.el7.centos                 base               81 k
 zip                                 x86_64              3.0-11.el7                          base              260 k

Transaction Summary
=====================================================================================================================
Install  4 Packages (+10 Dependent packages)
```

## 3-2.EXISTのインストール
- インストール先は「/opt/」を前提としスクリプトでインストールしていきます.

```shell
# cd ~/
# git clone https://github.com/r4sd/exist_auto_install.git
Cloning into 'exist_auto_install'...
remote: Enumerating objects: 24, done.
remote: Counting objects: 100% (24/24), done.
remote: Compressing objects: 100% (18/18), done.
remote: Total 24 (delta 6), reused 20 (delta 5), pack-reused 0
Receiving objects: 100% (24/24), 6.83 KiB | 3.42 MiB/s, done.
Resolving deltas: 100% (6/6), done.

#
# cd exist_auto_install/
# . exist_install.sh
[info] Repository file successfully written to /etc/yum.repos.d/mariadb.repo
[info] Adding trusted package signing keys...
[info] Successfully added trusted package signing keys
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Including mirror: ftp.tsukuba.wide.ad.jp
Including mirror: ftp.jaist.ac.jp
Including mirror: ftp.iij.ad.jp
Including mirror: ftp.yz.yamagata-u.ac.jp
Including mirror: ftp.nara.wide.ad.jp
 * base: ftp.tsukuba.wide.ad.jp
Including mirror: ftp.ne.jp
Including mirror: ftp.yz.yamagata-u.ac.jp
 * elrepo: ftp.ne.jp
Including mirror: ftp.yz.yamagata-u.ac.jp
 * epel: ftp.yz.yamagata-u.ac.jp
Including mirror: ftp.tsukuba.wide.ad.jp
Including mirror: ftp.jaist.ac.jp
Including mirror: ftp.iij.ad.jp
　　　|
　　　|
    省略
　　　|
　　　|
Nothing to do

------------------------------------------------
Please execute [ systemctl start exist.service ]


Admin (root) DB Password: [乱数]
User (exist) DB Password: [乱数]

#
# systemctl start exist.service
```

# 4.サイトへアクセス
- ブラウザからhttp://[サーバのIPアドレス:8000]へアクセス.
![exist.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96374/ce13a342-fdb6-b583-ac1f-ab7a5f145008.png)

# 5.さいごに
- 手動インストールだと煩雑(慣れたけど)なためスクリプトを準備したが、細かいところでトラブり作成に1日以上費やしてしまいました.
- おかげかコードの簡略化や連携部分の理解が深まり結果OKな感じとなっております(*´ω｀*)
- 次はMISPの構築ですがその前にAPIの登録などをまとめて追加or2.5でUPかな.
 
# 6.参考サイト/多謝
 
[nict-csl/exist](https://github.com/nict-csl/exist)
[サイバー脅威情報集約システム EXIST を構築する](https://soji256.hatenablog.jp/entry/2019/10/23/002216)
[NICTのEXISTをインストールしてみた](https://qiita.com/ymasaoka/items/d9f679e8b8308b3e72f4)
[社内でSOC構築してみた③ #EXIST構築編](https://qiita.com/hassy_mossan/items/f103987f3415a3ce7de8)
[MISP](https://github.com/MISP/MISP)
[vodkappa/misp-install-centos-7](https://github.com/vodkappa/misp-install-centos-7)
[EXPECT](https://linuxjm.osdn.jp/html/expect/man1/expect.1.html)
[MariaDB 10.4.1〜のユーザー認証がカオスな話](https://hp.ofuton.org/61/)
[Mins/mysql_secure.sh](https://gist.github.com/Mins/4602864)