On this page
article
OpenCTI Connector 実装 by Docker
概要
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の該当コネクターのページ
-
3.設定値の編集
- 該当のコネクタフォルダ内の、docker-compose.ymlファイルを編集して、「ChangeMe」になっているところを編集する
-
図. デフォルトのdocker-compose.yml OPENCTI_TOKEN
は、本ブログの設定で行くとadminユーザーのトークンであり、CONNECTOR_ID
は、コネクタごとに設定するのが望ましいらしい。(cat /proc/sys/kernel/random/uuid
で生成)-
- また、ネットワークをOpenCTIの土台側のネットワークに属するようにして、
OPENCTI_URL
は、固定IPで指定したopencti
コンテナのIPアドレスで構成されるURLを指定する。- 同一ネットワークに属するためには、以下のように末尾に追記すればいい。
-
または、上記のような他のコネクターにも流用できる設定値に関しては、.envファイルで別途設定値用のファイルを作成して、
docker-compose.yml側では環境変数からロードするのが手っ取り早い。
最終、以下のようになる。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」から
.env
とdocker-compose.yml
をアップロードする。 -
図. Portainer上「Add Stack」画面 - 名前を指定して、「Deploy the stack」でスタックを構成。
- 成功のポップアップが出るまで待つと、スタックとコンテナの作成が完了する。
-
- 完了したらOpenCTIのGUI側で、
- 「Data」>「Ingestion」から、該当のコネクターが追加されていることが確認できる。
-
図. OpenCTI GUI上 コネクター画面
- OpenCTIの土台側と同様に、「Stacks」>「Add stack」で、「Upload」から
コネクターの実装は以上となります。
また複数のコネクターを実装したい場合には、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の実装の説明は以上となります。
活用方法はいまだ検討中ですが、なにかわかればまた記事を書きたいと思います。