はじめに
このブログに含まれているプレイブックは、QRadar SOARのPlaybook Designer機能で作成しています。Playbook Designerの操作イメージについては、関連ブログである「QRadar SOAR による GUI ベースのプレイブック開発の概要」をご覧ください。
トップに戻る
プレイブックの例:アーティファクトからLDAP検索を呼び出す
最も簡単なLDAP呼び出しの例は、既に「QRadar SOAR による GUI ベースのプレイブック開発の概要」にて説明していますので、今回は内容を少し拡張して、アーティファクトからLDAP検索を行い、結果を「ヒット」として記録する例をご紹介します。
トップに戻る
プレイブックの全体像
プレイブックの全体像は以下のとおりです。
トップに戻る
プレイブックのトリガー
- アクティブ化のタイプ:手動
- オブジェクト・タイプ:アーティファクト
- アクティベーション・フォーム:なし
- 条件
-
- [タイプ] [以下のいずれかがある] [ユーザー・アカウント]
- 自動キャンセル:なし
トップに戻る
関数呼び出し(LDAP Utilities: Search)
フィールド名
|
タイプ
|
値
|
注釈
|
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?)
トップに戻る
スクリプト (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条件になった場合) に処理されるスクリプトです。
トップに戻る
プレイブックの解説動画
上記で説明したプレイブック定義の内容を、実機画面でクイックに眺める動画です。(具体的な定義に踏み込んでいませんので、あくまでも雰囲気を感じていただくためのものです)
トップに戻る
プレイブックの実行確認
- ケースを開き、「ユーザー・アカウント」タイプの新しいアーティファクトを追加します。
- アーティファクトのメニューから、先ほど作成したプレイブックの名前をクリックして呼び出します。
- LDAP検索が行われ、アーティファクトのヒットが追加されたことを確認します。
トップに戻る
プレイブックの例: LDAP検索結果をデータテーブルに格納する
次に、LDAP検索の結果を、データテーブルの行として追加する例をご紹介します。
トップに戻る
プレイブックの全体像
プレイブックの全体像は以下のとおりです。
トップに戻る
プレイブックのトリガー
- アクティブ化のタイプ:手動
- オブジェクト・タイプ:インシデント
- アクティベーション・フォーム
-
- 条件:なし(常に表示)
- 自動キャンセル:なし
トップに戻る
関数呼び出し(LDAP Utilities: Search)
フィールド名
|
タイプ
|
値
|
注釈
|
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?)
トップに戻る
スクリプト (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条件になった場合) に処理されるスクリプトです。
トップに戻る
プレイブックの解説動画
上記で説明したプレイブック定義の内容を、実機画面でクイックに眺める動画です。(具体的な定義に踏み込んでいませんので、あくまでも雰囲気を感じていただくためのものです)
トップに戻る
プレイブックの実行確認
- ケースを開き、LDAPユーザー一覧のデータテーブルが空であることを確認します。
- メニューから、先ほど作成したプレイブックの名前をクリックして呼び出します。
- 入力フォームが表示されるので、検索したいユーザーのキーワードを入力します。
- LDAP検索が行われ、LDAPユーザー一覧のデータテーブルに、キーワードにヒットしたLDAPユーザーの行が追加されたことを確認します。
トップに戻る
参考文献
#qradar#soar