IBM TechXchange Japan QRadar User Group

 View Only

QRadar SOAR: LDAP呼び出しプレイブックの例

By Katsuyuki Hirayama posted Sat November 04, 2023 03:19 AM

  

はじめに

このブログに含まれているプレイブックは、QRadar SOARPlaybook Designer機能で作成しています。Playbook Designerの操作イメージについては、関連ブログである「QRadar SOAR による GUI ベースのプレイブック開発の概要」をご覧ください。

トップに戻る

プレイブックの例:アーティファクトからLDAP検索を呼び出す

最も簡単なLDAP呼び出しの例は、既に「QRadar SOAR による GUI ベースのプレイブック開発の概要」にて説明していますので、今回は内容を少し拡張して、アーティファクトからLDAP検索を行い、結果を「ヒット」として記録する例をご紹介します。

トップに戻る

プレイブックの全体像

プレイブックの全体像は以下のとおりです。

トップに戻る

プレイブックのトリガー

 

  • アクティブ化のタイプ:手動
  • オブジェクト・タイプ:アーティファクト
  • アクティベーション・フォーム:なし
  • 条件

    • [タイプ]  [以下のいずれかがある]  [ユーザー・アカウント]
  • 自動キャンセル:なし

 

トップに戻る

関数呼び出し(LDAP Utilities: Search)

  • 関数の出力
    • 出力名:output
  • 関数の入力:フィールド指定

フィールド名

タイプ

注釈

ldap_search_base

TEXT

dc=ibmtechnologyshowcase,dc=com

The base of the LDAP search request

ldap_search_filter

TEXT

(&(objectClass=person)(cn=*%ldap_param%*))

The filter of the LDAP search request

ldap_domain_name (optional)

TEXT

Domain1

アプリのapp.configで指定したLDAPサーバー定義の名前

ldap_search_attributes (optional)

TEXT

*

A single attribute or a list of attributes to be returned by the LDAP search

ldap_search_param (optional)

TEXT

artifact.value

Parameter used in search filter
※スキーマからアーティファクトの値(value)を選択

ldap_search_cookies (optional)

TEXT

<ブランク>

Search cookies from last paged search

スキーマからの入力は、目的のフィールド名の右にあるツリー図のアイコンをクリックし、対象となる入力元フィールドの横にあるプラス(+)をクリックすることで行います。

(この手順で追加した場合のみ、フィールド名が青色の文字で表示され、代入の紐づけが機能します)

トップに戻る

条件ポイント (Success?)

  • 条件設定:最初のtrue条件
  • 条件:Found
  • # One line example:
    #
    # result = incident.employee_involved = True
    #
    # Multi-line example:
    #
    # certificate_expired = playbook.functions.results.certificate_results.is_expired
    # if (incident.employee_involved == True and certificate_expired):
    #     result = True
    # else:
    #     result = False
    if playbook.functions.results.output.success == True:
        result = True
    else:
        result = False
  • 条件:Else

トップに戻る

スクリプト (Add Hit)

条件ポイント (Success?) True条件を満たした場合に処理されるスクリプトです。

  • ローカル・スクリプト
  • # (c) Copyright IBM Corp. 2010, 2021. All Rights Reserved.
    
    # A script to add a hit to an artifact that you provide. 
    # You must provide a name, value, and type for each property. 
    # The type must be a string, number, uri, ip, or lat_lng. 
    # This operation does not support the Observed Data artifact type, and is available in Python 3 only.
    
    hit =[
                {
                    "name": "Description",
                    "type": "string",
                    "value": "LDAPにユーザーが見つかりました"
                },
                {
                    "name": "Output",
                    "type": "string",
                    "value": str(playbook.functions.results.output.content)
                }
        ]
    
    artifact.addHit("Showcase LDAP", hit)

トップに戻る

スクリプト (Add Note: Not Found)

条件ポイント (Success?) True条件を満たさなかった場合 (Else条件になった場合) に処理されるスクリプトです。

  • ローカル・スクリプト
  • incident.addNote("アーティファクト {} は Showcase LDAP で見つかりませんでした。".format(artifact.value))

トップに戻る

プレイブックの解説動画

上記で説明したプレイブック定義の内容を、実機画面でクイックに眺める動画です。(具体的な定義に踏み込んでいませんので、あくまでも雰囲気を感じていただくためのものです)

トップに戻る

プレイブックの実行確認

  1. ケースを開き、「ユーザー・アカウント」タイプの新しいアーティファクトを追加します。
  2. アーティファクトのメニューから、先ほど作成したプレイブックの名前をクリックして呼び出します。
  3. LDAP検索が行われ、アーティファクトのヒットが追加されたことを確認します。

 

トップに戻る

プレイブックの例: LDAP検索結果をデータテーブルに格納する

次に、LDAP検索の結果を、データテーブルの行として追加する例をご紹介します。

トップに戻る

プレイブックの全体像

プレイブックの全体像は以下のとおりです。

 

トップに戻る

プレイブックのトリガー

 

  • アクティブ化のタイプ:手動
  • オブジェクト・タイプ:インシデント
  • アクティベーション・フォーム
  • 条件:なし(常に表示)
  • 自動キャンセル:なし

 

トップに戻る

関数呼び出し(LDAP Utilities: Search)

  • 関数の出力
    • 出力名:output
  • 関数の入力:フィールド指定

フィールド名

タイプ

注釈

ldap_search_base

TEXT

dc=ibmtechnologyshowcase,dc=com

The base of the LDAP search request

ldap_search_filter

TEXT

(&(objectClass=person)(cn=*%ldap_param%*))

The filter of the LDAP search request

ldap_domain_name (optional)

TEXT

Domain1

アプリのapp.configで指定したLDAPサーバー定義の名前

ldap_search_attributes (optional)

TEXT

*

A single attribute or a list of attributes to be returned by the LDAP search

ldap_search_param (optional)

TEXT

playbook.inputs.username

Parameter used in search filter
※スキーマから入力フォームのフォーム要素「username」を選択

ldap_search_cookies (optional)

TEXT

<ブランク>

Search cookies from last paged search

スキーマからの入力は、目的のフィールド名の右にあるツリー図のアイコンをクリックし、対象となる入力元フィールドの横にあるプラス(+)をクリックすることで行います。

(この手順で追加した場合のみ、フィールド名が青色の文字で表示され、代入の紐づけが機能します)

トップに戻る

条件ポイント (Success?)

  • 条件設定:最初のtrue条件
  • 条件:Found
  • # One line example:
    #
    # result = incident.employee_involved = True
    #
    # Multi-line example:
    #
    # certificate_expired = playbook.functions.results.certificate_results.is_expired
    # if (incident.employee_involved == True and certificate_expired):
    #     result = True
    # else:
    #     result = False
    if playbook.functions.results.output.success == True:
        result = True
    else:
        result = False
  • 条件:Else

トップに戻る

スクリプト (Add users to table)

条件ポイント (Success?) True条件を満たした場合に処理されるスクリプトです。

このスクリプトは、LDAP and Active Directory Functions for SOARアプリに同梱されている「ldap_query_results」というデータテーブルに、出力を書き込みます。

  • ldap_query_results」データテーブルの定義
  • ローカル・スクリプト
  • #  Globals
    ENTRY_TO_DATATABLE_MAP = {
       "cn": "uid",
       "givenName": "fullname",
       "sn": "surname",
       "mail": "email_address",
       "telephoneNumber": "telephone_number"
    }
    
    # Processing if the function is a success
    for entry in playbook.functions.results.output.content:
      if not entry:
        break
      # Add Row
      row = incident.addRow("ldap_query_results")
      for k in ENTRY_TO_DATATABLE_MAP:
        # if not entry[k]:
        if not k in entry:
          row[ENTRY_TO_DATATABLE_MAP[k]] = "N/A"
        else:
          try:
            # If 'entry[k]' is empty
            if not len(entry[k]):
              row[ENTRY_TO_DATATABLE_MAP[k]] = "N/A"
            else:
              row[ENTRY_TO_DATATABLE_MAP[k]] = entry[k][0]
          except IndexError:
            row[ENTRY_TO_DATATABLE_MAP[k]] = "N/A"

 

トップに戻る

スクリプト (Add Note: Not Found)

条件ポイント (Success?) True条件を満たさなかった場合 (Else条件になった場合) に処理されるスクリプトです。

  • ローカル・スクリプト
  • incident.addNote("ユーザー {} は Showcase LDAP で見つかりませんでした。".format(playbook.inputs.username))

 

トップに戻る

プレイブックの解説動画

上記で説明したプレイブック定義の内容を、実機画面でクイックに眺める動画です。(具体的な定義に踏み込んでいませんので、あくまでも雰囲気を感じていただくためのものです)

 

トップに戻る 

プレイブックの実行確認

  1. ケースを開き、LDAPユーザー一覧のデータテーブルが空であることを確認します。
  2. メニューから、先ほど作成したプレイブックの名前をクリックして呼び出します。
  3. 入力フォームが表示されるので、検索したいユーザーのキーワードを入力します。
  4. LDAP検索が行われ、LDAPユーザー一覧のデータテーブルに、キーワードにヒットしたLDAPユーザーの行が追加されたことを確認します。

 

トップに戻る

 

参考文献

 #qradar#soar

0 comments
4 views

Permalink