Re:ゼロから始めるOpenCTI 導入編
Re:ゼロから始めるOpenCTI
この記事は、所属組織内で脅威共有やってみようぜ(n回目)、という安易な考えから生まれた物語です。
OpenCTIとは
Filigranが開発している、Open Cyber Threat Intelligence Platformです。要するに、サイバー脅威インテリジェンスを管理、可視化することができるプラットフォームです。
また、インテリジェンスの蓄積だけではなく、Connecterという機能を活用することで、様々なセキュリティ関連企業、団体が公開しているインテリジェンスをimportしたり、その他もろもろの便利機能を追加することができます。
とりあえず動かしてみる
公式ドキュメントを確認して以下の環境を用意しました。またOpenCTIは、Dockerを使って展開します。
Infrastructure
- OS : Ubuntu 22.04 server 64bit
- CPU : 8core
- MEM : 16GB
- Disk : 64GB
まず、Using Dockerにある通り進めていきます。
環境整備
docker, docker-composeをインストールし、dockerをuser権限で動作できるようにします。
# docker, docker-composeをインストール
$ sudo apt update && sudo apt upgrade -y
$ sudo apt install docker-compose git -y
# 現在のuserをdocker groupに所属させる
$ sudo gpasswd -a $USER docker
# デーモンのリスタートと反映
$ sudo systemctl restart docker
$ exit
コマンドコピー用
sudo apt update && sudo apt upgrade -y
sudo apt install docker-compose git -y
sudo gpasswd -a $USER docker
sudo systemctl restart docker
exit
OpenCTIのソースコードをダウンロード
OpenCTI-Platform/dockerより、ソースコードをダウンロードします。
$ mkdir -p /path/to/your/app && cd /path/to/your/app
$ git clone https://github.com/OpenCTI-Platform/docker.git
$ cd docker
コマンドコピー用
mkdir -p /path/to/your/app && cd /path/to/your/app
git clone https://github.com/OpenCTI-Platform/docker.git
cd docker
環境変数を確認する
/docker内に.env.sampleあるのでまず確認すると、
.env.sample
OPENCTI_ADMIN_EMAIL=admin@opencti.io
OPENCTI_ADMIN_PASSWORD=changeme
OPENCTI_ADMIN_TOKEN=ChangeMe_UUIDv4
OPENCTI_BASE_URL=http://localhost:8080
MINIO_ROOT_USER=opencti
MINIO_ROOT_PASSWORD=changeme
RABBITMQ_DEFAULT_USER=opencti
RABBITMQ_DEFAULT_PASS=changeme
CONNECTOR_EXPORT_FILE_STIX_ID=dd817c8b-abae-460a-9ebc-97b1551e70e6
CONNECTOR_EXPORT_FILE_CSV_ID=7ba187fb-fde8-4063-92b5-c3da34060dd7
CONNECTOR_EXPORT_FILE_TXT_ID=ca715d9c-bd64-4351-91db-33a8d728a58b
CONNECTOR_IMPORT_FILE_STIX_ID=72327164-0b35-482b-b5d6-a5a3f76b845f
CONNECTOR_IMPORT_DOCUMENT_ID=c3970f8a-ce4b-4497-a381-20b7256f56f0
SMTP_HOSTNAME=localhost
ELASTIC_MEMORY_SIZE=4G
となっていてますが、ドキュメントを見てみると、
(cat << EOF
OPENCTI_ADMIN_EMAIL=admin@opencti.io
OPENCTI_ADMIN_PASSWORD=CHANGEMEPLEASE
OPENCTI_ADMIN_TOKEN=$(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
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_IMPORT_REPORT_ID=$(cat /proc/sys/kernel/random/uuid)
EOF
) > .env
となっていて、過不足があったり内容に差異があったので試行錯誤した結果としてこのような環境変数を作成しました。利用する前に最低限以下をサンプルを参考にして変更してください。
-
ChangeMe_UUIDv4
-
cat /proc/sys/kernel/random/uuid
で事前に項目分だけ取得してください。
-
-
ChangeMe
- 環境に合わせて任意の値に変えてください。
他にも、セキュリティ面を考慮して_USERなどについても変更可能です。
.env
OPENCTI_ADMIN_EMAIL=ChangeMe
OPENCTI_ADMIN_PASSWORD=ChangeMe
OPENCTI_ADMIN_TOKEN=ChangeMe_UUIDv4
MINIO_ROOT_USER=opencti
MINIO_ROOT_PASSWORD=ChangeMe
RABBITMQ_DEFAULT_USER=opencti
RABBITMQ_DEFAULT_PASS=ChangeMe
CONNECTOR_EXPORT_FILE_STIX_ID=ChangeMe_UUIDv4
CONNECTOR_EXPORT_FILE_CSV_ID=ChangeMe_UUIDv4
CONNECTOR_EXPORT_FILE_TXT_ID=ChangeMe_UUIDv4
CONNECTOR_IMPORT_FILE_STIX_ID=ChangeMe_UUIDv4
CONNECTOR_IMPORT_DOCUMENT_ID=ChangeMe_UUIDv4
ELASTIC_MEMORY_SIZE=4G
ELASTIC_MEMORY_SIZE=4G
は任意の値を指定できますが、指定しないor小さい値を指定するとelasticsearchがメモリ不足のエラーを出して、OpenCTIが起動しないので注意してください。
デプロイする
elasticsearchをデプロイするために、以下のいずれかの方法でメモリマネジメントの設定を行います。詳細は、公式ドキュメントを参照してください。
- 一時的な設定
$ sudo sysctl -w vm.max_map_count=1048575
- 永続的な設定
$ sudo vim /etc/sysctl.conf
------
最下行に以下を追記
vm.max_map_count=1048575
docker-compose.ymlをもとにデプロイします。docker-compose.ymlと同じディレクトリに先ほど作った.envファイルが存在していると自動で環境変数が反映されます。もし.env以外のファイル名で作成した場合は、--env-fileで指定できます。
$ docker-compose up -d
OpenCTIの動作確認
全てのコンテナが起動したことを確認したら実際にブラウザでアクセスしてみます。
デフォルトでは、8080ポートでダッシュボードが起動しているので、
- http://localhost:8080/
- http://{IP}:8080/
にアクセスしてみます。うまく動作していると、ログイン画面が表示されます。
初期アカウントは、.envで指定した
- user : {OPENCTI_ADMIN_EMAIL}
- pass : {OPENCTI_ADMIN_PASSWORD}
となっています。
OpenCTI Dashboard
ログインに成功すると、OpenCTI Dashboardが表示されます。(画像はすでにインテリジェンスをimportしている状態です。)
これで、とりあえずOpenCTIの環境を構築できました。次回は、実際のインテリジェンスをimportしていきたいと思います。
Discussion