OpenCTI 実装 by Docker
実施したいこと
脅威インテリジェンスというものを実際に見てみたい。
また、サイバーセキュリティに従事する者として、脅威インテリジェンスを活用するのであればどういう手法がありうるか、
脅威インテリジェンスプラットフォームを通して学びたい。
背景
MISPもOpenCTI同様の脅威インテリジェンスプラットフォームであり、実装してみた。
が、正直個人的には少し触りづらく、別のOSSとしてOpenCTIを選定した。
OpenCTI とは
OpenCTIとは、脅威インテリジェンスプラットフォーム。
脅威インテリジェンスプラットフォームとは、脅威情報(IoC、TTPs、攻撃者情報など)を集約・整理・分析・共有するためのシステムで、OpenCTI以外にも、さまざまなプラットフォームがある。
脅威インテリジェンスとは
IoCなどの脅威情報のことです。
実装
公式docs上に、インストールガイドがあるためそれを参考に構築。
今回はこの手順の中の、「Using Docker」を参考にして実装を行う。
-
1.事前準備
- ・Portainerのインストール ※任意(本手順はこれを利用している。あると便利。)
- ・docker-composeのインストール ※必須
-
2..envファイルの作成
- コンテナを作成する際に、.envファイルを指定してパラメータをインポートしながら作成が可能。
- OpenCTIのGitHubリポジトリには、.envファイルのサンプル(
.env.sample
)もあるため、参考に作成していく。 - 最終、以下の.envを作成。
-
-
以下の$(cat /proc/sys/kernel/random/uuid)は、Linux標準機能でUUIDの乱数を生成してくれるバイナリだが、
コマンドのまま記載すると失敗したので一度別途ターミナルで実行し、値を挿入した。 -
OPENCTI_ADMIN_EMAIL=admin@opencti.io OPENCTI_ADMIN_PASSWORD=admin OPENCTI_ADMIN_TOKEN=$(cat /proc/sys/kernel/random/uuid) OPENCTI_BASE_URL=http://localhost:8080 OPENCTI_HEALTHCHECK_ACCESS_KEY=$(cat /proc/sys/kernel/random/uuid) MINIO_ROOT_USER=$(cat /proc/sys/kernel/random/uuid) MINIO_ROOT_PASSWORD=$(cat /proc/sys/kernel/random/uuid) RABBITMQ_DEFAULT_USER=guest RABBITMQ_DEFAULT_PASS=guest ELASTIC_MEMORY_SIZE=4G CONNECTOR_HISTORY_ID=$(cat /proc/sys/kernel/random/uuid) CONNECTOR_EXPORT_FILE_STIX_ID=$(cat /proc/sys/kernel/random/uuid) CONNECTOR_EXPORT_FILE_CSV_ID=$(cat /proc/sys/kernel/random/uuid) CONNECTOR_IMPORT_FILE_STIX_ID=$(cat /proc/sys/kernel/random/uuid) CONNECTOR_EXPORT_FILE_TXT_ID=$(cat /proc/sys/kernel/random/uuid) CONNECTOR_IMPORT_DOCUMENT_ID=$(cat /proc/sys/kernel/random/uuid) CONNECTOR_ANALYSIS_ID=$(cat /proc/sys/kernel/random/uuid) SMTP_HOSTNAME=localhost
-
3.docker-compose.ymlの作成
-
リンクから、リポジトリをダウンロードする。その中の
docker-compose.yml
ファイルを編集していく。 -
再起動の度にコンテナのIPが変更になるため、コネクタ(詳細は別途)側のIP指定に不都合が起きる。
そのためコネクタが宛先とするコンテナだけは固定IPにて実装する。 -
docker-compose.yml
内で、ネットワークの新規作成も可能だが、エラーが起きたためあらかじめ作成しておいた。 -
図. Portainer上「Networks」作成例 -
Dockerネットワークの指定は、ファイル末尾に以下のように行う。(あらかじめネットワークは作成しておくこと)
-
networks: opencti_network: external: true
-
-
-
- コンテナ側で、属するネットワークとIPの指定は以下のように行う。
固定IPを指定するコンテナは、opencti
と書かれているコンテナ。
※IPは例として記載 -
opencti: image: opencti/platform:6.6.0 <中略> networks: opencti_network: ipv4_address: 172.100.100.250
- コンテナ側で、属するネットワークとIPの指定は以下のように行う。
-
-
4.Portainer上でアップロード
- PortainerのUI上で、「Stacks」>「Add stack」で、「Upload」から
.env
とdocker-compose.yml
をアップロードする。
図. Portainer上「Add Stack」画面
名前を指定して、「Deploy the stack」でスタックを構成。
成功のポップアップが出るまで待つと、スタックとコンテナの作成が完了する。
http://localhost:8080
にアクセスするとOpenCTIのログイン画面が出てくるので、.env
で指定したID/PASSでログインする。
localhost指定だけでなく、別デバイスから、IPを指定したアクセスも可能。
- PortainerのUI上で、「Stacks」>「Add stack」で、「Upload」から
これで、OpenCTIの土台の実装は完了。次回は、コネクターの実装について説明予定。