実施したいこと

脅威インテリジェンスというものを実際に見てみたい。
また、サイバーセキュリティに従事する者として、脅威インテリジェンスを活用するのであればどういう手法がありうるか、
脅威インテリジェンスプラットフォームを通して学びたい。

背景

MISPもOpenCTI同様の脅威インテリジェンスプラットフォームであり、実装してみた。
が、正直個人的には少し触りづらく、別のOSSとしてOpenCTIを選定した。

OpenCTI とは

OpenCTIとは、脅威インテリジェンスプラットフォーム
脅威インテリジェンスプラットフォームとは、脅威情報(IoC、TTPs、攻撃者情報など)を集約・整理・分析・共有するためのシステムで、OpenCTI以外にも、さまざまなプラットフォームがある。

図. OpenCTI ダッシュボード
図. OpenCTI ダッシュボード

脅威インテリジェンスとは

IoCなどの脅威情報のことです。

実装

公式docs上に、インストールガイドがあるためそれを参考に構築。
今回はこの手順の中の、「Using Docker」を参考にして実装を行う。

  • 1.事前準備

    • ・Portainerのインストール ※任意(本手順はこれを利用している。あると便利。)
    • ・docker-composeのインストール ※必須

  • 2..envファイルの作成

    • コンテナを作成する際に、.envファイルを指定してパラメータをインポートしながら作成が可能。
    • OpenCTIのGitHubリポジトリには、.envファイルのサンプル(.env.sample)もあるため、参考に作成していく。
    • 最終、以下の.envを作成。

    •   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ファイルを編集していく。

    • docker-compose.yml内で、ネットワークの新規作成も可能だが、エラーが起きたためあらかじめ作成しておいた。

    • 図. Portainer上「Networks」作成例
      図. 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

  • 4.Portainer上でアップロード

    • PortainerのUI上で、「Stacks」>「Add stack」で、「Upload」から.envdocker-compose.ymlをアップロードする。
      図. Portainer上「Add Stack」画面
      図. Portainer上「Add Stack」画面

    名前を指定して、「Deploy the stack」でスタックを構成。
    成功のポップアップが出るまで待つと、スタックとコンテナの作成が完了する。
    http://localhost:8080にアクセスするとOpenCTIのログイン画面が出てくるので、.envで指定したID/PASSでログインする。
    localhost指定だけでなく、別デバイスから、IPを指定したアクセスも可能。

これで、OpenCTIの土台の実装は完了。次回は、コネクターの実装について説明予定。

参考・引用

  1. https://docs.opencti.io/latest/deployment/installation/
  2. https://github.com/OpenCTI-Platform/docker