Skip to content

OpenCTI 入門

Notes

  • 本稿は OpenCTI v4.4.0 をベースにして書かれている。

OpenCTI とは

  • OpenCTI は、Luatix が開発している Open Cyber Threat Intelligence Platform.
    • Luatix はANSSI/CERT-FR, CERT-EUが founder members になっている非営利組織。
    • Tainum や Thales がスポンサードしている。

  • STIX2.1 をベースにした Threat Intelligence のナレッジ管理を行うことができる。

(Source: OpenCTI Introduction to the platform & next steps)

アーキテクチャ

(Source: OpenCTI Introduction to the platform & next steps)

ユースケース

CERT-EU

(Source: OpenCTI Introduction to the platform & next steps)

ANSSI

(Source: OpenCTI Introduction to the platform & next steps)

インストール

Docker によるインストール方法は以下の通り。

bash
$ git clone https://github.com/OpenCTI-Platform/docker.git
$ cd docker

# .envファイルのサンプルをコピー
$ cp .env.sample .env

# https://www.notion.so/Using-Docker-03d5c0592b9d4547800cc9f4ff7be2b8
# "Configure the environment"のセクションの指示に従い、`ChangeMe`の箇所を適当な値に書き換える
$ vim .env

これでdocker-compose up -dをすれば OpenCTI がlocalhost:8080で起動する。

しかし、デフォルトの設定のままだと、使用できる Connector が少ない。 (Connector はプラグインのようなもので、外部サービスと OpenCTI のデータ連携に使用される。詳細は後述する。)

Connector の一覧を確認し、利用できる Connector があれば有効化してみよう。

Connector は下記のリポジトリで管理されている。

Connector の概要を把握するためには、下記の Web ページを参照した方が分かりやすいかもしれない。

例えばMaplpediaの Connector を有効にしたい場合、下記のようにdocker-compose.ymlに Connector 用の設定を追加すれば良い。

あるいは個別に(メインのdocker-compose.ymlの外で)Connector を動かすこともできる。

bash
wget <https://github.com/OpenCTI-Platform/connectors/archive/{RELEASE_VERSION}.zip>
unzip {RELEASE_VERSION}.zip
cd connectors-{RELEASE_VERSION}/{CONNECTOR_NAME}
vim docker-compose.yml
docker-compose up -d

しかし、管理の面からすると、1 つのdocker-compose.ymlにまとめておいた方が楽だろう。

Connectors

Connector にはData import, Stream consumers, Enrichment, File import, File exportの 5 種類がある。

Data import

Data import 用の Connector は、外部サービスからデータをインポートする機能を持っている。

例えば Malepdia の Connector を使うと、(デフォルトの設定のままだと)1 日 1 回 Malpedia からデータをインポートすることができる。

Stream consumers

Stream consumers 用の Connector は、外部サービスとデータを連携する機能を持っている。

Data import と何が違うかというと、Data import はバッチ処理のように特定のタイミングでしか処理が行われてないのに対し、Stream consumers は Pub/Sub モデルのような形で延々と処理が行われる。

SIEM や EDR との連携には Stream consumers が使用される。

Enrichment

Enrichment 用の Connector は、observables をエンリッチメントする機能を持っている。

例えば、VirusTotal の Connector は、ファイルのハッシュ値を元に、VirusTotal から情報を取得して observable をエンリッチしてくれる。

Fileタイプの observable を登録すると、下記のようにLabelsに情報が追加される。

何をキーにしてどのようにエンリッチメントが行われるのかは、実際に Connector を動かしてみるか、ソースコードを確認してみないと分からない。

VirusTotal の場合、自分は IP address をキーにして Passive DNS の情報をエンリッチしてくれることを勝手に期待していた。が、実際はFileタイプの observable をエンリッチすることしかできない。しかもやってくれることは、tags をLabelsにマッピングしてくれるだけだ。

他の種類の Connector にも言えることだが、事前にソースコードやドキュメントを確認しておくのがいいだろう。

Files import

Files import 用の Connector は、ファイルからデータをインポートする機能を持っている。

例えば、ImportFilePdfObservablesConnector を使用して PDF から observables を抽出してみるとこうなる。

ちなみに、cert.govのような値は予め whitelist というか deny-list に入れておいてもらいたいものだが、そういった機能は無いようだ。

File export

File export 用の Connector は、データをエクスポートする機能を持っている。

OpenCTI 内のデータを、例えば CSV や STIX 形式でエクスポートすることができる。

利用方法

OpenCTI のデータモデルは STIX2.1 をベースにしているので、STIX2.1 について最低限の知識が必要となる。

以下の記事を斜め読みしておくくらいのことはしておいた方が良いだろう。

Web UI

Web UI 上でデータの作成・参照ができる。

どんなものなのか、デモにアクセスして試してみるのが一番分かりやすいだろう。

GraphQL API

GraphQL を使ってデータの作成・参照が行える。

というか、GraphQL API が OpenCTI の本体で、Web UI は React ベースの SPA で GraphQL を叩いているだけにすぎない。

/graphqlに GraphQL 用の playground が用意されているので、そこで GraphQL を実行してみることができる。

まとめ(あるいは OpenCTI は実際どう使えるのか)

OpenCTI を使うことで、STIX2.1 をベースにした Threat Intelligence のナレッジ管理が行える。

セキュリティベンダーや CERT-FR(ANSSI)のようなナショナル CSIRT はこういったナレッジの管理が業務の一つだから OpenCTI を使うことができるだろう。

セキュリティベンダーやナショナル CSIRT でなくても、大きな組織であれば自前でインディケーターや検知ルールの管理を行っているだろう。そういったナレッジの管理に OpenCTI は使用できる。あるいは OpenCTI の導入を契機にしてインディケーターや検知ルールのナレッジ管理に挑戦してみることもできるだろう。

余談になるが、OpenCTI に限らず言えることだけれども Threat Intelligence Platform(TIP)というか Threat Intelligence の定義は曖昧で、人によって定義や期待している効果が異なっていることが多い。

予めどんなことがしたいのか、どんな効果が期待されるのか、どうやって効果測定を行うのか決めてから  TIP を導入しないと、どのようなものであっても無用の長物になるだけだろう。

References

おまけ(OSS TIP matrix)