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をキーにアラートが出せそうです。

MISP にてIoCを集めてみたがダッシュボードのどこに記載されているかわかりにくかった件

諸事情により先日、MISP をインストールして画面を触ってみたのですが、ぱっと見、どこにIoCが格納されているのかわかりづらかったので、ここに記載しておきます。

1.イベントIDをクリック

MISPのトップページ(Home)にてEventリストが表示されていると思いますので、その項目の中からIoCを確認したいEventの「ID」をクリックします。

MISPダッシュボード1

このEventが個々の脅威と考えてようさそうです。

2.イベント画面を下にスクロール

Eventの「ID」をクリックするとそのEventの詳細情報が表示されますので、画面を下にスクロールさせます。

MISPダッシュボード2

3.IoCを確認

すると、マルウェアのハッシュや Virus Totalのレポートへのリンクと思われる情報を見つけることができます。

MISPダッシュボード3

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

紫陽花の季節限定 鎌倉建長寺で豪華な御朱印をいただいてきました

K2-ornataのkuroです。

先日、鎌倉へハイキングへ行ってきました。
北鎌倉の建長寺から出発する天園ハイキングコースですが、そこで紫陽花の季節限定の御朱印をいただいてきました。

鎌倉建長寺 季節限定の御朱印 見開きサイズ(1,000円)

見開きサイズにどーんと大きな紫陽花、紫色のグラデーションがとても素敵です。
お値段は1,000円と高めですが、このサイズでこの豪華さ、迷わず買ってしまいました。折れ曲がらないように台紙と一緒に紙の封筒に入れてくれたので、リュックの中でぐちゃぐちゃになることもなく持ち帰ることができました。

さっそく家に帰ってから紙でいただいた御朱印を自分の御朱印帳に貼りました。
最近は御朱印帳を持ち歩かなくても紙でいただけるところが増えてきて、少しでも荷物を減らしたいハイキングの時などはとてもありがたいです。
個人的には自分の御朱印帳に直接いただく方が特別感があってうれしいですが。。

Power Automate(無償版)で作成したフローを定期的に実行する

以下サイトを参考にさせていただき、Power Automate(無償版)で作成したフローをWindows のタスクスケジューラで自動起動させてみました。

参考サイト
[Power Automate Desktop]名前を指定してフローを実行するPowerShellスクリプト(初心者備忘録)
https://www.ka-net.org/blog/?p=13647

【DX】PowerAutomate Desktop無料版を自動定期実行してみた!(株式会社エアリー)
https://note.com/airily_inc/n/n6ab8b688d4ad?utm_source=pocket_saves

基本的に上記サイトのとおり実施すれば、Power Automateのフローを指定した時間や定期的に起動させることができますが、一点注意事項がありましたので記載しておきます。

外部入出力変数を設定している場合

フローに対して外部からデータを渡している場合、タスクスケジュールで Power Automateのフローを自動起動させたとしても、以下のように入出力変数の確認画面が表示され止まってしまいます。

Power Automate – 外部入出力変数

この回避のために入出力変数を機密情報扱いにしたり、ピン留めしたししてみましたがそれでは回避できないようです。

したがって、今のところ自動起動させたいフローがあった場合、入出力変数は使わない(直接アクションに埋め込むか、ファイルなどから読み込むか)ようにするしかないかと考えています。

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

Power Automate で Splunkの操作を自動化してみた

Power Automate のブラウザ操作機能で実際に Splunk のWeb画面をどこまで操作できるか試してみました。

試してみる前は Power Automateのレコーダー機能で何も考えずにできてしまうのではないかと楽観視していましたが、そうすんなりいかないことがわかりました。

ただし、コツさえつかめば比較的簡単に解決できるようなので、Power Automateはやはり自動化しやすいなという思いを新たに持ちました。

1.ブラウザ操作をレコーダーで記録

まずざっとPower AutomateのレコーダーでSplunkの操作を記録した結果は以下の通りです。

Power Automate – レコーダー記録直後

この中からまずは不要そうなアクションを削除します。具体的には赤枠でかこった部分が不要と思われる部分です。

2.とりあえず動かしてみる

不要そうなアクションを削除した後とりあえず動かしてみると、まず以下の赤枠で囲われた部分で処理がエラーになりました。

Power Automete – Error 1

3.エラー部分のUI要素を編集する

具体的には、ログの検索時間を「最新24時間」から「全時間」変えるところで失敗しています。

Splunk 自動化失敗箇所1

そこで、Power Automateの右端のアイコンメニューの内、上から2つ目の「UI要素」を選択し、「Anchor ‘全時間’」となっている部分を確認することにします。

Power Automate – UI要素

「Anchor ‘全時間’」部分から右クリックでメニューを表示させ、そこから「編集」を選びます。

Power Automate – UI要素 – 編集

すると以下の通り複数の要素が選択されている状態になっていますので、とりあえず一番したの「Anchor ‘全時間’」だけ選択された状態にします。

Power Automate – UI要素2

結果として下部の「セレクターをプレビューする」が「a[Text=”全時間”]」とシンプルな形になります。

Power Automate – UI要素3

これで保存すると、処理を流したときにうまく「全時間」を選択してくれるようになりました。

4.再度動かしてみる

そこで再度動かしてみましたが、今度はテキストフィールドを選択するところでエラーになりました。

Power Automate – Error 2

おそらくDiv の後ろの “id-“が動的なUI要素として生成されているからではないかと思われます。

5.エラー部分の動的なUI要素に対処する

具外的にはSplunk画面の以下の赤枠部分のテキストフィールド選択が失敗しています。

Splunk 自動化失敗箇所2

そこで、エラーが出ていたアクションの編集画面を右クリックで表示し、以下の画面のようにUI要素として「Text area ‘サーチ’」を選択します。

Power Automate – UI要素の変更

こうすることで以下のとおりアクションの表示が変わりますが、よく見てみると「Test area ‘サーチ’に”を入力する」となっており、テキストフィールドに入力したはずのSPL文が入っていません。

Power Automate – 入出力変数1

そこで右上の赤枠の通り、「入出力変数」から「入力」を選択し新しい入出力変数としてSPL文を設定しておきます。

Power Automate- 入出力変数2

この入出力変数(NewInput)を設定してくことで、下図の通り先ほどのアクションの編集画面から入力値として NewInput を選択できるようになります。

Power Automate- 入出力変数3

これで、NewInput の値を変えるだけで、いろいろなSPLを検索することができるようになりますね。

Power Automate – 完成

6.自動化成功

最終的に最後まで自動化した結果が以下の通りです。

Splunk自動化結果

SPL で表示した結果をCSV でローカルに保存するところまで自動化できました。

AbuseIPDBにアクセスするPythonプログラムを試してみた

ある理由から AbuseIPDB にIPアドレスを投げてその評価結果を受け取るPythonプログラムを作成しようと思いググったところ、以下のYoutube動画を見つけました。

AbuseIPDB API Python Script(Mostafa Yahia)

そこで真似して作成してみることにしました。

なお、上記動画で紹介しているPythonプログラムは以下のGitHubで公開されています。

https://github.com/Mostafayahia-hunter/AbuseIPDB-API-Python

だだし、最近、AbuseIPDBからのレスポンスが変わったのか、一部の箇所でエラーがでたので、csv_columnsの定義の部分を以下の通り書き換えました。(’isTor’を追加しました。)

csv_columns = ['ipAddress','isPublic','ipVersion','isWhitelisted','abuseConfidenceScore','countryCode','usageType','isp','domain','hostnames','isTor','totalReports','numDistinctUsers','lastReportedAt']

また、Pythonプログラム実行時に要求される IPリストとして入力するcsvファイルとしては、以下のような内容を用意しました。

IP,
88.29.56.3,
1.158.10.11,
161.35.146.242,
177.84.141.183

そしてコマンドプロンプト上で実行した結果がこちらです。

Python実行画面

実行するとAbuseIP_results.csvというファイルが出来上がっており、それを開いてみた結果は以下の通りです。

Python実行結果

プログラムをいろいろいじってみて CSVライブラリの使い方あたりがとても勉強になりました。

Power AutomateからVirus Total にアクセスするPythonを呼び出して入力したサイトの安全性を確認してみた

最近、Power Automateをいろいろといじり始めていますが、今回は、Power Automateから Virus TotalにアクセスするPythonプログラムを呼び出してみましたので、そのときの設定を記録しておきます。

なお、処理の流れは以下の通りです。

1.入出力変数(NewInput)にVirus Totalで評価するURLを設定
2.NewInputの内容をinput.txtに書き込み
3.Virus TotalにアクセスするPythonプログラムを呼び出し
  (input: input.txt, output:output.txt, scan_result.json)
4.Virus Totalでの評価結果をoutput.txtファイル等から読み込み
5.Gmailをつかって評価結果をメール送信

Power Automate全体フロー

以下、フローを作成していて苦労した点を少し説明していきます。

2.NewInputの内容をinput.txtに書き込み

Power Automateの機能メニューから「テキストをファイルに書き込む」を選択した際に、エンコードがデフォルトでUTF-8になっていましたが、それだとなぜが Pythonで読み込んだときに半角が全角になってしましいました。

そこでエンコードの設定を「UTF-8」から「システムの規定値」に変えたところ、半角のままpythonで処理することができました。

Power automate – テキストをファイルに書き込む

3.Virus TotalにアクセスするPythonプログラムを呼び出し

正直このPythonプログラムは ChatGPTにお願いして大部分を作成してもらいました。

手直ししたのは、「json_response[‘positives’]」を「json_response[“positives”]」を書き換えたくらいです。

あとはそのまま動いてくれました。

import requests
import json

# VirusTotalのAPIキーを設定します。
api_key = 'virus totalのapiキーをここに設定'

# VirusTotalのURLスキャンAPIエンドポイントを設定します。
url_scan_endpoint = 'https://www.virustotal.com/vtapi/v2/url/scan'

# ファイルを読み込みモードで開きます。
with open('c:\\tmp\\input.txt', 'r') as file:

# ファイルから文字列を読み込み、調査したいURLを設定します。
url_to_check = file.read()
print(url_to_check)

# APIリクエストのパラメータを設定します。
params = {'apikey': api_key, 'url': url_to_check}

# URLスキャンAPIにリクエストを送信します。
response = requests.post(url_scan_endpoint, data=params)

# レスポンスをJSON形式で取得します。
json_response = response.json()

# スキャンIDを取得します。
scan_id = json_response["scan_id"]

# VirusTotalのURLレポートAPIエンドポイントを設定します。
url_report_endpoint = 'https://www.virustotal.com/vtapi/v2/url/report'

# APIリクエストのパラメータを設定します。
params = {'apikey': api_key, 'resource': scan_id}

# URLレポートAPIにリクエストを送信します。
response = requests.get(url_report_endpoint, params=params)

# レスポンスをJSON形式で取得します。
json_response = response.json()

# URLが安全かどうかを判断します。
if json_response["positives"] > 0:
    text_to_write = 'The URL is not safe.'
else:
    text_to_write = 'The URL is safe.'

# ファイルを書き込みモードで開きます。
with open('output.txt', 'w') as file:
    # 文字列をファイルに書き出します。
    file.write(text_to_write)

# レスポンスをファイルに保存します。
with open('scan_result.json', 'w') as outfile:
    json.dump(json_response, outfile)

5.Gmailをつかって評価結果をメール送信

ここでは、Gmailサーバにアクセスする為のポート番号の設定や、2段階認証していたのでアプリパスワードの設定に少してこずりました。

2段階認証設定をしているGoogleアカウントにプログラムからアクセスするには、アプリパスワードを使いましょう

Power Automateから2段階認証を行なっているGmailのメールサーバ経由でメールを送信する場合、Gmail で使っている通常のパスワードではなく、Googleからアプリパスワードを取得する必要があります。

ここでは、そのアプリパスワードの取得方法を記載しています。

1.Googleアカウント画面を表示する

Googleのサイト(https://www.google.com/)にアクセスすると、右上に自分のアイコンがありますので、それをクリックします。

クリックすると「Googleアカウントを管理する」というボタンが表示されるので、それをさらにクリックします。

googleサイト

すると、「Google アカウント」という画面が表示されますので、その画面の左メニューから「Security」をクリックします。

google account

セキュリティ画面に移ると、2段階認証の設定項目がありますので、それをクリックします。

google security

2段階認証の画面に移ったら、ページを一番下までスクロールさせると「アプリ パスワード」の設定項目がありますので、それを再度クリックします。

Google – 2Step Verification

アプリ パスワードの画面の下側でパスワードを利用する「アプリ」と「デバイス」を選択し、「生成」ボタンを押します。

Google – Application password

するとアプリ パスワードが生成されますので、これをGmailにアクセスさせるアプリに設定します。

Google – Application Password