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 によるインストール方法は以下の通り。
$ 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 を動かすこともできる。
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 は、ファイルからデータをインポートする機能を持っている。
例えば、ImportFilePdfObservables
Connector を使用して 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
- OpenCTI Introduction to the platform & next steps / Luatix (PDF)
- OpenCTI & SITX / Luatix (PDF)
- Integration of Information in OpenCTI / CERT-FR (PDF)
- Still thinking about your Ex(cel)? Here are some TIPs / SANS CTI Summit 2021 (PDF)