SOARで処理をパラレルに動かしてみた

最初から最後までパラレルの場合

片方が最後までいっても、もう片方の処理が終わるまでプレイブックは動き続けます。

XSOAR – プレイブック実行中1

XSOAR – プレイブック実行結果1

最後に一つに集約される場合

両方の処理が終わるまで待ち、最後の1つを実行します。

XSOAR – プレイブック実行中2

XSOAR – プレイブック実行結果2

Power Automate(クラウド)とPower Automate for Desktop(PAD)を連携させ、Power Automateから入力したデータをPAD経由で SOAR の APIに渡してみた

以前、Power Automate(クラウド)から Power Automate for Desktop にてあらかじめ作成しておいた XSOAR のインシデント作成タスクを呼び出したことがありました。

しかしその時は、Power Automate(クラウド)から何もデータを渡していなかったので今回は、Power Automate(クラウド)から入力されたデータを基にXSOAR のインシデントを作成する形でタスクを呼び出してみました。

1.Power Automate for Desktopで変数などの準備

Power Automate(クラウド)からデータを受け取る場合、Power Automate for Desktop側であらかじめ入出力変数を設定しておかなければなりません。

そこで今回は以下の2つを入力用変数として作成しました。
・Detail
・Date

作成の方法ですが、Power Automate for Desktopのフロー作成画面に入ると右ペインに「入出力変数」の設定があるので、そこから「入力」を選択します。

Power Automate for Desktop – 入出力変数設定1

すると以下のようなポップアップが表示されるので、画面に表示されている項目を入力していきます。(変数名は「Detail」を設定)

Power Automate for Desktop – 入出力変数設定2

なお、これらの項目のうち、「外部名」に設定した値が、後からPower Automate(クラウド)で設定する際に設定画面に表示されます。

同様に「Date」という変数も設定したのが以下の状態です。

Power Automate for Desktop – 入出力変数設定3

この後、実際にXSOARのAPIを実行している設定(上記画面の「Webサービスを呼び出します」)を開いて、先ほど作成した変数を下図の赤線の通り設定します。

Power Automate for Desktop -「Webサービスを呼び出します」

なお、XSOAR上では、”test %Date%”がインシデント名、”Detail”がそのインシデントを開いた時の Detail の設定項目になります。

2.Power Automate(クラウド)でフロー作成

1.のPADの設定を行いセーブしたら(!)、Power Automate(クラウド)でのフローの作成に入ります。

フロー作成画面で”Desktop”で検索をかけると「Run a flow build with Power Automate for desktop」というアクションがあるので、それを選択します。

Power Automate(クラウド)1

そしてその設定画面を開くと、下図のとおり一番上に「Desktop Flow」という項目があるので、その下のプルダウンから、先ほどPAD上で作成したフロー名(ここでは「XSOAR連携 – データ受信」)を選択します。

すると、その下にある「Advanced parameters」のプルダウンを開いた際に、先ほどPADで設定した変数(外部名)が表示されるので、それぞれチェックボックスで選択します。

Power Automate(クラウド)2

そして、それそれの変数に対して渡したいデータをテキストフィールドに書き込んでいきます。

Power Automate(クラウド)3

ここでは「XSOAR Detail」には固定文字の”TEST”そ、「XSOAR Date」にはその時の日付を設定しています。

3.Power Automate(クラウド)のフローを実行

これで準備が整ったので、先ほど作成したPower Automate(クラウド)のフローを実行します。

Power Automate(クラウド)フロー実行1

どうやらうまくいったようなので、念のため、Power Automate(クラウド)のフロー実行結果を確認してみると、ちゃんと変数が設定されて正常終了しているようでした。

Power Automate(クラウド)フロー実行2

4.XSOAR側の処理状況を確認

その後、XSOAR側で正常にインシデントが登録されているか確認してみました。

するとインシデント名のところには赤線の通り、%Date%で渡した今日の日付の入ったものが登録されていました。

XSOARコンソール1

また、そのインシデントの中を見てみると、Detail の部分には%Detail%で渡した”TEST”という文字が登録されていることも確認できました。

XSOARコンソール2

SOARのVirus Totalコマンドで通信先のカテゴリが取得できるか確認してみた

XSOARに提供されている Virus Totalのコマンドをつかって通信先のカテゴリを調べるには以下のコマンドを使えばいいことがわかりました。

vt-search コマンド

このコマンドはPlaygroundにて以下のようにコマンドを実行します。

!vt-search query=<調査したいURL>

その結果、下図のようにカテゴリを取得することができました。

XSOAR – Playground

今回のURLについては、
・Forcepoint ThreatSeeker
・Sophos
・Xcitium
の3社からの報告が上がっているようですが、個人的にいくつかURLを調べてみたところ、Sophos が結構いろいろなURLに対して報告を上げているような気がします。

SOARからChatGPTにアクセスするインテグレーションをYoutubeを見ながら作成してみた

すでに XSOAR には ChatGPT にアクセスする為のインテグレーションがありますが、Youtube をみるとそれを自作する動画があったので、勉強の為、真似して作成してみました。

ただし、Youtube の動画のPythonをそのまま利用してもエラーがでてしまったので、ChatGPT と相談しながら修正しました。

それ以外の詳しい手順は以下のYoutubeをご覧ください。

XSOAR Integration Creation for CHATGPT to Answer Questions – PurpleXsec

1.BYOIボタンを押す

まず、XSOAR にログインし、左下の settingsメニューから Integrations – instances に進みます。

すると右上に「+BYOI」ボタンが表示されるので、それを押します。

2.Integration Settingsを設定する

「+BYOI」ボタンを押すと、右側に Integration Settings が表示されるので、その中の、

・BASIC
・Parameters
・Commands

などの設定を Youtubeを見ながら実施していきます。

3.Pythonコードをサイトからコピペする

Youtube の中に出てくるPythonコードは以下のGitHubで公開されていますので、これをコピーし、左側にデフォルトで提供されるPythonコードと置き換えます。

https://github.com/vidura-supun/XSOAR-CHATGPT-Integration/blob/main/ChatGPT.py

4.Pythonコードを少し修正する

GitHubからコピーしてきたPythonコードをそのまま利用すると後述の Integrationの接続テストの際に、以下のエラーが発生してしまいます。

Authorization Error: make sure API Key is correctly set (85)

どうやら ChatGPT APIにアクセスするための認証ヘッダーの定義が Youtube 公開当時から変わった?ようなので、22行目を以下の通り書き換えます。

変更前
self._headers = {'Authorization': self.api_key, 'Content-Type': 'application/json'}
変更後
self._headers = {'Authorization': f'Bearer {self.api_key}' , 'Content-Type': 'application/json'}

あとで調べたのですが、ChatGPT ではAuthorizationヘッダを用いた Bearer認証というものを利用しているみたいですね。(BASIC認証の親戚みたいな感じですね。)

5.テスト接続する

4.の修正後、Integration設定画面から「Test」ボタンを押すと、以下のとおり正常に接続することができました。

XSOAR – Integration設定画面

この後問題なく「user_question」コマンドを実行することもできました。

SOARと連携させるActive DirectoryをWindows Server 2019上に構築してみた

SOARへのログイン連携や、SOARからのユーザ情報問い合わせの為に、MacにインストールしたParalleles Desktop上にWindows Server 2019をインストールし、その上にActive Directory機能をセットアップしてみました。

SOARと連携に必要なWin2019作業

SOARのAD連携用のインテグレーションと連携させるには、Windows Server 2019上に最低限、以下の機能を構築する必要があることがわかりました。

・Active Directory ドメインサービスのインストール
・DNSサービスのインストール
・AD上でのドメインユーザの作成
・DNSサービスでの前方参照ゾーンの設定(DNSをADと一緒に作成すると自動的に作成される。)
・DNSサービスでの逆引き参照ゾーンの設定

AD上でのドメインユーザ作成

SOARと連携させる際の認証ユーザを以下の通り作成しました。

ADでのユーザ作成(Microsoft Windows Server 2019)

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接続できませんでした。

SOARでAutomationを作成する際のポイント(タスクのOutputsを設定する)

自分でAutomation(プレイブックのタスク)を作り始めて気になっていたのが、どうやってそのAutomationで作成した結果(Output)を次のAutomationに渡すのかということでした。

最初、私はAutomationの中で特定の関数を呼べば、それがOutputとしてXSOARの中で認識されるのではないかと考えていましたが、実はそれだけではなさそうです。

1.まずはAutomationの開発

開発とは書きましたが1からコーディングしたわけではなく、すでにシステムに組み込まれていた”IPToHost”というAutomationをベースにカスタマイズしました。

register_module_line('IPToHost_k2', 'start', __line__())

target1 = 'IP address'
target2 = 'Domain'

def output_ip(ip: str) -> CommandResults:
    output = {
        'IP': ip
    }

    md = tableToMarkdown('IP to Host', [output])

    return CommandResults(
        outputs=output,
        outputs_prefix='C2 Server',
        outputs_key_field='IP',
        readable_output=md,
    )


def main():
    value = demisto.args()['value']
    idx = value.find(target1)
    value = value[idx+10:]
    idx = value.find(target2)
    ip = value[:idx]
    ip.strip()
    return_results(output_ip(ip))


if __name__ in ('__main__', '__builtin__', 'builtins'):
    main()

register_module_line('IPToHost_k2', 'end', __line__())

データをOutputするときのコーディングのポイントは以下のとおりじゃないかと思っています。

・main()関数から、return_results()関数を呼んでいる
・return_results()関数の中で、outputs, outputs_prefix, output_key_fieldを定義し、CommandResultsとして返す

なお、参考にしたAutomationに”md”の設定があるのですが、いまいちなにしているのかわからず、そのままにしてあります。

しかしながら、このコーディングだけでは、プレイブックの中で作成したタスクからこのAutomationを呼んでも、Outputsの画面に”IP”が表示されることはありませんでした。

2.Hide Settingsの設定

上記の通りAutomationのコーディングはシステムで用意されているものと同じ書き方にしているのに、タスクのOutputsとして表示されないなーと悩んでいました。

そんなときに、ふとAutomationの開発画面の右上に「Settings」というものがあることに気がつきました。([Settings]を押した後なので、下の絵では[Hide Settings]になってますが。)

AutomationのHide Settings(XSOAR画面)

その中を見てみると、なんとOutputsの設定があるではありませんか!

おおー、こんなところに!ということでここに上記画面のとおり設定をしてみました。
すると以下の通り、このAutomationを呼び出しているタスクのOutputsの部分に”IP”が表示されました!

PlaybookのTaskからAutomationを呼び出し(XSOAR画面)

なお、Descriptionに設定した文字は”IP”の横の”?”マークにマウスを当てると表示されるようです。

あとはこの”IP”のOutputsを次のタスクの”ip”に以下の通り渡してあげるだけです。

PlaybookのTaskからAutomationを呼び出し(XSOAR画面)

“ip”の値として”${C2 Server.IP}”を設定していますが、”IP”の前に”C2 Server”がついているのは、Automationのコーディングにて”outputs_prefix=’C2 Server'”と記載したからだと思います。
(それ以外ではどこにも”C2 Server”とは記載していないので。。。)

3.プレイブックを実行してみる

そして実際にこのプレイブックを実行してみます。

タスク「IP Address Output」にてさきほどの”IPToHost_k2″というAutomationを呼んでいます。

プレイブック実行画面(XSOAR画面)

Inputとして与えた”value”に含まれるメールの文面”こんにちは IP…”の中から、IPアドレスである”8.8.8.8″を抜き出していることが分かります。(後ろに・・・と入っているので改行キーかなにかがくっついてしまっているようですが。。。)

そしてこのIPアドレス”8.8.8.8″をOutputsとして次のタスクである”AbuseIPDB Check”に渡して、AbuseIPDBにてこのIPアドレスに対する評価が取得されていることが確認できました!

プレイブック実行画面(XSOAR画面)

ここまでできたら、いろいろ可能性は広がってくる感じがしますね!

「PALO ALTO CORTEX XSOAR:A Practical Guide」はXSOAR初心者にやさしい唯一の本(だたし英語)

最近、XSOAR を触れる環境を手に入れたのですが、XSOAR については全くのど素人でしたので、右も左もわからない状態でした。

Youtube のXSOARに関するチャンネルをみたりもしていたのですが、そこで紹介されている手順が個人のPC環境ではなかなか手に入らない環境を前提としたものであり、実践が難しい状況でした。

そこで、参考になるものが他にないか探していたのですが、そんな中、英語ではありますが「PALO ALTO CORTEX XSOAR:A Practical Guide」という本がKindleで売られていることを発見しました。

まず本のサンプルでダウンロードしてみたところ、XSOAR 環境構築直後のコマンドラインやXSOARの中のPlaygroundを使った動作確認方法が書かれており、実際にそれを試したところ、コマンドの確認以上の効果を感じたので購入してみることにしました。

インシデントの取り込み方法をわかりやすく記載

SOARというとどうしてもPlaybookにフォーカスがあたりがちですが、この本ではそれを作成する前の

・マーケットプレイスからのインテグレーションの取り込み
・インテグレーションからインスタンスの作成
・インシデントタイプの作成
・データフィールドの作成
・分類(Classifier)やデータ・マッピング
・インスタンスへのインシデントタイプ、分類、マッピングの割当
・インシデントの取り込み

といったものが手順どおり1つ残らず記載されており、この通り進めていくだけで1〜日程度あればインシデントの取り込みまで完了することができます。

また当然ですが、上記以外にもPlaybookの作成やTIM(脅威情報マネジメント)の部分もしっかり書かれているようです。(まだ私はそこまでたどり着いていませんが。)

記載されている情報はやや古い

ただし、約1年前に発行された本のため、XSOAR ダッシュボードのGUIの記載については、ところどころ本の内容と実際の画面が異なっています。

もし上記の手順でひっかかってしまうことがあるとしたら、この画面の差異によるものかなと思います。

Gmail のフォルダからSpam報告メール取り込み

実際に私はこの本を見ながらXSOARでインシデント作成までの手順を実施してみましたが、XSOAR のインストールがすでに完了している状態だったので、半日かからずに完了することができました。

すこし手こずった部分があるとすると、先ほど触れた情報の古さの部分ですね。

また、私が英語を読み飛ばしてしまっただけかもしれませんが、ほんの一部、明確に記載がされていない部分があったようにも思います。

ただそれも、考えれば対応可能な範囲ですので概ね問題ないかと思います。

今後はこの本の後半戦の実践にチャレンジ

先ほど書いたように、私は今のところインシデントの作成の部分までしか読んで実践できていません。

これからもこの本を参考にしながら、そのインシデントをトリガとしたPlaybookの作成をしてみたいと考えています。