概要

OpenCTIへ簡単に脅威情報をインポート、データ拡充(エンリッチメントという)、またはエクスポートを可能とする。
機能に応じて、主には以下の通りに大別される。

図. コネクター概要図
図. コネクター概要図

各種コネクターの説明

  • 1.Import

    これらのコネクタは、外部の組織/アプリケーション/サービスから自動で取得し、STIX2.1にバンドルする。
    Workerを利用して、それらをOpenCTIにインポートする。

  • 2.Enrichment

    新しいオブジェクトが生成された際に、関連する情報をインターネットから収集してデータをエンリッチメントできる。

  • 3.Stream

    OpenCTIデータを取り込んで、SIEM, XDR, EDRといったサードパーティプラットフォームに挿入する。

  • 4.Import Files

  • 5.Export Files


コネクターの追加方法

Dockerを利用した、コネクターの追加方法を記載する。

  • 1.エコシステム用のサイトから、追加したいコネクタを探す

    • エコシステムと呼ばれる、簡単に実装できるテンプレートのようなものがある。
    • 公式docsでは、エコシステムについて以下のような説明がある。

      OpenCTIはオープンでモジュール化されたプラットフォームです。
      Filigranとコミュニティによって、数多くのコネクタ、プラグイン、クライアント、コンテンツが作成されています。

  • 2.ダウンロード

    • 例として、CISAのKEVの外部インポートコネクタを実装する。
    • その中のリンクをクリックすると、GitHubのページへ遷移する。
    • リポジトリをダウンロードしておいて、該当の外部インポートコネクタの相対パスをコピーしておく。

    • 図. GitHubの該当コネクターのページ
      図. GitHubの該当コネクターのページ
  • 3.設定値の編集

    • 該当のコネクタフォルダ内の、docker-compose.ymlファイルを編集して、「ChangeMe」になっているところを編集する
    • 図. デフォルトのdocker-compose.yml
      図. デフォルトのdocker-compose.yml
    • OPENCTI_TOKENは、本ブログの設定で行くとadminユーザーのトークンであり、
    • CONNECTOR_IDは、コネクタごとに設定するのが望ましいらしい。(cat /proc/sys/kernel/random/uuidで生成)

    • また、ネットワークをOpenCTIの土台側のネットワークに属するようにして、
    • OPENCTI_URLは、固定IPで指定したopenctiコンテナのIPアドレスで構成されるURLを指定する。
    • 同一ネットワークに属するためには、以下のように末尾に追記すればいい。

    • 最終、以下のようになる。
      	version: '3'
      	services:
      		  connector-cisa-known-exploited-vulnerabilities:
      		    image: opencti/connector-cisa-known-exploited-vulnerabilities:6.6.0
      		    environment:
      		      - OPENCTI_URL=${OPENCTI_URL}
      		      - OPENCTI_TOKEN=${OPENCTI_ADMIN_TOKEN}
      		      - CONNECTOR_ID=${CONNECTOR_ID_CISA}
      		      - CONNECTOR_NAME=External-Import CISA Known Exploited Vulnerabilities
      		      - CONNECTOR_SCOPE=cisa
      		      - CONNECTOR_RUN_AND_TERMINATE=false
      		      - CONNECTOR_LOG_LEVEL=error
      		      - CONNECTOR_DURATION_PERIOD=P1D
      		      - CISA_CATALOG_URL=https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json
      		      - CISA_CREATE_INFRASTRUCTURES=false
      		      - CISA_TLP=TLP:CLEAR
      		    restart: always
      		    networks:
      		      - opencti_network
      	networks:
      		opencti_network:
      			external: true

    • 参考までに.envも。
    •   OPENCTI_URL=http://172.100.100.250:8080
        OPENCTI_ADMIN_TOKEN=<Hideen>
        CONNECTOR_ID_CISA=<Hidden>

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

    • OpenCTIの土台側と同様に、「Stacks」>「Add stack」で、「Upload」から.envdocker-compose.ymlをアップロードする。
    • 図. Portainer上「Add Stack」画面
      図. Portainer上「Add Stack」画面
    • 名前を指定して、「Deploy the stack」でスタックを構成。
    • 成功のポップアップが出るまで待つと、スタックとコンテナの作成が完了する。

    • 完了したらOpenCTIのGUI側で、
    • Data」>「Ingestion」から、該当のコネクターが追加されていることが確認できる。
    • 図. OpenCTI GUI上 コネクター画面
      図. OpenCTI GUI上 コネクター画面

コネクターの実装は以上となります。
また複数のコネクターを実装したい場合には、1つのdocker-compose.ymlにマージすることで一括で実装することも可能です。

私は私用で、以下のコネクターを利用しています。
※内部エンリッチメントコネクタも利用していましたが、サーバーのスペック上の理由で利用をやめました。

  • cisa-known-exploited-vulnerabilities
  • mitre
  • alienvault ※要トークン
  • misp-feed ※誤クリック防止のためURLをサニタイズしています。
    • https[:]//www.circl.lu/doc/misp/feed-osint
    • https[:]//osint.digitalside.it/Threat-Intel/digitalside-misp-feed/
    • https[:]//raw.githubusercontent.com/infobloxopen/threat-intelligence/main/indicators/misp
    • https[:]//www.botvrij.eu/data/feed-osint
    • https[:]//bazaar.abuse.ch/downloads/misp/
    • https[:]//threatfox.abuse.ch/downloads/misp/
    • https[:]//urlhaus.abuse.ch/downloads/misp/

以上で、一旦OpenCTIの実装の説明は以上となります。
活用方法はいまだ検討中ですが、なにかわかればまた記事を書きたいと思います。

参考・引用

  1. https://docs.opencti.io/latest/deployment/connectors/
  2. https://filigran.notion.site/OpenCTI-Ecosystem-868329e9fb734fca89692b2ed6087e76
  3. https://www.misp-project.org/feeds/