3 min read...

これはMISP(Malware Information Sharing Platform) の基本的な概念と操作をまとめた入門記事です。

MISPはオープンソースの脅威情報共有プラットフォームです。 MISPを使うことで、脅威情報(怪しいURLやマルウェアのハッシュ値、サンプルなど)を効率的に組織内外に共有することができます。

OSSであり、コミュニティドリブンで開発されていますが、主となる開発母体はルクセンブルクのナショナルCSIRTであるCIRCL です。

CIRCLによれば6,000以上の組織がMISPを使用しています。

まず下記のMISPの基本的なデータモデル・用語を解説します。

イベントはMISPの最も基本的な要素です。

インシデントや(各種ベンダーやリサーチャーが公開した)OSINTレポートなどを1つのイベントとして作成し、管理します。

イベントは継承(Extends)関係を持つことができます。 継承をする場合、イベント作成時に継承するイベントのIDまたはUUIDを指定します。

アトリビュートはイベントに一対多で紐づく要素で、いわゆるIOC(Indicator of Compromise)のことです。IP/ドメイン/ハッシュ値などがこれに当たります。

例えばOSINTレポートの場合、そのレポートへのリンクや記事本文もアトリビュートとして扱うことができます。

作成されたイベントに対し、既存のアトリビュートの修正/新しいアトリビュートの追加などを"提案"をすることができます。

提案が作成されると、そのイベントの作成者に通知が飛びます。 イベント作成者に提案が承認されると、その提案がイベントに反映されます。

イベントにオブジェクトを追加することができます。

オブジェクトとは、アトリビュートの組み合わせによって表現される特定の"もの"のことです。 Yara や Tor-node など、特定の"もの"をアトリビュートの組み合わせによって表現します。 具体的には、 Yara は以下のアトリビュートによって構成されたオブジェクトになります。

各イベントの関連付けをするためにタグが存在します。

TLP をタグとして付与したり、特定のボットの名前をタグ付けしたりすることができます。

例えば上記の例にある Nymaim タグをクリックすると、 Nymaim とタグ付けされたイベントのみを表示することができます。

タクソノミーはタグのライブラリーのようなもので、複数のインスタンス/組織間で共通のタグを使うために使用されます。

タクソノミーは

の3つの要素で構成されます。

ギャラクシーはタグ(タクソノミ−)を補完するためのものです。

ギャラクシーはCluster(クラスター)という大きなオブジェクトを用いて、より複雑な関連付けを可能にします。

ギャラクシーは

の4つの要素で構成されます。

Galaxyの例:

Clusterの例:

具体的には以下のように使用されます。

これにより、タグより複雑な関連を表現することができます。

Note: 組織の作成が可能なのは"admin"(管理者)権限を持つユーザーのみです。

上部の"Administration"(管理) => "Add Organization"(組織を追加)をクリックすると、組織の作成画面に遷移します。

ここで各項目を入力することで、組織を作成することができます。

注意が必要なのは、UUIDの項目です。UUID(Universally Unique Identifier)はその名の通り、一意である必要があります。 他のMISPインスタンスと同期をする際、UUIDが衝突してしまうと、データの不整合が発生する可能性があります。

これを避けるためには、独自に(= 手動で)UUIDを設定するのではなく、"Generate UUID"(UUIDを生成)をクリックし、システム側にUUIDを生成させましょう。

上部の"Administration" => "Add User"(ユーザーを追加)をクリックすると、ユーザーの作成画面に遷移します。

ここで各項目を入力することで、ユーザーを作成することができます。

ユーザーの"Role"(ロール)は以下から選択することができます。

各ロールが持つ権限の詳細については、"Administartion" => "List Roles"(ロールの一覧)で確認することができます。

左側の”Add Event”(イベントを追加)または上部の“Event Actions”(イベントアクション)をクリックすると、イベントの作成画面に遷移します。

イベント作成時に重要となるのは"Distribution”(ディストリビューション)の設定です。 ディストリビューションは、イベントの公開範囲を定めるものです。

タグで設定できるTLP(RED/AMBER/GREEN/WHITE)とは、このディストリビューションの設定とは何の関係もないことに注意してください。 TLP:REDとタグ付けしたとしても、ディストリビューションが”All communites”なら、TLPのタグに関係なく伝播してしまいます。

イベントの作成後、"Add Attribute"(アトリビュートを追加)をクリックするとアトリビュートを追加することができます。

カテゴリー、タイプを選び、それに該当する値を入力することでアトリビュートを追加することができます。

ここでもイベントと同じようにディストリビューションを選択することができます。

イベントとアトリビュートで、異なるディストリビューションを設定した場合、どうなるでしょうか? この場合、最も厳しいディストリビューションが適用されます。 例えば、イベントが"All communities"で、それに属するアトリビューションが"Your organization only"の場合、"Your organization only"が該当するアトリユートに適用されます。

カテゴリーとタイプを選択しながら値を入力していくのは、手間がかかる作業です。 これを効率化するため、MISPには"Freetext import"(フリーテキストインポート)という機能があります。 これを使用すると、フリーテキスト(自由記述のテキスト)から、自動的にIOCの抽出ができます。カテゴリーとタイプも自動的に選択されます。

この機能は、左側メニューの"Populate from..."をクリックし"Freetext Import"(フリーテキストインポート)を選択すると使用することができます。

これを行うとタクソノミー(= タグ)をイベントとアトリビュートに追加することが可能になります。

イベントもアトリビュートも同じく、"Tags"欄にある+ボタンをクリックするとドロップダウンメニューからタグを追加することができます。

選択できるタグがない場合、自分でタグを追加するか、タクソノミーからタグを追加することができます。 "Event Actions" => "List Taxonomies"(タクソノミーの一覧)に遷移し、有効化したいタクソノミーの"Actions"欄にある+ボタンをクリックすると、そのタクソノミーが有効化され、タグとして使用可能になります。

MISPはMISPインスタンス間でイベント/アトリビューとを同期できる機能を持っています。

ここでは、インスタンスAとインスタンスBという2つのMISPインスタンスがあると仮定して話を進めます。

インスタンスBがインスタンスAと同期したい場合(インスタンスA上のイベント/アトリビュートをインスタンスB上に取得したい場合)はの流れは以下のようになります。

まずインスタンスAの管理者にお願いして、同期用のユーザーを作成してもらいましょう。

同期専用のユーザーとして、余計な権限を持たせないために"Sync user"(同期用ユーザー)のロールを割り当てるのが良いでしょう。

ユーザーを作成すると、そのユーザー用の"Authkey"(認証キー)が作成されます。これを使用して同期を行います。

インスタンスB上にて、上部の"Sync Actions"(同期アクション)のメニューから、"List Servers"(サーバーの一覧)をクリックすると、サーバーの一覧画面に遷移します。

左側にある"New Server"(新しいサーバー)をクリックすると、サーバーの新規作成画面に遷移します。

ここで、

を入力し、下部にあるオプションから(ここではとりあえず)"Pull"を選択し、"Submit"をクリックすると、サーバーが作成できます。

Note: "Push"にもチェックを入れると、インスタンスBからインスタンスAに対してイベントをプッシュすることができるようになります。

まず"Connection test"の"Run"ボタンをクリックし、インスタンスAのサーバーとのコネクションを確認しましょう。

このようにコネクションの確認ができたら、インスタンスAからイベント/アトリビュートを取得してみましょう。

サーバーの右側にある"Pull all"(すべてをプル)アイコンをクリックすると、バックグランドジョブが開始されます。

このバックグランドジョブの実行状況は"Admnistration" => "Jobs"から確認することができます。

上記の手順はインスタンス上のすべての(インスタンスBへの公開が許可された)イベントを取得する手順でした。

特定のイベントのみを取得したい場合はどうすればいいでしょうか?

この場合、サーバーの一覧画面で"Explore"アイコンをクリックしましょう。

すると、インスタンスA上のイベントの一覧が表示されます。ここで取得したいイベントの"Fetch the event"アイコンをクリックすると、特定のイベントのみを取得することができます。

MISPはREST APIを提供しており、このAPIを使用して各種操作を自動化することができます。

詳細は公式のドキュメント をご参照ください。

また、このREST API用にPythonのライブラリー(PyMISP )が公開されています。これは以下のコマンドでインストールすることができます。

例えば特定のパラメーターのタイプを持つイベントを検索するためのスクリプトは以下のようになります。