AWS
Splunk
GuardDuty

Amazon GuardDutyのイベントをSplunkで検索・可視化

re:Invent 2017で発表されたGuardDutyですが、Splunkでそのデータを取り込んで分析できるとのことなので、さっそく試してみました。

記事(英語)
Splunk Announces New Integrations With Amazon Kinesis Firehose and Amazon GuardDuty

Amazon GuardDutyって?

Amazon GuardDuty – 継続したセキュリティ監視と脅威の検知

(抜粋)

GuardDutyは 脅威情報を含む複数のデータストリームから、悪意のあるIPアドレス、デバイスドメインを認識し、あなたのAWSアカウントで悪意のある、もしくは不正な行動があるか特定するために学習します。VPC Flow Logs、CloudTrail のイベントログ、DNS ログを集め組み合わせることにより、GuardDuty は非常に多くのことなったタイプの危険性のある、悪意のある行動を検知します。

なるほど、AWSリソースの脅威を機械学習で発見するんですね。

Splunkって?

https://www.splunk.com/
ログ分析のソフトウェア。
あらゆるマシンデータをインデックスして検索や可視化、アラート通知や分析ができるっていう優れモノ。

設定してみた

5つのステップで設定できます。
1. SplunkにAppインストール
2. Splunk HTTP Event Collector有効化
3. Amazon GuardDuty有効化
4. AWS Lambdaでテンプレから関数作成
5. AWS CloudWatchでGuardDutyとLambdaを設定したルールを作成

ということで、設定方法を書いていきます。

Splunk設定

まずはデータの受け口であるSplunkの設定から
App入れてHTTP Event Collector (HEC)有効化するだけです。

Appインストール

このApp↓をSplunkインスタンスにインストールしましょう。
AWS GuardDuty Add-on for Splunk

(補足)Appインストール方法

Splunkにログインした後、左側のメニューにある歯車アイコンをクリック
Screen Shot 2017-12-14 1.31.38 PM.png

上記リンク先からAppをダウンロードして ファイルからAppをインストール からインスコ、もしくは、 他のAppを参照 からGuardDutyを検索してインスコ
Screen Shot 2017-12-14 1.35.35 PM.png

データ入力設定

Appインストール完了後、ログイン後のトップ画面に aws_guardduty というAppが追加されています。
Screen Shot 2017-12-14 1.38.53 PM.png

早速 aws_guardduty に移動
Screen Shot 2017-12-14 1.41.51 PM.png

まだ何もデータが入ってきていない状態なので、データ受け取りとしてHTTP Event Collectorを設定します。

右上の 設定 から データ入力 をクリック
Screen Shot 2017-12-14 1.42.50 PM.png

HTTPイベントコレクタ をクリック
Screen Shot 2017-12-14 1.44.07 PM.png

別の記事でHECの設定方法は書いたので、これ以降の手順は割愛します。こちらを参照ください。
https://qiita.com/kikeyama/items/515d65906537239e04d2#splunk%E3%81%AE%E8%A8%AD%E5%AE%9A

(注意)ソースタイプは aws:cloudwatch:guardduty を選択してください。

設定後のトークンはどこかにコピペしておいてください。

GuardDuty設定

AWSコンソールからAmazon GuardDutyに行って有効化。

今すぐ始める をクリック
Screen Shot 2017-12-14 1.15.38 PM.png

GuardDutyの有効化 をクリック
Screen Shot 2017-12-14 1.16.47 PM.png

GuardDuty設定は完了
Screen Shot 2017-12-14 1.20.55 PM.png

今はまだ空っぽですけど、とりあえずGuardDutyの設定はこれでおしまいです。

Lambda設定

まずは 関数の作成
これでSplunkにHTTPでイベントをPOSTするインターフェースを作ります。
Screen Shot 2017-12-14 1.49.39 PM.png

設計図 (Blueprints) を選択して、検索画面に splunk と入力して検索
Screen Shot 2017-12-14 1.51.43 PM.png

Splunk Logging を選択
Screen Shot 2017-12-14 1.53.08 PM.png

下にスクロールすると環境変数の設定があるので、こちらにSplunkのHECエンドポイントURLとトークンを設定
Screen Shot 2017-12-14 1.58.09 PM_mosaic.png

で、名前をつけて保存

その後、作成した関数を編集して sourcetype の値を aws:cloudwatch:guardduty に上書き

index.js
    // Advanced:
    // Log event with user-specified request parameters - useful to set input settings per event vs token-level
    // Full list of request parameters available here:
    // http://docs.splunk.com/Documentation/Splunk/latest/RESTREF/RESTinput#services.2Fcollector
    logger.logEvent({
        time: Date.now(),
        host: 'serverless',
        source: `lambda:${context.functionName}`,
        sourcetype: 'aws:cloudwatch:guardduty',
        event: event,
    });

CloudWatch設定

ルールを一個作りましょう
Screen Shot 2017-12-14 2.08.15 PM.png

サービス名は GuardDuty 、ターゲットは Lambda関数 から、先ほど作成したLambda関数を選択
Screen Shot 2017-12-14 2.09.28 PM.png

あとは名前をつけて保存

以上、すべての設定は完了!

GuardDutyイベントを検索

ということで、しばらく待つとGuardDutyデータがSplunkにインデックスされてきました。

Screen Shot 2017-12-14 2.16.08 PM_mosaic.png

ダッシュボード

GuardDuty Appには既成のダッシュボードがあるようです。

GuardDuty Examples からダッシュボードに移動してみましょう
Screen Shot 2017-12-14 2.19.22 PM.png

Screen Shot 2017-12-14 12.42.27 PM.png

早速脅威が検知されてしまったみたいですね・・・。
比較的シンプルなダッシュボードですが、可視化やモニタリングには十分かな、と。
運用してみて足りない部分は自前でダッシュボード作ってみよう。

最後に

どうやらダッシュボード内のテーブルをクリックすると、Splunk App for AWSにドリルダウンできるようです。

Kinesis FirehoseからSplunkにデータを流せるとのことですし、せっかくなので近日中にこのAppも設定してみて記事を書いてみようかなと思います。