Splunk Addon BuilderでSplunk からShodanのREST API にアクセスするAddonを作ってみた

Splunkbase に Shodan へのアクセスする為にaddon がなかったので、インターネットの情報を見ながら Splunk Addon Builder を使って作ってみました。

REST APIへのアクセスし定期的にデータを取ってくるだけであれば30分くらいで作成できたので共有しておきます。

1.新しいAddonの作成

Splunk Addon Builderの画面から「New Add-on」を選択します。

Splunk Addon Builder

すると以下の画面が表示されるので、「Configure Data Collection」を選択します。

Splunk Addon Builder

次にAddonの名前を決めます。

Splunk Addon Builder

そしてデータのインプット方法を聞かれるので左端の「REST API」を選択します。

Splunk Addon Builder

次に、sourcetypeなどを設定していきます。

Splunk Addon Builder

そして、REST APIでどんな情報をサーバに投げてデータをGETするかを設定します。

ここではサンプルとして2つ記載しておきます。

(1)指定したIPアドレスの情報を取得するサンプル

https://api.shodan.io/shodan/host/8.8.8.8?key=(API Kye)
Splunk Addon Builder

(2)ポート22が空いている日本のドメイントップ100を取得する場合

https://api.shodan.io/shodan/host/count?key=(API Key)&query=port:22 country:JP&facets=domain:100
Splunk Addon Builder

「テスト」ボタンでデータが正しく取得できることを確認したが、「保存」ボタンを押します。

この後、Splunkの再起動を手動で行う必要がありますので注意してください。

ちなみに私の環境(Mac)では以下のコマンドでSplunkの再起動を行いました。

/Applications/Splunk/bin/splunk restart

2.新しいインプットの作成

「Create New Input」ボタンを押し、入力の名前やデータ取得間隔をあらためて設定します。(なぜあらためて入力させているのかは不明。。。)

Splunk Addon Builder

3.サーチの実行

すると指定した間隔でデータを取得してくれるので、トップのメニューバーから「サーチ」を選択し、以下のようなサーチ文を入力します。

sourcetype="shodan-ssh"
| table facets.domain{}.value, facets.domain{}.count

すると定期的に取得したデータを元に以下のような検索結果を表示してくれます。

Splunk 新規サーチ画面

参考サイト:

・SplunkのAdd-on Builderで自前のアドオンを作成してみる(REST API編)-クラスメソッド株式会社-(https://dev.classmethod.jp/articles/splunk-add-on-builder-rest-api/)
・Shodan API Reference – Shodan- (https://developer.shodan.io/api)

Virus TotalのSplunk用Addonであるvt4splunkを使ってみた(IPアドレス編)

Virus TotalのSplunk用Addonであるvt4splunkを使ってみたのでここに記録しておきます。

vt4splunkにIPアドレスを直接渡す

vt4splunkをSplunkにインストール後、Search画面から以下のコマンドを打つと、testipで指定したIPアドレスに対する Virus Totalでの評価結果を検索結果の一部として表示することができるようになります。

| makeresults
| eval testip="8.8.8.8"
| vt4splunk ip=testip
Splunk サーチ実行結果1

念のため、Virus Totalでも 8.8.8.8 の評価結果を確認したところ、上記と同じく2/88という結果が得られました。

Virus Total

vt4splunkに検索結果を渡す

なお、上の方法を応用し、以下のようにあるsourcetype で httpの通信が 400(Bad Request)であったログを検索し、その検索結果の中の”dest_ip”をIPアドレスとしてvt4splunkに渡すことも可能でした。

sourcetype="stream:http" status=400
| vt4splunk ip=dest_ip
| table _time,dest_ip, vt_detections,vt_total_engines,vt_reputation,vt_info

なお、この実行結果は以下の通りです。

Splunk サーチ実行結果2

<参考文献>

hiro_ さんのツイート(https://twitter.com/papa_anniekey/status/1593064221235097600)

MISP と Splunk をREST APIで連携させて、特定のイベントのMD5をSplunk上に表示させてみた

MISP で集めたIoCをうまくSplunkで活用できないかと思い、まずはSplunk上で MISP からとってきた特定イベントの IoC(MD5)を表示させてみました。

なお、これから説明する手順の前準備として、SplunkとMISPを連携させる為に、MISPのApp(MISP42)をSplunkにインストールしています。

1.MISPのインスタンスを作成

MISPのAppのメニューバーから「設定」を選択後、「追加」ボタンを押します。

Splunk – MISP42 App

すると以下の設定画面が表示されますので、MISPの「URL」「API Key」を設定します。

なお「Check MISP Certificate」のチェックは今回テスト利用の為、外しておきました。

Splunk – MISP42 App

2.MISPのイベントIDを検索

MISPのAppのメニューバーの「MISP CUSTOME COMMAND」のプルダウンから「MISP custome command mispgetioc」を選択すると以下の画面が表示されます。

今回は赤枠の「misp instance」「eventid」「タイプ」を設定し「実行」ボタンを押してます。

Splunk – MISP42 App

すると画面の下の方に検索結果が表示され、MISP と同じ情報が表示されていることが確認できました。

Splunk – MISP42 App

これとSplunkのログを突き合わせることができれば、悪性のIoCをキーにアラートが出せそうです。

Splunkのlookupファイルの内容を表示させてみた

Splunk に入っている lookupファイルの中身の確認の仕方がわからなかったので、操作方法を確認してみました。

1.設定からルックアップを選択

メニューバーの「設定」から「ルックアップ」を選択を選択します。

Splunkコンソール1

2.ルックアップテーブルファイル

すると以下の「ルックアップ」画面が表示されるので、その中から「ルックアップテーブルファイル」を選択します。

Splunkコンソール2

3.ルックアップファイル名の確認

後ほどSPL言語で中身を表示させるルックアップファイルのファイル名を確認しておきます。(ここでは、「miter_techniques.csv」)

Splunkコンソール3

4.Search & Reporting Appを選択

画面左ペインから「Search & Reporting」Appを選択します。

Splunkコンソール4

5.lookupファイルの内容を表示

サーチ用のテキストフィールドから以下のコマンドを入力し、ルックアップファイルの内容を表示させます。

| inputlookup mitre_techniques.csv
Splunkコンソール5

SplunkのSPLで検索対象とするログの時間帯を指定する

Splunkでログを検索するときに、検索フィールドの横にある選択リスト?から対象となるログの時間帯を選ぶことが多いですが、SPLで直接指定する方法もあると思い調べてみました。

以下のように記載すると、10年前から1年前までのログを検索してくれるようです。

index=botsv1 earliest=-10y@y latest=-1y@y

なお、以下のように記述すると、統計的に20件以上発生しているsrc_ip をトップから表示してくれます。

index=botsv1 earliest=-10y@y latest=-1y@y| top limit=20 src_ip

また table を利用すると項目を絞って(以下の例の場合、_time, app, dest_ipのみ)ログを表示してくれます。

index=botsv1 earliest=-10y@y latest=-1y@y
| table _time, app, dest_ip

Splunk FreeにSecurity EssentialのAppをインストールしてみた

現在、私は自分のPC(Mac)にSplunk Free(フリーライセンス)を入れています。

そこにEnterprise Securityを入れてみたかったのですが、それはSplunkの有償ライセンスを購入していないと無理みたいなので、その一部の機能が含まれていると思われるSecurity Essentialをインストールしてみました。

1.他のAppをサーチ

まずSecurity EssentialのAppを探す為、Splunk Freeのトップページから「+他のAppのサーチ」を選択します。(以下の画面については、Security Essentialを入れたあとで撮ったので、もうSecurity Essentialが入ってますが。)

Splunk Free

するとAppを検索する画面が出てきますので左上の検索窓から「Security Essential」と入力し検索します。

Security Essentialを検索

するとSecurity Essentialが表示され「インストール」ボタンを押せば入手できそうですが、Splunk Freeの場合、これではインストールできません。(上の画面ではすでにSecurity Essentialが入っているので「アプリを開く」になってます。)

そこで、Security Essentialの枠の下部にある「Splunk Base上で閲覧」のリンクをクリックします。

2.Splunk BaseからSecurity Essentialのtgzをダウンロード

するとSplunkサイトのSplunk Base上でSecurity Essentialのページが開くので、その右下の方にある「Login T0 Download」ボタンからSplunkサイトにログインすれば、「splunk-security-essentials_XXX.tgz」というtgzファイルがダウンロードできます。

Splunk Base

Splunk FreeがインストールされているPCにそのtgzファイルをダウンロードしましょう。

3. tgzファイルの取り込み

ダウンロードしたtgzファイルをSplunk Freeに取り込むには、Splunk Freeのトップ画面の左上にあるギアのアイコンマークをクリックします。

Appの管理

すると以下のようなApp管理画面が表示されますので、その右上にある「ファイルからAppをインストール」というボタンをクリックします。

App管理画面

ボタンをクリックすると以下の画面が表示されますので、Security Essentialのtgzファイルを選択して「アップロード」ボタンを押します。

Appのアップロード

4.Splunkの再起動

アップロードした後はSplunkの再起動を促す画面が表示されますので、そこで「今すぐ再起動」のボタンを押してSplunkを立ち上げ直すと以下の通りSecurity EssentialのAppがSplunkのトップ画面に表示されます。

もし再起動されない場合には、以下のコマンドを打って再起動させます。(Mac OSの場合)

/Applications/Splunk/bin/splunk restart
Security Essentialが表示された状態

Security EssentialではMITERのATT&CKから各TTPsに対応する相関ルールを選択できたり、リスクベースアラート(RBA)などの仕組みが備わっているようですので、これから使いながら勉強していきたいと考えています。

Splunk CloudのトライアルにてREST APIが本当に利用できないのか確認してみた

某SOAR製品の動作確認としてSplunk CloudとREST API連携できるか確認したかったので、無理かもしれないと思いながら、一応、Splunk Cloudのトライアルを申し込んでみました。

1.Splunk Cloudのトライアル申し込み

Splunk Cloudのトライアルを申し込むには、以下のSplunk社のサイトでアカウントを作成し、ログインする必要があります。

ちなみにアカウントを作成するとSplunk社から電話がかかってくることがありますのでご注意。(笑

https://www.splunk.com/

私の場合はSplunk Enterprise(オンプレ版)でアカウントを作成していましたので、そのアカウントでログインしました。

そして、Splunk Cloudトライアルの申請です。

Splunk 社のサイトにログインすると、サイトの右上に「Free Splunk」というボタンが出ていると思いますので、それをクリックするとトライアルの申請画面が表示されます。

Splunk Free Trial画面(Splunk社)

ここから申請することで14日間のトライアルができます。(ちょっと短いですね。)

なお、申請を行うとトライアルのURLやログインアカウントが記載されたメールがSplunk社から届きます。

Splunk社からのメール

このメールに従ってURLにアクセスすれば、Splunk Cloudが利用できるようになります。

Splunk Cloud ログイン直後(Splunk画面)

2.REST API(ポート:8089)を試してみる

事前にSplunk社に申請しておかないとSplunk CloudではREST APIの利用ができないという記述は読んでいたので無理だろうと予測はしておりました。

しかしながら念のため、某社SOAR製品から接続できないか試してみました。

結果としては予想どおり接続できませんでした。

テスト接続してみたところアイコンがくるくる回ってしばらく返ってこなくなりました。(20秒くらいしか待ってませんが。。。)

SOAR製品からSplunk Cloudへの接続試行(XSOAR画面)

ちなみに上記の某社SOAR製品では接続する為のアドレスがHost IPとなっておりIPアドレスしか記述できないようなので、Splunk 社から連絡のあったURLを nslookup してIPアドレスを調べ、入力しています。

また、Portについてはデフォルトで8089になっていましたので、そのまま使いました。(このポートで正しいことは後述の資料から確認できます。)

3.Splunk社の情報を再度確認してみた

今更かという感じもしますが、Splunk 社サイトの情報やコミュニティの情報を確認したところ、以下のサイトにSplunk CloudのREST APIに関する記述が掲載されていることが確認できました。

https://docs.splunk.com/Documentation/SplunkCloud/latest/Admin/
Splunk CloudのREST API情報

上記の通り「REST APIを利用するにはサブスクリプションが必要」と書かれていますので、Splunk Cloudの契約が必要ということですねー。個人ではとても無理です。。

なお、一番最後の記述をみると、REST APIにアクセスするときのポート番号は 8089となっているので、REST APIに接続する為のポート番号は8089で間違いなさそうです。

4.個人でREST API接続確認可能なのはSplunk Enterprise 評価版のみ?

ちゃんと試していませんが、どうしても無料でSplunkとのREST API接続確認をしたい場合は、Splunk Enterpriseの無料トライアル期間に試すしかないのではないかと思われます。

これについては私も試したことがありませんので実際できるかどうか分かりません。

ちなみにSplunk Enterpriseの無償トライアル期間が過ぎるとフリーライセンスにするしかなく、アカウントが無くなる(Splunkを起動すると自動ログインされる)ので?、某SOAR製品からREST API接続できませんでした。

Splunk基本操作を確認してみた(フィールドの抽出と指定フィールドの表示)

久しぶりにSplunkについて考えることがあったのですが、ふと、Splunk に入っているログを検索して、指定したフィールドのみ画面に表示させることができるのか確認したいとおもったので実際にやってみました。

最初は fields というコマンドを利用すればできるんじゃないかなと思いましたが、実はそれでは思ったとおりにはならず、table を使うことで実現できることが分かりました。

1.フィールドの抽出

Splunk に取り込まれているログに対してフィールドを抽出(指定と言ったほうがわかりやすい?)するには、以下の手順で行います。

1-1. 任意のログを検索し、フィールドの抽出を開始

フィールドを抽出したいログを検索し、表示されたログの左端にある”>”のマーク(クリックすると下向きになる)をクリックします。

その後、「イベントアクション」のプルダウンから「フィールドの抽出」を選択します。

ログの検索とフィールド抽出ウィザード開始(Splunk画面)

1-2. フィールドの抽出方法として「正規表現」を選択

特定の場所だけ抽出したい場合は「正規表現」が良いと思われます。

抽出方法を選択(Splunk画面)

1-3. フィールドの選択

画面に表示されたサンプルログからフィールドとして抽出したい場所をマウスで選択し、「フィールド名」を設定後、「Add Extraction」ボタンを押します。

フィールドの選択と名前の設定(Splunk画面)

1-4. フィールド抽出状況の確認

「Add Extraction」ボタンを押すと各ログに対する抽出結果が表示されます。

通常は問題ないと思いますが、もし適切に抽出されていない場所があれば、抽出結果の右に表示される”×”を押せば、除外してくれるのではないかと思います。

フィールド抽出状況の確認(Splunk画面)

1-5. フィールド抽出設定の保存

最後に設定を確認し「終了」ボタンを押せばフィールドの抽出は完了です。

フィールド抽出設定の保存(Splunk画面)

2.検索結果をfieldsコマンドに渡してみる

それでは先ほど抽出した「dst_ip」フィールドを利用し、検索結果を編集してみます。

まずは、検索結果について”|”を利用して fields コマンドに渡した場合です。
実行したSPL文は以下の通りです。

sourcetype="fgt_traffic" 
| fields src_ip, dst_ip

そして以下が実行結果です。
見ての通り、ログの表示部分にはすべてのログが表示されたままになっています。
変わったのは、左ペインのフィールド名のリストが fieldsで指定した”src_ip”と”dst_ip”になっただけです。

fields による検索結果の編集(Splunk画面)

たしかに fields で指定しないとたくさんのフィールド名が表示されてしまうので、必要はフィールドだけリストに表示したいという場合は便利なコマンドですね。

3.検索結果をtableコマンドに渡してみる

そして次にtableコマンドに渡してみました。実行したSPL文は以下の通りです。

sourcetype="fgt_traffic" 
| table src_ip, dst_ip

そしてこれが実行結果です。
そう、私がやりたかったのはこれです。指定したフィールドの情報だけSplunkの画面に表示させることができました。

table による検索結果の編集(Splunk画面)

なお、fields と table の実行結果を眺めていてふと気がついたのですが、よくみるとサーチ文の下のメニューが fields の場合は「イベント」、table の場合は「統計情報」となっていますね。

久しぶりにSplunkをさわったら、REST APIを使ったサーチもしてみたいなという欲求が出てきたので、また機会を見つけてやってみたいと思います。

Splunk基本操作を確認してみた(ソースタイプの削除)

先日、SplunkにSnort3のログを取り込んでみた際に、新しいソースタイプを(Snort3)を作成しましたが、それを削除する方法を記載しておきます。

https://k2-ornata.com/splunk_mac_log_import/

1.メニューバーから設定のプルダウンを表示

Splunk画面の上部にあるメニューバーから「設定▼」をクリックするとプルダウンメニューが表示されます。

その中に「データ」カテゴリの中に「ソースタイプ」がありますので、それをクリックします。

Splunk – 設定のプルダウンメニュー

2.自分の作成したソースタイプを表示

1.で「ソースタイプ」を選択するとSplunkに登録されているソースタイプの一覧が表示されます。

ここから、上部にあるフィルタを利用して自分の作成したソースタイプを表示させます。

Splunk – ソースタイプ一覧画面

3.ソースタイプの削除

ここではSnortでフィルタた結果を表示しています。

自分の作成した「Snort3」および「Snort3-2」は、アクションとして「削除」ができるようになっていますので、「削除」をクリックします。

Splunk – ソースタイプのフィルタ

「削除」をクリックすると以下のポップアップが出ますので、再度、「削除」を押すとそのソースタイプを削除することができます。

Splunk – ソースタイプの削除確認画面

以上、基本的な操作になりますが、参考になれば幸いです。

SplunkにMac上のログを取り込んでみた

先日、Splunk上でSnort3を動作させ、ネットワークのログを取得してみました。その時の記事は以下の通りです。

https://k2-ornata.com/snort3_on_mac_install/

そこで今回はこのSnort3のログをSplunkに取り込んでみたいと思います。なお、SplunkはSnort3と同じく私のiMacにあらかじめインストールしてあります。

1.データの追加

おそらくSplunk起動直後は以下のような画面が表示されているはずですので、右ペインから「データの追加」を選択します。

Splunk スタート画面

2.データ入手方法の指定

1.の画面から「データの追加」を選択すると以下のような画面が表示されますので、最下部からデータの入手方法を指定します。

今回はMac上で生成されたログなので「モニター」を選択しました。

Splunk ログの入手方法指定

3.ソースの指定

次にSplunkに取り込むソース(ファイルとディレクトリ)を具体的に指定します。

今回は左のペインから「ファイルとディレクトリ」を選択し、右のペインで取り込むデータの「ディレクトリとファイル名」を選択します。

また、今回は一時的に作成したデータなので、「1回インデックスを作成」を選択しました。

選択が終わったら上部の「次へ」ボタンを押します。

Splunk ソースの指定画面

4.ソースタイプの指定

ソースを指定するとデータの取り込みイメージが表示されますので、左のペインからソースタイプを指定します。

なお、同種のソース(例えばサーバAのsyslogとサーバBのsysylogなど)は取得する場所は異なっても、同じソースタイプにしておくと良いと思います。

今回はSnortのログなので対応するソースタイプとして「Snort3」を新規に作成しています。(以前作っていたので、以下の画面ではプルダウンから選択していますが。。。)

Splunk ソースタイプの指定

5.ホストの指定

次に以下の画面が表示されますので、真ん中あたりの「ホストフィールド」の値を確認し、問題なければ上部の「確認」を押してください。

Splunk ホストの指定

6.取り込みデータの確認

最後にこれまでの設定の確認画面が表示されますので、設定内容に問題ないことを確認し、上部の「実行」を押します。

Splunk データ取り込み確認画面

データの取り込みが正しく行われると、以下の画面が表示されますので「サーチ開始」を押します。

Splunk データ取り込み直後の画面

7.データサマリーの確認

なお、1.の「Splunk スタート画面」の左ペインのAppリストから「Search&Reporting」を選択し、先ほど取り込んだデータを含めたデータサマリーを確認することができます。

「Search&Reporting」を選択すると以下の画面が表されますので、「データサマリー」ボタンを押します。

Splunk サーチ画面

すると以下のデータサマリー画面が表示されますので、その中から「ソース」のタブを選択すると、先ほど選んだファイルが登録されていることが確認できます。

Splunk データサマリー画面

以上、Splunkにデータを取り込む際の流れを記載させていただきました。

ご参考

できればこの作業を行う際に、上の図のタブとして表示されている「ホスト」「ソース」「ソースタイプ」の意味を理解しておくことをお勧めします。

なお今回の場合は、ざっくり記載すると以下の認識になるかと思います。

ホスト・・・取り込んだデータを生成したサーバ(今回は私のiMac)
ソース・・・取り込んだデータが置かれていたディレクトリとファイル名(今回はSnortの出力ファイル)
ソースタイプ・・・取り込んだデータのファイル形式(今回はSnortのファイル形式)