自分で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]になってますが。)

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

なお、Descriptionに設定した文字は”IP”の横の”?”マークにマウスを当てると表示されるようです。
あとはこの”IP”のOutputsを次のタスクの”ip”に以下の通り渡してあげるだけです。

“ip”の値として”${C2 Server.IP}”を設定していますが、”IP”の前に”C2 Server”がついているのは、Automationのコーディングにて”outputs_prefix=’C2 Server’”と記載したからだと思います。
(それ以外ではどこにも”C2 Server”とは記載していないので。。。)
3.プレイブックを実行してみる
そして実際にこのプレイブックを実行してみます。
タスク「IP Address Output」にてさきほどの”IPToHost_k2″というAutomationを呼んでいます。

Inputとして与えた”value”に含まれるメールの文面”こんにちは IP…”の中から、IPアドレスである”8.8.8.8″を抜き出していることが分かります。(後ろに・・・と入っているので改行キーかなにかがくっついてしまっているようですが。。。)
そしてこのIPアドレス”8.8.8.8″をOutputsとして次のタスクである”AbuseIPDB Check”に渡して、AbuseIPDBにてこのIPアドレスに対する評価が取得されていることが確認できました!

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





コメントを残す