Timeline analysis using ElasticSearch/Kibana/plaso on SIFT

Visualize timeline using ElasticSearch/Kibana/plaso on SIFTでは、plasoで処理したイベントをKibana上に表示するまでの手順を確認しました。

ここではタイムライン解析をするための、Kibanaの操作や設定方法に触れていきます。

Kibanaでは画面全体をダッシュボードと呼び、ダッシュボードはクエリ、フィルタ、Row(行)で構成されています。Rowに自分の好きなパネルを配置します。

Kibana plaso Analysis Mark

パネルは11種類あり、公式サイトの内容を要約すると以下の通りです。

  • bettermap: 位置情報のプロット
  • column: 他の複数のパネルを調節するための疑似パネル
  • goal: 進捗率をグラフで表示
  • histogram: 時系列に示すヒストグラム
  • hits: クエリのヒット件数を表示
  • map: 国、州コードのデータを使って地図上にリージョンを表示
  • sparklines: 折れ線グラフで表示
  • table: ドキュメント(イベント)を表形式で表示
  • terms: 検索結果の各フィールドを表、グラフで表示
  • text: 固定表示用のテキスト
  • trends: 指定期間の増減を表示

上の画面は前回使ったplaso用のサンプルを読み込んだ画面ですが、これらはhistogram、terms、tableのパネルを使っています。

各設定は歯車アイコンのメニューから行います。全体(ダッシュボード)は画面右上、Row単位はRow領域内の左上方のオレンジ部分、パネル単位はパネル領域内の右上にあるアイコンでそれぞれ設定します。設定変更後は明示的に保存しない限り保存されません。画面右上のフロッピーのアイコン経由でダッシュボードに名前をつけて保存します。

基本的には、全体から大まかに絞るためにフィルタ、具体的な検索等にクエリを使っていきます。

フィルタ(Time filter)

期間でフィルタを適用するには、パネルのヒストグラム上でマウスで範囲選択するか上部のTime filterで指定します。Time filterで選択する項目は、ダッシュボードの設定からTimepickerの項目でカスタマイズすることができます。

Kibana timepicker

デフォルトでは5m,15m,1h...と設定されており、現在の5分前、15分前、1時間前のように直近の情報を調べるためタイムライン解析では適切ではありません。そのため上の画面のように1d,7d...のように変更すれば1日前、1週間前...と広めの指定ができます。

Kibana timefilter

Time filterを確認すると変更した内容に反映されていることがわかります。適切な期間が無い場合はCustomで個別に指定することになります。ここで変更した設定はリロード等をすると失われるため保存しておきます。

フィルタ(全般)

上述のTime filterもフィルタ機能の一つですが、これ以外にも各パネル上に表示されているグラフの項目をクリックしたり、Action項目にある虫眼鏡マーク(包含)や禁止マーク(除外)をクリックすることにより、フィルタとして追加されていきます。例えばレジストリのイベントをいったん除外したい場合、パネル上のレジストリの情報を示す部分で禁止マークのActionをクリックすれば下図のようにFilterが追加されます。

Kibana Filter Action

一括でノイズと判断できるイベントがあれば、この方法での除外が効率的です。

クエリ

クエリはlucene, regex, topNという3種類をサポートしていますが、標準ではluceneが選択されています。Apache Luceneの構文を使った検索ですが、とりあえず覚えておくと良さそうな構文は以下の通りです。

意味

hostname:(win lin)

hostnameフィールドでwinまたはlinを含む

ca?

caに続く任意の1文字を含む(全フィールド対象)

filename:ca*

filenameフィールドでcaから始まる文字列を含む

event_identifier:[4000 TO 5000]

event_identifierフィールドで4000以上5000以下のイベント

event_identifier:[4000 TO *]

event_identifierフィールドで4000以上イベント

クエリは複数に分けて実行することも可能です。クエリの結果をどのように関連させるかをパネル毎に設定することにより、それぞれ必要なクエリの結果のみを表示するような使い方もできます。

Kibana Query

histogramパネル

横軸を時間としてイベント数の経緯をグラフ表示します。マウスでドラッグすることによりその期間のフィルタができ、イベント数でアクティビティが把握できるため、タイムライン解析で役に立つ使い方です。注意点として、plasoでは時間のフィールドをdatetimeとしているためTime Fieldの設定をdatetimeにしておくことと、タイムゾーンの解釈をブラウザベースかUTCで選択できるため選択内容を考慮する必要があります。

また、あまり使わないかもしれませんがHistogramパネル用の設定のQueriesというタブでMarkersという項目があります。

Kibana Markers Settings

MarkersをEnableにしてクエリを書いておくと、ヒストグラム上にクエリに該当するイベントにマークがつきます。

Kibana Marker View

termsパネル

指定したフィールドを基にイベント数を表形式やグラフで表示します。表形式ではイベント数とともにActionの項目が表示されるため、フィルタによる除外がやりやすくなります。扱いたいフィールド名を把握していなければなりませんが、これは後述のtableパネルで表示される内容からわかります。

tableパネル

イベントを表形式で表示します。デフォルトでは1ページあたり100件表示し5ページ分(最大500件まで)しか表示しません。この設定はtableパネル用の設定のPagingタブで変更することが可能です。ただし、私が試した限りでは1ページあたりの表示件数、ページ数どちらも大きくするとかなり遅くなり、最大10000件程度にすると支障が出るほどの動作であったため、1ページ100件で30ページくらいに設定しておくのが妥当と思います。

tableパネル上では左側の領域にフィールド名が表示されます。ここでplasoが出力しているフィールド名が確認できます。フィールド名をクリックするとそのフィールドに対する値を集計順に表示し、Actionの項目からフィルタをかけることもできます。

Kibana Micro Analysis

そしてメインとなる領域にはイベントが表形式で表示されます。plaso用のサンプルファイルではdatetime, timestamp_desc, hostname, username, source_short, source_long, message, tag, display_nameのフィールドを表示するように設定されています。表示したいフィールドはtableパネル用の設定のPanelタブで変更することができます。

Kibana Table Settings

Columnの項目でフィールドを追加、削除します。また、左側のTrim Factorの値でフィールド値が長い場合に切り詰める長さを指定します。デフォルトでは300になっており、例えばmessageフィールドの内容はほとんどわからないため、大きめの値にして不要なフィールドは削除するのが良いと思います。

カスタマイズダッシュボード

Kibanaを使ったタイムライン解析で使えそうな機能をピックアップしてみましたが、これまでに紹介した変更点をplaso用のサンプルファイルに反映させてみました。termsパネルではsource_shortフィールドとhostnameフィールドを表、円グラフで表示するようにし、tableパネルではdatetime, timestamp_desc, hostname, source_short, messageの5つのフィールドを表示するようにしています。

興味がある方は自由にお使いください。

kibana_for_plaso.json

Kibana plaso Customize

残念ながらレポート生成機能や個別にブックマークするような機能はなさそうですので、ダッシュボードを適宜保存して出力画面を扱う、という使い方になりそうです。