Existの構築に関する記事。
社内でSOC構築してみた① #EXIST概要編
社内でSOC構築してみた② #MISP構築編
社内でSOC構築してみた③ #EXIST構築編
社内でSOC構築してみた④ #EXIST設定編
※注意
本記事の設定関連について、EXISTを/opt配下にインストールしたことを前提に記載しています。
設定に際して
ここではEXISTを構築したのちデータを収集するための設定について記載します。 なお設定とは書いていますが、設定ファイルへの記載内容からコードにおいて修正が必要な個所等について記載します。MISPを除くAPIキーの取得方法については記載いたしませんのが、自身で調査して下さい。
設定ファイルへの記述内容
ここでは設定ファイルに記載する内容について記載します。1.IP関連の情報収集
まず最初に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
2.Hunterの設定
次に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
3.Trackerの設定
情報を収集するための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
以上が設定になります。
2.コードの修正
インストールした際にデフォルトでは動かず、設定値も誤っていなかったためコードを確認したところいくつか修正の必要な個所がありました。あくまで私の環境のみ発生した事象であって、他の環境では問題ないかもしれません。 動かない方がいれば参考にして頂ければと思います。1.シバンの変更
※以下はあくまで私の対処方法になります。 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
余談ですがシバンとは?という方は以下を確認してください。
シバン (Unix) - Wikipedia
2.ライブラリファイルの修正
※以下はあくまで私の対処方法になります。 動作確認を行った際に、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'
3.Threatの取得について
ここでは詳細な設定は割愛して、発生しうる不具合と対処について簡単に記載します。まず発生しうる不具合ですがデフォルトのままでは、Threatの情報が取得できません。
原因としては、以下の2つとなります。
・MISPのWebサーバーのSSLが未設定
・MISPにhttpで接続すると127.0.0.1にリダイレクトするたね
私の場合はhttpでアクセスしても127.0.0.1へリダイレクトしないようApacheの設定を変更して、対応しました。
4.Cronの設定
ここまでで、設定周りやソースの修正について記載しました。最後に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
以上となります。
今後の活用について
今回は構築から設定まで、EXISTについて記載しました。 今後はEXISTの活用法方法や運用について、実践を積みながらナレッジを記載できればと思います。またEXIST単体ではなく他のツールとの連携や活用についても検証していきたいと思います。