こんにちは、イノベーションセンターの志村です。
開発者ブログ 兼 NTTコミュニケーションズ Advent Calendar 2020 の2日目の記事です。 昨日はmahitoさんの記事、 日本企業でTGIFのような対話型イベントをやってる話 でした。 今回はThreat Intelligenceのツールである、MISPの概要とその使い方について紹介します。
この記事の要約
- インテリジェンス活用のため、オープンソースのThreat Intelligence 共有プラットフォームのMISPが広く活用されている
- APIやモジュールによるインポート/エクスポートなど、自動化や外部連携をするための機能が充実している
- 「ブロックチェーン型セキュリティインテリジェンスプラットフォーム」では、MISPを活用したインテリジェンスの活用・共有を促進するプラットフォームとなっている
Threat Intelligenceについて
MISPの説明の前に、そもそもThreat Intelligence (セキュリティインテリジェンス、CTI: Cyber Threat Intelligence などとも呼ぶ) とは何か、についてお話しします。定義は様々ですが、かみ砕いて言ってしまえば「サイバー脅威の軽減に役立つ情報」であるといえます。 セキュリティ活動のためのThreat Intelligenceは、以下のような場面で活躍・活用できます
- 脆弱性マネジメント: 脆弱性の情報を収集し、パッチ対応の優先順位などを決定する
- セキュリティオペレーション: セキュリティアラートに関連する情報を使用し、アラートのトリアージ (対応の優先順位付け) を行う
- インシデントハンドリング: インシデントハンドリング中に発見されたIOC (Indicator of Compromise: 攻撃されたことを示すIPアドレスやハッシュ値などの証跡)をセキュリティインテリジェンスを用いて詳細に調査する
- セキュリティ意思決定: 自組織を狙う攻撃者グループの戦術、テクニック、攻撃手法 (TTPs) を収集し、不足している防御能力を把握して対処する
Threat Intelligenceを活用することにより、事実に基づいたセキュリティ活動や意思決定を行うことが可能になります。 Threat Intelligenceの活用を促進するツールなどは多種ありますが、今回はその中でもオープンソースのThreat Intelligence のプラットフォームである、MISPについて紹介します
MISPとは
引用: https://www.misp-project.org/features.html
MISPは、Threat Intelligenceの蓄積・共有・関連づけを行うオープンソースソフトウェアです。MISPの開発はCIRCL (The Computer Incident Response Center Luxembourg: ルクセンブルグの民間部門・地方自治体・非政府組織向けのCERT) によって主導されており、機能の追加などが進められています。 MISPは公式サイトによれば「MISP - Open Source Threat Intelligence Platform & Open Standards For Threat Information Sharing」、つまりThreat Inteligenceのプラットフォームであり、またThreat Intelligence共有のオープン標準であるとされています。MISPを活用することで、Threat Intelligence を効率的に蓄積・共有し、Threat Intelligenceを活用したセキュリティオペレーションを実施することができます。 本ブログでは、MISPの利用方法や基本的な概念について紹介します。より詳細な情報などは、MISP公式サイトの解説 、もしくは公式サイトのトレーニング資料やGithubのmisp-trainingなどが参考になります。
MISPを使うことで、以下のようなことが実現できます。
- IOCの保存と検索
- 関連するインテリジェンスをイベントという形式で保存したり、保存してあるインテリジェンスを検索することができます
- 組織間でMISPインスタンスを接続し、インテリジェンスを共有する
- 自動的にMISP上の情報を共有することができます。共有していい情報とそうでない情報を区別することも可能です
- セキュリティアプライアンスで活用可能なデータ形式でのエクスポート
- suricataなど、セキュリティアプライアンスに投入可能な形式でインテリジェンスをエクスポートすることができます
- イベント間の相関分析
- IPアドレスやドメイン名、ハッシュ値などが共通するイベントがあった場合、そのイベントと関連付けることができます。これによりアラート対応時に関連する情報を簡単に参照することなどが可能になります
MISPの概要
MISPの基本的な構成単位などについて説明します。
Event
MISPはEvent (イベント) という単位でインテリジェンスを管理します。 インシデント、マルウェア、インテリジェンスレポートなどを1つのイベントとして管理します。
イベントの例
Attribute
各イベントに紐づく具体的なIOC (IPアドレス、ドメインなど) などを保存する単位として、Attribute (アトリビュート) があります。 イベントとアトリビュートは1対多の関係になっており、1つのイベントに複数のアトリビュートが属する形になっています。 例として、あるインシデントを1つのイベントとして作成した場合、そのインシデントで発見されたIPアドレスやドメインなどをアトリビュートとしてイベント配下に作成します。
アトリビュートにはカテゴリーとタイプが存在します。例えば Network activity
というカテゴリーには domain
, ip-src
, ip-dst
などのタイプが存在します。
ユーザは適切なアトリビュートのカテゴリーとタイプを選択し、イベントに追加していきます。
アトリビュートの例
Object
Object (オブジェクト) は、アトリビュートの組み合わせによって構成され、アトリビュート間の関連性を表すことができるものです。
例えば domain-ip
というオブジェクトは domain
, ip-dst
, port
などのアトリビュートを組み合わせ、観測されたドメイン/IPを表現するためのオブジェクトになります。
オブジェクトの例
オブジェクトは他のアトリビュート、オブジェクトとのrelationships (リレーションシップ) を追加することができるのも大きな特徴です。これにより、MISPオブジェクトの背景情報を追加することが可能になります。
例えばcommunicates-with
というリレーションシップをドメインのオブジェクト間に作成すれば、あるオブジェクト(例: マルウェアを表すオブジェクト) から別のオブジェクト(例ネットワークホストを表すオブジェクト)に通信が発生したことをMISPイベント上で表現することができます。
Tag
Tag (タグ) はイベントやオブジェクトに付与することができる、イベント間の関連づけを行うためのものです。 タグを使うことで、イベントやオブジェクト間の関連性をMISP上で表すことができます。
Taxonomy
Taxonomy (タクソノミー) は、情報のタグ付けや整理を行うための、共通のタグのライブラリです。タクソノミーはタグとして表現されます。 MISP間でイベントを共有する際、各インスタンスが独自のタグで管理を行うと、タグの意味するとことが分からずに混乱を生じます。 タクソノミーを使うことで、複数のインスタンス間で共通のタグを利用でき、円滑に情報共有することができます。
タクソノミーは、Githubのmisp-taxonomy で定義されています。例えばTLP (Traffic Light Protocol)のタクソノミーを使うことで、情報の公開可能範囲をタグで規定することができます。
Galaxy
Galaxy (ギャラクシー) は、イベントやアトリビュートに付与することができる、cluster (クラスター) と呼ばれる巨大なオブジェクトです。クラスターは複数のkey-value形式の要素を持ち、タクソノミーなどより多くの情報を付与することができます。 ギャラクシーはタクソノミー同様Githubのmisp-galaxy](https://github.com/MISP/misp-galaxy)で定義されています。定義済みのギャラクシーには攻撃者グループの情報やマルウェアなどがあり、ギャラクシーを使うことでイベントやアトリビュートを補完することができます。
MISPのインストール方法
MISPを利用するために、MISPをインストールする方法について紹介します。 MISPのインストール方法は、MISP公式ページ に記載されており、いくつかの選択肢があります。
公式のインストールガイドを使う場合
https://github.com/MISP/misp-taxonomies 基本的には自分が使用するOSのインストールガイドに従うことで、MISPのインストールが可能です。 例として、Ubuntu 18.04の場合は以下のコマンドでインストール可能です。
# インストールスクリプトのダウンロード
wget -O /tmp/INSTALL.sh https://raw.githubusercontent.com/MISP/MISP/2.4/INSTALL/INSTALL.sh
# インストールスクリプトの実行
bash /tmp/INSTALL.sh
Dockerイメージを使う場合
MISPのdockerイメージはいくつか公式サイトで紹介されておりますが、現在は docker-misp を利用するのが良いと思われます。
MISPの使い方の紹介
MISPのUIの使い方を簡単に紹介します。
Feedからのデータの入手
MISPをインストールした段階では、イベントは空の状態です。Feedと呼ばれる機能を使うと、イベントを外部から入手することが可能になります。 MISPはデフォルトでフィードの設定がいくつか存在しており、それを有効化することでOSINT (open source intelligence) などを入手することができます。 画面上部のメニューバーから、"Sync Actions" -> "List Feeds" とクリックし、フィードを設定画面に入ります。その後、有効にしたいフィード ("CIRCL OSINT Feed" など) の列の右端の "Actions" の項目のEditマークをクリックします。 そして "Enable" をクリックしてフィードを有効にし、ページ下の"Edit" をクリックして設定を完了します。 すると"Actions" の項目に "Fetch all events" というボタンが表示されるのでクリックすると、有効にしたフィードのイベントをMISPに取り込むことができます。 フィードはデフォルトで存在しているもの以外にも、自分で設定することも可能です。
イベントの閲覧
イベントの一覧の表示は、画面上部メニューバー左端の "Home" をクリックするか、"Event Actions" -> "List Events" と選択することで可能です。 イベント一覧から各イベントの画面に入るには、 "Id" の列に表示されているイベントIDの数値をクリックします。
各イベントの画面では、Evnetの各種情報などを閲覧できます。また画面下部にある +
, -
と書かれているボタンを押しますと、各項目の表示/非表示が切り替えられます。
例として "Correlation graph" の左の "+" をクリックすると、イベント間の相関分析のグラフを表示することができます。 Correlation graphでは、共通するアトリビュートを持つイベントを表示して関連性を調査することができます。
イベント・アトリビュートの作成
MISPのイベント・アトリビュートの作成方法について簡単に紹介します。詳細な説明は、MISPドキュメントの クイックスタートページ などを参照してください。
イベントの作成
MISPにデータを投入するためには、最初にイベントを作成する必要があります。 MISPのホーム画面の左側の "Add Event" を選択するか、上のメニューバーにある "Event Actions" -> "Add Event" を選択することでイベントの作成画面に入ることができます。
続いてイベントの情報を入力します。
- Date: イベントの日付を入力します。
- Distribution: MISPの機能でイベントが共有される範囲を選択します。
- Threat Level: イベント作成者が考える、このイベントの脅威度を選択します。
- Analysis: このイベントの解析段階を選択します。
- Event info: イベントの概要を入力します。
- Extends Event: 継承するイベントのID、もしくはUUIDを指定することでそのイベントを継承することができます。
アトリビュートの作成
イベントを作成すると、そのイベントに紐づくアトリビュートを作成可能になります。 イベント画面の左側の "Add Attribute" をクリックすることでアトリビュートの作成画面に入ることができます。
続いてアトリビュートの情報を入力します。
- Category: "Network Activity"、"Antivirus Detection" など、アトリビュートの情報のカテゴリを選択します。
- Type: アトリビュートの種類を選択します。Categoryごとに選択できるTypeが決まっています。 (Network Activity なら "ip-src", "domain"など)
- Distribution: このアトリビュートの公開範囲を選択します。デフォルトではイベントの公開範囲と同じになります。
- Value: アトリビュートの具体的な値を入力します。
以上の作業により、イベントとそれに紐づくアトリビュートを作成することができます。 より多くのアトリビュートを一度に入力したい場合は、イベント画面左側の "Populate from" を選択することで、 "Freetext import" などの一括投入機能を使うことができます。 Freetext importは、自由なテキスト形式でIOCを投入できる機能です。IOCをテキスト形式で入力すると、自動的にカテゴリーとタイプを解釈して一括で入力が可能になります。
自動化
MISP はイベントの検索・取得や、イベントの新規作成などの各種操作を可能とする、REST API を提供しています。 REST APIの操作方法などは、公式ドキュメント などに記載されています。
PyMISPについて
REST APIを簡単に使用する方法として、公式のPythonライブラリーである PyMISP が提供されています。 PyMISPを利用することで、イベント/アトリビュートの作成や検索、タグ付けなどの操作をPythonを利用して自動化することができます。 PyMISPの利用方法は、公式ドキュメント や PyMISPのTutorial などが参考になります。
PyMISPの利用方法
MISPの操作には、pymispインスタンスを作成します。
from pymisp import PyMISP
# アクセスURLの設定
MISP_URL = "https://misp.exmaple.com"
# APIキーの設定
MISP_KEY = "YOURMISPKEY"
# pymispインスタンスの作成
misp = PyMISP(url=MISP_URL, key=MISP_KEY, ssl=False, debug=False)
イベント・アトリビュートの作成
イベントやアトリビュートの作成をする際は、 PyMISP.add_event
を使用してイベントを作成した後にアトリビュートを追加します。
from pymisp import MISPEvent
# イベントの作成
event_obj = MISPEvent()
event_obj.info = 'This is my new MISP event' # Required
event_obj.distribution = 0 # Optional, defaults to MISP.default_event_distribution in MISP config
event_obj.threat_level_id = 2 # Optional, defaults to MISP.default_event_threat_level in MISP config
event_obj.analysis = 1 # Optional, defaults to 0 (initial analysis)
# オブジェクトの追加
event_obj.add_attribute('ip-dst', '192.168.10.1')
# MISPインスタンスへの追加
misp.add_event(event_obj)
イベント・アトリビュートの検索
文字列などで検索する場合は PyMISP.search
を利用します。
例として、 192.0.2.1
という文字列を含むイベントを検索したい場合は以下のようになります
r = misp.search(controller='events', value='192.0.2.1')
イベントではなく、アトリビュートを検索することも可能です。
r = misp.search(controller='attributes', value='192.0.2.1')
MISP活用の注意点
MISP活用していて注意すべき点について紹介します。ただ常に当てはまるわけではなく、意見には個人差がある旨をご了承ください。
イベントを肥大化させすぎない
MISPでは、既存のMISPイベントにもアトリビュートを追加することができます。 しかし既存のMISPイベントにアトリビュートを追加し続けると、古い情報と新しい情報が混在するイベントになってしまいます。 インテリジェンスには鮮度があり、IPアドレスやドメインなどはすぐに陳腐化するため、古い情報を参照し続けることは誤検知などの原因になります。 1つのアラートの調査結果を1つのMISP イベントとして作成するなど、適切にイベントを分けるのが重要です。 イベント間の関連付けをタグなどで行うと、データの関連を示しつつイベントを分割することができます。
タグを積極的に活用する
タグはイベントの概要を把握が容易になる、同一のタグのイベントなどを容易に検索できるなど、多くのメリットがあります。 MISPではコミュニティ主導でタクソノミーやギャラクシーの更新などが行われています。積極的に活用して、マルウェアファミリーなどの情報を付加するのが望ましいです。 またAPIを用いて自動化の際に、タグの値によって処理を変える、といった使い方も可能です。
情報ソースを残す
このイベントは何を意味しているのかなどの背景情報を残すことは重要です。 例えばWeb上の情報などを基にイベントを作成する場合、そのページへのリンクともにPDFを添付するなど情報ソースを残す取り組みをするとよいでしょう。
まとめ
本日は、オープンソースのThreat Intelligence 共有プラットフォームのMISPを紹介しました。
MISPはコミュニティベースで開発が進められており、今も新しい機能が追加され続けています。
MISPを使用することで、Threat Intelligenceを使用するオペレーションの高度化・実現をすることが可能になります。
宣伝
最後に宣伝を。10月にニュースリリースで公開された 「ブロックチェーン型セキュリティ情報流通フレームワーク」 では、MISPを利用して脅威情報の共有・高度化を可能にするプラットフォームとなっています。 MISPインスタンスを接続していなくてもインテリジェンスを共有できるなどの特徴を備えています。 実証実験を実施中なので、ご興味ある方はニュースリリースの問い合わせフォームよりお問い合わせください。 https://www.ntt.com/about-us/press-releases/news/article/2020/1006_2.html
最後に
明日は yuki_uchida さんの 「WebSocketの次の技術!?WebTransportについての解説とチュートリアル」です。お楽しみに。