社内でSOC構築してみた④ #EXIST設定編

Existの構築に関する記事。
<a href="https://qiita.com/hassy_mossan/items/2b58cbd236761bbe6c5f">社内でSOC構築してみた① #EXIST概要編</a>
<a href="https://qiita.com/hassy_mossan/items/78eec8d85ba140ebe00f">社内でSOC構築してみた② #MISP構築編</a>
<a href="https://qiita.com/hassy_mossan/items/f103987f3415a3ce7de8">社内でSOC構築してみた③ #EXIST構築編</a>
<a href="https://qiita.com/hassy_mossan/items/37e7e9b394f4926e4375">社内でSOC構築してみた④ #EXIST設定編</a>

<font color="DeepPink">※注意
本記事の設定関連について、EXISTを/opt配下にインストールしたことを前提に記載しています。</font>

<h2>設定に際して</h2>
ここではEXISTを構築したのちデータを収集するための設定について記載します。
なお設定とは書いていますが、設定ファイルへの記載内容からコードにおいて修正が必要な個所等について記載します。

MISPを除くAPIキーの取得方法については記載いたしませんのが、自身で調査して下さい。
<h2>設定ファイルへの記述内容</h2>
ここでは設定ファイルに記載する内容について記載します。

<h3>1.IP関連の情報収集</h3>
まず最初にIP関連の情報を収集するため/opt/exist/conf/exist.confを設定します。
/opt/exist/conf/exist.conf.templateをコピーして以下の項目を記載します。

```
#VirusTotalのAPIKey
[vt]
baseURL = https://www.virustotal.com/vtapi/v2/
apikey = YOUR_KEY

#GeoLite2のDBを設置したパス。GeoLite2のアカウントを取得して、DBを取得する。
[geoip]
database = /path/to/your/GeoLite2-City.mmdb

#ShodanのAPIKey
[shodan]
baseURL = https://api.shodan.io/shodan/host/
apikey = YOUR_API_KEY

#CensysのAPIKeyとSecret Key
[censys]
baseURL = https://censys.io/api/v1/
api_id = YOUR_API_ID
secret = YOUR_SECRET

#AbuseIPDBのAPIKey
[abuse]
baseURL = https://api.abuseipdb.com/api/v2/check
apikey = YOUR_API_KEY
```

<h3>2.Hunterの設定</h3>
次にHunterを動すための設定を行います。
/opt/exist/scripts/hunter/conf/hunter.conf.templateをコピーして
/opt/exist/scripts/hunter/conf/hunter.confを設定します。

```
#EXISTを設置したパスを設定
[exist]
syspath = /path/to/your/exist

#SLACKの設定(今回はSLACKを使用しないため記載)
[slack]
token = YOUR_TOKEN
twitter_hunter_user = TwitterHunter
threat_hunter_user = ThreatHunter
news_hunter_user = NewsHunter
postMessageURL = https://slack.com/api/chat.postMessage
createChannelURL = https://slack.com/api/channels.create

#TwitterのAPIを設定
#TwitterのDeveloperアカウントで18個分APIKeyを取得して登録
[twitter]
filter = https://stream.twitter.com/1.1/statuses/filter.json
showuser = https://api.twitter.com/1.1/users/show.json

[auth-hunter00]
CK = YOUR_CK
CS = YOUR_CS
AT = YOUR_AT
AS = YOUR_AS

[auth-hunter01]
CK = YOUR_CK
CS = YOUR_CS
AT = YOUR_AT
AS = YOUR_AS

[auth-hunter02]
CK = YOUR_CK
CS = YOUR_CS
AT = YOUR_AT
AS = YOUR_AS
```
<h3>3.Trackerの設定</h3>
情報を収集するためのTrackerの設定を行います。
/opt/exist/scripts/insert2db/conf/insert2db.conf.templateをコピーして
/opt/exist/scripts/insert2db/conf/insert2db.confを設定します。

```
#EXISTを設置したパスを設定
[exist]
syspath = /path/to/your/exist

#構築したMISPのURLとAPIKey
#すでにMISPがあるのであれば、そちらのURLと発行されたAPIKeyでもOK
[misp]
MISP_URL = http://YOUR_MISP_URL
API_KEY = YOUR_MISP_API_KEY

#malshareのAPIKey
[malshare]
api_key = YOUR_API_KEY

#AbuseIPDBのAPIkey
[abuse]
api_key = YOUR_API_KEY

#TwitterのDeveloperアカウントで生成したAPIkey
[twitter]
timeline = https://api.twitter.com/1.1/statuses/home_timeline.json
CK = YOUR_CK
CS = YOUR_CS
AT = YOUR_AT
AS = YOUR_AS

#inoreaderのAPIKey
[inoreader]
AppID = YOUR_APPID
AppKey = YOUR_APPKEY
Email = YOUR_EMAIL
Passwd = YOUR_PASSWD
```

以上が設定になります。

<h2>2.コードの修正</h2>
インストールした際にデフォルトでは動かず、設定値も誤っていなかったためコードを確認したところいくつか修正の必要な個所がありました。あくまで私の環境のみ発生した事象であって、他の環境では問題ないかもしれません。
動かない方がいれば参考にして頂ければと思います。

<h3>1.シバンの変更</h3>
<b>※以下はあくまで私の対処方法になります。</b>
ExistはPython3系で動いていますが、今回私が使用してるCentOS7系ではPython2系がデフォルトでインストールされかつpythonコマンドのパスはPython2系に通されています。

ところがExistのPythonの全ソースのシバンは以下の様にデフォルトのpythonが指定されています。

```
#!/usr/bin/env python
```

ではPython3系をpythonコマンドに通したら？と言われそうですが私の場合は以前変更した際にyumが失敗しました。
原因はyumがPython2系で書かれていたため失敗したようです。

他にもそのようなコマンドが無いかは調べてはいませんが、私の場合は安全のためExistのPythonの全ソースのシバンを以下の様に変更しました。

```
#!/usr/bin/env python
#↓以下に変更
#!/usr/bin/env python3
```

余談ですがシバンとは？という方は以下を確認してください。
<a href="https://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%90%E3%83%B3_(Unix)#:~:text=%E3%82%B7%E3%83%90%E3%83%B3%E3%81%BE%E3%81%9F%E3%81%AF%E3%82%B7%E3%82%A7%E3%83%90%E3%83%B3%20(%E8%8B%B1%3A%20shebang,%E7%9A%84%E3%81%8B%E3%81%A4%E7%B0%A1%E7%B4%A0%E3%81%A7%E3%81%82%E3%82%8B%E3%80%82">シバン (Unix) - Wikipedia</a>

<h3>2.ライブラリファイルの修正</h3>
<b>※以下はあくまで私の対処方法になります。</b>
動作確認を行った際に、TrackerやHunterが動かなかったため調査したところ以下のソースの変更が必要となりました。
対象のファイルと個所は、以下5つのファイルが参照しているEXISTの変数conffile のパスになります。

```
/opt/exist/lib/abuse.py
/opt/exist/lib/censys.py
/opt/exist/lib/geoip.py
/opt/exist/lib/shodan.py
/opt/exist/lib/vt.py
```

修正箇所はほぼ共通で以下のファイルパスを/opt/exist/conf/exist.confが参照できるよう変更します。
変更方法については、各々の好みもあるのでそちらに合わせて変更して下さい。

```
conffile = 'conf/exist.conf'
```

<h3>3.Threatの取得について</h3>
ここでは詳細な設定は割愛して、発生しうる不具合と対処について簡単に記載します。

まず発生しうる不具合ですがデフォルトのままでは、Threatの情報が取得できません。
原因としては、以下の2つとなります。
・MISPのWebサーバーのSSLが未設定
・MISPにhttpで接続すると127.0.0.1にリダイレクトするたね

私の場合はhttpでアクセスしても127.0.0.1へリダイレクトしないようApacheの設定を変更して、対応しました。

<h3>4.Cronの設定</h3>
ここまでで、設定周りやソースの修正について記載しました。

最後にEXISTを動かすためにCronでの起動が必要なファイルを記載します。
まずTrackerで情報収集するためのファイル。

```
/opt/exist/scripts/insert2db/reputation/insert2db.py
/opt/exist/scripts/insert2db/reputation/insert2db.py
/opt/exist/scripts/insert2db/twitter/insert2db.py
/opt/exist/scripts/insert2db/exploit/insert2db.py
/opt/exist/scripts/insert2db/threat/insert2db.py
/opt/exist/scripts/insert2db/news/insert2db.py
/opt/exist/scripts/insert2db/vuln/insert2db.py
```

次にHunterで情報を監視するために、以下のファイルをCronで起動します。

```
/opt/exist/scripts/hunter/news/nw_watchhunter.py
/opt/exist/scripts/hunter/threat/th_watchhunter.py
/opt/exist/scripts/hunter/twitter/tw_watchhunter.py
```

なお起動のタイミングですが、私はTwitterが1分単位であとは1時間単位としました。

最後に古いデータのお掃除のため以下の2つを日次で起動します。

```
/opt/exist/scripts/url/delete_webdata.sh
/opt/exist/scripts/url/delete_oldtaskresult.sh
```

以上となります。

<h2>今後の活用について</h2>
今回は構築から設定まで、EXISTについて記載しました。
今後はEXISTの活用法方法や運用について、実践を積みながらナレッジを記載できればと思います。

またEXIST単体ではなく他のツールとの連携や活用についても検証していきたいと思います。